LunaTranslator 模拟器游戏支持全解析NS / PSP / PSV / PS2 / PS3 五平台 Hook 文本提取方案【免费下载链接】LunaTranslator视觉小说翻译器 / Visual Novel Translator项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslatorLunaTranslator 通过内置的 HOOK 机制能够在模拟器运行环境中直接提取游戏文本从而支持 NS、PSP、PSV、PS2、PS3 五大平台的数千款游戏。本文以官方文档 docs/en/emugames.md 为主线完整梳理支持平台、模拟器版本要求与游戏 ID 清单结构并结合仓库源码说明各模拟器引擎的识别与 JIT 地址映射原理帮助你快速判断目标游戏是否可用、选择正确的模拟器版本以及在没有现成支持时正确上报。一、模拟器支持概述从截屏 OCR到HOOK 直读LunaTranslator 对模拟器平台的支持走的是与传统 PC 游戏相同的HOOK 文本注入路线而非截屏 OCR。模拟器进程在渲染游戏画面的同时会把游戏引擎内部生成的文本对白、选项、状态栏等通过内存注入的方式直接提供给翻译器因此文本提取速度快、无 OCR 识别误差这是它能覆盖 NS / PSP / PSV / PS2 / PS3 多平台大量游戏的根本原因。从源码结构看这一能力集中在 src/NativeImpl/LunaHook/LunaHook/emulators/ 目录每个平台对应一组引擎实现文件例如ppsspp.cpp、vita3k.cpp、PCSX2.cpp、rpcs3.cpp、yuzu.cpp、Ryujinx.cpp等。这些引擎类在 enginecollection64.cpp 中被统一注册可见new yuzu、new Ryujinx、new PPSSPPWindows、new PCSX2等32 位进程侧则由 enginecollection32.cpp 注册相应的 32 位引擎。官方支持矩阵的总表位于 docs/emusupportlist/all.md其中对每个平台给出了推荐的模拟器及最低版本要求这是判断能不能用、该用哪个模拟器的第一依据。二、支持平台与模拟器版本要求官方总表下表为文档给出的完整平台–模拟器对应关系请严格按版本要求选用模拟器版本过低可能导致 HOOK 失效平台支持的模拟器NSyuzu≥1616EdenMSVC 构建、CitronMSVC 构建PSPPPSSPP ≥ v1.15.0PSVVita3K ≥ v0.1.9.3339PS2PCSX2 ≥ v1.7.4473PS3RPCS3未限定版本几点需要特别注意NS 平台 yuzu 已被划线弃用由于 yuzu 项目已停止维护官方推荐改用EdenMSVC 构建或CitronMSVC 构建。源码 yuzu.h 中的检测逻辑也印证了这一点——它不再只认yuzu.exe而是同时识别suyu.exe、sudachi.exe、sumi.exe、citron.exe、eden.exe等分支进程并会通过特征字节signature区分 Eden 的不同小版本例如 v0.0.4 rc2 引入 ASLR 偏移、v0.2.0 再次调整偏移算法。版本下限是硬性要求PPSSPP 需 ≥ v1.15.0、Vita3K 需 ≥ v0.1.9.3339、PCSX2 需 ≥ v1.7.4473。从PCSX2.h可见其通过Util::CheckFile(Lpcsx2-qt.exe)或文件信息字符串PCSX2 PS2 Emulator识别进程并读取版本号PPSSPPWindows与vita3k同理分别通过PPSSPP*.exe/PPSSPP PSP emulator与Vita3K.exe/Vita3K PSVita Emulator识别并在启动时查询具体版本用于展示。引擎识别采用特征匹配而非固定进程名所有模拟器引擎的check_by均为CHECK_BY::CUSTOM即通过进程名、可执行文件、文件版本信息或内存特征组合判定避免因模拟器版本更名如 Eden 静态链接 Qt 后无 Qt DLL 可查而导致漏判。三、游戏 ID 清单如何确认你的游戏已被支持文档为每个平台维护了一张游戏 ID ↔ 游戏名对照清单这是确认游戏是否受支持的最直接方式。清单分别存放在以下文件平台清单文件行数约NSdocs/emusupportlist/ns.md428 行PSPdocs/emusupportlist/psp.md346 行PSVdocs/emusupportlist/psv.md185 行PS2docs/emusupportlist/ps2.md353 行PS3docs/emusupportlist/ps3.md11 行3.1 各平台游戏 ID 的格式与含义NS使用 16 位十六进制 Title ID如0100A9501759E000《ファミコン探偵倶楽部 笑み男》、01004620180D2000《CHAOS;CHILD》、010006BD0095F4000《真・女神転生V》。同一实体中多版本共存的条目会用连接多个 ID例如0100E8B024BE6001 0100E8B024BE6002《CHAOS;HEAD / CHAOS;CHILD らぶChu☆Chu DOUBLE PACK》。PSP使用游戏编号Game ID常见前缀为ULJM、NPJH、ULJS、ULUS、UCJS如ULJM05887《STEINS;GATE》、NPJH50505《Fate/EXTRA CCC》、ULJM05338 ULJM05339《CLANNAD》双盘。PSV使用PCSG/PCSB前缀编号如PCSG00401《ソラユメ》、PCSG01011《空蝉の廻》。PS2使用SLPM/SLPS前缀编号如SLPM-55259《デザート・キングダム》、SLPS-25414《ToHeart2》同样存在多 ID 并列如SLPM-66453 SLPM-66454对应双卷作品。PS3使用BLJM/BLJS/NPJB前缀编号如BLJM61120《蔷薇少女 Wechseln sie welt ab》、BLJS10133《第2次スーパーロボット大戦OG》、BLJM61067 NPJB00424《DISORDER6》。使用提示在你的模拟器游戏库中查到对应平台的游戏编号NS 的 Title ID 可在游戏属性/系统信息中查看PSP/PS2 等平台的编号通常与镜像文件名一致再与清单比对即可确认是否受支持。3.2 清单的来源由源码注释自动生成值得说明的是这些清单并非手写维护而是由脚本 genemusupportlist.py直接从模拟器 Hook 实现源码的注释中解析生成。例如PSP 清单解析自ppsspp_1.cpp中 {之后的每一条// 游戏名注释及其后续 ID 字符串NS 清单解析自yuzu_1.cpp中的// 游戏名注释与紧随其后的0xXXXXXXXXXXXXXXXXullTitle ID 字面量多 ID 条目会自动去重后用拼接PSV 清单则解析自vita3k_1.cpp。这意味着每一条出现在文档清单中的游戏其背后都对应一份真实的 Hook 配置游戏 ID、文本地址映射清单既是支持名单也是源码中已落地 hook 条目的索引。因此清单中没有的游戏说明当前缺少对应的 Hook 配置属于暂不支持需要通过官方渠道反馈。四、各平台清单速览与代表作品由于完整清单体量较大合计约 1300 条目下面按平台列举有代表性的作品完整名单请直接查看上文清单文件。NS代表性条目《ファミコン探偵倶楽部 笑み男》0100A9501759E000、《CHAOS;CHILD》01004620180D2000、《この世の果てで恋を唄う少女YU-NO》0100B9B00C6A4000、《CLANNAD》0100A3A00CC7E000、《魔法使いの夜》010012A017F18000、《月姫 -A piece of blue glass moon-》01001DC01486A000、《薄桜鬼 真改》系列、《うたの☆プリンスさまっ♪》系列、《Memories Off》系列、《あやかしごはん》01001A4021670000、《泡沫のユークロニア》010027401A2A2000、《NieR:Automata The End of YoRHa Edition》0100B8E016F76000、《Pokémon Lets Go, Pikachu!》010003F003A34000、《The Legend of Zelda: Links Awakening》01006BB00C6F0000、《Fire Emblem: Three Houses》010055D009F78000、《十三機兵防衛圏》010045C014650000、《Live a Live》0100C29017106000、《Ghost Trick: Phantom Detective》010029B018432000等。PSP代表性条目《STEINS;GATE》ULJM05887、《Steins;Gate 比翼恋理のだーりん》ULJM06040、《Fate/EXTRA CCC》NPJH50505、《Fate/EXTRA》ULUS10576 / NPJH50247、《CLANNAD》ULJM05338 ULJM05339、《AIR》ULJM05282、《Kanon》ULJM05203、《Ever17 -the out of infinity- Premium Edition》ULJM05437、《Remember11 -the age of infinity-》ULJM05444、《薄桜鬼》系列、《うたの☆プリンスさまっ♪》系列、《金色のコルダ》系列、《ダンガンロンパ》系列、《ときめきメモリアル4》NPJH50127、《俺の妹がこんなに可愛いわけがない ポータブル》NPJH50568 NPJH50569等。PSV代表性条目《ソラユメ》PCSG00401、《Princess Arthur》PCSG00271、《大図書館の羊飼い -Library Party-》PCSG00505、《ニル・アドミラリの天秤》系列、《CodeRealize》系列、《DIABOLIK LOVERS》系列、《空蝉の廻》PCSG01011、《アオナツライン》PCSG01283、《Making*Lovers》PCSG01284、《IxSHE Tell》PCSG01297、《金色ラブリッチェ》PCSG01318、《Muv-Luv》PCSG00776等。PS2代表性条目《デザート・キングダム》SLPM-55259、《Fate/stay night [Realta Nua]》SLPM-66513、《ToHeart2》SLPS-25414、《CLANNAD》SLPM-66302、《ひぐらしのなく頃に祭》SLPM-66620、《Memories Off》系列、《遙かなる時空の中で》系列、《サクラ大戦 熱き血潮に》SLPM-67003、《ドラゴンクエストⅤ 天空の花嫁》SLPM-65555、《true tears》SLPM-66935、《Lの季節2 Invisible Memories》SLPM-55009等。PS3全部条目《蔷薇少女 Wechseln sie welt ab》BLJM61120、《第2次スーパーロボット大戦OG》BLJS10133、《俺たちに翼はない》BLJM61018、《Lve once -mermaids tears-》BLJM60322、《DISORDER6》BLJM61067 NPJB00424、《Dunamis15》BLJM60347、《たっち、しよっ Love Application》BLJM60444、《 - 空の向こうで咲きますように -》BLJM61131、《解放少女 SIN》BLJM61118。五、底层原理补充JIT 地址映射与引擎切换的稳定性保障模拟器平台的 HOOK 有一个天然难点游戏代码运行在模拟器的 JIT即时编译环境中物理地址与虚拟地址之间存在动态映射且模拟器切换游戏或重新加载时映射表会重建。仓库中的 JIT_Keeper.hpp 正是为应对这一问题的关键组件它通过CreateFileMappingW创建名为LUNA_JIT_MAP_KEEPER_PID的共享映射把「游戏信息、Hook 记录、emuaddr2jitaddr/jitaddr2emuaddr双向地址映射表」保存在进程生命周期内当 DLL 被移除模拟器切换游戏触发 clear后再次注入时JIT_Keeper会恢复此前的映射表与 Hook 记录并对失效的函数地址重新执行checkfunction重建避免映射错乱导致文本指向错误游戏 ID文件注释也如实说明了已知局限目前仅 PSP 支持通过窗口标题检查游戏切换普通重新加载场景难以察觉映射表变化因此大部分情况下该检查仅作兜底。此外各模拟器引擎在运行时还会区分具体 JIT 类型JITTYPE::PPSSPP、JITTYPE::VITA3K、JITTYPE::PCSX2、JITTYPE::YUZU等以选择与该模拟器内存布局匹配的注入策略。这也解释了为何文档对模拟器版本有明确下限要求——不同版本的内存特征例如 Eden 的 ASLR 偏移签名发生变化时LunaTranslator 需要跟随适配。六、游戏不支持时如何反馈如果你的游戏不在上述清单中文档明确给出的处理方式是通过官方游戏支持反馈渠道提交 issue文档中的链接指向https://lunatranslator.org/Resource/game_support并在反馈中尽可能提供以下信息以加快适配游戏名称与所在平台该游戏在模拟器中的游戏 IDNS Title ID 或 PSP/PSV/PS2/PS3 的编号使用的模拟器名称与精确版本号。从 genemusupportlist.py 的维护方式可以推断新增一款游戏本质上是为对应模拟器引擎如ppsspp_1.cpp、yuzu_1.cpp、vita3k_1.cpp补充一条带游戏 ID 的 Hook 配置因此提供准确的 ID 能显著提升适配效率。七、快速上手清单在 docs/emusupportlist/all.md 确认目标平台及推荐的模拟器与版本安装不低于版本要求的模拟器NS 使用 Eden 或 Citron 的 MSVC 构建yuzu 已弃用在对应平台清单文件ns.md、psp.md、psv.md、ps2.md、ps3.md中检索你的游戏 ID确认匹配后启动游戏并让 LunaTranslator 附加到模拟器进程即可通过 HOOK 直读文本开始翻译若清单中没有目标游戏按上述信息格式提交反馈。适用前提说明以上平台、模拟器版本与游戏清单均以当前仓库docs/en/emugames.md及其包含文件、emulators/ 源码为准模拟器生态变化较快如 yuzu 停止维护后续支持范围请以仓库更新后的文档为准。【免费下载链接】LunaTranslator视觉小说翻译器 / Visual Novel Translator项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslator创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考