找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 73|回复: 0

[原创] Ren'Py 文本导入批量修改工具

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 birctreel 于 2025-8-29 23:16 编辑

Ren'Py 文本导入批量修改工具
一个用于从 .tab 表格中批量更新游戏脚本、添加语音、更新翻译标识符的小工具 简单来说就是错别字更新器,最适用的场景是游戏演出编写与翻译工作都完成了结果回头发现一大堆错别字时时需要绝望地挨个儿修改的时候。

不要问我为什么要搓这个

功能特点
  • 📝 更新剧情文本:根据 .tab 表格里的 Identifier替换 .rpy 脚本里对应的对话内容。不用行号匹配。但注意不能增删行,且必须保证你用的 .tab 表格是最新的(导出表格后要是改了脚本文本,会导致修改的脚本文件中的Identifier变更,因此就会.tab文件对不上了


  • 🎵 插入语音标记:自动添加 voice "file.ogg" 行,在表格里新建一列,表头写上 "voice",下面填好文件名(不用加引号)。运行工具时勾选选项,就能批量在对话前插入语音代码。适合只有零星几句语音,或者大量复用同一语音的情况。如果你有完整多语言配音,就没有必要使用这个了!!官方自带的自动匹配更香XD

  • 🆔 更新标识符:修改文本后,语句的 Identifier 会变。这个功能能把新的 Identifier 写回你的 .tab 表格里,方便你下轮继续编辑。

  • 🌍 更新翻译文件:当 Identifier 变了,旧的翻译就会失效。这个功能会同步更新翻译文件里的 Identifier,并贴心地加一句 #翻译待更新 注释,帮你快速定位哪些翻译需要返工(顺便还会标记修改次数,跑了几遍就会x几,用来计算到底修了多少次(草

  • 🔤 多编码支持:支持 UTF-8 和 GBK 编码的文件(***,一用excel编辑tab表格就会强制变成gbk编码表!



怎么用?

1. 安装工具
  • 下载 input_dialogue.rpy 和 schinese.rpy。
    • Input_dialogue.rpy 是功能代码。
    • schinese.rpy 是中文翻译。
  • 把 input_dialogue.rpy 放进 你的项目/renpy/launcher/game/ 中。
  • 把 schinese.rpy 放进 你的项目/renpy/launcher/game/tl/schinese/ 中。

2. 添加入口
打开 你的项目/renpy/launcher/game/front_page.rpy,找到类似下面的代码块:
[RenPy] 纯文本查看 复制代码
textbutton _("Force Recompile") action Jump("force_recompile")


在它下面添加一行:
[RenPy] 纯文本查看 复制代码
textbutton _("Import Dialogue") action Jump("import_dialogue")


现在打开 Ren'Py 启动器,就能在列表中看到“批量更新对话”的入口了!


3. 准备 .tab 文件
请使用 Ren'Py 自带的“提取对话”功能来获取 .tab 文件。

提取时务必注意:

  • 选择“以制表符分隔的表格 (dialogue.tab)”。

  • 不要勾选另外三个选项(否则提取的内容会没有 texttag,一覆盖你的texttag也就没了)。

  • 默认语言填 None。

你的表格文件应至少包含以下列:

  • identifier – 每行的唯一标识符
  • filename – .rpy 文件的相对路径
  • character – 角色名(可选)
  • dialogue – 对话文本

可选列:
  • voice – 语音文件名(例如 voice_01)

4. 运行工具
  • 打开 Ren'Py 启动器。
  • 选择你的项目。
  • 点击“批量更新对话”。
  • 选择你的 .tab 文件并勾选需要的处理选项。
  • 备份备份备份!!!!!!!!!!
  • 点击 处理文件,祈祷吧!

选项说明书

选项
说明
更新文本内容将 TAB 表中的文本替换到 .rpy 文件里对应 Identifier 的文本上。
将 TAB 表中的文本更改转换到.rpy 文件里对应标识符的文本上。
插入语音标记在对话行上方插入 voice "voice_01" 行。
在对话行上方插入语音 “voice_01” 行。
更新对话标识符如果更新文本后 Identifier 变了,把新 Identifier 写回你的 .tab 文件里。
如果更新文本后标识符变更,将更新标识符抄写回你的.tab 文件里。
更新翻译字符串如果 Identifier 变了,同步更新翻译文件里的 Identifier 并添加注释。
如果标识符变更,同步更新翻译文件中的标识符并附加注释。


要求
  • Ren'Py 7.4.0 或更高版本
  • 一个已经通过“提取对话”功能处理过的 Ren'Py 项目



⚠️ 重要警告!

  • 运行工具前务必备份你的项目!切记!!!!
  • 工具会为修改的文件创建 .bak 备份文件。
  • 如果更新标识符,翻译文件会同步更新并添加警告注释。
  • 关于角色名判断:这个工具是在中文环境下诞生的,所以它判断 character 列是变量还是临时字符串的方法很简单粗暴——看里面有没有中文!如果没有中文,就认为是定义好的角色变量名(草率但有效.jpg)。
    关于角色名称的判断:这个工具是在中文环境下生成的,所以其他判断字符列是否变量的方法仍然是临时字符串的方法,非常简单粗暴 —— 看里面有没有中文!如果没有中文,就认为是定义良好的角色变量名称 (草率但有效.jpg)。

下载地址



制作思路

考虑到经常要调试演出的话,用行号匹配剧本是不太现实的(一不小心多敲了个回车就会导致大量剧本无法匹配),因此还是想用 Identifier 进行匹配。
但溯源半天之后发现 Ren'Py 的 Identifier 似乎没有独立保存(或者保存了却无法直接读取),其数据是通过 load_file 导入 .rpy 文件然后进入 ast.Node 再进行调用的,因此无法直接找到每一句对应的 Identifier。
综上所述,只能走一种“邪门”路线了:

  • 匹配阶段:在工具运行的瞬间,立刻提取一份新的 .tab 文件。用这份新tab文件中的 Identifier 与你上传的旧tab文件进行匹配。
  • 定位阶段:匹配成功后,利用新tab文件里提供的文件名和行号来精确定位脚本中的具体位置,从而进行修改。
  • 更新阶段:更新 Identifier 也是同样的道理。就是在替换好文本之后,再再再导出一份更新后的tab文件。通过对比更新tab文件、新tab文件和旧tab文件,将新的 Identifier 复制回你的旧tab文件里,方便下次编辑。

目前这个程序还没有经过大量测试,只是我自己找了个 Demo 程序跑通了。如果有 BUG……那就再说吧……





评分

参与人数 2活力 +300 干货 +3 收起 理由
烈林凤 + 300 感谢分享!
ZYKsslm + 3 版区有你更精彩(*^_^*)

查看全部评分

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|RenPy中文空间 ( 苏ICP备17067825号|苏公网安备 32092302000068号 )

GMT+8, 2025-9-1 12:56 , Processed in 0.056600 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表