RuneTranslate 现已支持翻译 Artemis 引擎的视觉小说
RuneTranslate 现已支持将 Artemis Engine 视觉小说——由 iMel/Mikage 开发、基于 Lua、支撑着约 730 部 VNDB 作品的引擎——翻译成英语和 30 多种语言。它以纯 TypeScript 读取该引擎的 .pfs 归档,包括 PF8 基于 SHA-1 密钥的 XOR 加密,从 .ast(Lua 表)和 .txt 脚本中提取对话、角色名和选项,保留内联的注音/名牌/颜色命令,并将翻译后的脚本以散文件形式导出,让游戏无需重新打包即可加载。功能新增不久,尚未在大量真实游戏上验证——遇到无法打开的游戏请告诉我们。
RuneTranslate 现在能读取一个此前对同人翻译者而言几乎无从下手的引擎:Artemis Engine,一个基于 Lua、支撑着数百部日文作品的视觉小说框架。如果你曾打开某个 Artemis 游戏的文件夹,看到一堆 .pfs 归档却找不到任何可读内容,最后只能放弃——那正是这个引擎。RuneTranslate 现在能识别它,用纯 TypeScript 打开这些归档(连加密一并处理),从其脚本中读取对话、角色名和选项,并导出一份游戏可自行加载的翻译副本。这是 RuneTranslate 支持的最新引擎。
这是一个全新的引擎,我们先把实话说在前面:Artemis 支持刚刚构建完成,尚未在大量真实游戏上验证过。所以首先——如果你把 RuneTranslate 指向一个 Artemis 游戏,而它无法识别、无法打开,或导出的内容游戏加载不了,请告诉我们。具体怎么做,文末会讲。
Artemis Engine 究竟是什么
Artemis 是一款由 iMel Inc.(这家工作室也以 Mikage 闻名)开发的商业日文视觉小说引擎。较早的引擎如 Kirikiri 或 NScripter 使用的是专门定制的领域特定脚本语言,而 Artemis 则围绕 Lua 构建——其剧本脚本本质上就是 Lua 数据表——这让它对开发者很灵活,但实际上对任何想从外部翻译一款成品游戏的人来说却是一堵墙。VNDB 上约有 730 部作品基于它构建,因此它远非小众冷门;这是一整批机器翻译工具历来跳过的旧作库存。
在磁盘上,一款 Artemis 游戏由一个 Windows .exe 加上一个或多个 .pfs 资源归档组成,归档中存放着脚本、美术和音频。里面的脚本大多是 .ast 文件(Lua 表剧本脚本)和 .txt 文件(一种更简单的按行组织的格式)。RuneTranslate 直接从这些归档和脚本入手,因此无论工作室以 .ast 还是 .txt 形式发布剧本,它都能覆盖。
为什么 Artemis 游戏一直如此难以翻译
与 Ren'Py 这类以源码驱动的引擎相比,Artemis 把文本藏在了好几层之后。其中有几个具体因素,让它对手工翻译者和粗浅工具都遥不可及:
- 一切都在 `.pfs` 归档内。 脚本并不是散落在磁盘上的——它们被打包进 Artemis 自有的
.pfs容器格式(你会看到PF8、PF6以及旧版PF2变体)。没有针对该格式的读取器,一开始就根本无从编辑。 - 最新的归档是加密的。 当前的
PF8格式不仅打包文件,还会加密其内容:每个条目都用一个由归档自身索引的SHA-1哈希派生出的密钥进行 XOR。你无法简单地把字节抠出来——你必须复现引擎的密钥派生过程,才能拿回可读的脚本。 - 脚本是 Lua 数据,而非纯文本。 一个
.ast剧本就是一张 Lua 表——对话、说话者名字和选项都是嵌套在结构化表中的字段,与引擎命令混在一起。现存有两种表布局(较旧的 v1 和较新的 v2),翻译者必须同时理解两者,才能在不破坏周围结构的前提下把真正的台词抽出来。 - 内联的引擎命令交织在对话之中。 注音/振假名标注、名牌、颜色变化和点击等待都与文本内联书写。一个不识别它们的查找替换,会把命令记号也一并翻译,游戏就崩了。
综合效果就是:即便一位能流利阅读日语的翻译者,也得先解包一个专有的加密容器,再手动解析 Lua 表,再小心翼翼地绕过内联标记——之后才能翻译哪怕一行文字。而这正是 RuneTranslate 现在替你完成的工作。
RuneTranslate 现在能做什么
RuneTranslate 把 Artemis 当作一等公民引擎对待,并以纯 TypeScript 处理整条流水线——无需外部工具、无需 Python 附属程序、无需安装任何东西:
- 直接读取 `.pfs` 归档。 它自主打开
PF8、PF6和旧版PF2归档格式,包括 PF8 基于 `SHA-1` 密钥的 XOR 加密——复现引擎的密钥派生,让脚本内容以可读形式呈现。 - 提取对话、名字和选项。 它解析可读的
.ast(Lua 表)剧本脚本——较旧的 v1 和较新的 v2 布局都支持——以及.txt(按行组织)脚本,还有许多游戏实际发布时采用的编译后二进制 `ASB` 剧本(通过特征签名识别,即便被改名为像.iet这样的自定义扩展名也能认出),并在编辑器中列出每一行可翻译文本:口述的对话、名牌上的角色名,以及分支选项。 - 保留引擎命令。 内联标记——注音/振假名、名牌、颜色、点击等待——以及换行,在任何内容送达翻译提供方之前都会被藏到数字占位符之后,输出时再原样还原。文本会被翻译;引擎指令不会。
- 导出时无需重新打包。 相比打包在
.pfs内的同名文件,Artemis 更优先采用磁盘上的散脚本,因此导出时 RuneTranslate 会把翻译后的.ast/.txt脚本以散文件形式、按其原始归档路径写在游戏旁边。没有重新打包——游戏只是读取你的翻译,而非打包好的原件。(这与我们的 Kirikiri 补丁流程采用的散文件覆盖方式相同。)
日语 → 英语是最佳组合,但你也可以面向 30 多种语言中的任意一种——西班牙语、法语、德语、葡萄牙语、俄语、中文、意大利语、土耳其语、越南语等等。
你需要准备什么
- Windows 版 RuneTranslate——免费;所有引擎和提供方都已解锁(免费档限制的是速度,而非功能)。
- 一个 Artemis 游戏文件夹。也就是包含游戏
.exe及其.pfs归档的目录(脚本和素材都打包在这些归档里)。 - 一种目标语言——英语、西班牙语、法语、德语、葡萄牙语、俄语、中文、意大利语、土耳其语、越南语,以及另外 20 多种。
- 一个翻译提供方。免费的 Google Translate 开箱即用;DeepL 有免费档;OpenAI、Anthropic、本地模型(Ollama / LM Studio)以及任何兼容 OpenAI 的 API 都需自带密钥。Artemis 游戏对话密集且对语气敏感,所以 LLM(OpenAI / Anthropic)或 DeepL 通常读起来最好。
第 1 步:打开游戏文件夹
启动 RuneTranslate,点击新建项目,并将其指向 Artemis 游戏目录。引擎检测会自动运行——当它看到引擎的 .pfs 归档时,就会把该项目识别为 Artemis。你的原始游戏文件夹绝不会被修改。
第 2 步:脚本是如何被读取的
RuneTranslate 打开 .pfs 归档并为你把脚本抽取出来,一边解密一边解析:
- 加密的 `PF8` 归档——用基于
SHA-1密钥的 XOR 方案自主解密,因此你无需运行单独的解包器。 - 未加密的 `PF6` / 旧版 `PF2` 归档——直接读取。
- `.ast` 和 `.txt` 脚本——解析出对话、名字和选项,并在编辑器中按文件分组列出。
内联的引擎命令和换行在任何内容送达提供方之前都会被藏到数字占位符之后,输出时再还原——因此注音标注、名牌和颜色标签在往返一遭后仍原封不动。
第 3 步:翻译
选一个提供方然后运行。对于视觉小说,LLM(OpenAI / Anthropic)最擅长表现角色的声音和语气,DeepL 在叙述部分快速而干净,而免费的 Google Translate 用于简短的菜单字符串和选项则绰绰有余。事先为你的登场角色和反复出现的术语建好词汇表,让名字在整部游戏中保持一致——参见 词汇表 101。完成后,用 AI 精修器做一遍可选的处理,它会结合上下文重读每一行,收紧机器翻译往往留下的生硬、直译的措辞。
第 4 步:导出一份即可运行的副本
点击导出。RuneTranslate 会写出一份游戏的翻译副本,翻译后的 .ast / .txt 脚本以散文件形式放在其原始路径上,与未改动的 .pfs 归档并列。没有重新打包——Artemis 会优先加载散脚本而非打包好的原件,所以游戏就直接读取你的翻译。运行它,它就会以你的目标语言呈现。
已知限制
- 编译后的 `.asb` 剧本可被读取——许多 Artemis 游戏以编译后的二进制 AST(以
ASB标记开头的形式)而非可读的.ast/.txt发布剧本,还有一些会改掉扩展名(我们测试过的一款游戏用的是.iet)。RuneTranslate 按特征签名而非扩展名来识别它,并就地翻译。若某款游戏把说话者名字存放在图形中或作为命令名,而不是作为脚本内文本,那么这些名字来自图像文字流程,而非脚本——如果某个名字仍是日语,通常就是这个原因。 - 散文件覆盖是预期的加载路径,在大多数 Artemis 游戏上都行得通,因为引擎更倾向于散脚本而非打包副本。对于极少数不遵循这一点的作品,导出可能需要调整——这正是我们仍在确认的那类真实游戏行为。
- 烘焙进图像美术中的文字——绘制成位图的标题画面或菜单按钮——是像素,而非脚本文本,所以脚本提取器够不到它。对此请参见图像文字翻译。
- 确切的归档和脚本变体在不同发行版之间可能有所不同。请务必在你自己的那一份上验证。
它是全新的——请告诉我们哪里出了问题
值得直白地重申一遍:Artemis 支持是一项新加入的功能,尚未在大量真实游戏上测试过。.pfs 读取器、加密以及 .ast / .txt 解析器都已构建并通过单元测试,但这个引擎有着多年、因工作室而异的种种变体,我们并未全部见识过。所以,如果你把 RuneTranslate 指向一个 Artemis 游戏,而它无法识别、打不开归档、什么都提取不到,或导出的内容游戏加载不了,请在我们的 Discord 上报告——游戏的名字以及它的打包方式(哪种 .pfs 变体,.ast 还是 .txt 还是 .asb)正是最能帮助我们最快加固它的信息。
下载 RuneTranslate,把它指向你一直想读的那部 Artemis 视觉小说,试一试。想了解我们如何处理另一款基于归档的 VN 引擎,接下来请阅读 Kirikiri 教程。
