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/` 下的所有文件夹。

然后将 `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, 二进制分析, 二进制发布, 云安全运维, 云资产清单, 反编译器, 增量编译, 并行计算, 开源工具, 性能优化, 无后门, 检测绕过, 游戏开发, 编译器, 脚本解包, 视觉小说引擎, 逆向工具, 逆向工程, 配置审计