RPGMakerUtils
RPG Maker MV MZ Helper Tools
Install / Use
/learn @Justype/RPGMakerUtilsREADME
RPG Maker MV MZ 帮助软件
本版本使用 .NET Framework 4.8 编写,支持 RPG Maker MV 和 RPG Maker MZ 的游戏。
2.2.1 以及之前的版本有可能会被杀毒软件误报为病毒,请自行判断是否下载使用。
功能
- 加载 MTools 的翻译文件 (推荐使用插件进行翻译)
- 翻译插件:加载我的翻译插件,并解析json文件,保存到
www/translations.jsonFaster更快的翻译速度,部分菜单可能未被翻译Broader更全面的翻译,速度较慢 (推荐,但在JoiPlay里面可能会出现插件菜单未翻译的情况)Comprehensive翻译最全的 (默认模式)
- 替换翻译:根据json文件,修改
data/*json文件 和js/plugins.js文件- 普通模式,会按白名单翻译
plugins.js和command356command357 - 大范围模式,不在白名单的,且在json中的,直接翻译 (如果运行出错,请使用普通模式;如果想,可以提交Issue)
- 普通模式,会按白名单翻译
- 翻译插件:加载我的翻译插件,并解析json文件,保存到
- 修改字体 (复制系统字体到 www/Fonts,并修改CSS)
- 添加作弊,使用的是 paramonos/RPG-Maker-MV-MZ-Cheat-UI-Plugin 的代码
- 找游戏的宝箱密码
- 自动识别txt文件的编码格式,并转换为 UTF-8
使用方法
- 直接下载 exe 文件
- 运行 exe 文件
- 选择游戏目录 和/或 翻译文件(json)
- 点击修改按钮
- 等待修改完成
直接使用插件
- 找到游戏的
js/plugins.js文件,添加我的插件到插件列表中 (最好添加到第一个) - 将我的js插件复制到
js/plugins文件夹中,并重命名为JtJsonTranslationManager.js - 将json复制到
MV:游戏目录/www/translations.jsonMZ:游戏目录/translations.json
- 一定要删除 json 里面的
//“注释”
{"name":"JtJsonTranslationManager","status":true,"description":"Loads translations.json and applies it.","parameters":{}},
“注释” 例子 (被GitHub标红)
{
// 由XXX分享,请尊重劳动成果
"する": "执行",
}
原理
翻译插件原理
- 对于常用的、只加载一次的字段,直接在游戏加载时替换
- 为了方便作弊的使用,也会翻译变量
variablesswitches - 对于地图事件的对话和选项之类的,替换游戏的渲染方法
- 并且将类命名为
TranslationManager,有些插件会调用这个类
Faster 翻译原理
RPG Maker 的相关方法:
Window_Message.prototype.startMessage()添加对话Window_Command.prototype.addCommand()添加选项Window_BattleLog.prototype.addText()战斗日志Window_Base.prototype.convertEscapeCharacters()会被很多插件调用
Broader 翻译原理
RPG Maker 的相关方法:
Bitmap.prototype.drawText()绘制文本Window_Base.contexts就是Bitmap的实例Window_Base.prototype.drawText()就调用了this.contents.drawText()也就是Bitmap.prototype.drawText()
Bitmap.prototype.measureTextWidth()测量文本宽度 (例如计算选项的宽度)Window_Base.prototype.convertEscapeCharacters()转义字符 (会被Window_Base.prototype.drawTextEx()调用)Window_Base.prototype.drawTextEx()绘制高级文本,是很多插件会调用的方法Window_Base.prototype.convertEscapeCharacters()也会被某些插件调用
总结就是:
- 只要覆盖了
Bitmap.prototype.drawText(),Bitmap.prototype.measureTextWidth()和Window_Base.prototype.convertEscapeCharacters(),大部分的游戏内容和插件都能被翻译- 于此同时,因为覆盖了这么多的方法,提升翻译方法的效率是必要的
- 所以要做的几个重要事情是:
- 将已经翻译过的内容保存到集合中,以避免重复翻译
- 如果遇到字典里没有的内容,由键的长度从长到短依次匹配
- 无论是否找到了,都将“译文”保存到集合中,以避免重复翻译或浪费计算资源
- 将内容拆分成更小的部分进行翻译(使用
\n拆分)
- 又为了方便使用作弊插件,常用的游戏内容(物品、技能、状态、敌人等)都在游戏加载时直接替换
详细内容请查看 RPG Maker MV/MZ 的源码。就在 js/rpg_objects.js, js/rpg_windows.js 和 js/rpg_managers.js 文件中
Comprehensive 翻译原理
Comprehensive 模式结合了 Faster 和 Broader 的优点
不能全依靠Broader,有些插件自己创建了新的消息显示窗口,所以我们还是需要Faster的功能
替换翻译原理
- data/*json 包含了所有的游戏数据
- js/plugins.js 包含了所有的插件配置
只需要翻译 data/*json 文件 和 js/plugins.js 文件即可
需要翻译的字段有:
<Object>.json(Actors.json,Armors.json,Classes.json,Enemies.json,Items.json,MapInfos.json,Skills.json,States.json,Weapons.json)name,description,profileand somenote
events.json(MapXXX.json,CommonEvents.json)- 对话、背景和选项
code:401,102,402,405翻译所有parameters中的字符串 - 插件代码
code:356和357- 使用白名单进行翻译
- 如果值在字典中,直接替换
- 赋值代码
code:122- 只有当
parameters[3] == 4且parameters[4]是简单的字符串'xxxxx'并且 值在字典中,才翻译
- 只有当
- 对话、背景和选项
js/plugins.js- 通过白名单进行翻译
- 如果值在字典中,直接替换
- 如果值为JSON,解析完后,再遍历
代码片段例子
122 赋值
当第四个参数为4时,会执行js,返回的值会赋值给对应的变量。
例如下面第一个例子执行后,游戏变量1215 就是 '雫' 主角的名字
{ "code": 122, "indent": 1, "parameters": [1215, 1215, 0, 4, "'雫'"] },
被使用的例子:
{
"code": 401,
"indent": 0,
"parameters": ["(選択中のウワサ「\\v[1215]」+「\\v[1239]」)"]
},
第二个例子是一个游戏的称号系统,通过选词来实现:
- 先从词库里面选择对应的词
102展示选项 - 然后通过
122赋值,然后将它们组合到一起
{
"code": 102, "indent": 0,
"parameters": [
["した", "になった", "様の", "大好きな", "好きな", "なし"],
-1, -1, 2, 0
]
},
{
"code": 102, "indent": 0,
"parameters": [
["彼女", "嫁", "人妻", "黒髪清楚", "なし"],
-1, -1, 2, 0
]
},
假设执行了以下分支,游戏变量1215就是 "雫好きな嫁" ("name": "一ノ瀬 雫")
{ "code": 122, "indent": 1, "parameters": [1239, 1239, 0, 4, "'好きな'"]},
{ "code": 122, "indent": 1, "parameters": [1240, 1240, 0, 4, "'嫁'"] },
{
"code": 122,
"indent": 2,
"parameters": [
1215, 1215, 0, 4,
"$gameParty.lastItem().name + $gameVariables.value(1239) + $gameVariables.value(1240)"
]
},
355 执行JS脚本
{
"code": 355,
"indent": 1,
"parameters": [
"BattleManager._logWindow.push('addText', 'ミス!悪意の手は空を切った!');"
]
},
{
"code": 355,
"indent": 1,
"parameters": [
"$dataClasses[1].name = '\\\\C[25]裏切りのハンター\\\\i[29]'"
]
},
插件代码
356是MV里面的调用插件的代码,在MZ里面已被弃用- 参数为长度为1的字符串列表
- 参数由
" "空格分隔 - 分隔后的第一个为插件名称
357是MZ里面调用插件的代码- 参数为一个JS列表
- 列表第一个为字符串,且为插件的名称
{
"code": 356,
"indent": 1,
"parameters": ["D_TEXT こんだけ注目集めといてSじゃなかったら・・・ 12"]
}
{
"code": 357,
"indent": 0,
"parameters": [
"DTextPicture",
"dText",
"文字列ピクチャ準備",
{ "text": "ロレンチア\n", "fontSize": "0" }
]
}
鸣谢
- 感谢 davide97l/rpgmaker-mv-translator 提供的思路
- 感谢 paramonos/RPG-Maker-MV-MZ-Cheat-UI-Plugin 提供的作弊代码
Related Skills
node-connect
338.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
338.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.4kCommit, push, and open a PR
