» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

[模拟相关] 安卓平台NDS+3DS配合Pegasus前端的折腾小记

首先非常感谢这个帖子里的 Pegasus 资源:
[url=https://bbs.tgfcer.com/viewthread.php?tid=835922]https://bbs.tgfcer.com/viewthread.php?tid=835922[/url]
这个资源是我这一轮折腾安卓掌机系统和模拟器前端的起点。没有这位大佬整理好的资源包,我大概率也不会重新接触安卓上的模拟器生态。上一次认真用安卓设备,还是三星 S7 Tab,主要也只是躺床上看剧。
实际用下来以后发现,这套资源里的 NDS 和 3DS 部分相对不太完整,模拟器版本也偏老。所以我萌生了自己动手补完的想法。最开始切入的是 NDS 模拟器。简单搜了一圈,现在安卓上还比较活跃、体验也不错的 NDS 模拟器基本就是 melonDS 系列:
[url=https://github.com/rafaelvcaetano/melonDS-android]https://github.com/rafaelvcaetano/melonDS-android[/url]
所以第一步目标很明确:把原资源里的 Drastic 换成 melonDS。
一、把 R4 金手指库转成 melonDS 可用 XML
一开始我下载的是 melonDS APK 版本,想先试试最近准备玩的《极限脱出 9小时9人9扇门》。结果很快就遇到了问题。
melonDS 并不直接支持常见的 usrcheat.dat / urcheat.dat 这类 R4 二进制金手指库格式,只支持 XML 格式的 cheat 表,而且安卓端界面比较原始,更偏一次性 import,没有很好用的总 cheatlist 编辑功能。
本着“出问题就自己折腾”的原则,我第一步想自己写一个转换器:把 R4 的二进制 dat 金手指读出来,转换成 melonDS 支持的 XML 格式。
刚开始自己写 reader,很快发现中文版本 dat 非常麻烦。R4 早就没人维护了,古早的 r4cce 对现在塞满汉化版游戏金手指的新 cheat 库支持很差,直接内存溢出。后来我发现已有一个现成 Web 转换器项目:
[url=https://github.com/natereprogle/R4Everyone]https://github.com/natereprogle/R4Everyone[/url]
实际测试下来,它确实可以在线编辑金手指,但当时不支持 UTF-8 中文编码,而且 Web 版本体验一般,网速不给力时浏览器容易假死。看了一下实现,主要是 C#,门槛不算高,于是我直接 fork 了一版,做了离线版本。
大约 2 小时配合 AI 折腾下来,我加上了 UTF-8 中文兼容,复用了它的 R4CheatReader,然后对照 melonDS 的金手指加载源码,做了 XML 转换器:
[url=https://github.com/Splaser/R4Everyone/tree/feature/melonds-export]https://github.com/Splaser/R4Everyone/tree/feature/melonds-export[/url]
顺手还给原项目发了一个 UTF-8 兼容相关 PR。实测可以成功导入 urcheat.dat。
这是我打包过的 exe,直接和 urcheat.dat 放在同一个目录,运行后会自动转换成 XML。然后复制到安卓设备对应目录,走 melonDS APK 导入 XML 金手指即可。
链接:
[url=https://pan.baidu.com/s/1UTpaA1KsK0yL8H-mPswnGA?pwd=24qj]https://pan.baidu.com/s/1UTpaA1KsK0yL8H-mPswnGA?pwd=24qj[/url]
提取码:24qj
二、Pegasus 前端改成 RetroArch + melonDS Core
模拟器换了以后,Pegasus 前端配置也要改。
我的 Odin3 已经 root,找启动命令本身就是一两行 adb 的事情。不过 Odin3 的 Android 15 在外部启动比较重的 APK + ROM 时,偶尔会出现 ANR 或假死。所以我最后更倾向于走 RetroArch core,而不是单独调用 melonDS APK。
后来实测发现,melonDS 早就支持 RetroArch 直接 load,只是我一开始没注意。再加上我把 melonDS APK 和 RA 版本的存档位置统一到了一起,后续切换也更方便。
我还顺手看了一下 ES-DE 等几个前端的 SQLite 数据库,发现现在 RA 启动命令其实非常简单,只需要:
复制内容到剪贴板
代码:
-e LIBRETRO melonds
不用写完整 core 路径,就能启动对应核心。
Pegasus 的 NDS 部分配置可以改成下面这样:
复制内容到剪贴板
代码:
collection: Nintendo DS

sort-by: 034

shortname: nds

extensions: dsi, nds

launch: am start

-n com.retroarch.aarch64/com.retroarch.browser.retroactivity.RetroActivityFuture

-e ROM "{file.path}"

-e LIBRETRO melonds

-e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch.aarch64/files/retroarch.cfg

-e IME com.android.inputmethod.latin/.LatinIME

-e DATADIR /data/data/com.retroarch.aarch64

-e APK /data/app/com.retroarch.aarch64-1/base.apk

-e SDCARD /storage/emulated/0

-e EXTERNAL /storage/emulated/0/Android/data/com.retroarch.aarch64/files
后续资源部分基本不用动。到这里,NDS 模拟器部分算是折腾完了。
三、从旧 Citra / Lime3DS 换到 Azahar
开头提到的 Pegasus 资源包里,3DS 资源比较少,模拟器也偏老,还是旧 Citra 分支 / Lime3DS 一类方案。
现在安卓上相对活跃、体验也比较好的 3DS 模拟器,我个人更推荐 Azahar:
[url=https://azahar-emu.org/pages/download/]https://azahar-emu.org/pages/download/[/url]
Azahar 功能比较完整,支持自定义 GPU 驱动,也支持装字库、打 mod、开高倍分辨率、加载高清纹理包等。对 Odin3 这类安卓掌机来说,整体体验已经比较成熟。
第一步仍然是搞定 Pegasus 的启动命令。不过 3DS 这边没有 RetroArch 那种顺滑方案,基本只能走 Azahar 自己的外部启动:
复制内容到剪贴板
代码:
collection: 3DS

sort-by: 035

launch:

am start --user 0

--grant-read-uri-permission

-n org.azahar_emu.azahar/org.citra.citra_emu.activities.EmulationActivity

-a android.intent.action.VIEW

-d "{file.uri}"

--activity-clear-top

extension:

[3ds

cci

cxi]
这里我加了强制 SAF 授权,某种程度上属于玄学优化,但实测稳定性还可以。
四、把 CIA 转换成 Pegasus / Azahar 可用的 CXI
启动命令搞定以后,下一步就是资源问题。
我下载了一些自己想玩的 3DS ROM,很快发现 CIA 格式和 Pegasus 前端配合不方便。CIA 更像安装包,而 Pegasus 前端更适合直接展示和启动卡带格式。所以我需要把 CIA 转成前端可直接读取的 CCI / CXI。
CCI 和 CXI 可以粗略理解为:CCI 多一层卡带容器封装,CXI 更接近实际可执行内容。对我的使用场景来说,CXI 更直接,也更适合前端管理。
我最开始参考的是 GBATemp 这个帖子里的工具链:
[url=https://gbatemp.net/threads/batch-cia-3ds-decryptor-a-simple-batch-file-to-decrypt-cia-3ds.512385/]https://gbatemp.net/threads/batch-cia-3ds-decryptor-a-simple-batch-file-to-decrypt-cia-3ds.512385/[/url]
但实际测试以后发现,原工具链对中文版、汉化版、改版 ROM,以及升级包 / DLC 的支持非常差。尤其是 DLC 和 UPD 补丁,失败率很高。很多会在 Azahar 里显示加密、不可用、裂开或者无法启动。
所以这一步的核心就变成了:自己改进转换流程,让 Azahar 能尽量无缝加载中文 CXI + CIA 补丁。
经过大约两天折腾,我基于 Windows PowerShell 和原项目工具组,做了一套新的流程:
[url=https://github.com/Splaser/Batch-CIA-3DS-Decryptor-Redux]https://github.com/Splaser/Batch-CIA-3DS-Decryptor-Redux[/url]
我的版本会自动把 CIA 本体游戏转换成 CXI,方便 Pegasus 像展示实体卡带一样展示和启动。对于 UPD 和 DLC,则会转换成 loose patch 结构,输出类似下面这样的文件:
复制内容到剪贴板
代码:
_cxi_out/loosepatch/title/0004000e/001acb00/content/00000000.app

_cxi_out/loosepatch/title/0004000e/001acb00/content/00000001.app

_cxi_out/loosepatch/title/0004008c/00078a00/content/00000000.app

_cxi_out/loosepatch/title/0004008c/00078a00/content/00000001.app

...
然后复制覆盖到 Azahar 的虚拟 SD 目录:
复制内容到剪贴板
代码:
我自己测试了十几个中文汉化 CIA,目前没有出现明显问题,Azahar 可以正常识别和加载。
中文字库部分我参考的是这个项目:
[url=https://github.com/rcyggdra/Shared-Font]https://github.com/rcyggdra/Shared-Font[/url]
中文字库 CIA 可以正常走 Azahar 模拟器内安装,然后把字体文件 shared_font.bin 放到内部共享存储空间:
复制内容到剪贴板
代码:
Azahar/sysdata/shared_font.bin
即可。
到这里,3DS 模拟器主体部分基本也就折腾完了。
五、3DS 金手指、SMT4 和实际体验
模拟器、前端、资源转换都跑通以后,我后面几天主要在折腾 3DS 金手指转换,以及实际游玩《真女神转生4》。
3DS 游戏的金手指生态和 NDS 完全不是一个体系。NDS 时代 R4 / usrcheat.dat 这类方案虽然古早,但资料多、格式相对统一。3DS 这边则混杂了 Gateway、NTR、Luma、模拟器 cheat、CTRPF 等多套方案,不同来源的代码经常需要手动改格式,甚至要结合存档和内存偏移自己验证。
Azahar 整体体验不错,但对部分汉化版、改版 ROM、补丁结构仍然比较挑剔。很多时候并不是游戏真的不能跑,而是资源格式、加密状态、补丁放置路径、字体资源、title id 映射这些细节里有一个环节不对,就会表现为无法启动或内容不完整。
这也是我这轮折腾里最明显的感受:安卓掌机 + 模拟器 + 前端并不是简单“装个 App 丢 ROM”就结束了。真正想把体验做顺,要同时处理启动命令、包名、Activity、SAF 授权、ROM 格式、CIA / CXI / CCI 转换、Update / DLC 目录结构、字库、金手指、存档路径,以及安卓 15 权限等问题。
这一套东西看起来很杂,但折腾通以后体验确实很舒服。尤其是 Odin3 性能足够,3DS 开高分辨率以后观感比原机好很多,SMT4 这类游戏在掌机上玩也很合适。
这几天折腾下来,最大的感受是:现在安卓掌机的硬件已经很成熟,但软件生态仍然很“拼装”。
Odin3 这类设备性能确实足够强,NDS、3DS、PSP、PS2、GC、Wii 甚至部分 Switch 模拟都能做到不错的体验。但真正决定体验的,并不只是模拟器本身,而是整套链路。
我一开始只是想“换个 NDS 模拟器”,最后却一路折腾到了 R4 金手指库转换、Pegasus 启动命令、RetroArch core、Azahar 外部启动、CIA 转 CXI、Update / DLC loose patch、中文字库、3DS 金手指、Odin3 风扇 root 模块。
最后再次感谢无私奉献 Pegasus 整理资源的 iffox 大佬。
PS:本文有走 AI 润色,本人文笔太差,见谅。

[ 本帖最后由 gggbdm 于 2026-5-13 15:22 编辑 ]


TOP

大佬你折腾这么久,真的玩游戏了么



TOP

引用:
原帖由 danmantemp 于 2026-5-13 13:56 发表
大佬你折腾这么久,真的玩游戏了么
真女神转生4玩了10小时 刚出新手村。NDS基本没怎么玩,难受。


TOP

附赠一个顺手折腾的黄以太的Pegasus替换命令,直接替换老的PS2配置开头部分就行。

NetherSX2-Turnip
内部自带了Turnip驱动,不用再强制走默认的系统Vulkan了.
复制内容到剪贴板
代码:
collection: PS2
sort-by: 046
launch:
  am start --user 0
         -n xyz.aethersx2.tturnip/xyz.aethersx2.android.EmulationActivity
         -e bootPath "content://com.android.externalstorage.documents/tree/1234-1234%3Aroms%2FPS2/document/1234-1234%3Aroms%2FPS2%2F{file.name}"
         --activity-clear-top
记得 1234-1234 改成你自己的tf卡系统ID。
如果你注意排版可以只替换-n开头的 -n xyz.aethersx2.tturnip/xyz.aethersx2.android.EmulationActivity 启动命令。

TOP

发新话题