User Guide: Interface
Language: English · Українська
This page is the map of the main window as built in ui/builders/menu_builder.py, toolbar_builder.py, and layout_builder.py. Labels below match the English UI.
Recommended order of work: 8. Localization Pipeline. Virtual folders and the in-game preview: 6. Virtual Navigation and Preview. AI buttons: 11. AI Translation. Every feature in one list: docs/FEATURES.md.
1. Layout
+---------------------------------------------------------------------------------+
| File Edit View Tools Navigation Bookmarks Help |
+---------------------------------------------------------------------------------+
| Toolbar: Save Undo Redo Find Preview AI Chat BFN Rescan All Settings >_ F1 |
+---------------------------------------------------------------------------------+
| Blocks (tree) | Strings in block (click a line to select) |
| folders + files | Hide empty / translated / unsaved / overrides / warnings |
| Speakers, Story, … +----------------------------------------------------------+
| + − ✎ ↑ ↓ ⟳ | Original (read-only) | tools | Editable translation |
| Glossary… | Max-width, Hide tags | | Window / Chapter / Speaker |
+---------------------------------------------------------------------------------+
| Region | What it is |
|---|---|
| Left | Project tree: physical files plus derived virtual roots. Header: Blocks: (double-click hint in tooltip). |
| Top right | Strings in block (click line to select): read-only list. Click a line to bind the editors. |
| Bottom left | Original — source text, read-only. |
| Bottom right | Editable — the only pane that writes translations. |
| Narrow column between Original and Editable | Revert string, Restore translation, Inspect story context, jump to Script Markup Studio. |
| Above Editable | Window:, Chapter:, Speaker:, then AI Translate, AI Variation, Auto-fix, Font:, Max-width:, Apply. |
| Under Editable | Visual preview (toggle with View → Preview). |
Do not type in Original. Do not treat the Strings list as an editor.
2. First launch
File → New Project…(Ctrl+N) orOpen Project…(Ctrl+O).- New Project (Create New Project) asks for:
- Project Name
- Project Location (folder that will hold
project.uiproj) - Source Type: Folders or Files - Source: original files (or an extracted ISOroot) - Translation: writable copy - Auto-create translation files - Game Plugin: folder underplugins/that hasconfig.json- Description (optional) - Plugins currently discovered that way (folder name → display_name in
config.json): -zelda_bmg— Zelda: Twilight Princess BMG. GameCube, Wii and Wii U (HD) alike: Source is the folder withbmgres*.arc(res/Msguson GameCube and in the Wii disc's DATA partition,content/res/MsgukorMsgusin HD); the three share message ids, so speakers, scenes and conversations work the same. HD text adds Wii U control icons ({U:ZL},{U:L stick},{U:+}…). Point Fonts folder atres/Fontus(HD:res/Fonteu). HD draws its letters from the textures in*.pack.gz, not from the BFN: the workspace build (TPHD_UA\2_build.bat) redraws them from the edited BFN sheets. Build (Project Manager): GameCube disc image writes the translated ISO next to a copy of the disc that the wizard recorded when it unpacked the game (a project made before that has no record: create it again); Dusklight mod writesTwilight Princess (UA).duskand needs your own USA disc; Wii U graphic pack and SDCafiine folder writes the Cemu graphic pack and the SDCafiine folder for the HD game, with its size tables and redrawn font textures. The Wii disc has no build target yet: its partitions are encrypted and Picoripi cannot write them. New project wizard: add the USA GameCube disc (GZ2E01) or the USA Wii disc (RZDE01; the wizard asks for your Wii key file once) and the wizard unpacks it; for Wii U HD, which Picoripi cannot read as a.wux, add the unpacked title folder (the one withcode,contentandmeta) with Add folder...: its source becomescontent/res/Msguk. -zelda_mc— The Legend of Zelda: The Minish Cap -zelda_ww— Zelda: The Wind Waker HD (Wii U): theMessage/*.msbtandFont/*.bffnttaken out ofcontent/Common/Pack/permanent_2d_UsEnglish.pack(one block per MSBT). Tags come from the game'sCKing.msbp([Red]…[/C],[Name],[Wait:10],[A]); speakers, box width (875 font units in a talk box, 812 in signs and item boxes, 4 lines a page), conversations and glossary terms come from each message's attributes. An unedited file saves byte for byte. Load Reference Patch with a folder ofpermanent_2d_<Region><Language>.packfiles (the workspace'sreference\: the game's French and Spanish packs and the Russian patch's pack namedpermanent_2d_RuRussian.pack) shows those languages, Russian first, matched by file and label. Font Editor: all six fonts (CKingMsg, CKingMain, CKingMainL, the RGBA8 button pictures CKingPic, CKingRuby, CKingZelda). Textures window: the BFLIM images of the title logo, boot screen, button and controller screens (source\Layout\*.szs, the game'scontent/Common/Layout) and the map titles and button pictures in the pack. Older projects of Kruptar.txtdumps still open. The wizard takes the game folder orpermanent_2d_UsEnglish.packand unpacksMessage\,Font\,Pack\andLayout\; Build makes the Cemu graphic pack (graphicPacks\Picoripi_UA_WWHD\) from the changed messages and fonts. The Switch homebrew port SwitchWakerHD (centollOS, a fork of ZeldaWWHDRecomp) reads the extracted game fromsdmc:/switch/wwhd/game/at run time, so the workspace's2_build.batalso writesbuild\switchwakerhd\switch\wwhd\game\content\(the translated pack andCommon/Layoutfiles) to copy over that folder; the same files run in the ZeldaWWHDRecomp Windows build -paper_mario_cs— Paper Mario: Color Splash (Wii U, Europe): Source is the workspace'ssource\content(1_unpack.batdecompresses the game's.lzfiles there), one block permessages/EU_English/*.msbt(48 files, 6,940 messages). Tags are named from the game'sgojika.msbp({PageBreak},{wait:30},{select:0:1:0:300:yesno},{ItemName:item}). The Font Editor lists the fivefonts/*.bffnt; the Textures window the English UI picturesGraphics/UI/**/*.EUR_en.bfres(title logo, battle words, chapter cards).2_build.batcompresses the changed files again and writes their sizes intofs.table-zelda_sshd— Zelda: Skyward Sword HD (Switch) and the Wii original (one plugin; the version is told by the source folder): the English*.msbtthat1_unpack.battakes out of the.arcarchives (US/Object/en_US/<area>/, interface textLayout/<name>/text/), one block per file. Tags are named from the text ({heroName},{color:Red},{item:11},{icon:41},{wait:15},{choice1:65535}); an unedited file saves byte for byte and2_build.batpacks the files back into the archives. The build targetskyrecomp(Switch, "SkyRecomp (Windows port, mod folder)") writesmods/Picoripi_UA/romfs/for the SkyRecomp port: each changed message is packed into its.arc, a changed font is copied as it is; it reads the rawromfsfolder next tosourceand refuses anexefs/mainthat is not v1.0.0. Speakers (the HD's speaker byte, Fi's window, one-character files), conversations (the MSBF flows), line limits per window kind (the game breaks an over-long line mid-word, so keep within them; 4 lines a page) and glossary terms come from the game data. Load Reference Patch with the HDromfsfolder shows the official Russian first and 12 more languages — also for a Wii project, matched by label. Wii: the HOME Menu messages (HomeButton2/home.csv, the English column) are a block too. Tools → Textures lists the English text textures (title and ending logos, opening captions, Game Over, The End; Wii: save banner, wrist-strap notice, HOME Menu labels, the disc channel banneropening.bnr) and the Font Editor every font (also the icon font, the HD options-menu fonts, the Wii HOME Menu and MotionPlus video fonts) once the workspace tooltools\ss_extra_sources.py(in the HD workspace) has put them intosource-zelda_mm64— Zelda: Majora's Mask (N64): the US ROM itself (.z64,.n64,.v64) is the source file and the translated ROM the translation file. The ROM opens into four blocks: the 4,589 messages, the 45 credits messages (Ocarina of Time's codes), "Interface strings" the game's code prints itself (owl-warp places, "Rupee(s)", time speed, mask-code colours; each has a fixed room) and the title screen's "PRESS START" (two words of up to 5 cells of the title font: digits, Latin letters, a few accented cells); control codes as{tags}(zeldaret/mm); line width per textbox type, from the Font Editor's map of the game font once it is saved in the project, else from the game's own width table. Saving rebuilds the text files and the message tables from the source ROM, keeps the textures, glyphs and widths edited in the translated ROM (Tools → Textures, Font Editor) and fixes the header checksum. Speakers (one actor per line when the decompilation shows exactly one), scenes and seed glossary terms come fromcontext.json, generated offline from zeldaret/mm and the ROM bypython -m plugins.common.zelda64_context. Ukrainian letters are saved into the font slots oftranslation_map.json(the project's, else the plugin's): look-alike letters share the Latin glyph (А = A, і = i, Ї = Ï…), the rest take accented and unused punctuation slots chosen by width, so English stays readable; Ocarina of Time uses the same map. Load Reference Patch with the folder that holdsmm3d_seed.json(Ukrainian carried over from Majora's Mask 3D, keyed by N64 message id) shows it as the "Ukrainian (MM3D)" reference -zelda_mm3d— Zelda: Majora's Mask 3D (3DS, Europe, with or without the v1040 update). Source: the workspace'ssourcefolder (1_unpack.batcopiesromfs\message\eu\eue.gmsg, the fontltn16.gzfand the text textures there); Translation:translation(whole files at their romfs paths;2_build.batmakes the LayeredFS mod, which the base game and the update both read). All 6,152 messages ofeue.gmsg(dialogue, items, signs, Bombers' Notebook, place names, credits, file select, fishing, Sheikah Stone, objectives), one block per id range; an unedited file stays byte for byte. Control codes are tags named as in the N64 plugin where the code is the same:{color:red},{box-break}(followed by a line break),{quicktext-on},{name},{btn:A},{delay:10},{flow:wait},{event:1},{choices:2},{center},{sfx:0x01006858},{plural:0x0007}…{plural-else}…{plural-end}. Load Reference Patch with the Russian build'seue.gmsg(or its folder) shows its Russian; the game'sromfs\message\eufolder shows French, German, Spanish and Italian. The Font Editor opensltn16.gzf; the Textures window lists 129 text textures: menus and HUD (layout\EU_English\*.gar), area, day and boss title cards, the title logo and copyright (textures inside a.cmbmodel and a.cmabanimation), the save notice and the version labels -zelda_oot64— Zelda: Ocarina of Time (N64): the US 1.0 ROM, the same way aszelda_mm64: the ROM opens into three blocks — 2,115 messages, the 48 credits messages and the title screen's two strings ("PRESS START", "NO CONTROLLER": two words each, each word fits the cells the game draws, letters and digits of the title font only); codes from zeldaret/oot. The Font Editor lists the message font and the title and file-select font (the kanji glyphs the game picks by message 0xFFFC; it has no widths). Tools → Textures lists the 335 text textures (item, map and area names, pause and file-select labels, title cards); a text save keeps the textures and fonts edited in the translated ROM -jak_and_daxter— Jak and Daxter (Switch OpenGOAL port; Jak 1 NTSC-U, Jak II NTSC-U, Jak 3 PAL disc, one plugin): Source is the English game text (text/common.json, 781 ids of Jak II, one block, ids kept) and the English subtitle lines (subtitle/lines.json, one block per scene). Saving writes only the changed lines into the port's English overlay;2_build.batruns the port's own compiler, so the game reads the changed*.TXTfiles. The Textures window lists the level textures exported as PNG (textures/**/*.png, from the.fr3level files; RGBA and BC1/BC3 pixels). Text is an English overlay, so a Ukrainian translation shows in any build without a UI change; the Font Editor has no Jak font yet. -black_and_white— Black & White (Lionhead, 2001) on the openBlack Switch port: Source isScripts/InfoScript2.txt, the English ADD_TEXT table (6,974 strings, one block; the key, flag and narrator of each call stay as the game has them). Saving writes the translation into the text literals only, so the rest of the file stays byte for byte; a text with a double quote is refused. The build targetopenblack_sdwrites that one file toswitch/openblack/game/Scripts/for the SD card. The port does not show game text yet (itsRUN_TEXTplays voice only andLOAD_LANGUAGEis not implemented), so a translated line is not visible in the port until a text display exists. Fonts and textures are not opened by this plugin. -sly_cooper— Sly Cooper and the Thievius Raccoonus (ProjectCane port, Switch data folder, read in place): Source is the English text of each level file (text/<world>/<level>.json, one block per level, all text spans in file order: dialogue, subtitles, Thievius Raccoonus pages). Build replaces each changed line in a copy of the level file (build\ProjectCane\Worlds\...) and checks the result. Only ASCII text is written now: a line with other letters stops the build. Fonts and pictures are not opened yet; menu text is compiled into the port. The level-table reader needs a local option schema file, which this release does not ship. -manual_3ds— Electronic manuals of the 3DS system titles (Instruction Manual viewer). Source and Translation are folders of one JSON file per manual (src/manuals/*.jsonlayout:enEnglish,ruRussian,uatranslation). Both may be the same folder (the files read in place): the Original column showsru(the keys follow the Russian document), the translation columnua, and the English (EN) reference tab showsenonly on pages whose English lines up with the Russian paragraph by paragraph; on any other page it is empty. The editor checks each paragraph the way the console shows it: the lines are placed as the console build places them, then measured as the console draws them (line count, text panes per style, a word wider than its pane box, a line the console breaks inside its pane, a line past the card edge, a line that runs into a picture or a box frame beside it), and, with the repo_manual folder set in the preview panel, the page is also built and drawn from every current text on it, so the editor marks what only the drawn page shows (a line that leaves its filled cell, two paragraphs whose ink meets, a line a later pane paints over), plus markers, glyphs and button glyphs (each one must come back as in the Russian original; a glyph that has a pane of its own stays there and is left out of the translation). The preview panel is a simulator of the console's viewer: the page is built from the current text the way the console build builds it and drawn from the resulting layout files with the console's font, pictures, frames and chrome (header badge with the console page number, scroll track, bottom bar); the status line names the console page number and the defects the render shows (a line past the card edge onto the scroll track, a line the viewer broke inside its pane, a line over a picture or a frame, a line that starts inside a filled cell and leaves it — a white table label runs out of its grey cell onto the white page, as the console shows —, two lines whose ink meets, a line a pane drawn after it paints over, a missing glyph). The preview switches to the selected string's text size (large or small); the selected paragraph is outlined on the page, and the page scrolls to it when it is out of view; a string that draws no text says so in the status line. The same renderer runs headless:python scripts/manual_3ds_render.py render <manual> <console page> --size small --out page.png,all --out <folder>(every page of a build with its defect list),validate --shots <classification.json> --calib <screenshot folder> --out <folder>(matches console screenshot pairs against every build and writes an HTML report),table(console page number,Page_NNNfile, title, category). Preview. The manual preview, in place of the BFN preview, draws the page of the selected string as the 3DS viewer shows it: the top and bottom screens one below the other, one continuous text column, scrolled with the mouse wheel or by dragging. The Y button (the bar at the bottom of the bottom screen, or the footer button) switches Large and Small text. The text is the current translation; a line the render flags (past the card edge, broken inside its pane, over a picture or a frame) gets a translucent red band. A line stops before a picture or a box frame beside it, as on the console. Set the folder with Choose folder... in the preview footer. The folder holds the owner's manual archives: it is read in place and nothing is copied. A project may hold every manual (one file per block): each block draws its own manual. A manual without console files in that folder (for examplebrowser) shows one line that says so. Picture areas are drawn from their textures, and window panes (the orange item boxes) with their frame textures; a pane without a texture is filled with its own colour. The top bar shows the console page number in a badge coloured by the page's Index category, and the page's title (its translated Index entry). The neighbouring pages are not drawn in the panel. The viewer's side strip, scroll track and bottom bar use screenshot crops from the git-ignored data folder (<data>/plugins/manual_3ds/chrome); without them they are drawn flat. Click and original. A click on a paragraph in the preview (a press and a release without a drag) selects its string in the editor; a drag scrolls the page. The selector above the preview adds the original beside the translation. Original: Russian (ru) draws the page as the console stores it, with its own line breaks. Original: English (en) draws the English text in the Russian panes. Both canvases share the scroll, the text size and the selected paragraph. The status line gives the fit of the paragraph: its panes, the pane width, the lines its text needs with their widths, and the longest word. A problem for a word, a line count or a pane count gives the same numbers; a label in a grey cell says how many panes the cell has. Line breaks. Enter types the hard break{br}. A line break typed another way is a space on the console: the problemNEWLINEflags it, and its autofix turns it into{br}. A hard break takes a spare line on the console; without one the paragraph gets a line problem. Folders. Under each manual in the block tree: Small text and Large text (one folder per page, named by the page's section title), Sections (per section: its small text, then its large text) and Contents (the section titles). A string sits in two places. Section names follow the current translation of the index entry, or the original when it is blank. The names update after the tree rebuilds (after a save). Selecting a folder shows its strings in the list. Same text. A paragraph whose text is the same in two manuals (for example the Health and Safety section) takes one translation, and the memory bar and the batch fold use it. Each place is checked first: a place whose pane or line count the text does not fit is not written (the status bar says how many). Small and large text share a translation; the check decides for each place (wiki 11, One source, one translation per run). -system_3ds— Nintendo 3DS system menus and applets (System Settings, HOME Menu, keyboard, error applet, Friend List, Mii Maker, eShop, browser and the other parts of the 3DS UA mod). Source and Translation are the same folder: the mod repo'ssrc, edited in place (the repo's own build stays the build). Eachsrc/strings/<part>/*.jsonfile and eachsrc/layouts/<part>.jsonfile is one block. A string is one entry: its id is the MSBT label, or the layout pane path for text inside a layout (up_LZ.bin/./blyt/StartTopEU_U_00.bclyt/TextBoxTitle_00#0). The original isen, the translation isua, andruis the read-only reference column (the project's reference path is the samesrcfolder)._all_langs.jsonis not a block: it holds build overrides per language slot. A save writes into the file on disk only theuavalues that differ from it; every other byte stays the same, so a file saved without a change is the same file. The width column shows each line in pixels of the 3DS system font, measured as the mod repo's own validator (validate.pyin its tools folder) measures it (the scale tags{t:1.0:XXXX}count). A string is a width problem when it is wider than the mod's own budget: for a message label the widest official localisation of that label, for a layout pane the widest line of the other languages in that pane (the same check as the mod's validator; about two thirds of the strings have a budget). A string without a budget shows its width without a limit. Preview. In place of the BFN preview, the selected string is drawn where the console draws it when its text is in a layout: the layout is read from the repo_manual folder, its text pane is set to the string's text, and the pane is outlined in orange. This is done for the layout links built byscripts/build_system_3ds_layouts.py(plugins/system_3ds/layout_links.json): a label named by the user data of a text pane (the browser, Miiverse, Miiverse posting and game notes parts) and the startup line of System Settings. The status line says the pane is in place and that the backdrop is a placeholder, not the console's; a string that does not draw in its layout says so and shows the box. Other strings are drawn as a budget box: the console's system font, at the font's advances, in a box as wide as the width budget and as many lines high as the line budget (the most lines of any official localisation of the label). A line wider than the budget keeps its full ink, with a red rule over it and a grey edge at the budget; lines past the line budget sit under a red band. The status line gives the widest line against the budget, the line count, and any character the font has no glyph for. The font, widths and layouts come from the repo_manual folder of the manual preview; Choose folder... sets it. Build and export. Build mod, Export mod and Run in emulator use the mod repo's own Makefile:build-ru(the Russian slot, folderdist) andbuild-en(the English slot, folderdist_en). Picoripi copies the Makefile,tools,assetsandsrcinto a temporary folder inside the build's folder, and linksworkto the repo'sworkfolder; the repo itself is not written. The build needs GNU make on PATH (scoop install make) and aworkfolder with every title the build reads; a title with no dump stops it (the Makefile'sUA_SKIP_TITLESlists titles to leave out). The make output is inbuild.logbeside the result. A save stops with a message that names a file changed on disk since Picoripi read or wrote it: reopen the project, then save. Run in emulator starts the command with the built folder; a Luma folder is not a layout an emulator loads by itself, so that command must perform the install step. -hard_corps_uprising— Hard Corps: Uprising (Xbox 360 XBLA, PC port): a texture-first project with no text blocks. The game pictures (Gui\Img, shared and English screens) and the fontFont\ck_font.binas a 16 x 16 glyph grid (ASCII 0x20-0x7E). -zelda_ladx_hd— Link's Awakening DX HD (PC fan remake v1.0.0): the EnglishData\Languages\eng.lnganddialog_eng.lng, one block perKEY VALUEline. An unedited file saves byte for byte.2_build.batwritesukr.lnganddialog_ukr.lng(the game lists a language for each.lngfile, so the exe is not changed). The Font Editor opens the eight SpriteFonts inContent\Fonts\*.xnb(dialogue fontsmallFont, menu headersnewHeaderFont); no font has a Ukrainian letter yet. A letter typed into a free cell adds a glyph, and the character map stays sorted. Tools → Textures lists the UI sheetData\ui.pngand the four menu picturesContent\Menu\*.xnb. A duplicate key or a changed[TAG]stops the build; missing glyphs are listed inbuild\glyph_report.txt. -zelda_tww— Zelda: The Wind Waker (GameCube BMG):res/Msg/bmgres.arcof the US or a European disc (data0–data4are English, German, French, Spanish, Italian). Shares the Twilight Princess machinery; tags, colours and line widths come from the zeldaret/tww decompilation, line width and lines per page follow each message's box type. With the disc's wholesourcefolder the project also has the Hylian lines (bmgresh.arc/zel_01.bmg, Shift-JIS), the disc-error messages insidesys/main.doland the disc banner (opening.bnr, Latin letters only); the Font Editor lists six fonts (message, Hylian, name entry and its copy in the file-select archive, the disc-error font inmain.dol, the debug-menu font) and the Textures window 154 text textures (BTI, the title subtitle inside two BDL models, the banner). No speakers or window frames yet. The Switch homebrew port SwitchWaker (centollOS) reads the whole disc at every start, so the workspace's2_build.batalso lays outbuild\switchwaker\switch\switchwaker\(the translated disc asGZLE01.isonext to the release'sswitchwaker.nroand caches) for the SD card; the port checksmain.dolagainst the decompilation's hash, so onlyfiles\edits reach it, not the disc-error strings insidemain.dol. In the Project Manager, Build makes the Disc image (ISO) (the translatedmain.dolincluded) or the BlueWake disc (original main.dol) from the project's source and translation folders, with no original image needed; Run in emulator uses the command set for the GameCube or the BlueWake platform. The Windows static recompilation BlueWake (chrissotraidis/bluewake, release zip, USAGZLE01disc) uses the same disc and the samemain.dolrule: its DLL holds the code translated from the originalmain.doland modules, and it reads messages, fonts and textures from the disc at run time, so3_run_bluewake.batstarts it with thatGZLE01.iso;UA TESTin the title texture and in a message, and an edited message font and name-entry font, showed in its own frame capture. BlueWake checks the disc before it starts: the header idGZLE01, the GameCube magic and themain.dolSHA-1 of revision 0. Picoripi's BlueWake target builds only from a sourcemain.dolthat matches that SHA-1 and stops with a message otherwise. For Run in emulator, set the BlueWake platform command to"<BlueWake folder>\BlueWake.exe" --disc {path}(BlueWake takes the disc from--disc); Picoripi starts the program in its own folder, as3_run_bluewake.batdoes withpushd. BlueWake reads HD texture packs fromLoad\Textures\GZLE01in its data folder (theuserfolder besideBlueWake.exewhenportable.txtis there, else%APPDATA%\BlueWake); Picoripi does not write that folder yet. The Windows fork WindowWaker (MaskeZenY, a native port compiled from the decompilation, release zip) takes the same disc: it checks only the disc id and version, nevermain.dolor the modules, and reads messages, fonts and textures from the disc, so3_run_windowwaker.batstarts it with thatGZLE01.iso-super_mario_galaxy— Super Mario Galaxy and Super Mario Galaxy 2, one project for every version: Wii (USA, RMGE01 / SB4E01 rev 0, ISO or RVZ), Switch (010099C022B96000 / 0100FD8022DAA000, NSP or NSZ) and, for the first game, the Nebula PC recompilation. Add the Wii disc and the Switch game to the wizard; it unpacks the English message archives and fonts of both intounpacked\versionsand writes one document per message archive (MessageData\<archive>.smgmsg: Galaxy hasMessageand the SwitchSystem, Galaxy 2 one per zone). Each row is one message label; the label shows in the context panel, and a row that only one version has is still a row. A label the Wii and the Switch word differently has two rows, one per version, flagged "Switch translation; Wii English differs": translate the Wii row for the Wii and Nebula (until then they show the Wii English). Tags show the Wii bytes on every version ({escape:3:0000}in Galaxy,{tag:3:0:0000}in Galaxy 2); the build writes each version's own byte order and Switch button pictures. Reference columns: every other language of both versions (set the reference path to theunpackedfolder; the wizard project has it). Build targets: Wii: Riivolution patch and Dolphin launcher (riivolution\<mod>.xml, the changed archives, and a Dolphin<mod>.jsonthat boots the disc with the patch), Nebula (PC): disc mod manifest (Galaxy only;README.txtsays how: copysys\fst.binover Nebula'scontent\sys\fst.binand setGALAXY_DISC_MOD_MANIFEST), Switch: Atmosphere LayeredFS mod (every English slot). Only translated archives are written. An existing translation mod is read in by label withpython -m plugins.super_mario_galaxy.import_mod <unpacked> <translation> <mod zip or folder>; its archives become the Switch base (they carry the game update's labels) and itsFont.arcgoes with them. The import also copies the mod's Cyrillic letters from its Switch fonts into the Wii fonts (scaled, nothing drawn) and stores the text as proper Ukrainian (і, ї, є, ґ); each build writes a letter its font lacks the way the mod did. The Wii fonts (LayoutData\Font.arc: message, menu, cinema, number and button fonts) open in the Font Editor and save byte for byte (DECISIONS D39). -super_mario_sunshine— Super Mario Sunshine (GameCube, USA, GMSE01 Rev 0): the BMG message files inside the disc's.szsarchives (files\data\scene\*.szs/map/message.bmg,option.szs,guide.szs), read with the Twilight Princess rules; the source is the whole disc, unpacked from the owner's image. Build targets: GameCube disc image writes a new ISO next to the original (the original is never changed; the saved files and the four retailmain.dolwords of the speech-balloon fix are written, the disc size and file layout stay the same) and PC and Switch port pack writesmods\uk\files\...for the ports (mod = uk, a README is inside). A changed message attribute (INF1) is refused; the text may change. The executable's English text (11 strings: the progressive-scan question, Yes, No, the card title, the English save comment, the disc-error lines) is one editable member,main_strings.dolstr, each text in its own room; a text that does not fit is refused. Type Ukrainian as it is: the plugin's code map (translation_map.json, copied into the project) puts each Ukrainian letter and the apostrophe ʼ on a one-byte code the game's text does not use; a character with no code (a Russian letter, Japanese, or a Latin-1 letter whose code a Ukrainian letter took) stops the save with the character and the message number, and nothing is written as?. The system font (balloons, menus;nintendo.szs/font/standard_fontex.bfn) and the subtitle font (subtitle.szs/font/demo_font.bfn) open in the Font Editor; their cells for the Ukrainian letters still hold the Latin-1 letters until you draw the Cyrillic ones (see DECISIONS D35). Reference languages: in Settings → Project → File Paths → Reference Translation / ROM Path pick the European disc (GMSP01, an ISO or RVZ) with Select Game Disc Image (ISO, RVZ).... Picoripi copies its message files into the project folderreference_euin the background (about a minute) and then shows English (EU), French, German, Spanish and Italian next to each US message, read only. You can also pick an existingreference_eufolder. Files with no European copy (the four Japanesedolpic1.bmg,title.szs/marisun_stage.bmg, the executable's text) show no reference. Not done yet: the two progressive-scan confirmations with escape codes. -zelda_tingle— Zelda: The Wind Waker, Tingle Tuner (the text a linked Game Boy Advance shows). Source: the disc'sfiles\res\Gbafolder (msg_LZ.bin, USA;msg_LZ0–4of a European disc: English, German, French, Spanish, Italian); Translation: the same folder undertranslation. One block of 1,086 messages with readable codes ({color:2},{wait:30},{icon:1},{choice2:0},{anim:13}…); the GBA draws every letter 6 px wide and breaks a line itself after 16 letters, 6 lines a page, so the width check is 96 px. Saving packs the file again (GBA LZ77) and refuses a text bigger than the GBA keeps room for (USA: 67,584 bytes unpacked, about 3 % more than the English); an unchanged file stays byte for byte.client_u.binopens as a second block with the GBA program's own two lines ("Calling...", the no-link screen), changed in place. The Font Editor opens the GBA font insideclient_u.bin(formatgba_tiles): Ukrainian letters have their own codes (look-alikes share the Latin glyphs). The Textures window lists the client's sprites ("Please wait..."), screen tiles and help-screen text (formatgba; an edit that no longer packs into the program's room is refused). Checked in Dolphin with its built-in GBA (WW_UA\3_run_tingle.bat) -skies_of_arcadia— Skies of Arcadia Legends (GameCube, USA GEAE8P). Source: the wizard's unpackedfield\*.sctscripts (decoded); each text segment of a script is one editor string. Budget: a script's text may not grow in total. A changed line takes its encoded length, padded with spaces in steps of 4 bytes. A script over its budget flags every changed line with "Byte budget exceeded"; the problem tooltip gives the bytes used, the budget and the bytes over. Shorten the line, or shorten another line of the same script. A save keeps the typed text. Build refuses such a script and names its lines; no disc is written for it. -skies_of_arcadia_dc— Skies of Arcadia (Dreamcast, USA MK-51052, region U): the same budget and build rules for the disc'sFIELD\*.SCTscripts (little endian). Build writes the translated GD-ROM set (cue sheet and tracks). -castlevania_dxc— Castlevania: The Dracula X Chronicles (PSP, English ULKS-46155). Source: the workspace'ssourcefolder, filled by1_unpack.batfrom the UMD image; Translation:translation. Text: the remake's English dialogue (remake\text\std00.txt–std07.txt, one message per line,\non screen is a new line in the editor), the program's English save-data strings (remake\program\BOOT.BIN, each in its own room) and the Symphony of the Night strings in the PSP overlays (sotn\PSPBIN\*.bin: menus, item / enemy / spell names, descriptions, stage dialogue, the endings; found by pattern, each string keeps its place and room — a longer text is cut with a warning;{XX}tags are bytes to keep). 41 files, 1,837 lines, byte-exact when unedited. Font Editor: the remake dialogue font (remake\font\msgfont.gim, 16x16 cells; 66 empty cells already carry the Ukrainian letters' codes fromtranslation_map.json) and the SotN 8x8 font (sotn\hdbin\f_game.bin.pic). Textures window: ~200 text pictures — the remake's logo, menus, staff roll, stage names, speaker names, movie subtitles (gim), SotN title, HUD, game over and file select (rawPlayStation VRAM blocks), the PC Engine Rondo of Blood's English menus, notices and cutscene subtitles and Peke's pictures (tim2).2_build.batputs each changed piece into every pack that held the same bytes (the font is in 8 event packs), writes the program as a plain-ELFEBOOT.BINwhen it changed or the dialogue uses Ukrainian letters, copies changed SotN strings into their duplicates, and writes a copy of the image (build\Castlevania The Dracula X Chronicles (UA).iso);3_run.batstarts PPSSPP. -lunar_ssh— Lunar: Silver Star Harmony (PSP, USA ULUS-10482). Source: the workspace'ssourcefolder, filled by1_unpack.batfrom the UMD image:ScriptPack\TEXT*.dat(62 event scripts, unzipped fromScriptPack.dat: 11,837 messages and 164 choice lines),TEXT_US\*.TXT(8 UTF-16 tables: abilities, item names and descriptions, places, monsters, menus, credits; the string is the part before;, the comment stays) andStationedPack\*(interface pictures); Translation:translation. Tags are readable:{speaker:41},{wait},{page},{pause:30}; a line break is a new line. A script string may grow; the labels of the script are counted again on save, and an unedited file stays byte for byte. The retail game draws text with the PSP's built-in font; the build gives it a font on the disc:source\MODULE\font.pgf(Font Editor formatpgf: PPSSPP's open Liberation Sans Bold, Latin and Cyrillic) and the decrypted program (source\SYSDIR\EBOOT.ELF, dumped by PPSSPP during1_unpack.bat) patched to open it. Ukrainian letters are stored with their cp1251 codes (the script's U+0400–04FF range holds its control codes;translation_map.json), which the disc font maps to the Cyrillic glyphs; the editor shows the letters. The Textures window opens the title screen, menu and message-window pictures (gim: GIM in FCHN packs, 8-bit index and RGBA8888).2_build.batzips changed files back into their packs and writes a copy of the image with them (build\Lunar - Silver Star Harmony (UA).iso);3_run.batstarts PPSSPP. -donkey_kong_tropical_freeze— Donkey Kong Country: Tropical Freeze (Switch, update v131072). Source: the workspace'ssource(text\<package>__<asset>.msbt: the English USEN message tables of the three packages with text, 6 tables). Translation:translation, starts with the Ukrainian USEN tables of the UKR mod.2_build.batwrites the changed tables into copies of the three packages (big-endian Retro RFRM PACK). Fonts (the Scaleform GFX library) and textures are not opened yet. -metroid_prime4— Metroid Prime 4: Beyond (Switch, update 1.1.0). Source: the workspace'ssourcemade by1_unpack.batfrom the game's Retro packages (text\*.msbt: the English USEN messages of every MSBT table, 98 tables, 5,792 messages;font\FONT_*.rfont;texture\<package>\*.txtr, decompressed); Translation:translation. Every table is a block; tags read{icon:123},{color:255:197:41:255},{size:150},{pageBreak},{column};{0}placeholders are plain text. The Font Editor opens the three fonts (retro_font: distance-field atlases, one language set per page; glyphs are edited in place, none added). The Textures window opens the interface textures (txtr: R8, RGBA8, BC1–BC5, BC7 written in place; ASTC read, an edited ASTC texture is stored as RGBA8).2_build.batputs changed text into USEN and EUEN of every package that holds the table (the update'sPatch\Z_198_NXPatch.pak.patchwins in the game) and changed fonts and textures with their metadata into a LayeredFS mod. The workspace starts from BakAI's Ukrainian translation (text and fonts with Ukrainian letters). -spore_hero— Spore Hero (Wii, Europe). Source: the workspace'ssource(1_unpack.batmakes a plain ISO from the RVZ once and puts there, at the disc paths, the English textgame\localization\localization\ENG_US.rpk(the EA package decompressed),sys\main.dol, the three game fontsGame.rpk\*.gfn, the HOME Menu messagesGame.rpk\home*.csvand every UI texture of the packages as<package>.rpk\<name>.gsh/.lsi); Translation:translation. The project shows the 2,285 English strings (menus, quests, dialogue, creature and part names, credits headings, save and disc messages) in the order they were written, a hundred to a block;&breaks the line,<c>…</c>colours,[PLAYER_NAME]is the creature's name,\[A]-style codes are icons. A character the text has no byte for gets a free byte and the game's character table is updated on save, so Ukrainian letters can be typed; the fonts must have the glyphs. A letter drawn over an unused glyph with the Font Editor's translation map is saved as that glyph's character.main.dolholds the early disc and Wii memory messages (each within its own bytes). The Font Editor opens the three fonts (fntg) and the HOME Menu font; the Textures window lists 2,126 UI textures (shpg, the title logo of every language included).2_build.batpacks the changes back into the packages (the same texture in every zone), compresses them again and writes them into the disc image. -rabbids_party— Raving Rabbids: Party Collection (Wii, Europe): a menu and three games on one disc. Source: the workspace'ssource(1_unpack.batmakes a plain ISO from the RVZ once and reads every file straight from it: the menu'sfiles\*.dol, picturesfiles\*.tpl, HOME Menu and banner; Rabbids 1 and 2's English textrrr1.bf\text_english.jtxt/rrr2.bf\..., fontsfonts\*.jfntand menu texturestextures\<world>\*.jtex; TV Party'srrr3_bin_wii.bf\TextPackages.bin, Flash font moviesflash\*.gfxand interface texturestextures\*.jtx); Translation:translation. The project shows Rabbids 1 and 2 as one block per text list (backslash codes such as\cFF7FFF\colours and\p16\abutton icons), TV Party's English column a hundred rows to a block (<font color=…>rich text), and the menu titles, prompt and disc messages of each executable (each within its own bytes). Rabbids 1/2 text is single bytes: a letter the fonts lack is drawn over an unused glyph and mapped to it in the Font Editor's translation map (TV Party text uses the map too). The Font Editor opens the Jade fonts (jade), the menu's Wii archived fonts (brfna), TV Party's vector Flash fonts (swf_font), the Rabbids 2 disc error font and the HOME Menu font; the Textures window lists the menu pictures (tpl), the Jade menu-world textures (jade) and TV Party's interface textures (jade_jtx). The few captions baked into TV Party's Flash movies (flash\*.gfx: "NEXT", "OK", "WARNING!" of the minigame screens) are blocks too; a saved caption is encoded through the movie's own font, so it takes only the letters that font has. The movies hold no pictures (the menus and logos are vector art).2_build.batpacks every change back (only the changed LZO blocks again, a grown file at the end of its bigfile) and writes it into the disc image. -metroid_other_m— Metroid: Other M (Wii, USA). Source: the workspace'ssource(1_unpack.batputs there, at the disc paths,message\message_all.dat, the fontsfont\*.brfnt, the Wii HOME Menu messageshbm\HomeButton2\home*.csvand every 2D layout as a folder<number>\<layout>\timg\*.tpl); Translation:translation.message_all.datholds every message of the game in eight languages; the project shows the US English one in groups (menus, chapter summaries, system messages, area names, tutorials, item and personnel files, 1,393 voice and cutscene subtitles) and keeps the other seven on save. Control codes read{FONT_SYSTEM},{COLOR_GREEN},{ICON_A},{IMG_ADAM}; a line break is^in the file. The Font Editor opens the four game fonts and the HOME Menu font; the Textures window lists every layout (each exists once per language: the second of eight copies is English).2_build.batpacks the changes back into the disc image. -ikenie_no_yoru— Ikenie no Yoru (Wii, Japan) with the English fan translation "Night of the Sacrifice".1_unpack.batwrites the English patch (Riivolution files) into the Japanese disc and puts into the workspace'ssourceevery message tablepackage\<package>\<id>.mes(88 tables, 1,944 messages), the layouts with text boxes (*.brlyt), the strings ofsys\main.dol(save title, disc and memory errors, default names; each fits its slot) and the HOME Menuhbm\HomeButton*\*.csv(the game shows the Japanese column); Translation:translation. Control codes read{NAME:1}(the name of girl 1..5),{PAGE},{COLOR:FF0000FF},{SIZE:3F800000},{U0008}. Lines the English patch left Japanese are in the category "Japanese source". A table that several packages share is insourceonce (the block's description names the others);2_build.batwrites it into each of them. The Font Editor opens the four BRFNT fonts and the HOME Menu font; the Textures window lists every TPL (title logo, layouts, banners). The build also fixesmain.dolso the game boots and makes its own save without the patch's save file. -pokemon_gen1— Pokémon Red / Blue and Pokémon Yellow (Game Boy, USA) through the pret decomps pokered and pokeyellow. Source: the workspace'ssource(1_unpack.batcopies fromport\pokered/port\pokeyellow): every asm file with game text (289 / 295 files: dialogue intext\, battle and system text indata\text\, Pokédex, names of Pokémon, moves, items, places, trainer classes, menus inengine\), everygfx\*.pngandconstants\charmap.asmwith the Ukrainian letters added (21 capitals and 14 small letters in the free font cells $C0–$DF and $E9–$EB, look-alikes on their Latin tiles; ґ є ж й ї ф ц ч ш щ ю take the English cells 'd 'l 's 't 'v 'r 'm, é, ¥, × andby the decision of 2026-10-09, so the English text on those cells must be translated first). One editor string is one text: a line break is line/cont(a list:next), an empty linepara(Pokédex:page), text commands show as{text_ram wStringBuffer}and can move; another macro than the expected one shows as{cont}. Unchanged texts save back byte for byte. Fonts:gfx\font\font.pngandfont_extra.png(formattexture_gridover the newpngtexture format); 20 picture entries (title logo, version names, copyright, SGB borders, slot machine, diploma, Surfing Pikachu) open in Tools → Textures aspng. Speakers (the map person's sprite), maps and script lines come from the decomp (picoripi\context.json); names seed the glossary. Where the decomp gives no speaker or location, a local GameFAQs transcript in the project'sscriptfolder fills them in (plugins/common/gamefaqs_script.py; the transcript never goes into git).2_build.batlayssourceandtranslationover a copy of the decomp inbuild\workand runs the Makefile steps with rgbds 1.0 (Python ports of the pretgfx,pkmncompressandpcmtools); unedited it gives the original ROMs byte for byte; text that outgrows its bank goes into floating sections; a letter without a font cell stops the build with the file and line. Seen in mGBA: an edited main-menu line, a filled font cell and the inverted title logo. ROM mode (Red, Blue, Yellow; the UE.gbdumps, identified by SHA-1): the Project Manager's Game ROM role takes the.gbfile. Unpacking writes every text body (dialogue, signs, Pokédex entries) totext/*.asmwith the decompilation's macro lines, and keeps a copy of the ROM asrom/base.gb; no make, rgbasm or other tool is needed. Patched ROM writes a.gbwith the changed bodies: a body that is longer than the original moves to free space and itstext_farreferences are rewritten; a body that a pointer table names (Pokédex categories, credits, badge names) moves inside its own bank and its table entries are rewritten, after each entry is checked against the ROM bytes. Every text run of the ROM is a unit (the census: 3,241 of 3,245 runs in Red, 3,244 of 3,245 in Blue, 3,414 of 3,417 in Yellow; the rest are coordinate bytes of the map table and picture data). Text the decompilation builds with macros (the name lists, the default names) comes from the ROM bytes and keeps its size. A field the ROM keeps in place (a name, a list entry, a string no pointer reaches) has a byte budget inrom\meta.json: the editor flags Byte budget exceeded when the text is longer, and the build refuses it. Several units in one body share its space: each unit has its own budget, the body's text minus the other units' lengths. The header and global checksums are fixed. Preview: the message box draws the selected text in the game's font, read from the ROM. The font tiles and the box frame are found by their bytes, andtools/pokemon_gb_font_facts.pywrites their addresses to the facts. Two rows:contscrolls the box,paraclears it, and a line that does not fit shows a warning under the box. -zelda_lttp— Zelda: A Link to the Past (SNES) through its PC port snesrev/zelda3. Source: the workspace'ssource(1_unpack.batruns the port's ownrestool.pyon the USA ROM):dialogue.txt(397 messages, the port's[Name],[Waitkey],[Color 02]codes; a line break shows before[2],[3]and[Scroll], and a break typed without one gets the code of its line),font.png(the Ukrainian dialogue font, formatzelda3in the Font Editor: the English glyphs plus empty cells 95–119 for б–я and 128–148 for Б–Я, 114 cells more free; look-alikes use the Latin glyphs) andgfx\*.bin(8 graphics sheets with text — menu labels, item names, GAME OVER, title logo — in Tools → Textures assnes:2bpp/snes:3bpp); Translation: the same files undertranslation. Speakers, conversations and source lines come from the port's C code (context.json).2_build.batcompiles the translation as the port languageukofbuild\zelda3\zelda3_assets.datwith the port's own compiler (English stays as it is;zelda3.inigetsLanguage = uk) and buildszelda3.exewith Visual Studio Build Tools and SDL2 (one 2-line change to a copy ofmessaging.c: glyphs 128–255 through the escape code 0x86). Seen in the game: an edited intro line, font cells and the title logo. -donkey_kong_country— Donkey Kong Country (DKC1), Diddy's Kong Quest (DKC2) and Dixie Kong's Double Trouble! (DKC3), SNES USA v1.0 through their Switch PC ports. Source: the workspace'ssource(1_unpack.batreadsISO\rom.sfcand checks its SHA-256):text.json— strings read from the ROM in groups; every group is translated the same way. A group that holds a second copy of text is named "other copy" (for example "Other copy, French"). Each string keeps its ROM slot length, so a longer line is refused at build. DKC1 also has two raw 4 bpp graphic sheets. Translation:translation.2_build.batwrites the text intobuild\dkc1|dkc2|dkc3\rom.sfcand prints its SHA-256. The PC ports read the ROM at run time; DKC1 takes the SHA-256 throughDKC1_ALLOW_ROM_SHA256; DKC2 and DKC3 need a build with that hash in it. -donkey_kong_gba— Donkey Kong Country 3 (GBA, Europe). Source: the workspace'ssource(1_unpack.batreadsISO\*.gba):text.json— the 238 strings that the ROM's name table points to (bear, level, world and map names, page labels). Dialogue, fonts and textures are not opened yet. Translation:translation.2_build.batwritesbuild\Donkey Kong Country 3 (UA).gba; an edited string moves to free space at 0xFE4000 and its pointers change. The text is plain ASCII: a Ukrainian letter is written as UTF-8 bytes until the game has a font cell for it. -super_metroid— Super Metroid (SNES) through its PC port sm_rewrite. Source: the workspace'ssource(1_unpack.batreads the USA ROM):text.json— every text the game draws from tilemaps in six blocks (message boxes, file select and game over, options, pause map area names, intro, credits; 180 strings). The game has capital letters only and one 8-pixel cell per letter: a string is as wide as itswidth; tiles that are not letters are tags ([press1],[#304B]) and stay in place. Ukrainian look-alikes (А, В, Е, І …) use the Latin tile; the other Ukrainian letters have cells only in the message-box font and, on the intro's first screen, in 21 pairs of cells that held the Japanese subtitle art (removed 2026-10-12: those tiles are empty insource\gfx; a person draws the letters). The intro story pages have 21 cells of their own insource\gfx\story_window.bin(tiles 0x30-0x44 of the story window, loaded from a ROM block that is empty). The Japanese text switch is off in the port and in the ROM: the JAPANESE TEXT row of the options screen is blank in the ROM (it is not intext.json), and so is the Japanese picture beside it, and the controller_jp and special_jp layouts are not intext.jsoneither. Fonts (Font Editor,texture_gridover the raw tile sheets; ten entries: the intro story letters and the big first-screen letters shareintro_font.bin, the Ukrainian story capitals are onstory_window.bin, the HUD digits are a separate entry) and 13 text sheets (Textures,snes:2bpp/4bpp) are insource\gfx.2_build.batwrites a translated ROM (build\sm\sm.smc) and buildssm.exe. Context: the source line and function of each item in the port's C code; the intro is Samus's narration. -castlevania_cotm— Castlevania: Circle of the Moon (GBA, USA). Source: the workspace'ssource(1_unpack.batreads the ROM, padded to the 8 MiB No-Intro image):text.json— the game's one text table in 13 blocks (names, enemies, items, areas, abilities, prologue, story, ability messages, DSS card effects and cards, item descriptions, file and pause menus; 527 strings; control codes as{02}/{1D 44}tags,[]are letters of the game),font\font.bin(the text font in the Font Editor, formattexture_gridover GBA tiles: the English letters, the item names pre-drawn for the menus, and 66 empty cells labelled А–я for Ukrainian letters) andgfx\*.bin(56 sheets with words — title logo and copyright, Press Start, file and pause menus, DSS card names, mode names, endings, staff roll — in Tools → Textures as GBA 4/8 bpp tiles); Translation: the same files undertranslation.2_build.batwritesbuild\Castlevania - Circle of the Moon (UA).gba: an unedited translation gives the original ROM byte for byte; longer text, a used Ukrainian cell or a sheet that packs bigger go to the free space after the game data. Seen in mGBA: an edited menu line, a drawn Ukrainian cell, an edited glyph and a recoloured menu sheet. -castlevania_belmonts_curse— Castlevania: Belmont's Curse (Switch, 1.1.0 = v65536). Source: the English string tables of the Unity Localization bundle (45 tables, 2 751 strings,source\message\<table>.json), the two TextMesh Pro fonts offonts-latin(source\font\fonts-latin\, Font Editortmp_sdf), and the 29 interface and room bundles with shown text (source\ui\<bundle>.json, 7 628 strings), read from the update's RomFS over the base (sparse). Translation: the same files undertranslation;3_import_swuk.batimports the SWUK Ukrainian mod: its tables by table and id, and its font as the translation of the fonts.2_build.batwrites a LayeredFS mod (build\atmosphere\contents\0100BA4026E94000\romfs\...) with the rebuilt bundles and the catalog's new sizes. Not yet checked on a console; open items in the plugin's OPEN_ITEMS section. -pokemon_gsc— Pokémon Gold, Silver and Crystal (Game Boy Color, USA) through the pret decompilations pokegold and pokecrystal. Source: the workspace'ssource(1_unpack.batcopies every asm file with text: map dialogue, signs and trainers, Pokédex, phone calls, battle, item and radio text, the names of Pokémon, moves, items and places, menus; 797 files and 10,162 strings in Crystal, 921 and 7,621 in Gold/Silver, which share one project). A block is one asm file; a message shows as text (a line break is the next window line, an empty line a new window or Pokédex page; other commands as[cont],[text_ram wStringBuffer3]; charmap codes such as<PLAYER>and#stay). A save rewrites only the changed messages, so an unedited file stays byte for byte; speakers and conversations come from the map scripts. Fonts (gfx/font/*.png, formattexture_gridoverpng) and pictures with words (title logos, menus; formatpng) open in the Font Editor and Tools → Textures.2_build.batassembles the ROMs with rgbds (an unedited build gives the original SHA-1) and, for Crystal, the PC port suiCune with the same strings, font and pictures. Ukrainian look-alike letters print with the Latin glyphs; 24 lower-case letters have empty font cells to draw. Nintendo Switch: with the port "Alek's Ultimate NX Edition" cloned inport\alek-nx,2_build.batalso writes the SD-card folderbuild\switch\switch\Zelda3(the samezelda3_assets.dat, the language as the port's packlanguages\uk.z3lang, and the port's NRO built by devkitPro in WSL with the samemessaging.cchange); the port's own menu words are a second file of the project,nx_ui.txt(234 words; the port's menu font draws only A-Z, 0-9 and some punctuation, so a word with other letters stays English). Seen in Eden: the edited intro line, a filled upper-case cell and the title logo. ROM mode (Gold, Silver, Crystal; the USA.gbcdumps, identified by SHA-1): unpacking writes the text bodies totext/*.asmand keepsrom/base.gb; no make or rgbasm is needed. The census covers 6,645 of 6,651 text runs in Gold, 6,646 of 6,652 in Silver and 8,579 of 8,581 in Crystal 1.0 and 1.1 (the leftovers are one code or pointer byte before a string). Pointer tables and byte budgets work as in Red, Blue and Yellow, and the editor flags Byte budget exceeded. The 251 Pokédex entries of each game are units (name, height and weight, text): an entry that grows moves inside its own bank, because the engine takes that bank from the species number. Trainer names inside party records and strings inside menu structures stay in place, each with a byte budget. Ukrainian: the uppercase letters and ґ take the Latin cells D F G J L N Q R S U V W Y Z, Ä Ö Ü and d f g h k (decision of 2026-10-09), so the English text on those cells must be translated first. Preview: the message box draws the selected text in the game's font, read from the ROM. The font tiles and the box frame are found by their bytes, andtools/pokemon_gb_font_facts.pywrites their addresses to the facts. Two rows:contscrolls the box,paraclears it, and a line that does not fit shows a warning under the box. Build target Recomp package (Gen2Recomp) (Gold, Silver, Crystal) writes one folder per dump inGen2Recomped\<id>\: the translated ROM,recomp.json,README_UA.txtandset_gen2_gate_UA.py. The script adds the ROM's SHA-1 to the gate of your own Gen2Recomp checkout (thesha1Altline of its block inGameVersion.lua; it keeps a.bak). The README says how to run the game with LÖVE 11.5. No port code is written. A changed pret build also holdsset_gen2_gate_UA.pyand the build's.sym: the script writes a manifest with the new symbol addresses into your Gen2Recomp checkout (the importer reads the symbol addresses) and adds the ROM's SHA-1 to the gate. -metroid_prime_remastered— Metroid Prime Remastered (Switch, base game). The same formats and rules asmetroid_prime4. Source: the workspace'ssource(text\TEXT_*.msbt: 27 tables, 3,132 messages, named as in Metroid Prime 1, e.g.TEXT_ScansChozoRuins;font\FONT_*.rfont: Geneva, Deface and the title-screen Deface;texture\<package>\*.txtr: 771 textures); Translation:translation. Extra tag{image:TXTR_RStickIdle:1}(a picture by texture name).2_build.batwrites USEN and EUEN and every package that holds a changed asset into a LayeredFS mod. -zelda_ladx— Zelda: Link's Awakening DX (Game Boy Color, English v1.0 ROM). Source:1_unpack.battakes the ROM from the English ZIP; Translation: the same file undertranslation. Four blocks: 688 dialogues (one editor line per 16-character row of the text box, namesDialogNNN, symbols such as<flower>and<ask>, unnamed codes as{XX}) and the 56 credit rows of 18 characters. A row over its width is refused with its number; dialogues that share one place in the ROM must have the same text. A save fixes the header and global checksums; an unedited file stays byte for byte. The Font Editor opens the 160-cell dialogue font at file 0x3D000 (2 bpp, formattexture_gridoverraw); Tools → Textures lists the two title logos (DX and original) and the file and save menu tiles. Reference columns beside the English: Ukrainian GB v0.1 (decoded by a substitution solve, with confidence per letter) and SWUK (matched by words); they are shown, never written into the translation. Not yet: item labels as pictures, and the Ukrainian letters in the font (a reading of the Ukrainian font is a proposal for the translator). -zelda_las— The Legend of Zelda: Link's Awakening (Switch, 2019, base game v1.0.0 only). Source: a new project from the base game package (.nszor.nsp; the wizard asks forprod.keysonce). The unpackedromfsis the source, and only the MSBT files ofregionUS/USenare blocks: LAS Recomp runs the game in US English and reads no other slot. The other slots,regionEU/EUentoo, are reference columns: choose theunpacked\romfsfolder as the reference folder, and each message shows its text in every other slot, matched by label. Translation:translation, the same paths. The Ukrainian SWUK mod (written for v1.1.0) comes in withpython -m plugins.zelda_las.swuk <mod.zip> <romfs> <translation>(close the project first): each message matches by label intoregionUS/USen, and the report counts matched, kept-English and dropped labels per file. Font: the game draws its text with the console's Standard font, which the game files do not hold, so the build needs a TrueType font (.ttfwithglyfoutlines; a CFF font crashes the recomp) that has І і Ї ї Є є Ґ ґ, ʼ and □ (U+25A1: the game looks it up at start and crashes when the font has none). Put it infonts\of the project folder, or name a file or folder with"lasrecomp_font"inproject_settings.json. A free choice is DejaVu Sans (DejaVuSans.ttf); keep itsLICENSEbeside it. Noto Sans has no □ and does not work. The build refuses a font without these characters and names each file it tried. Build target LAS Recomp (romfs.bin) writesromfs.bin, the translated files underromfs\and the font asfonts\nintendo_udsg-r_std_003.ttf(with itsOFL.txtorLICENSE) in the build folder; its README says where to copy them. The version check reads the build id ofexefs\main; an update package is refused. Tags show raw as{tag:G:T:hex}. Checked in LAS Recomp beta_4 with DejaVu Sans: the Ukrainian title screen, file select, difficulty choice and name entry of the SWUK import show, with the L and R button icons, without a NintendoExt font dump (fonts\nintendo_ext_003.bfttfin the recomp folder). -silent_hill2_switch— Silent Hill 2 (Switch, Ukrainian). Build has the target sh23ds 3DS port: it writes3ds/sh23ds/events/*.msg(the translated message files) and3ds/sh23ds/ui/font.binandfont.t3x(the Ukrainian text font, made from the translation'sEE/sh2e/font/font000.tga). Copy that3dsfolder over the output of the sh23ds packer. It needs a DC-layoutsh2pc.exe(the Director's Cut build), and the packer's exe check must be bypassed in your local copy: (1) make a private copy of the sh23ds repository; (2) in the packer's file tools/sh2conv/pack.py, skip theDC_MD5comparison incheck(); (3) run the packer's make_pack.sh script with--strip-extras with SH2EE=0, the game folder holding the DC-layoutsh2pc.exeanddata/; (4) copy this target's3ds/sh23ds/eventsanduiover the packer's3ds/sh23ds; (5) copy3ds/sh23dsto the SD card root. -zelda_totk— Zelda: Tears of the Kingdom (Switch, checked on 1.4.0). Source: the game's dumpedromfswith only the language you replace inMals(USen.Product.140.sarc.zs), plusPack; Translation: the mod'sromfs, e.g.atmosphere/contents/0100F2C0115B6000/romfs. Every MSBT in the archive is a block (1,511 files, 47,799 messages); saving writes the archive back, compressed with the game's own zstd dictionary; an unedited project writes nothing. Needs Python 3.14+ andPack/ZsDic.pack.zsfrom the same romfs (or a copy in~/.picoripi/plugins/zelda_totk). Tags read{color:2},{icon:AButton0},{pause:30},{textSpeed:0.5},{autoAdvance:90}; a tag it does not know reads{tag:group:type:hex}. Speaker comes from the game's event flows (about 69% of the event lines; English names from the game's character list); the AI context names the message file, label, event flow and speaker. Line width: the dialogue font (Rodin B at 45 px,fonts/RodinNTLG-B_45.json) with a 1000 px talk window and 1290 px for cutscene subtitles (Dm*files), 3 lines per page. Load Reference Patch with the romfs (or itsMalsfolder) shows the game's other languages as references, Russian first. The fonts (Font/*.bfarc.zs) are scalable OpenType fonts: in the Font Editor a changed width becomes the glyph's advance and a redrawn cell replaces the glyph's outline with its pixels traced as squares (a blocky draft or a test mark; polish real letters in a font editor);python -m plugins.zelda_totk.font_glyphs <archive> <output>adds І і Ї ї Є є Ґ ґ to the fonts that lack them (drawn from the font's own I i Ï ï, mirrored Э э and Г г with an upturn). The workspace's2_build.batraises the resource size table for a grown text or font archive (python -m plugins.zelda_totk.restbl <game romfs> <mod romfs>does the same: the game's own rule, size rounded to 32 bytes plus 0x180 for text, 0x100 for fonts). -zelda_hwde— Zelda: Hyrule Warriors Definitive Edition -zelda_coh— Zelda: Cadence of Hyrule (Switch). Source: a folder with the game'slocalization.xml(base + update romfs) andfonts_bin; Translation: the mod'sromfs(atmosphere/contents/01000B900D8B0000/romfs, the base game's Title ID). All 1,809 strings, one block per id range (menus, dialogue, tutorials, items, enemies, places, cutscenes, credits, achievements); only the English strings are shown and saved, an unedited file stays byte for byte. Tags are the game's own ([c:b],[/c],[i:button_a],[s:9]);[n]shows as a line break,[p](next page) as[p]plus a line break. Speakers come from the string keys (zora4_1→ Zora). The Font Editor opens the six.bffntfonts; the text fontLoveBughas no Cyrillic, so it opens with a spare sheet for the Ukrainian letters.credits.xml(the credits roll: headings, companies and names, the same in every language) opens as one more block, "Credits roll". Tools → Textures lists the five text pictures oftextures_bin/texture_pack.bin(the title logo and the four pause-menu tab names; BNTX RGBA8 inside one zlib stream, written back into the pack) -zelda_ds— The Legend of Zelda: Phantom Hourglass and Spirit Tracks (DS, USA; workspacesZelda\Phantom Hourglass\DSandZelda\Spirit Tracks\DS). Source: the workspace'ssourcefolder (1_unpack.battakes the BMG messages of the English folder from the clean USA ROM, andstaff.bmgof Spirit Tracks); Translation:translation(whole BMG files;2_build.batrebuilds the.nds). Fonts: theFont/*.nftrfiles (Phantom Hourglass: 3-bit and 2-bit NFTR; Spirit Tracks: LZ10-wrapped NFTR) open in the Font Editor; a redrawn glyph updates its width and spacing unless the width was typed by hand. Pictures: the LZ10 NARC files with NCGR tiles and their NCLR palettes (menus, title and map pictures; Spirit Tracks' Download Play child pictures). Textures window entries are not wired yet. -zelda_fsae— Zelda: Four Swords Anniversary Edition (DSiWare, Europe). Source: the workspace'ssourcefolder (1_unpack.battakes it from the clean European dump:eu.kmsg,font_ltn.nftr, the manualmanpages_narc_eu.blzand the graphics); Translation:translation(whole files; the workspace's2_build.batrebuilds the DSi SRL and a CIA). The manual opens one block per page (Manual: page_01_00…; a line break is the page's own line break,[pic:N]a picture,[color:N]a colour; the manual is drawn with the console's font). All 220 messages, one block per id range (prologue, Chambers of Insight, items, Great Fairies, Vaati and the ending, in-game messages, system, credits); only the English (EU) slot is shown and saved, an unedited file stays byte for byte. The game's control codes are tags:[speaker:1],[wait:120],[next:90],[close],[choice],[center],[icon:N],[button:N],[num:N],[space:N],[color:N]; a line break is a real line break (the game does not wrap). Speakers come from[speaker:N](Zelda, Vaati) and the Great Fairy messages; widths from the font (225 px in dialogue, 168 px in in-game messages, 240 px in menus). Load Reference Patch with the Russian build'snitrofsfolder shows its Russian and the game's other languages. The Font Editor opensfont_ltn.nftrwith spare cells: a letter typed into one becomes a new character. The Textures window lists the menus and buttons (subtask_eu_en.cmp), the stage-select plates, GAME OVER letters, copyright line (zeldat_eu_en.bin) and the title logo (zeldat.bin) in the game's colours; an imported colour that is not in the picture's palette becomes the nearest one. The blockgame_over(main.arm9) holds the GAME OVER word, one line per letter (<character> <first tile> <W>x<H>, tiles of the GAME OVER letters picture) and the x of each letter; the letters picture also shows as 16 slots of 16x32 for narrow letters -zelda_albw— Zelda: A Link Between Worlds (3DS, Europe). Source: the workspace'ssourcefolder; Translation:translation.1_unpack.batwrites each Yaz0 SARC archive as a folder of its members (romfs\EU_English\FieldLight.szs\EU_English\Field.msbt), the path a translated member is saved to;2_build.batrepacks the archives into the LayeredFS mod. All 190 English MSBT files (4,956 messages: dialogue, items, places, characters, menus, HUD, credits), one block per file. A file that several archives hold with the same bytes (Field.msbtis in 7) appears once and the build writes it into each of them. Tags are named by the game's own message projectCTRJack.msbp:{PlayerName},{Color:Name}…{Color:Reset},{Wait:30},{ChoiceN:2},{IntNumberN:2:0:-1:None},{ItemName:hammer:Yes:No}; an unedited file saves byte for byte. Menu and HUD texts (Gm_*,Mn_*,Cm_*,Ed_*) take the width and line count of their text box from the message project; dialogue keeps to 344 px, 3 lines a page. The Font Editor opensMessageFont.bffntandHyliaFont.bffnt; the Textures window lists the 10 minigame and ending banners and the title logo -zelda_tfh— Zelda: Tri Force Heroes (3DS, Europe; the A Link Between Worlds plugin with this game's tags). Source:source; Translation:translation, archive members as folders the same way (romfs\Archive\EU\EUen\LanguageGame.szs\EU\Message\EUen\NpcKing.msbt). All 100 English MSBT files (3,382 messages: dialogue, signs, credits inLanguageGame.szs; menus, items, outfits, system inRegionBoot.szs), tags named by the game'sAlice.msbp({CostumeName:EightBit:No},{InsertMark:0},{Size:90}). Dialogue keeps to 344 px, 3 lines a page,{Size:90}text measured at 90 %; layout texts (Layout*), the opening story, credits, error and news screens have no width limit. The Font Editor opensMessageFont.bffntandHyliaFont.bffnt; the Textures window lists 63 images with text: timers, chat stickers and billboards (CTPK), layout banners (BFLIM), the boss title cards inTelop.ptcland the title logo inPictureStory_EU.bch(PICA textures at fixed offsets, formatraw) -mii_3ds— Tomodachi Life and Miitopia (3DS, Europe; the A Link Between Worlds engine with Tomodachi Life's tags). Source:source; Translation:translation;1_unpack.batwrites each archive as a folder of its members and2_build.batrebuilds the archive around the changed ones. Tomodachi Life: 1,038 English MSBT in the LZ11 darc archivesromfs\message\<Set>\<Set>_EU_English_LZ.bin(53,195 messages;ArcBaseis the shown text,ArcVoicethe same messages as the text-to-speech voice reads them), tags named by the game'sGame.msbp({Nickname:...},{Food:0:Name:Singular},{SingularPluralFood:...},{CS_Pause:500};Coloris R:G:B:A); the Textures window lists 2,467 BCLIM menu pictures and the title logo. Miitopia: 388 MSBT inromfs\eu\svn_message\EU_English.sarc(14,979 messages;LayoutMsg\are interface labels; the game's own tags stay raw{tag:G:T:hex}), the Font Editor opens the four BFFNT fonts ofsvn_font\EU_English.sarc, the Textures window 1,212 BFLIM layout pictures and the title logo. Both games draw their main text with the console's shared font, so messages have no width limit -bravely_default— Bravely Default (3DS, Europe, English setCommon_en). Source: the workspace'ssourcefolder;1_unpack.batwrites everyindex.fs+crowd.fspair as a folder of its files:romfs\Common_en\<Table>\crowd.fs\<Name>.btb(401 BTBF tables, 56,865 strings: event dialogue.txb, party chat.spb, tutorials.trb, menus.mtb, items, abilities, jobs, monsters, D's Journal, shops, subtitles; one block per table, one string per entry of its string table), the game fontromfs\Graphics\UI_en\Font\Font\root\font\hikari.bcfntand 4,403 English layout pictures (romfs\Graphics\UI_en\**\*.bclim: the title menu, chapter titles, tutorials). Markup stays as typed:[PCM1]-style names,$and%lsvalues. A table saves byte for byte when unedited and may grow.2_build.batpacks the changed files back into theircrowd.fs/ darc archives in a Lumaromfsmod. -bravely_defaultalso opens Bravely Second: End Layer (3DS, USA; workspaceBravely\Second\3DS): 1,284 English tables (Common_enand the EnglishScript\Scenefiles, 71,219 strings), both fonts (Graphics\UI\Font\FontandFontK) and 5,073 pictures inGraphics\UI.1_unpack.battakes the decrypted.3dsimage; members packed as deflate are unpacked and packed again. The Bravely Default PC fonts (Unity Font data exported byzt\bdffhd_pc.py, Font Editor formatttf) and its English pictures (PNG) are in the same lists. -kid_icarus— Kid Icarus: Uprising (3DS, Europe, English seteu). Source: the workspace'ssourcefolder;1_unpack.batwrites the LZ11 darc archives (.arc,.zrc, nested) as folders: 148 English MSBT files (25,833 messages; a member gets.msbtadded):eu\0.arc\resident\03.bin.msbt(menus, guidance, weapons, powers, idols),eu\stage\<stage>.zrc\stage\bin.arc\bin\msg_00.bin.msbt(in-level dialogue;msg_05is the English set of the ground sections; the other four languages are left out). Tags:{Size:N},{Color:R:G:B:A}. The Font Editor opens the two bitmap fonts (eu\00.arc\resident\04.bin,fnt.binof stage a2800); dialogue uses the console's shared font. The Textures window lists the 985 CGFX files (6,367 textures, title logomenu\000.zrc\...\bind\00.bcres) that the German folder overrides, so they carry text.2_build.batrepacks and compresses the archives again into a Lumaromfsmod. -final_fantasy_explorers— Final Fantasy Explorers (3DS, Europe, English). Source: the workspace'ssourcefolder;1_unpack.batdecrypts the game and writes its files plain (the game packs every file with BLZ and names it by a hash; the unpack finds the names from the program's strings): the two text tablesromfs\message\message_en.textres(6,891 messages) andmessage_home_en.textres(5,285 messages), the CFNT fontsromfs\font\font.bcfntandfont_localize.bcfnt, and the pictures: 347 layout archivesromfs\ui\*.darc(BCLIM), 545romfs\gfx\*.cgfx, the CTPK icons inromfs\gfxandmessage\messageIcon.tpl(4,812 pictures; 13 pixel formats). Control characters in a message show as{c01},{c05}and so on.2_build.batpacks the changed files with BLZ again and writes them under their hash names as a Lumaromfsmod. All text files, fonts and pictures write back byte for byte. -metal_gear_solid_3d— Metal Gear Solid: Snake Eater 3D (3DS, Europe, English). Source: the workspace'ssourcefolder.1_unpack.batwritestext\vox.mgssubs,movie.mgssubs,demo.mgssubs(JSON: the English subtitle lines of the three stream filesvox.dat,movie.dat,demo.datas hex bytes with their timing; 6,878 lines: radio calls, in-game voices, movies, cutscenes; one block per file) andtext\gcx.mgsgcx(JSON: the 9,684 English strings of the scriptsstage\*\scenerio.gcxandcodec.dat-- item and weapon help, codec call text, profiles, menu messages; each string once, one block per script). A script's strings sit in an encrypted resource table (LCG keystream seeded with the table stamp) in all five languages; the English ones are found by their words and written back with the other languages' strings giving room, so no file changes size. It also opens the 232.la2layout archives (darc) as folders: 43font/*.bcfntfonts and 1,064timg/*.bclimpictures (romfs\ui\<name>.la2\...; the_f _g _i _j _slanguage variants are left out), and the 15 layouts inside the stage.hpkarchives (146 pictures: staff roll, epilogue, title cards; zlib entries). Text is ASCII with1F xxescapes for accented letters (Latin-1 minus 0x7F); the subtitles break lines with80 7C, the scripts with0A; other bytes show as{xNN}; a project'stranslation_map.jsonmaps a letter to the glyph that draws it.2_build.batputs the changed lines back (a subtitle slot cannot move: when the English text outgrows it, the French to Spanish lines of that record lose their text), repacks the changed.la2and.hpkfiles and writes the whole changed game file into a Lumaromfsmod (LayeredFS replaces files, not parts of them). Strings inside the script byte code and the model textures of the.hpkarchives are not opened. -kingdom_hearts_ddd— Kingdom Hearts 3D: Dream Drop Distance (3DS, Europe, English). Source: the workspace'ssourcefolder;1_unpack.batopens the game's.rbinarchives (CRAR; English, French and German files share one name, the language is found from the crc32 of the path) and writes the English message filesromfs\message\en\<folder>\bin\ct*.ctd(69 files, 8,374 messages, UTF-16; button icons and colour switches show as{UE026}), the six CFNT fontsromfs\font\*.bcfnt, and the English pictures: 126.cttfiles (CTRT) and 54.l2dlayouts with pictures inside (romfs\menu\en, the title screen and menus),romfs\font\iconfont.ctt.2_build.batwrites the changed files back intomessage.rbin,menu.rbinandfont.rbin(compressed again like the original) as a Lumaromfsmod. New texture formatsctrtandl2d; all 1,575.cttand 248.l2dfiles of the game read and write back byte for byte. -castlevania_mof— Castlevania: Lords of Shadow - Mirror of Fate (3DS, Europe, English). Source: the workspace'ssourcefolder;1_unpack.batcopiesromfs\system\localization\english.txt(1,522 messagesKEY##text/KEY#Speaker#text: help boxes, menus, cutscene dialogue with its speaker, credits; one block, one string per message), the sevenromfs\system\fonts\*.bfontand the 40 CGFX picturesromfs\gui\textures\*.bctex(logo, English controls, icons). In the editor|is a line break and@[A]shows as{A}. The text is one Windows-1252 byte per character: letters the font has no byte for are written as?unless the project has atranslation_map.json({"Є": "Æ"}: the letter is written as the byte of that glyph and shown back as the letter). The Font Editor opens the fonts asmof_font(editing and moving glyph boxes inside the atlas; no room for new codes).2_build.batwrites the changed files into a Lumaromfsmod and the new sizes into a copy ofsystem\files.toc. -paper_mario_ss— Paper Mario: Sticker Star (3DS, Europe, English set). Source: the workspace'ssourcefolder;1_unpack.batcopies the 46messages\EU_English\*.msbtfiles (2,859 messages; dialogue per stagestgW_L,globalmenus and items, the sticker museum, credits) and unpacks the game's BLZ-packed files under their own names: the two CFNT fontsFont\pop_120px.bcfnz/pop_240px.bcfnz(Font Editor) and the CGFX picturesGraphics\ui\*.bcrez,Graphics\shared\ui.bctez,Effect\main\EUR_en.bctez(Textures window) plus the 50 language pictures ofLang\EUR_en.bin(logo, Press START, battle words) andNWTexture\EUR_en.bin\lg_welcomeas<archive>\<name>.bcres. Tags:{Size:N},{Color:R:G:B:A},{PageBreak},{Icon:mic_a:...},{Choice:...},{Variable:item},{Number:0:%d},{Wait:N}.2_build.batpacks the changed files again and rebuilds the texture archive and its_info.bininto a Lumaromfsmod. All 1,456 CGFX files of the game read and write back byte for byte. -ace_attorney_trilogy— Phoenix Wright: Ace Attorney Trilogy (3DS and Switch). Source:source; Translation:translation. 3DS: the 37 English scripts of the resource packpack.dat(script\sNN.bin, 37,757 messages), the two game fonts and 12,008 BCH pictures; Switch: the 106 English scriptsGS1|GS2|GS3\scenario\*_u.mdt(122,343 messages, own character codes). In a message\nis a line break,{page}waits for a tap,{wait:N}pauses,{xNNN}is a game character without a letter; a text may be longer or shorter than the original -code_of_princess— Code of Princess (3DS) and Code of Princess EX (Switch). Source:source; the text is compiled into the executable (exefs\code.binUTF-16,exefs\mainNSO UTF-32); a string is written in place and may not be longer than the original ({x08}ends a message);FDfonts andRTEXpictures -corpse_party— Corpse Party (3DS; Switch 2021). Source:source; the 20*_scriptlist.MSGfiles (128-byte message slots, 8,717 messages; a text may not outgrow its slots) and the quoted listsitemdatalist,deaddatalist,endinglist,playersettinglist; on the Switch the same files are TextAssets ofresources.assets(text\) -ever_oasis— Ever Oasis (3DS, Europe, English). Source: the workspace'ssourcefolder;1_unpack.batwritesromfs\data\Region_EU\English\main.gmsg(GMSG v3: 8,515 messages; names, menus, items, dialogue; tags{wait},{clear},{style:..},{cNN:..}, plural{c14:..|a|b|c}), the fontmain.gzf(GZFX, 470 glyphs) and 666 CTXB pictures of the GAR v5 archives (title, menus, dungeon names). A message may grow;2_build.batrebuilds the GAR archives in a Lumaromfsmod. -code_name_steam— Code Name: S.T.E.A.M. (3DS, Europe, English). Source: the workspace'ssourcefolder;1_unpack.batwrites the 76 message filesmess\EU_English(4,406 lines; the Fire Emblem Awakening message format, LZ13), 9 fonts (.bfnt,cbf_std.bcfnt) and 536 BCH files (938 pictures) of the RASI archivearc\EU_English.arcand the neutral folders.2_build.batpacks the changed files back into a Luma mod. -stella_glow— Stella Glow (3DS, Europe). Source: the workspace'ssourcefolder;1_unpack.batunpacks the IECP-packed.cmpfiles: the 18param\*.strtables (4,330 strings, any length), the 1,554event\*.flwscripts (24,800 dialogue lines; a line cannot be longer than the original yet), 7.bffntfonts and 3,202 BFLIM pictures of the SARC archives (indicator,picture,adventure,chara).2_build.batcompresses the changed archives again into a Luma mod. -fantasy_life— Fantasy Life (3DS, Europe). Source: the workspace'ssourcefolder;1_unpack.batwrites the LZ11 files ofromfs\_file_archive.binby their number in the archive (05774.l5txt): 2,527 English text files (both English sets; 238,614 strings: item, quest and dialogue tables, and rows with string pointers for menus;{c:XXXX.XXXX}tags), 12 fonts (.fnt, Font Editor formatl5_fnt) and 36.ztexpictures; the 354 UI containers.l5uiare unpacked too but are not opened as textures until a game check passes. A text longer than its place is cut to that place, with a warning in the build log; moving it to the end of the file is off, because it hung the game.2_build.batpacks the changed files back into_file_archive.binin a Lumaromfsmod. -digimon_redigitize— Digimon World: Re:Digitize Decode (3DS, Japanese release with the English fan translation). Source: the workspace'ssourcefolder;1_unpack.batwrites the files ofromfs\ARCV0.BIN(zlib) that hold text, by their path in the archive plus.btxt: 177KCAPcontainers with 8,861BTXtables (73,374 strings; one block per table; the tables' offsets are stale, the game reads the strings in order) and the 1,930GMIOtextures plus.gmio(RGBA8, RGB8, RGB565, L8). A string may change its length (the containers are rebuilt) except in two files with data behind the container.2_build.batpacks the changed files back intoARCV0.BIN(a file that no longer fits its slot goes to the end). -zelda_oot3d— Zelda: Ocarina of Time 3D (3DS, Europe). Source: the workspace'ssourcefolder (1_unpack.batcopiesromfs\message\eu\eu.qm, the fonts, the name-entry keyboardsromfs\menu\ltn16_*.list, the text textures andexefs\code.binthere); Translation:translation(whole files at their romfs paths;2_build.batmakes the LayeredFS mod). All 2,510 messages ofeu.qm(dialogue, items, signs, Navi, menus, file select, credits, Sheikah Stone visions, area names), one block per id range; only the English slot is shown and saved, an unedited file stays byte for byte. The control codes are tags named as in the N64 plugin:{color:red},{box-break}(followed by a line break),{item-icon:45},{button:A},{name},{two-choice},{center},{textid:0x0205},{mq}…{mq-else}…{mq-end}(normal and Master Quest text),{plural:1}…{plural-else}…{plural-end}. The four keyboard pages are one string each (keep the number of keys); the default player nameLink(code.bin) holds at most 4 letters. Load Reference Patch with the Russian build'seu.qm(or its folder) shows its Russian and the game's German, French, Spanish and Italian. The Font Editor opensltn16.qbf(dialogue) andsys8.qbf; the Textures window lists 137 text textures: menus, title, Boss Challenge, logo, area and boss title cards inside the scene and actor.zararchives, and the SOLD OUT sign and title models (textures inside.cmbmodels) -zelda_aoc— Zelda: Hyrule Warriors Age of Calamity. Source is the workspace'ssourcefolder (text\*.bin,battle\*.bin: the game's text cut out ofdata/LinkData2.bin, one file per table with all its languages); the English table is shown and saved, and the workspace's2_build.batpacks the changed files into the LayeredFS mod. The Font Editor opens every game font (font\latin.g1n, 11 sizes; the Japanese, Korean and both Chinese fonts); Tools → Textures lists the 33 pictures with English words (texture\0x<id>.g1t: logos, Victory/Defeat/Complete pop-ups, tutorial screenshots, language names).2_build.batwrites edited fonts and pictures into the mod as well. -story_of_seasons_3ds— Harvest Moon 3D: A New Beginning, Story of Seasons, Story of Seasons: Trio of Towns (one engine: XBB archives ofPAPArecord tables) and Harvest Moon 3D: The Tale of Two Towns (the older DS engine), all 3DS Europe. Source: the workspace'ssource(1_unpack.batdecrypts the .cia): one.papafile per text table of every XBB archive (romfs\Msg.xbb\*.papa— dialogue, events, tutorials, menus;romfs\GameData\*.xbb,Chara\AvatarData.xbb— item, crop, animal, recipe, place, title and avatar names; A New Beginning: 390 files, 47,267 strings; Story of Seasons: the English setMsgGB.xbb, 430 files, 42,862 strings; Trio of Towns:en\Msg.xbband the nesteden\DataText.xbb.gz\*.xbbtables, 844 files, 43,899 strings — the other languages' files are left out), or one.mesfile per entry of the Tale of Two Towns packsromfs\mes_data.bin\andevent_mes_data.bin\(568 files, 30,716 strings, the English set). A file is one block; which columns of a record table are text is read from the data; markup such as<MYNAME>stays text, control characters show as{0D}, Tale of Two Towns codes as{1000}. Saving rebuilds the table (unchanged fields keep their bytes) and2_build.batpacks the tables back into their archives and packs. Fonts: the BCFNT / BFFNT fonts (A New Beginning'smarugothic.bcfntand Trio of Towns'mainfont.bffnthave Russian Cyrillic, Ґ Є І Ї ґ є і ї missing; Story of Seasons' fonts have none) and the Tale of Two Towns 8x16 cell font infont_data.bin(formatcells; cells 159–224 are reserved for the Ukrainian letters and the text codec writes them). Pictures: the layout.bclim/.bflimfiles as folders of their.arcarchives (darc, or Trio of Towns' gzipped SARC; 3DS BCLIM and BFLIM pictures read upright without a parameter;params.flipturns a picture over after its crop, and no plugin sets it), the CTPK logos and icons. Speakers come from the table names (Talk_ALLEN). Seen in Azahar: an edited string, a filled glyph and a framed title picture in all four games. Story of Seasons and Trio of Towns are seed-encrypted:1_unpack.batreads the title seed from_shared\3ds_keys\seeds. -xenoblade_de— Xenoblade Chronicles: Definitive Edition (Switch, 1.1.1). The Xenoblade 2 engine again, with thexenoblade_2rules. Source: the workspace'ssourcefolder (1_unpack.batconverts the .nsz files and decrypts base + update; the game keeps every file loose in its romfs, sosourceis the romfs root): the 60 English legacy BDAT tablesbdat\gb\*_ms.bdat(58,336 text cells), the seven LAFT fontsmenu\font\*.wifnt(zlib-packed in anxbc1block in the game, plain insource, packed again by2_build.bat) and the layouts with picturesmenu\image\*.wilay(BC1 / BC3 / BC7 / RGBA8 textures;menu\image\tutorial_gbhas the English tutorial pictures). Translation:translation; the mod replaces the loose files. -miitopia_nx— Miitopia (Switch, 1.0.0 + update 1.1.0): the 3DS game's engine again, with themii_3dstext rules. Source: the workspace'ssourcefolder (1_unpack.batconverts the .nsz files, decrypts base + update withprod.keysand opens the archives as folders):eu\svn_message\EU_English.sarc\**\*.msbtandus\svn_message\US_English.sarc\**\*.msbt(412 files each; 33,164 strings with both slots), the four BFFNT fontsFontInfo/FontCaptionof both slots (formatbffnt) and the combined BNTX picture sets of the 169 layout archivescmn\lyt\**\*.arc.szs\timg\__Combined.bntx(formatbntx). Translation:translation;2_build.batrebuilds each archive around the changed members into a LayeredFS mod. -one_piece_uwr— One Piece: Unlimited World Red (3DS, Europe). Source: the workspace'ssourcefolder (1_unpack.batdecrypts the .cia and opens the.jarcarchives as folders): the GanbarionjMSGtables with an English block —message_eu\msg_en.jmsg(9,320 strings),system.jmsg,tutorial.jmsg, the staff roll, the 288 cutscene and talk subtitle filesevent\**\*_en_eu.jarc\_talkconv_msg.bin, the quest texts and the character voice lines (426 files, 12,250 strings; the other languages of a multi-language file stay untouched); colour commands show as{c:..}tags. Translation:translation;2_build.batappends each changed member to its archive (zlib again like the original) and writes a Luma / Azahar mod. The Font Editor opens the seven.jfntfonts (formatjfnt, A8 glyph grids) and Tools → Textures the 7,706.jtexpictures ofmenu_eu(formatjimg: ETC1A4 and ETC1). The Switch Deluxe Edition uses the same plugin:1_unpack.batopens the CRICPKarchivesrom0.cpk..rom4.cpkas folders (source\romfs\romN.cpk\...;rom4text and fonts,rom0/rom1/rom2jARC text,rom3pictures; pictures are linear RGBA8). -luigis_mansion_2— Luigi's Mansion: Dark Moon (3DS, Europe). Source: the workspace'ssourcefolder (1_unpack.batdecrypts the .cia and opens the.dict/.datapairs ofart\feas folders): the NLOC text tablesenglish.data\strings.nloc,ukenglish.data\strings.nlocandrussian.data\strings.nloc(1,935 strings each: dialogue, menus, hints;{p}breaks,{tp:..},{clr:..}tags; default target slot isrussian, which a console set to Russian loads;english/ukenglishare alternatives) and the staff rollcredits.credits(291 text lines ofcredits.txt). Translation:translation;2_build.batrebuilds each changed pair (the changed member is appended and the dict entry points to it) into a Luma / Azahar mod. The Font Editor opens the five fonts of the three font bundles (Alor 15 and Alor Narrow, DFGKyoGeki 18 Russian and Japanese, NTLG-DB 9;nlg_font) and Tools → Textures the 16 front-end texture bundles (nlg_tex, ETC1 / ETC1A4). Luigi's Mansion 2 HD (Switch) uses the same plugin: NLOC version 2 tables (2,109 strings per slot), the fourfebundle*_resbundles asbundle.nlgh(DXT1 / DXT5 pictures, five fonts with 1024 x 1024 pages). -monster_hunter_stories_nx— Monster Hunter Stories (Switch). Source:1_unpack.batopens the English message archivenativeNXx64\archive\message_R\message_all_eng.arcas a folder of 685.gmdtables (36,797 strings;<COL ..>,<SPNM ..>,<PAGE>,<ICON ..>markup are tags) and copies the Englishgui/lyt.texpictures and.gfdfonts. Translation:translation;2_build.batappends each changed table to the archive and writes a LayeredFS mod. The Font Editor opens the two English raster fonts and three icon fonts (mt_font), Tools → Textures the Switch.texpictures (mt_tex: BC1, BC7, RGBA8). -rune_factory_4— Rune Factory 4 (3DS, USA). Source: the workspace'ssourcefolder (1_unpack.batdecrypts the .cia): the game's EnglishTEXTtables at their romfs paths —script\rf3mc.eng(99,572 dialogue and event lines),text\*.engandtextAndData\text\*.eng(items, NPCs, quests, skills, menus, map names; 107,220 strings in 25 files, UTF-8, saved byte for byte when unchanged);@…@variables and the+emphasis mark show as tags. Translation:translation;2_build.batwrites changed files into a Luma / Azahar mod. The game has no font file (it draws with the console's shared font, like Kid Icarus: Uprising); Tools → Textures lists the 495 CGFX.bctexpictures of the menus, dialogue window, save slots and staff roll (every one saved byte for byte). Rune Factory 4 Special (Switch, workspaceRUNE_FACTORY_4_SPECIAL_SWITCH) opens with the same plugin: the same 25 English tables (116,980 strings;rf4TxtShinkonHelpis new) and 377 BC7.bntxpictures at the same paths. -yokai_watch— Yo-kai Watch (3DS, USA). Source: the workspace'ssourcefolder (every English text table*_en.cfg.binat its path inside the game archiveyw1_a.fa, the fontsfnt\*.xf, the English menu textures); Translation:translation. The game's codes show in curly brackets ({PAGE}— next page of the 2-line message window,{PNAME01}— the hero's name,{CG}…{/C}— colour); story files exist twice,_m(Nate) and_f(Katie). Japanese leftovers and passwords are not shown; an unedited file stays byte for byte. Speakers come from the game's speaker tables in the workspace'smetafolder. The Font Editor opensft_nrmandft_sml(formatxf, real Ukrainian letters); the Textures window lists 594 English textures (imgc). The workspace's2_build.batrebuildsyw1_a.fainto the LayeredFS mod. The New Project wizard makes a Yo-kai Watch 1 project straight from the game too: the 3DS image (USA) or, for Switch, the base game and its update (.nspor.nsz; the wizard asks for the Switch key file). It writesunpacked\sourceandunpacked\metathe way1_unpack.batdoes; a Switch project made this way has the game's Japanese text (the English fan mod is not added). Yo-kai Watch 3 (EUR, workspaceYOKAI_WATCH_3) opens with the same plugin: its English text is indata/txt/ev/enand the archiveyw_lg_en.fa; the hero of a line comes from its voice clip ({PV#pv_c001000_23}: Nate). Its Textures window lists all 5,817 English textures (title logo, menus, telops, help, captions, signs; loading them takes several minutes). Yo-kai Watch 2: Psychic Specters (EUR cartridge, workspaceYOKAI_WATCH_2) opens with the same plugin: the British English tables*_engb.cfg.bin(4,737 files, about 104,600 lines; event text indata/txt/ev/engb, archiveyw2_lg_engb.fa), Nate or Katie by the_m/_ffile; the Russian fan translation built into that image (the workspace'sreferencefolder) shows in the Russian (RU) reference tab, never as the source. The Textures window lists its 2,683 English textures (11 IMGC pixel formats). Yo-kai Watch 1 for Switch (Japanese game, workspaceYO_KAI_WATCH_SWITCH) opens with the same plugin: the source text is the English fan mod written into the Japanese tables (*_ja.cfg.bin, 2,014 files, about 48,000 lines, and the 13,800 lines the mod left Japanese, to translate from Japanese: each block that has them lists them under its category "Japanese source"; a Shift-JIS table that gets Ukrainian text is saved as UTF-8); the Font Editor opensft_nrm,ft_lrg,ft_smlanddbg(Switch XF: A8 texture); the Textures window lists the menu, title, telop, help and caption images (IMGN, the Switch IMGC: RGBA8, RGBA4, LA8, A8, BC3). Width limits: every Yo-kai game has them. They come from the game's English text, measured with the game's own main font (scripts/build_yokai_layouts.py). So a line too wide for a Switch window is flagged as on the 3DS, also when it is a translation from the other platform. A letter the font does not have counts as an average letter of that font. Yo-kai Watch 4++ and Yo-kai Academy Y for Switch (Japanese games, workspacesYO_KAI_WATCH_4_SWITCH,YO_KAI_ACADEMY_Y_SWITCH) open with the same plugin: the source text is each game's English fan mod in the Japanese tablesdata/common/text/ja(2,316 tables, about 38,500 lines; 1,672 tables, about 19,600 lines — the lines the mods left Japanese, about 550 and 12,300, are shown too, under each block's category "Japanese source"); colour codes[CR1]…[C]and pictures[$gaiji_…]are tags; the Font Editor opens the G4 fonts (font_ja,font_def, Academy Y alsofont_ja2and a second style; each with its furigana font); the Textures window lists the menu, title, telop, help, caption and button pictures (G4TX: RGBA8, BC1, BC3, BC7). -layton_3ds— Professor Layton and the Miracle Mask, Professor Layton and the Azran Legacy and Professor Layton vs. Phoenix Wright: Ace Attorney (3DS, EUR; workspacesLAYTON_MM_3DS,LAYTON_AL_3DS,LAYTON_VSPW_3DS). Source: the workspace'ssourcefolder: the English XSCR scriptstxt\uk\<folder>\*.xs(one block each; folders 01–09 story, 15 opening subtitles, 30 examine lines, 40 journal, 50 puzzles, 52 puzzle help, 80–83 minigames; vs. Phoenix Wright: 04 trials,cmncourtroom) and the definitions fileres\uk\*_def*.xs(puzzle titles and types, minigame names, the game title), the fontsfnt\[eu]\nrm.xfandsml.xfand every image pack of theukfolders; Translation:translation. A line keeps the game's markup (<T>,<W8>,<M4/2/1>,{'e}for é); Japanese leftovers and empty lines are not shown; an unedited file stays byte for byte, an edited one is written again (CRLF in vs. Phoenix Wright). The speaker comes from the script's Japanese label (the main cast is shown in English). The Font Editor opens both XF fonts; the Textures window lists the title screen, menus, chapter titles, help pages, puzzle pictures and pop-ups, minigame screens and story pictures (IMGC in.xifiles and inside.xa/.xp/.xy/.xcpacks). The workspace's2_build.batrebuilds the XFSA (lt5_uk.fa,vs1.fa) or ARC0 (lt6_uk.fa) archives into the Luma mod. Layton's Mystery Journey (3DS, EUR; workspaceLAYTON_MJ_3DS) opens with the same plugin: its English scripts aretxt\en\**\*.xsinlt6_en.fa(1,664 files, about 14,900 lines), written in UTF-8 so Ukrainian letters are stored as they are (only the fonts lack them); the logo ismenu\en\ctr\title_a.xc. The Switch Deluxe Edition (workspaceLAYTON_MJ_NX, LayeredFS mod) keeps the same files loose in the RomFS:txt\en\**\*.xs, the US spelling_us\txt\en\**,res\lt6_def.xs, the fontsfnt\[eu]andfnt\[na](nrm, sml, lrg) and the pictures of theenand_usfolders (IMGN / IMGA); edit both thetxt\enand the_usfile of a chapter (Eden's region USA reads_us). -layton_ds— Professor Layton and the Curious Village, Pandora's Box, Lost Future and Spectre's Call (Nintendo DS, EUR; workspacesLAYTON_CV_DS,LAYTON_PB_DS,LAYTON_LF_DS,LAYTON_SC_DS). Source: the workspace'ssourcefolder: the game's own files at their NitroFS paths (Spectre's Call: at their paths in the threelt4_*.faarchives), still compressed as the game keeps them; one block per file, only files that show text. Curious Village:data\otext\en\*.txt, theetext/htext/itext/otext/qtext.pcmpacks and thedata\script\**\*.gdsscripts (puzzle titles and questions, hotel room lines, event talk); Pandora's Box:data_lt2\event|nazo|place|rc\en\*.plzand therc\en\*.dlzdatabases; Lost Future:lt3\txt\uk\*.cpck,lt3\rc\nazo\uk\*.cdat(puzzles),lt3\rc\**\*.cpck/.cbin; Spectre's Call: theGSD1scriptstxt\uk\**\*.cbandres\uk\*.cb. Translation:translation(whole files). A line keeps the game's markup (<T>,<W>,@p,<'e>); an unedited file stays byte for byte; a longer string is written again with the pack's offsets and the.gdsjumps moved; a fixed-width database field refuses a longer string. The Font Editor opens theNFTRfonts (Curious Village, Pandora's Box, Lost Future) and the Spectre's CallGFNTfonts; none has a Ukrainian letter yet (52 Latin letters each). The Textures window lists the title, menu, puzzle and map pictures: backgrounds (.arcBG), animation atlases (.arc/.arj), Lost Future.cimg/.cani(LIMG) and Spectre's Call.ci/.ca(GFSP: 4-bit, 8-bit, A5I3, A3I5). The workspace's2_build.batrebuilds the ROM (NitroFS laid out again, the GFSA archives of Spectre's Call patched member by member). The Android HD ports for Switch homebrew (workspacesLAYTON_CV_HD_NX,LAYTON_PB_HD_NX,LAYTON_LF_HD_NX;switch.7zof the port) use the same plugin: Source is the port'sassetsfolder at the same paths (the English foldersdata-en,data-EU,data-en-EUanddata): loose UTF-8.txt/.lbin/.datfiles, PNG pictures and the bitmap fontdata\font\font.dat(the Font Editor adds letters: the engine reads UTF-8). The build writes the changed files tobuild\sd\switch\<dir>\assetsfor the SD card; Eden's homebrew launch has no process handle, so the loader of these ports stops there.layton_mr(Layton Brothers: Mystery Room, workspaceLAYTON_MR_NX) opens the strings of the Unity data files exported by the workspace script ({"strings": [...]}per data file) and their textures (PNG). -eternal_darkness— Eternal Darkness: Sanity's Requiem (GameCube, USA). Source: the workspace'ssource\game(1_unpack.batdecompresses the disc's*SK_ASC*files there):EBootPak.bin(menus, items, spells, runes, system messages),EBookPak.bin(Tome pages, save menu),EMemcardText.bin,RmTxt*.cmp(room texts),Chars\cin*\cin*.bin(cinematic subtitles) andsys\main.dol(chapter titles of the cinematics list, written in place, each in its slot); Translation:translation\game. Each string table with text is one block (about 4,270 strings); control codes show as{ay}(colour),{i21}(button),{s0.6}(scale),{~p}(the player's character); text is written in cp1251, so Ukrainian letters use the free font cells 0x80–0xFF (the build patches the game to read them). The Font Editor opens both fonts ofEFonts.tplwith their widths inEBootPak.bin(formateternal_darkness); Tools → Textures… lists the title screen with the logo, menus, credits, Tome, maps and boot screens (TPL CMPR, I4, I8; the game stores them upside down).2_build.batcompresses the changed files again. -mgs_ts— Metal Gear Solid: The Twin Snakes (GameCube, USA). Source: the workspace'ssource\textfolder (common\codec.dat— every codec call;stage\*.gcx— menus, briefing files, item descriptions, memory-card messages, credits;*\demo.subs,common\vox.subs,common\movie.subs— subtitles of cutscenes, in-game voices and movies, taken out of the disc's stream files); Translation:translation\text. Every string is stored in six languages; only the English ones are shown (found by the voice clip a codec line plays, else by language detection), identical codec tables are one block and a save writes all their copies. Longer text takes the room of the French–Spanish strings the US game never shows; an unedited file stays byte for byte. Speakers come from the game data (codectalkcommands and subtitle records name the character). The Font Editor opens the text font (font\*.fnt, formatmgs); Ukrainian letters live in its upper half through the plugin'stranslation_map.json. The workspace's2_build.batputs the pieces back intostage.dat,demo.dat,vox.dat,movie.dat,codec.dat. The game breaks a row that is too wide by itself, in the middle of a word, so the width check has no slack: a codec row may be 509 font units wide (measured in the game's codec box), a menu or item text row as wide as the widest English row of the neighbouring strings (one script mixes option help, item descriptions and memory-card dialogs, each in its own window). Credits, titles, HUD plates and menu words are pictures, not text (TWIN_SNAKES\reports\visible_text_inventory.md): Tools → Textures… lists them fromtexture\<stage>.stage(stages ofstage.datthe workspace copies out; the texture packs read as TPL) and writes the translation copy; the build puts each changed pack into every stage of both discs that has it.common\mgso.rel(the game module) gives one block of HUD words — LIFE, O2, the item and weapon box labels, boss names: capital letters only, one byte each and never longer than the word's slot. Ukrainian letters shaped like Latin ones use those; the others use ASCII cells no HUD word uses, which the workspace redraws as Ukrainian letters in the HUD font (tools\hud_font.py). The Font Editor also opens the glyph grids the game draws HUD words, menu values, results and codec digits from (HUD font in three sizes, menu and results fonts, digit strips; formattexture_grid, saved into their texture packs).disc1\opening.bnr,disc2\opening.bnrgive the disc banner texts (the name in the GameCube menu and Dolphin: Latin letters only) and the banner picture in the Textures window. -paper_mario_gc— Paper Mario: The Thousand-Year Door (GameCube, USA). Source: the workspace'ssource\files\msg\US(one.txtper area,global.txtfor menus, items, badges, battle text and tattles); Translation:translation\files\msg\US. Tags show in braces ({k},{p},{wait 250},{col c00000ff});global.txtopens as blocks by kind (item and badge names, enemy names, battle tattles, descriptions, menus); Japanese leftovers in the US files are left out and saved unchanged; an unedited file stays byte for byte. Speakers come from the game's event scripts (the NPC eachevt_msg_printpoints at, plugincontext.json), tattles are Goombella's; width limits per window kind are the widest English line of that kind in font units. The Font Editor opens the text fontf\papermarioset_US.bfn(and the disc's other two,_EUand_JPN); Ukrainian letters use Latin-1 slots no English text draws (translation_map.json,translation_map.md). The Textures window lists the title, file-select, pause-menu, battle and sign textures with English text. -paper_mario_nx— Paper Mario: The Thousand-Year Door (Switch, 2024). Source: the workspace'ssource(1_unpack.bat: base + update):msg\EU_English\*.msbt(all text, 46 files, ~14,900 messages), the fontsfont\*.bffnt/*.bfotfand the UI texturesui\<folder>\*.bntx(taken out of the game's.bfres.zst); Translation:translation. Tags are named from the game'smsg.msbp({wait:250},{key_wait},{PageBreak},{Color:255:255:255:204},{center}…{/center}); an unedited file stays byte for byte. The Font Editor opens the eight fonts (the outlined MARIO fonts are BC5: red is the fill, green the silhouette); the Textures window lists the title logos and every UI texture (BC1, BC3, BC4, BC5, BC7, ASTC 8x8).2_build.batputs edited text into both English folders (EU and US) of the LayeredFS mod and compresses fonts and textures back. -ff12rw— Final Fantasy XII: Revenant Wings (Nintendo DS, Europe AXFP; the English set is translated, the other four languages stay). Source: the workspace'ssourcefolder, filled by1_unpack.batwith the English text filesdata/**/E/under their NitroFS paths (menus.btx, crafting talk.btk, reports, log, lore and tutorials.brt, airship talks.hscd, characters, items and abilities.bch/.bit/.bsk, the world map.bmw, the opening scroll.bst, event dialogue and mission objectives in.dpkpacks: 14,398 strings), the fontsdata/FontPack.dpkand the English pictures; Translation:translation. Text is Windows-1252:\nis a line break,[page]a new box,[xNN]a colour or icon byte; a longer text lays its file out again, an unedited file stays byte for byte. The Font Editor lists the four NFTR fonts ofFontPack.dpk; the Textures window lists ~200 tile sheets (title logo, company logos, mission and chapter titles, menus, mini maps, tutorials).2_build.batputs every file oftranslationback into the ROM. -ffta2— Final Fantasy Tactics A2: Grimoire of the Rift (Nintendo DS, Europe A6FP; the English set is translated). Source: the workspace'ssourcefolder:1_unpack.battakes the five English message packs out ofmaster/pc.binas.a2msgfiles (menus, names and descriptions in 55 tables, quests, rumours, notices, event dialogue: 33,198 strings), the fontmenu/font/UseMoji_image.binwithFontWidthTable.bin, the menu picturesmenu/nc_rom/us/nc.a2pakand the title logoeffect/common/c_all_title_eu.efx; Translation:translation. Codes are glyphs (ASCII, accented Latin, symbols);\nbreaks the line,[page]and[end]end a page or text,[CA:01]-style tags insert values, icons and choices,[xNN]is a glyph without a character. The Font Editor lists the font (formatffta2); the Textures window lists the title and company logos and the auction and world map effects (formatffta2_efx) and 11 menu tile sheets.2_build.batwrites changed members intopc.bin(in place when they fit, else at its end) and rebuilds the ROM. -rock_n_roll_racing— Rock N' Roll Racing (SNES, USA). Source:source\text\rrr_text.rrrtext(223 strings of the ROM text table, each with its byte budget) andsource\rom\(the ROM copy); Translation:translation. A line break is a new line;[80]..[8F]are picture codes and stay as they are. A translation longer than its budget is refused at build time. Build: a patched ROM and an IPS patch (header checksum fixed). Not yet: the font. -ffta_gba— Final Fantasy Tactics Advance (Game Boy Advance, USA AFXE). Source: the project'sunpackedfolder: New Project (Project Manager) recognises the ROM and writesrom/(the copy the build starts from),text/*.fftatext(menus, items, names, missions and notices, story events and battles: 9,543 strings in 104 blocks: 10 pointer tables and 94 offset tables) andfonts/font.bin(the 16x16 font with its widths); Translation:translation. A space and a line break are plain text;[wait],[next],[clear]wait, turn the page and clear the box (after a[clear]inside a text the editor starts a new line);[crn:XX]and[var:XX]insert a name or a number;[choice:XX]starts a two-way choice whose answers end with[sep];[sp:XX]is a space of XX pixels;[xXXXX]is a character without a letter in the editor. Ukrainian letters use the kana cells of the font: the Font Editor (formatcells) shows them under their Ukrainian names, and the translator draws them there. A character with no code is refused by name when you save. The build target Translated GBA ROM writes edited strings and the edited font; a changed string or table goes after the end of the ROM and its pointers follow it. -infinite_space— Infinite Space (Nintendo DS, Europe C6CP). Source: the workspace'ssourcefolder, filled by1_unpack.batwith the NitroFS files: the scriptdata/Event/SpaceShip.scx(every line of the game's text: dialogue, menus and choices of the script, tutorials; the editor lists the ~5,000 lines that hold letters, 100 a block), the screensdata/Cg/Bgd/*.bgd, the menu spritesdata/Cg/Obd/*.obdand the textures with textdata/Cg/Texture/*.tex; Translation:translation. Letters are the game's 78-glyph list (0-9 A-Z a-z ! ? - ・ = / . , ( ) “ ” : ’ &); a line break shows as a new line,[\r]opens the next window,[\c,1,12]-style commands (speaker, portrait, events) stay as they are; a longer line lays the script out again. The Font Editor lists the 8x16 dialogue font (formatis_obd,Obd/T000OBJ.obd: no room for more glyphs); the Textures window lists the title logo (Bgd/title.bgd,Bgd/TITLE000BG1.bgd), every screen and sprite sheet (formattiles) and the opening text and ship plans (formatis_tex).2_build.batputs every file oftranslationback into the ROM. -dq9— Dragon Quest IX: Sentinels of the Starry Skies (Nintendo DS, Europe YDQP; the English set is translated, the French, German, Spanish and Italian sets stay). Source: the workspace'ssourcefolder, filled by1_unpack.batwith the GPC2 archives (*.gp2) that hold English members: NPC talk, signs, quests and story events (*_en.bin), menus, items, monsters, spells, skills and their descriptions (*_en.nat) -- 60,222 strings in 1,537 files -- plus the credits, the name keyboards, the fontsdata/pack_lv5/fi_*.bin+fd_*.binand the picture packs; Translation:translation. A file is one archive, a block one English member; the game's<tags>show as{tags}({PAGE}a new box,{1}the apostrophe,{,}the comma), the game's\nas a line break. A longer string lays its member out again and repacks the archive; an unedited archive stays byte for byte. The Font Editor lists both fonts (formatdq9); a letter typed into one of the 66 empty cells becomes a new glyph and the game draws it where the text has that letter (UTF-8). The Textures window lists the title logo (menu/bg_up*.gp2), the menus and the album pages (formatstilesanddq9_spr).2_build.batputs every file oftranslationback into the ROM. -twewy— The World Ends with You (Nintendo DS, Europe AWLP). Source: the workspace'ssourcefolder, filled by1_unpack.batwith every game file but the sound under its NitroFS path; the text isApl_Fuk/mestxt.mes(the game'smestxt.bin: all 25,233 messages, 500 a block); Translation:translation. Codes are glyphs of the text font (ASCII, accented Latin and symbols show as characters, other glyphs as[g:XXX]); tags[color:1]…[color:4],[/color],[num],[value],[name]; an unedited file stays byte for byte. The Font Editor lists the four fonts ofApl_Fuk/Grp_Font.bin(formattwewy: 10x10 text font, 10x12, two 16x16); the Textures window lists ~300 tile sheets of menus, titles, credits, location titles and copyright screens in the game'spackarchives (sprites shown as a plain tile sheet).2_build.batmakes the message indexmestable.binagain and rebuilds the ROM. -castlevania_gba— Castlevania: Harmony of Dissonance (GBA, Europe ACHP) and Aria of Sorrow (GBA, USA A2CE), one plugin for both. Source: the workspace'ssourcefolder, filled by1_unpack.batfrom the ROM (the trimmed dump inISOplus its cut padding, checked against No-Intro):text/strings.cvtext(every English string as raw bytes: HoD 683, AoS 965 -- the French and German text of the AoS ROM stays as it is), shown in blocks by kind (story, item, enemy and soul names and descriptions, menus, sound mode, area names); Translation:translation. Tags:[face:XX]portrait,[name:XX]speaker,[insert:XXXX]a name the game fills in,[page]/[box]/[wait]/[clear]/[scroll]text-box steps,[A][B][L][R][UP][DOWN]buttons,[num],[xHH]a code with no letter; an unedited string keeps its bytes. Ukrainian letters: AoS has none, each of the 66 gets a blank font cell; HoD has the Russian letters, Ґ Є І Ї ґ є і ї get blank cells (draw them in the Font Editor). The Font Editor lists two 1-bit fonts per game (formatcv_gba: 8x12 text font, 8x8 small font; AoS widths are editable); the Textures window lists the text pictures (title logo, menus, area names, staff roll; unpacked 4bpp tiles, shown in grey).2_build.batwrites a longer string or picture into the free end of the 8 MB ROM and moves its pointer. -castlevania_ds— Castlevania: Dawn of Sorrow (ACVE), Portrait of Ruin (ACBE) and Order of Ecclesia (YR9E), Nintendo DS, USA; one plugin for the three. Source: the workspace'ssourcefolder, filled by1_unpack.batunder a folder per game (dos,por,ooe):<game>/strings.cvdstext(the game's whole string table as raw bytes: 1,291 / 1,865 / 1,893 strings), shown in blocks by kind (character, item, enemy, soul / skill names and descriptions, system, menus, quests, music and area names, library or term list, events = dialogue); Translation:translation. Tags:[name:XX]speaker,[face:XX]portrait,[wait],[box](new text box) and[same](new page, same speaker) — both shown with a line break after them —,[next],[choice],[endchoice:XXXX],[color:XX],[cmd:XX], buttons[L][R][A][B][X][Y][LEFT][RIGHT][UP][DOWN],[xHH]a code with no letter;[]of the text show as[]. An unedited string keeps its bytes. Ukrainian letters: the fonts have none; each of the 66 takes the cell of an accented letter the English text never uses (draw them in the Font Editor; Order of Ecclesia's French text uses those cells too). The Font Editor lists two fonts per game (formatcv_nds: 16x12 text font, 8x8 small font, fixed advance); the Textures window lists the title logo, menus, area names, credits and game-over pictures (OoE: both the_eand_uEnglish sets).2_build.batlays all strings out again when one changed (as DSVEdit does); what does not fit goes into a new overlay that the patched game loads at start. -policenauts— Policenauts (PlayStation, Japanese discs SLPS-00215/00216 with the English fan patch, as the PSP PS1-ClassicEBOOT.PBPfiles; disc 3 is not in the release). Source: the workspace'ssourcefolder (1_unpack.batreads the PSISOIMG disc of each EBOOT):PN_VOX1.PNV/PN_VOX2.PNV(the dialogue of discs 1 and 2: the subtitle text the patch keeps in each voice chunk, one group per chunk; lines of spaces are hidden),FONT\*andSHOTPAC\KANJIFNT.*(Font Editor, formatpolicenauts),PAK\*(Textures: title, menu, act cards, story pages, staff roll; formatspolicenauts_pakandtim). Tags:{dash},{xHH}. A chunk's text must fit its header sector;2_build.batwritesbuild\CD1\EBOOT.PBPandbuild\CD2\EBOOT.PBP(only the changed 16-sector blocks are compressed again). -super_paper_mario— Super Paper Mario (Wii, PAL, English UK). Source: the workspace'ssource(1_unpack.batputs there the textmsg\UK\*.txt, the fonts, the text textures and the Wii HOME Menu messageshbm\HomeButton2_en.bin\home.csv; an archive is a folder named like the archive file); Translation:translation. The message files have the Thousand-Year Door format and tags;global.txtopens as blocks (places, chapter titles, items, enemies, Catch Cards, Tippi's tattles, descriptions, menus); an unedited file stays byte for byte. The Font Editor opensfont\papermarioset_EU,_US,_JPN.bfnand the HOME Menu font; the Textures window lists the title, pause, file-select, name-entry, chapter captions, HOME Menu and channel banner textures.2_build.batpacks every changed file back into its archive and the disc image. -lunar_sssc— Lunar: Silver Star Story Complete (PlayStation, USA, 2 discs). Source: the workspace'ssourcefolder (1_unpack.bat):LUNADATA\TEXT*.DAT(event scripts: messages and yes/no answers),LUNADATA\SYSTEM.DAT\00_0001.bin(items, spells, monsters, places, menus; fixed room), the unpacked programSLUS_006.28(Font Editor: text font and symbol font) and 15 TIM pictures (Textures: title menu, logos, insert-disc screens). Tags:{wait},{page},{clear},{close},{end},{FA:39}-style codes. A longer message moves the script code after it;2_build.batrebuilds both discs. The opening script (TEXT001.DAT) also has a block Voice subtitles: one line per speech segment of the opening monologue (8 lines; an empty line shows nothing). Each line appears in a text window for its segment while the voice plays. The lines go after the script op that starts the clip, so2_build.batbuilds them with the script. -lunar_ebc— Lunar 2: Eternal Blue Complete (PlayStation, USA, 3 discs). Source: the workspace'ssourcefolder (1_unpack.bat, files ofDATA.PAK):DATA\EVENT(event scripts),DATA\PEOPLE(what people on a map say),DATA\SYSTEM\2499\05-12.bin(items, spells, menus, memory-card messages),DATA\BATTLE(monster names, 21 letters),DATA\MAP(place names, fixed length),DATA\SYSTEM\0003.bin. Font Editor: the text fontDATA\SYSTEM\2499\18_font.bin(94 glyphs and their widths). Textures: title screen and logos, battle status page, card game words, 50 full-screen pictures. Tags:\nnext line,{2000}new page,{3007}the 'more' arrow,{B2C9}speaker,{XXXX}other codes. A longer text moves the messages; a file that outgrows its place goes to the end of the disc. -paper_mario_64— Paper Mario (N64, USA 1.0) in the PC port PaperBoat 1.0.2. Source: the workspace'ssource\text\paper_mario_64_messages.txt(one line per message, 8,009:MSG_<name>and the editor text, codes in brackets such as[@F0]); the message fontsource\font\charset_standard.bin(a texture grid of 166 16x16 CI4 glyphs) and the logo picturessource\texture\LOGO_*.bin(RGBA16).2_build.batwrites the changed messages, glyphs and logos into the port's modbuild\mods\zz_Picoripi_UA.o2r; the ROM is not changed. The charset has no Ukrainian letters yet. -conker_bfd— Conker's Bad Fur Day (N64, USA 1.0), plugin in progress. Source: the workspace'ssource\text\bank_1A\(the catapult instruction book) andsource\text\bank_1C\(menu, pause menu, chapter names, credits): one JSON per table, text as plain characters with[@hh]tags for inline codes; the fontsource\font\glyph_00.pgmtoglyph_94.pgmwithglyphs.jsonandglyph_map.json; the voice streamssource\voice\streams\NNNN.mp3with the indexsource\voice\streams.json. Build targets:romwrites a patched ROM;bpswrites a BPS patch from the US ROM. The text can grow: when a table gets longer, banks 0x1A to 0x1D move to the free end of the ROM, and the ROM keeps its size. The text box does not grow yet, and the in-game preview is not verified yet. Reference: pick a finished translation ROM (.z64) as the reference; it shows as the "Spanish (ES, fan)" column. Patch files (xdelta, BPS) are not applied: give the patched ROM. A table is matched by position only when its string count equals the US count; other tables are skipped. -paper_mario_ok— Paper Mario: The Origami King (Switch, 2020), the same formats. Source: the workspace'ssource(1_unpack.bat: base + update):msg\EU_English\*.msbt(59 files, 9,708 messages),font\*.bffnt(12 fonts) andui\...\*.bntx; a picture the game keeps once per language opens as its English copy*.bfres.en.bntxand2_build.batwrites it into both English versions (en-GB, en-US). Tags come from this game'smsg.msbp({Font:4}…{Font:-1}switches the font). -animal_crossing_nh— Animal Crossing: New Horizons (Switch, 2020). Source: the workspace'ssource(1_unpack.bat: the repack's base + update + DLC):Message\*_USen.sarc.zs(11 archives, 3,086 MSBT files, 120,498 messages; each MSBT is one block),Swkbd\message\USen\*.msbt.szs(the game's keyboard),Font\ScalableFont.sarc.zs(OpenType CFF.bfotfand TrueType.bfttffonts — a drawn glyph is saved into either),Font\BmpFont_US.sarc.zs(number fonts),Layout\*.zsandModel\*_USen.*.zs(BNTX textures, also inside a model's BFRES; every ASTC block size). Tags are named from the text itself:{Color:Npc},{Item7:He:She},{Item8:512:years:year:years}(an item's gender and plural forms). -animal_crossing_3ds— Animal Crossing: New Leaf - Welcome amiibo and Animal Crossing: Happy Home Designer (3DS, EUR), one plugin for both. Source: the workspace'ssource(1_unpack.bat: game + update):romfs\Script\**\*.umsbt(New Leaf 3,299 files, 87,425 messages; Happy Home Designer 507 files, 57,737 messages; a UMSBT holds one MSBT per language — English, Spanish, French, Italian, German — and opens as its English one; saving writes the other languages back untouched),romfs\Layout\Swkbd\message\EU_English\swkbd.msbt(the keyboard),romfs\Font\*.bcfnt/*.bffnt(3DS fonts) and the layout archives as folders of their pictures (romfs\Layout\<x>\<y>.arc\timg\*.bclimdarc in New Leaf,*.bflimSARC in Happy Home Designer; the title logos are letters inLayout\Title). Every control code has a readable name: New Leaf's names come from MSBT Editor'sACNL.gcf({color:NPC},{pageBreak},{delay:8},{anim37},{wordInfo:…}) and from what the code does in the text ({playerName},{catchphrase},{nickname},{waitButton},{menu5:0}with the answers on the next lines,{random1:…}); Happy Home Designer has its own catalogue ({delay:8},{anim37},{menu0:0}). Old names ({G5_7},{PageBreak}) still read. The three*_ASRname tables are one-byte MSBT files (UTF-8 / Latin-1) and open too. Windows. Each file knows its window: dialogue box 320 px of the game font, 3 lines (the game goes on by itself every 3 lines;{pageBreak}starts a new box), letters and the bulletin board 257 px × 6 rows, system dialogs 256 px, answers 200 px. Widths are measured with the game's ownGarden_msg_size16(the measure breaks exactly where the game breaks); a name tag counts as a typical 8-letter name,{size}scales. A line that is too wide is shown red (the game breaks it in the middle of a word); Autofix and AI translation re-wrap the text with the game's own breaks and never touch answer lines. Problems: changed answer count, too many lines in a letter or on the board. The preview draws the window with the game's font and textures and pages it as the game does. AI replies must keep every tag (strict_tags). The workspace build also writescode.ips: villagers speak Cyrillic letters (Animalese) with the sound of the closest Latin letter. -castlevania_sotn_saturn— Castlevania: Symphony of the Night for the Sega Saturn, in the "Dracula X Ultimate" v1.1 English build. Source: the workspace'ssourcefolder, filled by1_unpack.bat:text\<FILE>.sotnstext(1,130 strings of 38 program files: items, relics, spells, enemies, the librarian, menus, save screens, area names, room messages, cutscene speaker names),fonts\MENU_12x12.BIN(the font of the title, data-select and save menus),fonts\SYSTEM_8x8.BINandfonts\ASCII.FON(Tools → Font Editor),dialogue\*.BIN(the cutscene dialogue is pictures of its lines, 20 files),title\TITLE_LOGO.BIN(the title screen as one 320x256 picture: logo, copyright, PRESS START BUTTON) andtitle\TITLE_MENUS.BIN(the eight menu screens with their gothic headings — player select, data select, name entry, data copy and delete, the main menu — one picture each; Tools → Textures). A redrawn piece of a screen reuses an equal 8x8 cell, redraws a cell only that place uses, or takes a free cell; the build packs the cells intoTITLE.MAPagain and moves the game's chunk table. A longer string moves its neighbours and their pointers; a speaker name keeps its letter count. Keep the first cell of a dialogue picture empty: the game fills the dialogue box with it. -pokemon_nx— Pokémon Sword/Shield (with both DLC) and Pokémon Legends: Arceus (Switch). Source: the workspace'ssource(1_unpack.bat: base + newest update):bin\message\English\commonandscript*.dat(one block per file; the.tblnext to it names each line),bin\font(.BFOTF,bmp\*.bffnt) andbin\appli\*\bin\*_eng.arc(English layout pictures); Legends: Arceus alsobin\archive\appli\*_eng.gfpak.d\*.arc(the battle and HUD layouts of the Oodle packs, packed back by2_build.bat). Tags (the same aspokemon_trinity):{PAGE}next text box,{COLOR 0002}colour,{VAR 0100 0000}an inserted name,M{GENDER 00FF|aster|iss}word forms (their lengths are written again on save),{CHAR E305}a button icon. The text fonts lack Ґ Є І Ї ґ є і ї:translation_map.jsonwrites І і Ї ї as Latin I i Ï ï and Є є Ґ ґ as Э э Ъ ъ, whose glyphs are redrawn in the Font Editor. Sword and Shield share one romfs:2_build.batwrites the mod for both title ids. The Project Manager wizard unpacks Sword / Shield itself: it takes the base game and the update (the update's patch is applied) with Picoripi's Switch reader, and gives the samesourceas1_unpack.bat. Legends: Arceus: the wizard writes its.gfpakpacks and decodes them into<pack>.gfpak.dwith the Oodle library. It asks once for the Oodle library file (oo2coreoroo2ext*_win64.dll) and remembers its path. The Switch build target writes the changed files as a LayeredFS mod (Sword / Shield: both title ids; Legends: Arceus: a changed pack is stored, not compressed). Default tag aliases (Settings → Tag Aliases):[PAGE],[SCROLL],[POKEMON],[MOVE],[ITEM],[LEVEL],[NAME1], colours[COLOR6]. Dialogue box preview (Sword / Shield): the box is drawn from the game's own layoutbin\appli\msg\bin\msg_00.arc(two text panes, the window size, the font list of itsfcpx) with the.BFOTFfonts frombin\font. The window texture is not drawn yet; a flat box stands in for it. A game line longer than its pane flows into the next pane (word wrap); a word wider than the box is flagged. Legends: Arceus shows its battle box (bin\archive\appli\battle_menu_eng.gfpak.d\11_msg_sys_00_s.arc); Scarlet / Violet its sub-window box (appli\data\msg_sub\msg_sub_body_00.arc, unpacked now that the wizard takes themsg_subandmsg_btlarchives). Legends: Z-A has three boxes in one switch above the preview: the field box (msg_00.bflytinmsg_body_00.arc, glyph size not measured), the NPC speech bubble (fontUniversNextPro-Cond.bfotf, glyphs 29.5 by 29 px, measured on an Eden frame: every ink edge within 1 px) and the lower-left message window (from the layout, no frame yet). The bubble and the window take their facts fromconfig.json(speech_bubble,hud_message); each box is read on a worker thread. -pokemon_gen6— Pokémon X / Y and Omega Ruby / Alpha Sapphire (3DS), one project per pair (X and Y share every text, font and picture file; so do Omega Ruby and Alpha Sapphire). Source: the workspace'ssource(1_unpack.battakes the English members out of the GARC archives):romfs\a\0\7\4\NNN.datgame text andromfs\a\0\8\2\NNN.datstory (X/Y; ORASa\0\7\3,a\0\8\1; one block per table, named after its content:080 Species names,Story 012),romfs\a\0\2\0\NNN.2.binname-entry keyboard rows (one line, keep the character count),romfs\a\1\8\5\*.bcfntfonts (ORASa\1\6\7) andromfs\a\*\*\*\000.2\timg\*.bclimEnglish layout pictures (plus the title logos and Press Start of each game). Tags are the same aspokemon_nx:{PAGE},{COLOR 0002},{VAR 0100 0000},Master Ball{PLURAL 00FE||s},{CHAR E08E}. The fonts have no Cyrillic: the Font Editor adds letters (min_sheetsleaves room).2_build.batrebuilds the GARCs into a Luma / Azahar mod for every CIA inISO\. The wizard unpacks the CIA itself (Picoripi readers, noztstep): X gives the same 718 files as the workspacesource(Y the same files), Omega Ruby 993. Preview: the language box (bottom screen) and the in-game dialogue (top screen, the cutscene box) are drawn with the game's own font (Xa\1\8\5, Omega Rubya\1\6\7), at the measured glyph scale and box, by the shared rendererplugins/common/message_window.py; a line wider than the measured box is flagged. The unpack keeps the archives insource\garc_original\<title id>\, which the build starts from. The build target 3DS mod (LayeredFS) writestitles\<title id>\romfs\...; a pack member (a DARC inside a GARC member) is rebuilt from its translated files. -pokemon_gen7— Pokémon Sun / Moon and Ultra Sun / Ultra Moon (3DS, decrypted.3dsimages inISO\). Sun and The message box preview draws the language-screen box with the game font (romfs/a/0/2/5/000.bffnt); the other windows are not measured yet. Moon share every English file; so do the two Ultra games. The Ultra games read the v1.2 update as an overlay. The wizard unpacks the image itself (Picoripi's own readers, noztstep): Sun gives the same 4667 files as the workspacesource, Ultra Sun with its v1.2 update 3189. The unpack also keeps the text, font and picture archives insource\garc_original\<title id>\(about 37 MB), which the build starts from. The build target 3DS mod (LayeredFS) writestitles\<title id>\romfs\...with each changed archive; a longer line is accepted. Source:romfs\a\0\3\2\NNN.datEnglish game text (898 tables in Sun),romfs\a\0\4\2\NNN.datBattle Tree text,romfs\a\0\2\5\NNN.bffntfonts, andromfs\a\*\*\*\NNN.bflimpictures. The fonts have no Cyrillic: the Font Editor adds letters.2_build.batrebuilds the changed GARCs into a Luma / Azahar mod for each title. -pokemon_gen5— Pokémon Black / White and Black 2 / White 2 (Nintendo DS). Source: the workspace'ssource(1_unpack.battakes the NARC members out of the ROM):text/a_0_0_2/NNNN.msg(menus, names, descriptions, battle) andtext/a_0_0_3/NNNN.msg(story, scripts), one block per message file;a/0/2/3the NARC with the NFTR fonts anda/*/*/*the NARCs with NCGR pictures. Tags:{PAGE},{SCROLL},{VAR 0101 0000},{COLOR 0001},{CHAR E447}; a line break is a new line. The message box draws with the game's font: NFTRa/0/2/3member 0 in a 230 px box. Each glyph's advance and left offset come from row 0 of its cell in the font (the game's widths); the page arrow is measured on Black dialogue frames (plugins/pokemon_gen4/message_preview.py). Saving keeps each line's flags and packing;2_build.batwrites changed files into their NARCs and lays the ROM out again (a plain NDS image). Build target Translated DS ROM writes<game code>_UA.ndsfrom the wizard's own copy of the clean image (source omase.nds, made by the unpack) with the edited banks and files put in; noztscript runs. A DSi-enhanced dump comes out as a plain NDS image. -pokemon_gen4— Pokémon Diamond / Pearl, Platinum, HeartGold / SoulSilver (Nintendo DS, USA). Source: the workspace'ssource(1_unpack.battakes the message banks and the NARCs out of the clean ROM inISO\):text/<narc>/NNNN.msg, one block per message bank; only the English text is edited, and an untouched line keeps its bytes. Fonts: the Gen 4 font bins of the font NARCs (graphic/font.narcand the others) open in the Font Editor as 16 x 16 glyph grids with 2-bit pixels (gen4_glyphs); no new glyphs are added, and an edited glyph keeps the four colour levels. The Font Editor labels each glyph cell with its character from the game's charmap (glyph index = text code - 1); a cell without a character shows its index. Pictures: the NARCs with NCGR members (Textures); a compressed (LZ10) member is decompressed to open and compressed again to save, as a valid stream.2_build.batwrites changed banks, fonts and pictures into the ROM and lays it out again. The pret decompilation text (.gmm/.json) is a second mode; it needs the decompilation's own toolchain for the ROM, and theZT_GEN4_MODE=pretvariable (orzt_mode.txtin the workspace) selects it inzt.py. Build target Translated DS ROM writes<game code>_UA.ndsfrom the wizard's own copy of the clean image (source Platinum: the preview draws the message box with the game's own font (Platinum 216 px wide, Diamond / Pearl / HeartGold / SoulSilver 216 px, 2 lines; the tableWINDOWSinplugins/pokemon_gen4/message_preview.pygives the font and width of each game; the widths come from the pret and ctrl-cheeb-del window templates, 27 x 4 tiles); a line wider than the box is flagged, and the game does not wrap lines. The box colours are the game's own: dark ink 81,81,89, grey ink 162,162,170 on 251,251,251 (read from a melonDS frame of the Diamond intro box and the HeartGold dialogue box). omase.nds, made by the unpack) with the edited banks and files put in; noztscript runs. A DSi-enhanced dump comes out as a plain NDS image. -pokemon_bdsp— Pokémon Brilliant Diamond / Shining Pearl (Switch, Unity), one project for both games. An edited fontfont\<name>.json(its glyph tables) is written back into the font bundle; an unchanged one is not. Source: the workspace'ssource(1_unpack.bat: base + update 1.3.0; the Unity bundles become plain files):message\english_*.bdmsg(128 tables, 42,946 lines: story, Pokédex of both games, names, menus, battle),font\<bundle>\(TextMesh Pro SDF fonts: Font Editor formattmp_sdf, glyph table + atlas; the font files of the dynamic fallback open asbfotf) andtexture\...\*.png(24 English pictures: title logos, "Press any button", menu and battle words; Textures window formatpng).2_build.batwrites every edited file back into its bundle for both games. The Project Manager wizard unpacks the message tables, the fonts and the pictures itself (Picoripi's own Unity readers; base + update). The Switch build target writes the edited bundles as a LayeredFS mod (their blocks stored, not compressed) and re-measures the word width (strWidth) of each edited label with the English fonts. An edited picture (texture\...\*.png) is encoded in its own format and written into the bundle's stream, at the same size; an edited font atlas (font\<bundle>\<font>.png) is written into the font bundle. Not yet in Picoripi: the glyph tables of the fonts (the.jsonfiles) are not written back. Tags:\nnew line,{scroll}/{clear}+ new line (wait for the button),{wait:0.5},{tag:A:G:T…}a name, number or word form the game fills in (argument A; word forms after|), TextMesh Pro<color=…>stay as they are. -dragon_quest_builders— Dragon Quest Builders and Dragon Quest Builders 2 (Switch). Source: the workspace'ssourcefolder (1_unpack.batdecrypts base + update; Builders 1excel\excel\<Table>.en.binfromexcel.nxarc(17 English tables, 19,905 lines) and, frombuild.nxarc, the 4 Phyre fontsbuild\gra\font\*.fgen.NXGL.phyreand 82 pictures (the two HUD sprite packsuitexanduiiconwith 345 and 980 sprites included); Builders 2LINKDATA\text\<first>-<last>.dqbp(28 packs of the English member of each five-language group ofLINKDATA.BIN: 4,219 tables, 81,129 lines; one pack is one block), the fontLINKDATA\font\00598.g1tand 62 localized picturesLINKDATA\texture\<index>.g1t); Translation:translation. The game's codes stay in the text (<key>end of page,<br>new line,<pname>,<speaker(Name)>,<color(0xAARRGGBB)>). The Japanese key column of a Builders 1 table is not shown and never rewritten.2_build.batstores a changed file raw at the end ofexcel.nxarc/build.nxarc/LINKDATA.BINand points the index at it (LayeredFS mod; the original is copied once). -xenoblade_3— Xenoblade Chronicles 3 + the 4 DLC waves incl. Future Redeemed (Switch). Source: the workspace'ssourcefolder (1_unpack.batreads only the needed entries of the game'sbf3.ardand DLCbf3_dlc0N.ardarchives — one copy per path, the newest wave's — and puts there, at the archive paths, the English text tablesbdat\gb\game\*.bdatandbdat\gb\evt\<kind>\*.bdat, the fontsmenu\font\*.wifntand the layoutsmenu\image\*.wilay); Translation:translation. One block per table file (4,118 files, 117,513 text cells); the game's codes stay in the text as[ML:icon icon=btn_a ]-style tags. The Font Editor opens the six LAFT fonts (none has a Cyrillic letter; 8 free rows of cells are shown for new letters and the atlas grows on save); the Textures window lists the English title logo (mnu001_cont01_en), the title layouts and the English tutorial pictures (BC7 textures written back in place, JPEG pictures re-encoded).2_build.batwrites changed files as loose romfs files for the game and every DLC that holds them and hides their entries in each archive index. -xenoblade_2— Xenoblade Chronicles 2 + Torna: The Golden Country and the other DLC (Switch, update 2.1.0). Source: the workspace'ssourcefolder (1_unpack.batwrites the.nszimages once asnsp\*.nsp, reads only the needed entries of the game'sbf2.ard, Torna'saoc1.ardand the loose files of the small DLC, and puts there, at the archive paths, the English text tablesbdat\gb\*_ms.bdat, the fontsmenu\font\*.wifntand the layoutsmenu\image\*.wilay); Translation:translation. One block per table file (4,537 files, 83,323 text cells: thenamecolumn of the legacy BDAT tables; labels stay), folders by kind (common_ms= menus, system, names and descriptions; story eventsbf, questsqst, NPC talktlk, field and camp events, heart-to-hearts and inns) with Torna and the three DLC packs as their own folders; the game's codes stay in the text as[ML:undisp ]/[System:Color name=tutorial ]…[/System:Color]tags. The Font Editor opens the eight LAFT fonts (standard,subtitleandminchohave Russian Cyrillic and lack only Ґ Є І Ї ґ є і ї; the others have no Cyrillic; 8 free rows of cells are shown for new letters); the Textures window lists the English title logos (mnu001_titlelogo_us, the wide_b_us, Torna'sdlc3_mnu001_titlelogo_us), the title layouts and every picture with English text (*_us: BC1/BC3/BC4/BC7 textures written back in place).2_build.batwrites changed files as loose romfs files for the title that holds them and hides their entries in thebf2.arh/aoc1.arhindex. -xenoblade_x_de— Xenoblade Chronicles X: Definitive Edition (Switch, update 1.0.2). Source: the workspace'ssourcefolder (1_unpack.batreads only the needed entries of the game'ssts.ard— itssts.arhindex holds path hashes, named from a public hash list — and puts there, at the archive paths, the English text tablesbdat\us\*.bdat, the creditsui\credit\endroll.crt, the fontsui\font\*.wifnt, the layoutsui\image\*.wilayand the English picturesui\stream\us\*.wilay); Translation:translation. One block per file (1,801 tables with 121,843 text cells + 654 credits lines), folders by kind (common_ms= menus, system, names and descriptions; story eventsxs, quest eventsqev, talk eventstev, credits); the game's codes stay in the text as[ST:wait ]/[ST:icon p1=a ]/[ST:col p1=red ]tags. The Font Editor opens the six LAFT fonts (standard,caption,standard_kr,standard_twhave Russian Cyrillic and lack only Ґ Є І Ї ґ є і ї;numericanduniquehold digits and signs; 99 free cells plus 8 free rows shown for new letters); the Textures window lists the English title logo (ui\stream\us\strm_title_thumb001), the title layouts (10010_*), the English layouts (*_en) and pictures (BC7 / RGBA8 written back in place, JPEG re-encoded).2_build.batwrites changed files underromfs\mod\of the LayeredFS mod together with masagrator's XCXDE-ModLoader (exefs), which makes the game read them instead of the archive entries. -vagrant_story— Vagrant Story (PlayStation, USA SLUS-01040). Source: the workspace'ssourcefolder, filled by1_unpack.batwith the disc's text files under their disc paths:EVENT\*.EVT(cutscenes),MAP\*.MPD(room events),MENU\ITEMNAME.BIN,ITEMHELP.BIN,MCMAN.BIN,MENU12.BIN,MENU\*.PRG(menus),SMALL\HELP*.HF0(Quick Manual),SMALL\MON.BIN(Monster Book),SMALL\SCEN*.ARM(room names),MAP\ZONE*.ZND,BATTLE\*.PRG,TITLE\TITLE.PRG,SLUS_010.40(names in program and zone data: spells, arts, enemies, their equipment; ASCII HUD words such as#WEAPON, kept ASCII) and the fontFONT\VSFONT.FNT; a room also shows its door messages and the weapon in its chest; the staff rollENDING\ENDING.PRG(ASCII, edited in place) and the picture files of Tools → Textures (GIM\,SMALL\*.DIS,SMALL\HELP*.HF1,BATTLE\SYSTEM.DAT,MENUpictures) are unpacked too; Translation:translation. Tags are readable:{down 13}/{>12}place the text in the balloon,{color 1},{num 0},{wait},{page}; Japanese leftovers and empty strings are not shown; an unedited file stays byte for byte. A dialog line's width limit is its balloon (chars_per_line× 12 px of the italic font, read from the script's DialogShow), other text the widest English line of its table. Text grows inside its table or script: an event keeps its 6144 bytes, a room may grow to the end of its last CD sector, every other file keeps its size, and names in program data are edited in place (never longer); a save that does not fit says which file and table. Ukrainian letters go through the plugin'stranslation_map.json(look-alike letters share the Latin codes, the others take accented cells the English text never uses;translation_map.md). The Font Editor opens the font twice (formatvagrant): Dialog font (italic) and Menu font (regular), with the advances ofBATTLE.PRG. The Russian fan translation (Reborn 1.5f,reference\RU) is the reference language, matched by file, table and place. The editor flags a dialogue page with more lines than its balloon (VGS_LINES_EXCEEDED;{page}starts a new page) and a name or staff-roll line longer than its place (VGS_BYTES_EXCEEDED). The staff roll takes Ukrainian letters on the bytes listed incredits_map.json(46 letters on the 46 cells the English credits never draw; a byte that is one of them cannot be typed as its ASCII character); the owner draws their glyphs in the staff-roll font. The preview column draws the page of the selected line with the game's 12 x 12 font (regular for menus, italic for balloons) and the balloon's size (chars per line × 12 + 10 px, lines × 13 + 4 px, read from the script); Previous/Next page follow{page}. The balloon frame art is not drawn. A staff-roll line that types an ASCII character the Ukrainian letters use is flagged with the reason (VGS_CREDITS_RESERVED). Scene context names the area and room of a room file (vs_index.json); the game data names no speakers.2_build.batwrites the changed files over their own sectors of the disc image (EDC/ECC recomputed) and splits the font back intoSYSTEM.DATandBATTLE.PRG. -castlevania_sotn— Castlevania: Symphony of the Night (PlayStation, USA SLUS-00067) and its PC port SymphonyRecomp. Source: the workspace'ssource(1_unpack.bat): the program files under their disc paths —DRA.BIN(item, relic, spell and enemy names and descriptions, menus, memory card messages),ST\SEL\SEL.BIN(title and file select, endings, staff roll) and the stage and boss overlaysST\*\*.BIN,BOSS\*\*.BIN(cutscenes, the librarian's shop and bestiary, pick-up messages, and the prologue caption inST\ST0\ST0.BIN: one editor line per script line,{PAGE}at a line's end ends a page; the caption is drawn in the console font, so Cyrillic needs the reader that the build installs; Ї Є Ґ and their small letters come from the caption's own letter table, Tools → Font Editor, "Caption letters"; a line wider than the 512-pixel panel is flagged) — and the picture filesBIN\F_*.BIN.pic,ST\SEL\F_SEL.BIN.pic(the disc files with.picadded, so they are not listed as text); Translation:translation. Where each string is comes from the decompilation (layout_us.json, made by the workspace'stools\sotn_layout.py), so no text is guessed. Two fonts: the 8x8 font (menus, names, cutscene dialogue; Tools → Font Editor,F_GAME.BIN, formattexture_grid; the build copies it intoF_GAME2andF_TITLE1) and the console's BIOS font (descriptions, messages: Shift-JIS, it has Cyrillic but no Ґ Є Ї; І і are written as Latin). Ukrainian letters of the 8x8 font go throughtranslation_map.jsonto free katakana cells (look-alike letters use the Latin cells). A second 8x8 font, the red damage numbers and status words (F_GAME.BINat 0x10000), is in the Font Editor too: its digit row is mapped, its word rows are free. Saving a font writes its copies (F_GAME2,F_TITLE1) into the translation folder. The cutscene dialogue window preview draws the first page in the 8x8 font at the window place of its script's POS command. Its text position matches one DuckStation dialogue frame; the speaker name and the menus are not drawn yet. On the prologue stage (ST0) it also draws the two hearts digits of the Richter HUD (preview only; the sheet is read fromST0.BIN). Cutscene lines show timing commands as tags ({WAIT 30},{SPEED 02}) and the speaker from the portrait; a staff-roll line starts with its tag ({ENTRY 10}). Text may grow: a string only data points at moves inside its pool (pointers rewritten) or into a range the decompilation marks unused; a cutscene that outgrows its room continues there through a jump command; a string code points at keeps its slot; a save that does not fit says which file and group. Tools → Textures (formatssotn_blocks: VRAM tile blocks, andsotn_cmp: the game's nibble-packed pictures, packed again into their room) lists the title logo (with its palette), title, prologue, HUD, game-over and file-select pictures and the area names. Saving keeps pictures already edited in the same file.2_build.batwrites the changed files over their sectors (sizes unchanged, EDC/ECC recomputed; nothing changed = the USA disc byte for byte) and builds the PC port once;3_run_pc.batstarts it with the translated disc (the port reads the game data from the disc, only the code is recompiled). -metroid_prime_trilogy— Metroid Prime Trilogy (Wii, USA R3ME01): Prime 1, 2, 3 and the Trilogy menu. Source: the workspace'ssourcemade by1_unpack.batfrom the game's Retro packages, one folder per game (MP1,MP2,MP3,Menu):text\<package>\<name>.<id>.strg(every string table once per game, 5,473 tables, 16,211 strings),font\*.font(59 fonts),texture\<package>\*.txtr(2,088 interface textures); Translation:translation. Every table is a block of its English strings; the game's&push;/&main-color=#…;/&image=…;tags read{push},{main-color=#…},{image=…}. A saved table carries the edited text as every language of the table (the game shows it whatever the console language); an unedited table stays byte for byte. The Font Editor opens every font (retro_font_gx: glyphs are edited in place, none added; no font has Ukrainian letters); the Textures window opens the interface textures (txtr_gx: every GX format).2_build.batwrites changed files into every package of that game that holds them and the packages into a copy of the ISO. The same plugin opens the GameCube Metroid Prime (USA 1.00GM8E01) of the workspaceMetroid\Prime (GC + PC port)(folderstext,font,texturewithout a game level; GameCube fonts throughretro_font_gc):2_build.batthere writes the changed resources as loose<id>.STRG/.FONT/.TXTRfiles inbuild\mods\Picoripi_UA, the mods folder of the native PC port Odrannnn/MetroidPrimePort, which runs from the original disc (3_run.bat) -metal_gear_solid_ps1— Metal Gear Solid (PlayStation, USA, both discs). Source: the workspace'ssourcefolder, filled by1_unpack.bat:RADIO.DAT(every codec call),SLUS_005.94(item names and descriptions, menus, memory card messages; edited in place),stage\<stage>\*.gcxand*.bin(scripts and overlays ofSTAGE.DIR: pick-up labels, mission log, VR and difficulty menus),subs\demo.subs,vox.subs,movie.subs(subtitles of cutscenes, voices and movies of both discs, each distinct block once), the fontfontont.resand the PCX textures of the title, menu, briefing and result stages; Translation:translation. Line breaks are#Nin codec calls and|in subtitles (shown as new lines); other game codes read{901B}. A codec call or script line may grow; a subtitle block may grow up to the end of its stream sector, a program string only inside its slot.2_build.batbuilds both discs (STAGE.DIR, codec call offsets, subtitles, program). -metal_gear_solid_mc— Metal Gear Solid, Master Collection Version (PC Steam and Switch; the USA game in M2's emulator). Source: the workspace'ssourcefolder (1_unpack.bat): the same PlayStation files asmetal_gear_solid_ps1(SLUS_005.94is the program from M2's RAM image) plus M2's own text inm2\text\**\*.psb(menus, messages, credits, Master Book; English lines, saved as UTF-8), M2's fonts (m2\font, Font Editor formatsm2andmgs1_hd) and pictures (m2\texture\*.pcx,m2\image\*.m2tex, Textures formatm2).2_build.batwrites M2's patch archivepatchdata.psb.m+patchdata.bin(PC:build\windata; Switch: a LayeredFS mod) and drops M2's own small fixes where the translation changed their bytes. -metal_gear_solid_23_mc— Metal Gear Solid 2 and 3, Master Collection Version (Switch; PC not yet). -metal_gear_mc_bonus— Metal Gear Solid Master Collection Bonus Content (Vol.1 and Vol.2, Switch): the two M2 apps' PSB menu and message text (English lines); fonts and pictures open in the shared font and texture tools. Source: the workspace'ssourcefolder (1_unpack.bat):text\<group>.json(codec, scenario, demo, movie, vox, books and the launcher's text; one block per game file, each English string once per group;2_build.batputs the translated line into every place the string stands). Keep the line breaks, the|marks and the button symbols. Fonts:font\MGS_Font_nht.raw(Font Editor formatmgs_nht; spare cells take new letters) and the launcher's SDF fonts (tmp_sdf). Pictures: the.ctxrfiles undertexture(Textures formatctxr) and the launcher's PNG pictures. -fragile_dreams— Fragile Dreams: Farewell Ruins of the Moon (Wii, Europe). Source: the workspace'ssourcefolder (1_unpack.batunpacks the disc's compressedFILE_<id>files there):text\60001061.msg(every dialogue, subtitle, item description, memory and the title menu),text\40003100\1\*.msg,text\60001083\0.msg,text\600010AF\0.msg(end credits),sys\main.dol(the save check, Wii Remote and disc messages, written in place, each block in its room) andhbm\10000081.csv(HOME Menu). Each message block is one Picoripi block (about 3,900 strings);<w>,<v1>,<p>,<c#404040ff>and[Value]stay as they are; text is written in cp1251, so Ukrainian letters use the font cells 0xC0–0xFF and those of Ґ Є І Ї. The Font Editor opens all 14 FONT fonts (formatfragile_dreams; Japanese glyphs are kept as they are); Tools → Textures… lists about 2,800 TPL pictures (title logo, tutorials, menus, maps, health and safety screens, HOME Menu, disc banner).2_build.batcompresses the changed files again. -no_more_heroes— No More Heroes (Wii, Europe). Wizard: choose the disc image (ISO or RVZ); the wizard unpacks it into the project'ssourcefolder. An encrypted ISO needs the Wii key file in console keys. Build: "Wii disc image (ISO, English)" writes a plain ISO. An RVZ or WIA source is first written as a plain ISO (every partition is hashed and encrypted again; this takes several minutes); the build needs the Wii key file. Source: the unpackedsourcefolder (the game's RMHG resource files, unpacking the game's LZ):text\<disc file>.nmt— the English lines of every text box of one game file (cut-scenes, stages and the city, side jobs, items, menus; about 12,000 lines in 1,064 files),text\main.dol.nmt(menu words kept in the program: title copyright, save screen, map and shop key guides, job board; written in place) andhbm\home.csv(HOME Menu). The game draws no text from a font: each box carries a picture of its own glyphs, which the build draws anew from the old picture and the fonts. The Font Editor opens 15 fonts as glyph grids (formattexture_grid, I4; each has empty cells for the 66 Ukrainian letters, written as Shift-JIS Cyrillic codes) and the HOME Menu font; Tools → Textures… lists about 1,080 pictures (boot logos, menus, loading and safety screens, item cards). The title logo is a 3D model, not a picture. -madworld— MadWorld (Wii, Europe). Source: the workspace'ssourcefolder:text\<disc file>.mwt— the English message tables (cut-scene subtitlesevent\*, mission and tutorial messagescase*\idpac_*, system and save messagessubscr\*; about 1,630 messages in 68 files) andhbm\home.csv. The tables keep glyph numbers, not character codes; the characters are known from the glyph pictures.<8010:0064>,<8002>and<#0003>are the game's codes and stay as they are. The Font Editor opens the subtitle and the heading font (texture_grid, IA8; empty cells for the Ukrainian letters), the ASCII system font and the HOME Menu font; Tools → Textures… lists about 500 pictures with text (the MADWORLD logo, menus, HUD, tutorials, safety screen; the English health-and-safety picturesstrap\strap_*_us.tplare in it too). The wizard unpacks the disc (.isoor.rvz; an encrypted.isoneeds the Wii key file). The build target Wii disc image (ISO) writes a plain ISO and draws each changed table's glyph picture anew. An.rvzsource is written as an ISO first (several minutes). It also needs the Wii key file. A letter with no picture in the font is left out of the game; the build status line names it andBUILD_WARNINGS.txtbeside the ISO lists it. -wario_land_shake_it— Wario Land: Shake It! (Wii, USA, RWLE01 rev 0). Wizard: choose the disc image (ISO, WIA or RVZ); the wizard unpacks the English message packs into the project'sunpackedfolder and writes one text document per message file (MessageData\*.json). Source: one block per BMG file: 575 messages in six files (area, demo, error, game, stage, treasure); a{esc:FF:00000100}in the text is a game code and stays as it is. Build: "Wii disc image (ISO, English)" writes a plain ISO with the English pack replaced; the build needs the Wii key file in console keys. Not yet: fonts (the game's font has no Ukrainian glyphs), textures with text, other languages as reference columns. -xenoblade_wii— Xenoblade Chronicles (Wii, USA) and Xenoblade Chronicles 3D (New 3DS, EUR): one plugin, one translation. Source: the workspace'ssourcefolder (1_unpack.bat), at the same paths on both platforms: the English BDAT table filesbdat\bdat_common.bin(120 tables: menus, items, arts, skills, enemies, names, system messages, battle chatter),bdat\common\bdat_*.bin(quests, descriptions, tutorials, achievements, story log),bdat\map\bdat_ma*.bin(NPC auto-talk, trade talk, gimmick messages per map) and the scriptsscript\*.sb(NPC talk, events, heart-to-hearts: 24,600 lines in 494 scripts; identifiers and debug prints are left out); Wii only:bdat\code_mes_en.bdat(the disc messages ofmain.dol, written in place) andhbm\hbm.arc\hbm\home.csv(HOME Menu). About 62,800 lines in all;<n>,<col=s2>,<wait=key>stay as they are and@breaks a line in menu text. The Wii files are big-endian (tables and script strings scrambled), the 3DS files little-endian and plain; the 3DS2_build.batalso takes every text file translated in the..\Wiiworkspace and not in its own, so one translation feeds both. The Font Editor opens the game fonts (WiiRFNA, 3DSANFRwith QuickLZ sheets, formatbrfnt), the 3 battle fonts and the HOME Menu font; Tools → Textures… lists the TPL pictures (Wii about 3,100, formattpl; 3DS about 3,000, formattpl_ctr: title logo and title menu words, every menu layout, maps, banners).2_build.batwrites a patched WBFS (Wii) or a Luma romfs mod (3DS). -fire_emblem_awakening— Fire Emblem Awakening (3DS, EUR, English slot). Source: the workspace'ssourcefolder (1_unpack.batdecrypts the .cia and decompresses the English files there):romfs\m\U\*.bin(854 LZ11 message archives: story and support conversations, unit / class / item / skill names and descriptions, menus, tutorials, DLC chapter text; 15,817 messages), the sixromfs\fonts\*.bfntatlas fonts (fe13_bfnt) and the English CTPK / CGFX images with text (ui\*_U,bs\*_U,chapter\title\U,tut\U,telop\*_U.r, the title logoui\title_U.ctpk). Control codes stay in the text ($k,$Wmクロム|0,$E通常,|...); the speaker of$Wm/$Wsis named in English fromGameData.bin.2_build.batcompresses the changed files again (LZ11 / LZ13) into a Lumaromfsmod. -smt_iv— Shin Megami Tensei IV and IV: Apocalypse (3DS, EUR). Source: the workspace'ssourcefolder: everyromfs\**\*.mbm(Atlus MSG2 tables: events, quests, battle and demon talk, menus, names, descriptions), the DLC tables underdlc\content_NN\romfs\,exefs\code.bin(skill, place and menu names inside the executable, edited in place), the Shift-JIS keyedromfs\font\*.bcfntfonts and the UI STEX textures (tex\stex\<folder>, the title logotitle\rogo.stex). The text shows the game's full-width letters as ASCII and its control codes as{F8xx 0001}tags; Ukrainian letters get the free Shift-JIS codes 0x8492–0x8499 (core/font_formats/sjis.py).2_build.batwrites the changed files (Apocalypse's.cmptextures compressed again) into a Lumaromfsmod; the DLC's files go under the DLC title id (Azahar applies them; Luma on a console does not patch DLC). Strange Journey Redux (EUR,SMT_SJR_3DS) uses the same plugin: 106.mbmand 27Event\EventMessage*.binfiles (TBB1blocks,0000-terminated strings), the DLC title list, six BCFNT fonts and 419 STEX pictures. -dragon_quest_vii— Dragon Quest VII: Fragments of the Forgotten Past (3DS, EUR, English slotEN). Source: the workspace'ssourcefolder (1_unpack.batdecrypts the .cia and decompresses the LZ11 / LH files there):romfs\MESS\EN\*.fpt(331 FPT0 packs of#NNNNNN.txtmessages: dialogue and events, 56,720 messages; a string is one message, its#window,speakerheader stays in the pack and names the speaker),romfs\MENULIST\EN\*.txt(22 CSV menu lists: commands, items, spells, monsters, vocations, places, StreetPass; 23,920 lines), the 20 BCFNT fonts (Font.bcfnt,demox\demo_font.bcfntand thetbud_maru,m7_win,iwamarufonts inside theLAYOUT\*.arcdarc archives) and the screens and atlases asDMPtextures (SCREENTEX\<folder>\*.fpt: 64x64 tiles of each screen,LAYOUTTEX\*.fpt,LAYOUTTEX\*\*.dmp). Tags:{HERO}-style names,%a00codes,%E/%Ygrammar codes,{LF}for the game's lone LF line break.2_build.batcompresses the changed files again (LZ11, LH 0x40) into a Lumaromfsmod. -dragon_quest_viii— Dragon Quest VIII: Journey of the Cursed King (3DS, EUR, English sloteng). Source: the workspace'ssourcefolder:romfs\data\Message\eng\*.binE(menus, items, spells, skills, monsters, battle, church, casino, alchemy, quests) andromfs\data\Script\field\message\eng\**\*.binE(events, NPC talk, party chat, records; 581 tables, 39,164 strings with their ids),romfs\data\Params\WordTable\eng\*.txt(item and word tables, one string per line), the fiverom\Font\*.bffntfonts and the BFLIM pictures inside the SARC layoutsdata\Layout\**\*.arc(the title logotitle\title_u.arc). Text is UTF-8 with[...]codes.2_build.batputs the changed files into a Lumaromfsmod. -dq_monsters_joker3— Dragon Quest Monsters: Joker 3 (3DS, Japan, with the English fan patch 1.02 applied; the patched game is the source). Source: the workspace'ssourcefolder:romfs\data\Message\**\*.mesandromfs\data\Script\Field\**\*.mes(417 hashed tables, 16,697 UTF-16 strings with their labels: menus, items, skills, monsters, scouting, synthesis, help, trivia, scenes; control characters show as{01}), the credits scriptsdata\Menu\EndRoll\*.nut(quoted strings), the four*.bffntfonts (the RGBA4break_font) and the BFLIM pictures inside the SARC layoutsdata\Layout\**\*.arc(the title logotitle\upper\title_logo.arc). Lines the patch left Japanese stay visible.2_build.batputs the changed files into a Lumaromfsmod. -mhp3rd— Monster Hunter Portable 3rd HD (PSP image NPJB-40001, Yakumo PC port). Source: the workspacesourcefolder holdsen_source.json, built by the workspace script build_source_lang.py (not in this repository) from the user's PSP image and the English patch: keys areTABLE:INDEX(questsref:offset). Translation:translation/uk.json;2_build.batwritesuk.langinto Yakumo's translations folder, and the disc is not changed. Not yet: the Character Creation labels (not in the extracted blocks) and the font choice (Yakumo'stext.fontin itssettings.ini). Required Yakumo: a build from commit 43190f0 or later (the released builds alpha.4 and alpha.5 cannot load translation files). -monster_hunter_3ds— Monster Hunter 3 Ultimate, Monster Hunter 4 Ultimate and Monster Hunter Stories (3DS, Europe; Capcom MT Framework Mobile). Source: the workspace'ssourcefolder (1_unpack.batdecrypts the game and takes the English and language-neutral files out of the.arcarchives, at the game's own paths; a file that sits in several archives is one file). Text:.gmdtables (MH3U, UTF-8),.lmdtables (MH4U and Stories, UTF-16) and the quests' English slot (.questMH3U,.mibMH4U); each file is one block;<COLO 1>,</COL>,<SUBS 3>and%sstay as they are; strings may grow; an unedited file is saved byte for byte. The Font Editor opens theGFD/lfdfonts with theirTEXpage (formatmt_font; the main fonts have the Russian Cyrillic letters, Ґ Є І Ї ґ є і ї are added as new letters). Tools → Textures… lists the UI and title pictures (mt_tex).2_build.batrebuilds every archive that holds a changed file into a Luma romfs mod. -plain_text— Plain Text -pokemon_fr— Pokémon FireRed / LeafGreen, Ruby / Sapphire and Emerald: JSON dumps of the ROM text, or the source files of the pret decompilations (.inc,.s,.c,.h; one block per file;\n,\l,\pand{PLAYER}codes; the$terminator is not shown). Speakers come from each map'smap.json. The region map names and FireRed item names (JSON) are messages too. A saved decompilation file keeps its LF line endings, and an indexed PNG keeps its palette, bit depth and unedited pixels. ROM mode (FireRed / LeafGreen, USA rev 0, the first version): the Project Manager's Game ROM role takes the.gbafile (identified by its SHA-1). Unpacking writes every message totext\messages.incand keeps a copy of the ROM inromase.gba; no other tool is needed. Patched ROM writes a.gbawith the changed messages: a message that is longer than the original moves to free space and the pointers to it are rewritten; an unchanged message stays byte for byte. A message that no pointer reaches keeps its length: the editor shows Byte budget exceeded for a longer text, and the build refuses it. Sound-effect codes are not text codes:{PLAY_SE ...}and{PLAY_BGM ...}take the game's sound ids. Default tag aliases:{Player},{Rival},{Var1}–{Var3},{A},{B},{Start},{Up/Down},{Left/Right},{Plus},{Lv2}. Not yet in ROM mode: the font and the message box preview. Message box preview: for FireRed, LeafGreen and Emerald the preview draws the selected message in the game's own font, read from the base ROM in a worker thread, page by page, in the game's text width and two-line box. A line that is too wide, or a third line without a line scroll or a page break, gets a warning under the box. Ruby and Sapphire have no font entry yet. C-built name tables: the names the C code reads sit in fixed-size fields, so they cannot grow. They unpack to their own files intext\: species (412,species_names.inc), moves (move_names.inc), abilities, types, trainer classes, items (item_names.inc), trainer names (trainer_names.inc) and berries. A field longer than its size shows the warning Byte budget exceeded under the editor line; the build refuses it and gives the byte count. FireRed, LeafGreen, Emerald, Ruby and Sapphire also have their move, ability and item descriptions, nature names, Pokédex descriptions and Pokédex categories in the project. These texts may grow: a longer text moves to free space and its pointer is rewritten. The texts the C code builds (the string literals of the decompilation) are also in the project when the ROM holds each one as a single text; they unpack totext\c_<source file>.inc. Texts of other languages and of debug code are not in the English ROM and are left out. The item descriptions ofitems.json, the trainer and decoration name fields (every place of one name is a field of one unit; they unpack to a new table file named after the source, for exampletext\c_trainers_h.inc), and the English messages the ROM holds that no source names, for example the text of the multiboot programs (text\c_rom_messages.inc), are in the project too. Picture, palette, font and sound bytes are not texts and are not opened. Build target Recomp package writes one folder per dump:EmeraldRecomp\emerald\(Emerald),FireRedLeafGreenRecomp\firered\and...\leafgreen\. Each holds the translated ROM,recomp.json,run_UA.bat(starts the port with--rom-sha1) andREADME_UA.txt. A changed build of Emerald, FireRed or LeafGreen also holdsrecompile_UA.sh: it runs the port's importer andgba_recompileon that ROM and the build's ELF (WSL), then builds the port. A changed build moves code, so the stock release stops at a dispatch miss and the port must be rebuilt with this script. The BIOS dump stays with the user. Preview: the message box is drawn in the game's own font (Ruby / Sapphire: font 3, 4bpp, read from the ROM). Default tag aliases include{Kun},{Version}and the team and leader names; argument codes have aliases:{COLOR:Red},{HIGHLIGHT:Red},{SHADOW:DarkGray},{Pause}(waits for a press),{PlaySE:Select},{PlayBGM:LevelUp}and{FONT:Normal}.{PAUSE}with a frame count has no alias. Each alias builds the bytes of its raw tag. -pokemon_trinity— Pokémon Scarlet/Violet (+ The Teal Mask, The Indigo Disk) and Pokémon Legends: Z-A (+ Mega Dimension) (Switch, Game Freak's Trinity engine). Source: the workspace'ssource(1_unpack.batreads only the needed packs ofarc\data.trpfsand puts there, at the game's paths, the English textmessage\dat\English\{common,script}\*.dat— Z-A:ik_message\...— the fontsappli\font\bin/ui\font\binand the English layout archives*_eng.arc). The Project Manager wizard does this itself with Picoripi's readers: the base game and its update, and the Oodle library file, which the wizard asks for once and remembers (the packs are Oodle-compressed). The output equals the workspacesource, file by file. The Switch build target writes the changed files and a patched index for each title: Scarlet from its base and update, Violet from the other version's roles (its own base and update). Translation:translation. One block per message file (Scarlet/Violet 913 files, 85,331 lines; Z-A 427 files, 76,810 lines); the.tblnext to each file gives every line its label (the line's name in the game); variables read{VAR 0101 0000},{PAGE},{SCROLL},{COLOR 0001}, icons{CHAR E300}; grammar branches carry their two texts,M{GENDER 00FF|aster|iss},{VERSION 00FF|Ko|Mi}raidon(Scarlet | Violet), and their lengths are written again on save. The Font Editor opens the.bfotfand.bffntfonts; the Textures window opens the BNTX pictures of the English layouts (title logo, menus).2_build.batwrites the changed files into a LayeredFS mod with anarc\data.trpfdthat no longer points the game to the packed originals (a changed English layoutX_eng.arcalso goes in asX.arc: the game reads language layouts only from its packs); Scarlet and Violet share one project and get the same mod. Message box preview: the box is drawn from the game's own layout with the.bfotffonts. Scarlet / Violet:msg_sub_00.bflyt(sub-window archive). Legends: Z-A:msg_00.bflytinmsg_body_00.arc, placed by the outermsg_body_00.bflytat y -370; the wizard writes that archive (its view isview_msg_body_00.truiv). The window picture is not drawn. The Z-A glyph size is not measured yet. -wii_sysfont— the Wii system bitmap fontswbf1.brfna/wbf2.brfna(the NW4R archived fonts of the System Menu, shipped as copies on discs that draw prompts with them, e.g. Raving Rabbids: Party Collection). The vWii NAND of the EUR console has the same two files; its WiiNTLG-Regular.ttc faces (fonts/WiiNTLG-Gothic.ttf,fonts/WiiNTLG-PGothic.ttf) open in the Font Editor as TTF. A face cannot be written back into the collection yet. Source: the workspace'ssource(1_unpack.battakes the fonts from Dolphin's NANDshared1content or from the Rabbids disc copies and prepares the Ukrainian letters: І і Ї ї get the glyphs of I i Ï ï, Є є Ґ ґ get empty cells at the end of the ASCII sheet); Translation:translation. The Font Editor opens both fonts (brfna);2_build.batwrites the fonts for a disc (build\disc\fonts) and, when the NAND was the source, the shared content for a NAND (build\nand\shared1). -pokemon_md_3ds— Pokémon Mystery Dungeon: Gates to Infinity and Pokémon Super Mystery Dungeon (3DS, EUR), one plugin for both games. Source: the workspace'ssource(1_unpack.bat): the English message files — Gates to Infinitymessage\*.bin(884 files, 55,081 lines), Super Mystery Dungeon the members of themessage_en.binpack asmessage_en.bin\*.bin(808 files, 68,716 lines), its debug label copiesmessage_debug_en.bin\*.dbin(808 files, 68,716 labels) and the scripts with textscript\...\*.lua(Lua 5.1 string constants: the credits, debug labels; 28 files, 359 lines) — one block per file (story, dungeon, item, move and Pokémon names and descriptions incommon, menus, Pelipper and Connection Orb text); the fontsfont\*.dic+*.img(Font Editor formatpmd_font) and the picturesimage_2d\*.img/image_2d.bin\*.img(title logo, menus; Textures window formatpmd_img). The wizard unpacks the image itself (Picoripi readers; the Super Mystery Dungeon CIA needs the 9.6 seed from the key folder,seeds\orseeddb.bin) and writes the same tree as1_unpack.bat. Build target 3DS mod (LayeredFS) writestitles\<title id>\romfs\...: a changed loose file as it is, a changed pack member rebuilt into the game's own pack. Preview: Gates to Infinity draws the intro dialogue on the top screen with the game's font (FOT-RodinProN-DB_14, the box at y 170..232); Super Mystery Dungeon draws the story text on the top screen withFot-TskuARdGothic_Std_B_14at scale 1.0 (no panel, line pitch 24). Gates to Infinity marks every line wider than the box edge (text width 320 px); the game does not word-wrap there. Tags:[CN]centre a line,[K]wait for a button,[C]new box,[hero]/[partner]/[my_team]names,[CS:06]…[CR]colour,[M:B05]button icons,[value:02:0003:0001]numbers and inserted names (keep them as they are); a literal bracket is[[/]]. Text may grow:2_build.batlays each message file out again and repacks the packs. -senran_kagura_burst— Senran Kagura Burst (3DS, EUR). Source: the workspace'ssource: the 432TAMSmessage filesromfs\scenario\{hanzo,hebijo}\*.bin(3,759 messages of any length: story chapters and conversations;{v02001}voice,{cff0000ff}…{r}colour,{b008},{s022}stay as typed), the strings compiled intoexefs\code.bin(2,629 menu, mission, item and battle texts, 200 to a block, written in place: a text may not be longer than the original), the five.bcfnafonts (cfna, no new letters) and the BCLIM pictures inside theromfs\ui\lyt_*.binpacks (a pack ofdarcarchives; a compressed pack is compressed again), CTPK gallery pictures and logos.2_build.batwrites a Luma mod (code.bin+romfs). -attack_on_titan_3ds— Attack on Titan: Humanity in Chains (3DS, USA). Source:romfs\_catfiles_lists\system.cf(5,501 UTF-16 strings, written in place: a translation may not be longer than the original) and 293.ctpkpictures; the.rhgUI pictures and the font are not opened. -dragon_ball_fusions— Dragon Ball Fusions (3DS, EUR). Source:message\msg_en.jmsg(18,683 strings of any length), nine atlas fonts (jfnt; the packed outline fontdefault01is not opened) and 2,099.jtexpictures (jimg) fromDOF.cpkand its.jarcarchives;2_build.batwrites a newDOF.cpk. -gravity_falls_gemulets— Gravity Falls: Legend of the Gnome Gemulets (3DS, EUR, UbiArt). Source:localisation.loc8(six languages, 1,542 strings each), two glyph-table fonts (ubiart_tfn: a new letter is a new table record) and 619.tga.ckd/.png.ckdpictures (ubiart_tex) of the.ipkbundles, which the build packs again. The credits are not opened. -rhythm_paradise_megamix— Rhythm Paradise Megamix (3DS, EUR). Source: the 18 English MSBT files in the.zlibSARC archives (5,715 messages; tags named bypajama.msbp), ten BFFNT fonts and 2,318 BFLIM / CTPK / CGFX pictures; the build packs the changed members into the.zlibfiles again. -default_plugin— Default Plugin Template - After open, the last session is restored (block, string, undo stack, most filters). Show Unsaved Only (tree and strings list) is always off after a restart (
core/data_store.py). File → Close Projectunloads the workspace. It does not quit Picoripi.
Do not point Source and Translation at the same writable tree if you still need a clean original. Do not bundle copyrighted dumps in this repo.
3. File menu
| Command | Shortcut | What it does |
|---|---|---|
| New Project… | Ctrl+N | Wizard above |
| Open Project… | Ctrl+O | Load a project.uiproj |
| Recent Projects | Last workspaces | |
| Project Manager… | Ctrl+Shift+M | The list of added projects. See below |
| Close Project | Unload. Disabled until a project is open | |
| Import Block… | Add one file. Project mode only (tooltip: “only available in Project mode”) | |
| Import Directory… | Add a folder of files. Same restriction | |
| Save Changes | Ctrl+S | Write every unsaved string. No confirm dialog |
| Save Changes As… | Copy translations to a new location | |
| Reload Original | Re-read source files from disk | |
| Revert Changes File to Original… | Throw away the translation file and start from source | |
| Export Translations to JSON… | Round-trip translations. Disabled with no project | |
| Export Original to JSON… | Dump source strings | |
| Fill Terms from the Glossary… | Preview the strings a series glossary term translates; fill the untranslated ones. Fill the other projects of the series writes the other projects' backups. See wiki 8 | |
| Import Translations from JSON… | Load a previous export | |
| Reload Tag Mappings from Settings | Re-apply aliases after you edited plugin settings | |
| Settings… | Ctrl+P | Preferences |
| Exit | Quit; session checkpoint is written |
Partial save: right-click a block → save that block only. Do not use Revert unless you mean to discard the translation file.
Project Manager
The Project Manager opens at start when no project is open. It lists the projects you added. A project is added when you create, open or import it.
- Add: press
+. Choose New project (a wizard), Add existing project (aproject.uiprojfile), or Import projects from a folder. File → New Project (Ctrl+N) opens the same wizard. - New project wizard: choose the game (type a part of its name to find it); its name fills Project name, which you can change. Then add the files: the game, its update and its DLC, as files (Add files...) or unpacked folders (Add folder...). Each file gets a role (Base game, Update or DLC) and a platform: from the game's plugin, else from the file's own header (a Switch or 3DS title ID tells base, update and DLC apart; a folder tells its platform by its files or by a folder name in its path such as
Switch, and a game on one platform gives that platform; else the platform reads Not detected). The role names stay English in every interface language. The platform list holds the platforms of the game's plugin, or every platform Picoripi knows when the plugin names none. Change them if needed; to give many files one role, select their rows, pick the role beside Apply and press it. Only DLC may repeat. The Status column and the red text under the list say at once what stops the project: two files with one role, a file this game cannot read (add its unpacked folder instead), or an encrypted file without its console's key file (Add the key file for ... gives it, or add the unpacked folder). Next stays off until the list is fine. A folder row shows the last three parts of its path. Then choose the project folder. Create project shows a progress window at once while the files are matched in the background; when the project is open, the Project Manager closes. The originals are not copied; the project refers to them by path. To keep a translation folder you already have, tick Use an existing translation folder and choose it; Picoripi then creates no translation files in it. A game of one file has no folder for translations, so the option is refused for it. When the game needs unpacking, the wizard unpacks into the project folder. Cancel stops the unpacking and removes what it wrote. A game image that the chosen game cannot unpack is refused: the wizard says so and asks you to unpack the image into a folder first; nothing is created. A project that fails to create or to open is removed and is not kept as the last project. At start, a last project that fails to load, or makes no progress for two minutes, is forgotten, its reason is shown, and the Project Manager opens. For a GameCube or Nintendo DS image the wizard first checks that the drive has room (the image size plus 10 %, or 256 MB when that is larger) and stops before writing if it does not. Some games use only part of the unpacked files: the project then starts from that folder (for example Twilight Princessfiles/res/Msgus). Metal Gear Solid: The Twin Snakes takes two discs: add each disc and the wizard gives it its role. Picoripi reads GameCube ISO and NKit discs, Nintendo DS ROMs, Nintendo 3DS programs (.3ds,.cia,.cxi, decrypted or encrypted), Switch.nsppackages and Wii discs; GameCube and Wii RVZ and WIA images are read as they are (a Wii one needs no key file: the format stores the partition decrypted), and.xcineeds an NSP first. Encrypted files need the key file of their console: 3DSaes_keys.txt(withboot9beside it when the workspace uses one), Switchprod.keysor Wiikeys.bin. The wizard asks for a console's key file once, and only when the game's plugin unpacks that console; it remembers only where the file is. If you cancel that dialog, the wizard stops and creates nothing. No game plugin unpacks Switch or Wii files yet, so the wizard asks for no Switch or Wii key for now. Picoripi checks no hashes of the decrypted data. - Unpacking: a GameCube disc (ISO or GCM) or a Nintendo DS ROM (
.nds) is unpacked into the folderunpackedinside the project folder. Picoripi recognises the file by its content. The game's plugin decides which files it keeps. GameCube RVZ and WIA files are read as the disc they hold (the file is read only, never converted or written; the rebuilt disc is still a plain ISO). Wii RVZ and WIA files are read the same way and need no key. NKit files of other kinds are not read: convert them to a plain ISO first. A game that needs no unpacking, for example a Game Boy Advance ROM, uses the file as it is. - Import: finds
picoripi/project.uiprojfiles under a folder. Folders named_…or.…are skipped. Duplicates and unreadable projects start unchecked. Each series folder becomes one manager folder. - Folders and shared glossaries: create your own folders. Right-click a project → Move to folder. Deleting a folder moves its projects to the top level. A folder can optionally own a shared series glossary (Group glossary... button or right-click folder header → New shared glossary... or Link shared glossary...). Projects in the folder automatically inherit the shared glossary across translation, fill and series tabs, while existing personal links and ancestor
_glossarydiscovery remain intact without duplicate links. Moving a project between folders, removing it from the manager, or unlinking/deleting the folder updates only the group-derived association; a project whose file is missing is skipped. - Order: the last opened project is always at the top. Group and sort choices are saved.
- Search: the Search projects field above the list filters as you type. Ctrl+F moves the cursor into it; Esc clears it. It matches the project name, series, platform, plugin, the manager folder (group) the project is in and the folder path, ignores case, and works with Ukrainian and Latin letters. Each word must match one of these fields. Groups without a match are hidden, and group counts show the matches. Searching reads no files.
- Closing: with no project open, closing the Project Manager (close button, Esc or Alt+F4) quits Picoripi, as File → Exit does. With a project open, closing it returns you to that project.
- Views: List (default) shows a row per project with a 64 px icon, name, platform, series, plugin, progress (translated of the strings that need a translation, with a bar), last opened and status flags. Grid shows the same projects as 128 px tiles. Select a tile to see its details under the grid: the same details as an expanded row in the list. Groups apply to the list only.
- Icons: a project's icon is
icon.pngbeside itsproject.uiproj, scaled to 128 px. Without one, the game's plugin may supply a picture; without that, a coloured tile with the series initials is shown. Change icon... (row menu or Details) copies a picture you choose, scaled to 256 px. Clear icon removes that file only. The wizard asks no icon: a new project takes the game's own picture when Picoripi reads it from the base image (the 3DS icon or the GameCube banner; not yet Switch, Wii or a folder). Use Change icon... on the row to replace it. - Scan and progress: a scan reads the cards, icons and counts of all projects in a separate process, so the window stays responsive. It reads every project's name first (about a second), so the list and the search have all names at once. A project without a name in its file is shown under its game folder (the folder above
picoripi). While the icons and files of each project are checked, a strip above the list shows "Checking 37 of 191 projects..."; then it shows "Scanning 37 of 191 — name — about 2 min left"; Hide hides the strip and the scan goes on; Cancel scan stops it after the project being counted; if the scan process does not stop within 2 seconds, it is ended. The strip hides when the scan ends. Rows whose counts are not known yet show…. - Cache: the second start shows the last counts at once and scans again only what changed: a project whose project file, plugin config, or a source or translation file it names changed since the last count is counted again. So does a project after a change to its game's Python files, to the shared plugin files, or after a Picoripi update. Other projects keep their counts. The cache is
project_index.jsonandpm_iconsin the data folder; deleting them only costs a new scan. - Columns: lines and translated % are counted in the background, also for projects you have not opened. Blocks inside archives are not counted yet.
- Plugin missing: a project whose game plugin is not installed shows the flag Plugin missing and is not counted. Nothing is deleted.
- Details: expand a row to see the path, the source files you chose with their roles, the stats, a list of the folders with their blocks and lines, the files of the source folder by kind (text, font, texture, other: counted on a worker the first time the row opens, and kept until the manager closes; the game's plugin may name a file's kind, otherwise its extension decides), and what needs attention (for example blocks with no translation file yet). Two flags, Built and Verified in game, are set only when you tick them. The details also show the series glossaries the project uses (the folder glossaries above it and an explicit link), with the number of terms in them, whether the glossary is linked or found in the folders above, and how many of the project's strings another project of the series translated; the manager reads them and writes nothing.
- Build mod: builds the game's targets into the project's
buildfolder. A game that declares no target shows the button off. - Export mod: copies a built target to a folder you choose. The folder must be empty.
- Share project... (Details button or row menu): packs the project into one
.zipfor another person. The package holds the project folder, the translation files and the linked series glossaries. It does not hold the original game files. Sessions, caches, backups and theunpackedandbuildfolders are not packed either. A path in the project files is written relative to its folder (game, translation or project). A path outside these folders (fonts, references, game images) is cleared, so the package holds no path of your computer. Changes that are not saved in the editor are not in the package: save the project first. - Import shared project... (
+button): choose the package, a folder for the project and your own original game files (the extracted game folder, or a file when the sender used one). Picoripi unpacks the project intopicoripi, the translation intotranslationand the glossaries intoglossariesof that folder, writes your paths and adds the project to the manager. These folders must be empty. Set cleared paths again in the project settings. - Run in emulator: builds the target and starts the emulator of the target's platform on it. Set one command for each platform with Emulator... (one line per platform). Write
{path}where the built file or folder goes, for example"C:\Emu\emu.exe" {path}. The item is off for a platform with no command. The Emulator... dialog shows one line for each platform that a build uses; a line with no name appears only for a build that has no platform. A command saved before per-platform commands applies to every platform until that platform has its own line. - Icon: a project can show a picture of its game. It is the file
picoripi/icon.pngnext toproject.uiproj(PNG, up to 256 px). A project without the file has no picture.scripts/harvest_project_icons.pyfills missing icons from the game's own files; it never replaces an existingicon.png, and without--applyit only prints a table. - Remove from manager never deletes project files.
Already extracted game: in New Project, step 2, choose Add extracted game folder... instead of adding an image. Choose the folder containing the game's expanded text tables (for Yo-kai Watch, the workspace's source folder containing data/.../*.cfg.bin; a RomFS holding only .fa archives is not enough). The wizard validates the folder on a worker, uses it in place, and skips extraction and keys. This source folder is separate from Use an existing translation folder. Use one source folder at a time. If the plugin cannot unpack an image, the wizard explains that limitation. For a missing or unsuitable console key, Add key file... lets you replace it and retry in the same wizard, preserving the source and location choices. Missing crypto dependencies and malformed images retain their own error messages.
4. Edit menu
| Command | Shortcut | Notes |
|---|---|---|
| Undo Typing | Ctrl+Z | Editor and Speaker field |
| Redo Typing | Ctrl+Y or Ctrl+Shift+Z | |
| Save Translated | Ctrl+T | Snapshot of the current translation (local backup). Disabled until a string is selected |
| Restore Translated | Ctrl+Shift+T | Bring that snapshot back |
| Undo Paste Block | Enabled after a block paste | |
| Paste Block Text | Ctrl+Shift+V | Paste a whole block’s worth of lines |
| Find… | Ctrl+F | Toggle the inline search panel. F3 next, Shift+F3 previous |
| Advanced Search… | Ctrl+H | Project-wide search/replace |
| Auto-fix Current String | Ctrl+Shift+A | Current string. Ctrl-click the Auto-fix button to pick rules. The shortcut always runs the plain fix |
| Rescan All | Ctrl+Shift+R | Force widths, every warning, the Blocks tree, editors and preview. Use when the tree looks stale or after font/tag/width changes. Same control as the toolbar button. Right-click one block for that block only |
5. View menu
| Command | Shortcut | Notes |
|---|---|---|
| Preview | Ctrl+Shift+P | Checkable. Shows or hides the visual preview under Editable |
| Hide Tags | Ctrl+Q | Hide control codes in Original and translation panels |
Same hide-tags toggle exists as the Hide tags checkbox above Original.
6. Tools menu
This is the localization pipeline plus utilities. Prefer Localization Pipeline… over clicking items at random. Same actions live in the wizard.
| Command | Shortcut | Role |
|---|---|---|
| Localization Pipeline… | Ordered steps + status. Thin: every button runs the same action as the menu | |
| Font Editor… | Bitmap fonts in a separate window; the project stays open. Opens Nintendo .bfn (Twilight Princess, Wind Waker), the message font inside an N64 Zelda ROM (OoT, MM), Hyrule Warriors .g1t atlases, Age of Calamity .g1n fonts, Switch and Wii U .bffnt (The Wind Waker HD: big-endian, GX2-tiled sheets; Paper Mario: Color Splash: two-tone BC5 sheets, shown as the letter in grey over its shape in alpha), Wii .brfnt (Skyward Sword HD and Wii: GX I4 sheets) and the 3DS fonts: .bcfnt / 3DS .bffnt (A Link Between Worlds, Tri Force Heroes), Grezzo .qbf (Ocarina of Time 3D) and .gzf (Majora's Mask 3D), and the Switch scalable fonts .bfotf / .bfttf (Tears of the Kingdom, Animal Crossing: widths are saved as the glyph advances, a redrawn glyph is saved as an outline traced from its pixels, CFF or TrueType), 2bpp text fonts of Metal Gear Solid: The Twin Snakes and of Metal Gear Solid (PlayStation, font.res) and the 12x12 text font of Vagrant Story (regular and italic, with the advances of BATTLE.PRG; the two staff-roll fonts of ENDING.PRG) and the Tingle Tuner's GBA tile font inside client_u.bin of The Wind Waker (each from its project only), Nintendo DS .nftr (Four Swords Anniversary Edition) — open them with Open (no project needed; Save writes the file back). In a font that maps Unicode characters (.bffnt, .g1n and the 3DS fonts), typing a letter into an empty cell's character column adds that real character to the font (no translation slot; a character the font already has is refused): draw the glyph in a free cell and give it its letter. The game's own fonts, named by its plugin, are listed in the font tree and open from the project (the translation copy once there is one); Save writes the translation copy and the font's widths with the translation map to <project>/font_maps/, which the width checks read. Hyrule Warriors DE takes its advances from a table in the game's executable, not from the atlas: the editor shows that table (in atlas pixels) and Save also writes it as executable patches exefs/<build id>.ips in the translation folder, one per game version (the workspace's 2_build.bat puts them into the mod). Wind Waker also lists its name-entry and system fonts; Twilight Princess lists its text and ruby fonts (the archives in res/Fontus). Render System Font to Glyphs takes a TTF/OTF through Font File... (no install needed) and can Thicken strokes for small heavy fonts; with baseline alignment each rendered letter is moved to stand on the font's own Latin baseline (р у ф hang like p, д ц щ line up by their top); Move glyph (◀ ▲ ▼ ▶ or Ctrl+Arrow keys) shifts the selected glyphs' pixels 1 px inside their cells, with undo, in every format. Uses the same Language as the rest of the app Two identical copies (same format, cell size and code layout) can share changes. The editor asks once; the checkbox "Copy changes to: " turns a pair on (off by default). A save copies the copy's own changes to the other copy, and the latest change per glyph wins; the log is font_sync.json in the project. If the other copy is open with unsaved edits, its file is not written: the glyphs wait there until it is saved or reopened, and the save message counts them. When a code of the translation map has no cell in the font, opening the font gives the code an empty cell in memory and marks the font unsaved: nothing is written until Save, and Save writes the map to the project (no project: the user's plugin folder, never plugins/). |
|
| Textures… | Ctrl+E export, Ctrl+I import, Ctrl+O open, F5 reload | Text baked into game textures (title cards, menu labels, logos) in a separate window; the project stays open. The textures the game's plugin names are listed with a thumbnail, the game file, the pixel format, the size and a status (Not started / Redrawn / Checked in game, kept in <project>/textures/status.json); the selected one is shown original next to translated. Export PNG… / Export All… save PNGs into a folder (default <project>/textures/png) under stable names made from the game file and member; redraw them in any image editor, then Import PNG… (one texture; another size is resized after a question) or Import Folder… (every PNG whose name matches). Picoripi encodes the image in the game's own format (GameCube/Wii BTI, TPL and BMD/BDL model textures, GBA tiles inside a packed multiboot program, 3DS BFLIM/BCLIM, CTPK and Grezzo CTXB (also the textures inside CMB models and CMAB animations) in ZAR/GAR/LzS archives, Wii U BFLIM and GX2 (GTX, TMPK packs), Switch BNTX (BC1-BC5, BC7, every ASTC block size; also the BNTX inside a model's BFRES), Koei Tecmo G1T, Retro TXTR (Metroid Prime 4), GBA / DS character tiles, N64 textures in the ROM, PlayStation TIM and headerless 4/8/16-bit pictures, Vagrant Story GIM screens, help sprites and the compressed title screen, Retro TXTR of the Wii Metroid Prime games, PSP GIM, Policenauts picture packs, Metal Gear Solid PCX and M2 PSB pictures, Level-5 IMGC and G4TX, Wii U BFRES textures) and writes the translation copy, repacking the archives around it, so the workspace's 2_build.bat puts it into the mod; only the changed blocks are encoded again. Revert puts the original back. File → Open Texture File… opens a texture or an archive of them directly (games without a plugin, such as the 3DS ones); that file is then edited in place. PNGs exported from 3DS BCLIM and flag 0 BFLIM textures before this change were upside down or cut off; re-export them before editing. Not yet: BRRES model textures (Wii) |
| Script Markup Studio… | Mark a walkthrough (Phase 0 for MemePalace). See 9 | |
| MemePalace Context Builder… | Ctrl+M | Weave the marked script into story memory |
| Prepare Glossary… | One automatic glossary pass | |
| Merge Speakers from Script… | Match script names to game voice codes. Needs plugin capability speaker_attribution |
|
| AI Batch Translation ➔ | Submenu: Translate Story First, Translate Remaining Blocks, Translate All (Story ➔ Semantic) | |
| Inspect Story Context… | Ctrl+I | Timeline, speaker, visual context for the selected row |
| MemePalace Database Viewer… | Ctrl+Shift+I | Rooms, visual contexts, character graph |
| Fix All Strings… | Project-wide Auto-Fix with a rule checklist | |
| Export Current BMG to JSON… | Selected BMG only. Disabled until a BMG block is selected | |
| Import Current BMG from JSON… | Into the selected block |
Loading fonts: the Font Editor shows an indicator immediately while reading and decoding a project font. Cancel loading stops adopting that request. During glyph-table preparation, the status shows the completed and total glyph counts; the window stays responsive. Selecting another font keeps only the latest load result. Cancelling before the new model arrives preserves the previous font. Cancelling a partially filled table clears that table and disables it until another font is loaded. Closing the window discards late load callbacks; queued writes still finish in order.
7. Navigation menu
| Command | Shortcut |
|---|---|
| Next Block Nav | Alt+Shift+Down |
| Previous Block Nav | Alt+Shift+Up |
| Next Folder Nav | Alt+Shift+Right |
| Previous Folder Nav | Alt+Shift+Left |
Shortcuts are window-wide. Ctrl+PageUp / Ctrl+PageDown also move to the previous/next block (ui_event_filters.py). The up/down arrows next to AI Translate jump problem strings (Ctrl+Down / Ctrl+Up). Alt+Down / Alt+Up (and Up/Down in the Strings list) move one string regardless of warnings.
8. Bookmarks menu
| Command | Shortcut | Notes |
|---|---|---|
| Add Bookmark… | Ctrl+B | Current line of the active block. Needs an open project. |
| Clear All Bookmarks | Permanent delete from this project |
The menu lists only bookmarks for the open project. They are stored in that project's .uiproj (metadata.settings.bookmarks), not in settings.json. Closing the project clears the menu. If a project has no bookmark list yet, leftover entries for its name in the old global settings.json are copied into the project once.
8a. Language menu
Language lists every locales/<code>.json that already has UI translations. The label is @language_name inside that file (English, Українська, …). Changing it writes ui_language and asks for a restart.
A missing string in the chosen catalog is shown in English. Russian is never listed. Fill more catalogs with tools/i18n-translate/run.bat; they appear in the menu after a restart. Font Editor uses this language too.
9. Help
Help sits as a corner button on the menu bar (not a normal left-to-right menu).
| Command | Shortcut |
|---|---|
| Shortcuts Help | F1 |
Opens Keyboard Shortcuts Reference. Mouse modifiers (Ctrl-click, Shift-click) are documented on each button’s tooltip, not in that table.
Shortcuts listed in F1:
| Action | Shortcut |
|---|---|
| Save Project/File | Ctrl+S |
| Hide/Show Tags in Editor | Ctrl+Q |
| AI Chat Window | Ctrl+Shift+C |
| Open Glossary | Ctrl+G |
| Shortcuts Help | F1 |
| Settings | Ctrl+P |
| Undo | Ctrl+Z |
| Redo | Ctrl+Y / Ctrl+Shift+Z |
| Find Text | Ctrl+F |
| Advanced Search | Ctrl+H |
| Find Next | F3 |
| Find Previous | Shift+F3 |
| Paste Block Text | Ctrl+Shift+V |
| Auto-fix Current String | Ctrl+Shift+A |
| Navigate to Next Problem | Ctrl+Down |
| Navigate to Previous Problem | Ctrl+Up |
| Select Next String | Alt+Down / Down (in Preview) |
| Select Previous String | Alt+Up / Up (in Preview) |
| Next Block | Alt+Shift+Down |
| Previous Block | Alt+Shift+Up |
| Next Folder/Category | Alt+Shift+Right |
| Previous Folder/Category | Alt+Shift+Left |
| Next / previous block (extra) | Ctrl+PageDown / Ctrl+PageUp |
10. Toolbar
Left to right (toolbar_builder.py):
Save · Undo · Redo · Find · Preview · AI Batch Translation (opens pipeline mode chooser) · Open AI Chat (Ctrl+Shift+C) · Font Editor · Rescan All (Ctrl+Shift+R) · Settings · (spacer) · Run External Script (>_) · Shortcuts Help.
AI Translate and AI Variation are not on this toolbar. They sit above Editable.
Run External Script runs the path in Settings → Global → External Tool/Script Path. Save (Ctrl+S) before you run a ROM build; the tool reads files on disk.
AI Chat: in the chat input, Ctrl+Enter sends; Enter adds a new line.
11. Blocks tree (left)
Header buttons: add folder (disabled until a project is open), expand all, collapse all. Ctrl+wheel over the tree zooms the tree font.
Show Unsaved Only (above the tree): only blocks and folders with unsaved changes. Session-only; always off after restart.
Tree toolbar (bottom of the panel; buttons start disabled):
| Button | Action |
|---|---|
| + | Add / import a block |
| − | Delete the selected block |
| ✎ | Rename |
| ↑ / ↓ | Reorder. Drag-and-drop also moves. Alt+Shift+Up/Down navigates, it does not move |
| ⟳ | Rebuild Speakers, Chapters and Items from current story data. Does not touch translation files |
Glossary… under the tree opens the project glossary (Ctrl+G). Ctrl-click a glossary term in Original to open that entry.
Glossary Dialog Layout & Controls:
- Left Panel (Terms & Categories):
- Top: Search bar for filtering terms in real time.
- Middle: Category tabs (_tab_widget) organizing entries into semantic domains ("Characters", "Items", "Locations", etc.).
- Bottom: Dedicated bottom bar with the Needs review (_unconfirmed_only_checkbox) filter checkbox, filtering the table to unconfirmed terms without taking up horizontal search bar or vertical detail space.
- Right Panel (Term Details):
- Side-by-Side Term & Translation: Synchronized QGridLayout with uniform 26px height. The original term is read-only, selectable, constrained to 280px max width, and features an interactive Wiki ↗ button linking directly to game lore search (via BaseGameRules.get_external_reference_url). The editable translation is paired with a compact Confirm button.
- Dedicated Action Row: Positioned directly below the translation input field to allow the input unobstructed full width (up to 400–550px+). Contains a prominent Save button (Ctrl+S, which lights up in blue #2563eb when uncommitted edits exist), Confirm translation (advances to next unreviewed term), and Discuss with AI… (opens chat with full term context).
- Unsaved Changes Navigation Protection: A confirmation dialog (Save / Discard / Cancel) appears when selecting another row, switching tabs, or closing the dialog with uncommitted edits.
- Description & Notes: Includes the Profiled via AI checkbox in the section header with a descriptive tooltip indicating character speech profiling status.
- Collapsible Sections: Description, AI Notes, and Occurrences panels feature collapse/expand toggle buttons ([▼]/[▶]) to optimize vertical space.
- Granular Occurrence Filtering: Independent checkboxes for Mentions (text references) and Spoken (lines spoken by this character).
- Reference Line Preview & Occurrence Alignment: For each dialogue occurrence, the preview shows the complete original message and the full corresponding reference record for that (block, string) without trimming surrounding lines. Long previews scroll vertically, even when there is only one occurrence. The occurrence is highlighted within the full original text, and matching reference terms are highlighted within the reference lines while preserving all line breaks. The RU: block is displayed only when the reference is explicitly identified as Russian; other reference languages provide evidence to the AI translator without displaying an RU: badge in occurrences.
- In-Place Variant Application & Double-Click: Double-clicking any proposed variant or clicking Apply selected variant inserts the candidate translation and updates notes in place without advancing to the next row. Confirmation and progression to the next term are strictly decoupled and triggered by clicking Confirm translation. Reference variants from external patches are styled distinctly (cyan/italic) and protected from double-click application.
- Bottom Toolbar: Contains Force Retranslate... (highlighted in orange #ea580c, creates automatic glossary.json.bak backup before AI re-translates entries) and [☁ Companion Sync...] for 1-click push and pull synchronization with Picoripi Companion.
Right-click (empty space): Create Folder, AI: Translate All Blocks (UA Chronological), Revert All Blocks to Original, Restore All Translations.
Right-click a file: import, save this block, rescan, widths, markers, restore. Chapters root and Act folders have no context menu (read-only structure).
Status bar (bottom of the window): Original path, Changes path, Plugin name, Strings: N | Unbound: N, then cursor Pos / Line / Width.
12. Strings in block (top right)
Click a line to bind Original + Editable immediately. The BFN preview follows about a frame later. Glossary, spellcheck, tags, and warnings catch up after you stop typing (~1.5s). The list itself is read-only.
| Checkbox | Effect |
|---|---|
| Highlight moved | Highlight strings already in a virtual category. Hidden unless categories apply |
| Hide moved | Hide those strings from the parent view. Hidden unless categories apply |
| Hide empty strings | Collapse consecutive empty strings into a placeholder |
| Hide translated | Hide already translated strings |
| Show Overrides Only | Only strings with custom font or width |
| Show Unsaved Only | Only strings with unsaved changes. Always off after restart |
| Show Warnings Only | Only strings with selected warning types |
| Warnings: X / Y | Choose which warning types the filter uses. X = selected types, Y = types enabled in Detection |
Several filters can combine. Do not leave Show Unsaved Only on and assume the file is empty — uncheck it.
13. Original, Reference Tabs, and Editable
Reference tabs appear only when that language has nonblank text for the selected row. A language missing from that row stays hidden.
Yo-kai Watch discovers existing language tables in the source/reference folders and workspace romfs/*.fa archives automatically.
Discovery runs in the background and reads game files without changing them. An explicit reference path takes priority.
Languages may cover only part of the game. A fan reference appears only where it contains matching text.
Yo-kai Watch in-game message window preview renders dialogue and system windows using Level-5 XF font glyphs, layout metrics, control tags ({CR}, {CG}, {CY}, {PAGE}), and route-aware hero substitutions ({PNAME} -> Nate / Katie).
Cross-platform translation reuse between 3DS and Switch shares accepted memory entries through the series registry; missing Switch layout measurements are treated as unverified candidates for manual confirmation and do not block permitted duplicate followers in batch runs.
Source Panel (Left)
- Dynamic Reference Tabs: When a reference patch or multi-language ROM / ISO is configured in project settings (Settings → Project → File Paths → Reference Translation / ROM Path), the panel dynamically generates comparison tabs (
Original (EN),Russian (RU),German (DE),French (FR),Italian (IT),Spanish (ES)). A game image the plugin unpacks first (an RVZ or ISO of another region) is read in the background into a folder of the project; that folder then becomes the reference path. - Read-only, selectable, with synchronized line scrolling and cursor movement across all language views.
- Max-width: click the value to copy it into the translation Max-width field, then press Apply on the right.
- Hide tags (
Ctrl+Q): toggles control code visibility across all source and translation tabs.
Column of icon buttons (between the panes)
| Button | Action |
|---|---|
Arrow (→) |
Copy active source string — copies text from whichever tab is currently active (Original or reference translation) into the target translation editor |
| Document+arrow | Restore translation — last backup (Ctrl+Shift+T) |
| S | Inspect story context (Ctrl+I) |
| R | Open in Script Markup Studio — jump to the marked-script place for this string |
Editable (Right)
- This is where you type.
- Vertical Level Synchronization: An event filter (
HeaderSyncFilter) dynamically calculatesleft_header.height = right_header.height - tab_bar.height, ensuring the top line of text editors on both sides starts at the exact same vertical Y level across all screen resolutions and DPI scaling. - Under it: visual BFN preview (if Preview is on) with a window-kind bar when the plugin supports it.
Do not apply Font / Max-width without Apply. Apply is enabled only while there is an unapplied change.
14. Story Context & Controls (above Editable)
Organized into a compact 2-row header above the editable pane:
- Row 0: Window: and Chapter: on the left; Navigation ([↓][↑]), AI Translate, AI Variation, and Auto-fix on the right.
- Row 1: Speaker: on the left; Font:, Max-width:, and Apply on the right.
| Field | Behaviour |
|---|---|
| Window: | Message window type from game data. Double-click the label to open the physical block |
| Chapter: | Assign this row to a Story chapter or scene, including rows without a script link. Double-click the label to open the virtual Chapter |
| Speaker: | Editable combo with autocomplete. Enter commits the name (save_speaker_for_current_string). Clicking a drop-down item alone does not save. Double-click the label to open virtual Speaker or Item |
| Font: | Per-string font override |
| Max-width: | 0 = plugin default. Right-click: Reset to Plugin Default, Set Width from Original |
| Apply | Save Font and Max-width for this string |
None in Speaker clears the assignment. Empty BMG padding is not stuffed into Speakers; do not invent a speaker for those slots.
15. Action buttons above Editable
| Button | Click | Modifiers |
|---|---|---|
| Down / Up arrows | Next / previous problem string (Ctrl+Down / Ctrl+Up) | Alt+Down/Up = next string anyway; Alt+Shift+Down/Up = next block |
| AI Translate | Translate the current string. Reuses a backup if one exists | Ctrl-click: prompt editor + always re-translate. Multi-string: select lines in Strings, right-click |
| AI Variation | Alternative wording of the current translation | Select a fragment in Editable first to rewrite only that. Ctrl-click: prompt editor |
| Auto-fix | Fix issues with every enabled rule (Ctrl+Shift+A) |
Ctrl-click: pick rules. Shift-click: page-local (text never flows across a page). Ctrl+Shift-click: both. The keyboard shortcut is always the plain fix |
If an AI task is already running, Translate shows AI Busy.
16. Settings (Ctrl+P)
Window title Settings. Tabs:
| Tab | Contents |
|---|---|
| Global | Theme (restart), Active Game Plugin (restart), font sizes, external script path, Wiimms ISO Tool (wit.exe) path, space dots, restore session, prompt editor before AI, live preview, real-time warning scan, glossary system, archive size warnings, auto-sleep idle delay |
| Project | Only with a project open. Subtabs: File Paths (Directory Mode, Auto-generate translation path, original/changes/fonts paths, Reference Translation / ROM Path with popup selector for folder or .iso), Display, Rules, Context Tags, Tag Aliases, Font Map, Detection, Auto-fix (Align sentences to original page layout, Prevent adding empty padding lines during pagination, plus per-problem toggles) |
| Spelling | Enable spell checking, dictionary language, Manage Dictionaries… |
| AI Translation | See 11 |
| AI Glossary | Provider, key, Use API key from AI Translation, model, chunk size, Parallel Requests, Retry Delay |
| Companion | Server URL, API token, Test Connection, automatically sync on project open/close (see 12) |
| Logging | Console / file / ai_traffic.log, log path, event categories |
Theme change and plugin change each show a restart required dialog.
17. What not to do in the main window
- Do not edit Original.
- Do not treat an empty Strings list as a bug before unchecking Show Unsaved Only and Hide empty strings.
- Do not Revert the changes file unless you intend to wipe translations.
- Do not skip Save before
>_. - Do not set Parallel Requests higher than Active accounts on the local proxy dashboard.
- Do not run glossary / merge / bulk translate with no provider configured.
- Do not treat empty BMG slots as unbound dialogue — they stay in the physical file only.