RPG Maker MV vs MZ translation: what changes for translators
Both engines share most translation surface, but plugin parameters, control codes, and the data-folder layout shift in MZ. Practical notes for translators moving between RPG Maker MV and MZ projects.
For RPG Maker MV vs MZ translation, the two engines are 90% the same. Both store dialogue, choices, items, skills, and terms as JSON, use the same event command codes, and honor the same control codes (\C[1], \N[2], \V[3], etc.). The remaining 10% — folder layout and plugin parameter format — is what trips translators up when they move between the two. This post is a quick reference.
Folder layout: the most visible difference
- MV stores data at
www/data/*.json, with assets, plugins, and the bundled runtime alongside. - MZ drops the
www/wrapper and stores data atdata/*.jsondirectly.
For RuneTranslate this is invisible — detection checks both paths and picks whichever exists. It only matters if you inspect a file by hand: remember the prefix.
Dialogue, choices, and event codes
The event command structure is the same in both engines, so the translation surface is identical. RuneTranslate reads:
401— a Show Text line. Each visible line is its own401.405— a Show Scrolling Text line (credits, long monologue crawls).102— choice option text (and402, each choice's branch label).320,324,325— Change Actor Name, Nickname, and Profile (used for renames and character bios).108/408— comments. These aren't player-facing, so they're excluded by default and never auto-translated (you can opt a row in if you need to).
RuneTranslate parses all of these identically across MV and MZ. On MZ, 101 also carries the speaker name shown above the message box, which is picked up too.
Word-wrap for the message box
Both MV and MZ break dialogue at the message-window edge — the default box fits roughly 46 single-byte characters per line. RuneTranslate auto-wraps dialogue on export (applied to 401 / 405 lines) so translated text doesn't overflow the speech box.
The wrap width is configurable per project— raise it for a wider window, or disable wrapping entirely for a game that handles its own line breaks. RuneTranslate also injects an auto-fit font-shrink option on export (MV and MZ) that scales oversized lines down to fit rather than clipping them, which covers most custom-font cases without hand-shortening.
Plugin parameter strings
Both engines store plugin configuration in js/plugins.js (under www/ on MV) as a PluginManager.parameters block per plugin, with visible strings inline.
RuneTranslate matches the top-level parameter values whose keys read as display text — text, message, label, caption, title, description, tooltip, button, menu, and similar. It does not recursively decode nested JSON-encoded parameter structs; a plugin that packs Japanese into a deeper struct surfaces those strings as excluded rows you can opt into and hand-fix in the editor. So nothing is silently lost — anything the whitelist doesn't auto-translate is still visible to review.
Control codes: identical, never let them get lost
Both engines support the same family of control codes:
\C[n]— switch text color to palette indexn.\N[n]— print actorn's name.\V[n]— print game variablen's value.\.,\|,\^— pause / wait modifiers.
These must survive translation verbatim. If a provider drops or corrupts \N[1], the game prints raw backslash garbage instead of the player's name. RuneTranslate masks every control code with an opaque placeholder before sending to the provider, then restores them exactly — and if any placeholder fails to round-trip, the unit is marked failed so the original Japanese stays.
Packed exes (Enigma Virtual Box)
Some MV/MZ games ship with the data/ folder bundled inside the .exe via Enigma Virtual Box, so there are no loose JSON files to point a tool at. RuneTranslate detects these, unpacks the embedded data with a bundled sidecar, and translates it normally — export writes a full unpacked, runnable copy with the translated data/ patched in.
Practical workflow tips
- Don't hand-edit the JSON files. Use the built-in editor for hand-fixes — it tracks which units you've edited so re-running the translator preserves your work.
- Translate plugin params last. Most are config / UI text; run the dialogue first, then plugins in a separate pass with a cheap provider.
- Keep saves across re-translations. RPG Maker loads saves by data-row index, not string, so as long as you don't reorder events, players keep their saves across a re-translation.
For the full RPG Maker walkthrough, see the RPG Maker engine page, or download RuneTranslate (free — every engine and provider included) and try it on your game. To compare providers for RPG Maker, see The best providers for translating Japanese games.
Ready to try RuneTranslate?
Free tier unlocks every engine + every translation provider. Supporter ($3/mo) unlocks full speed.
Download for Windows
