shimamura-sakura/yuri

GitHub: shimamura-sakura/yuri

Yu-Ris 引擎的并行增量编译器与反编译器,大幅提升视觉小说脚本的处理效率并附带汉化辅助工具。

Stars: 10 | Forks: 0

# Yuri 一个用于 Yu-Ris 引擎的反编译器和编译器,支持并行处理。 已在 v488 [Natsuzora Asterism](https://www.dlsite.com/maniax/work/=/product_id/RJ367965.html) 和 v494 官方示例上测试。 ## 依赖 ## 用法与示例 参见 [v494.py](v494.py) 请记住在你的主程序中使用 multiprocessing.freeze_support(): ``` from multiprocessing import freeze_support if __name__ == '__main__': freeze_support() # Your Code Goes Here ``` ### 运行 下载 0.494 官方 SDK,使用 YSPac 打包 `システム/data/` 下的所有文件夹。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/74f0aeab89010209.png) 然后将 `data.ypf` 复制到 `example` 中。 同时复制 `yscfg.dat`、`yu-ris.exe`、`エンジン設定.exe`。 ``` example ├── data.ypf ├── v494 ├── v494-work ├── v494.ypf ├── yscfg.dat ├── yu-ris.exe └── エンジン設定.exe ``` 运行 `yu-ris.exe`。 ## 相比官方编译器的优势 1. 并行 (Parallel) 实际上,在解析完 `global.yst` 和 `global_f.yst` 之后,所有其他的 `.yst` 文件 都可以独立编译,因此可以并行处理。之后,编译器 为变量分配索引并将它们填入 YSTB 的 代码段,然后压缩 YBN 文件并创建 YPF 归档。填入 和压缩步骤也是并行运行的。 作为对比,Natsuzora Asterism 的脚本在我的机器上使用官方 YSCom 大约需要 50 秒(在 Yuri 上禁用并行时也需 48 秒)。 启用并行(12 核)后仅需 10 秒。 ``` - read global.yst.yuri and global_f.yst.yuri(s) - [parallel]: compile .yst.yuri files - assign indices to variables - [parallel]: fill indices into YBN and compress YBN ``` 2. 快速 (Fast) 实际上,上述 48 秒还包含了压缩 YBN 文件的时间,而 YSCom 的 50 秒仅包含编译 YBN 的时间。 3. 增量 (Incremental) 只要相关的 `global` 和 `global_f` 没有改变,如果某个 YST 的源码没有改变,就不需要 重新编译。 此外,只要代码没有改变(仅增加/删除空行、注释), YBN 就不需要重新压缩。 在初次完整编译后,后续编译通常只需要 几秒钟。 ## 与官方编译器的差异 1. `yst_list.ybn` 中没有 `global.yst` 和 `global_f.yst` 条目 官方编译器会在 `yst_list.ybn` 中为 `global.yst` 写入一个 `nvar=-1` 的条目。 官方 YSCom 将 `global_f.yst` 视为普通脚本。 但 Yuri 根本不会为它们保留条目或创建 YBN。 2. YBN 文件中没有 `S_INT/S_FLT/S_STR` 命令 官方编译器会生成它们,但实际上它们从未被执行。 甚至连作者本人都建议将它们放在执行路径之外。 所以我完全跳过了它们,只保留了本地的 INT/FLT/STR 命令。 它们仍然存在于 ysv.ybn 文件中 这两点差异导致,如果 对编译后的 YBN 文件再次运行反编译器,则无法直接编译代码(需要手动添加 `G_/S_/F_`) ## 其他 根目录下的 patch_text.py 有两个函数:ext_text, pat_text。 它们用于提取 和编辑 .yuri 文件中的文本(仅限对话行)。 它们的参数均为 (.yuri 目录, 文本 目录)。 照例,需要使用 freeze_support。 gbk.py 包含一个 patch_exe(infile, outfile) 函数,它使 Yu-Ris exe 使用 gbk 而不是 shiftjis。 修改自 https://github.com/jyxjyx1234/YURIS_TOOLS/blob/main/GBK.py
标签:Amass, DNS 反向解析, Galgame, Natsuzora Asterism, Python, YPF打包, YST脚本, Yu-Ris, 二进制分析, 二进制发布, 云安全运维, 云资产清单, 反编译器, 增量编译, 并行计算, 开源工具, 性能优化, 无后门, 检测绕过, 游戏开发, 编译器, 脚本解包, 视觉小说引擎, 逆向工具, 逆向工程, 配置审计