rpg-maker · how-to · engine · control-codes
Cách dịch game RPG Maker
RPG Maker là engine dễ dịch nhất vì văn bản nằm trong các file dữ liệu thường. Cách nhận biết phiên bản, xuất bản dựng đã dịch chơi được và giữ nguyên mã điều khiển.
RPG Maker là engine bạn dễ gặp nhất khi tìm game indie Nhật, và cũng là engine thân thiện nhất với việc dịch. Văn bản của game không bị biên dịch vào file thực thi, mà nằm trong các file dữ liệu JSON hoặc Ruby-serialised thông thường, đặt ngay cạnh game. Nhờ vậy việc dịch RPG Maker mới làm được, và quy trình dưới đây kết thúc bằng một bản dựng bạn chơi được thật, chứ không phải lớp phủ đoán chữ trên màn hình.
Hướng dẫn này nói về cách nhận biết bạn đang có bản RPG Maker nào, quy trình xuất, chính xác những gì được dịch, cách mã điều khiển sống sót qua trình dịch máy, và việc cần làm khi một dòng dịch sai. Bạn đọc được dù có dùng RuneTranslate hay không.
Tôi đang có RPG Maker nào?
Phần lớn người hỏi câu này không biết mình đang cầm phiên bản nào, mà đáp án quyết định bạn làm được gì. Mở thư mục game và tìm mục đầu tiên trong danh sách này khớp với những gì bạn thấy:
- Thư mục `www/` chứa
www/data/*.json: RPG Maker MV. Game là một ứng dụng nw.js, file thực thi thường làGame.exenằm cạnhwww/. - Thư mục `data/` trần có các file
.jsonvà không cówww/: RPG Maker MZ. MZ đưa mọi thứ lên một cấp, đây là cách nhanh nhất để phân biệt hai bản. - `Data/` chứa
.rxdata,.rvdatahoặc.rvdata2: lần lượt là RPG Maker XP, VX và VX Ace. NếuData/trông như trống, hãy tìmGame.rgssad,Game.rgss2ahoặcGame.rgss3aở thư mục gốc; đó là cùng dữ liệu đó nằm trong một kho nén. - `RPG_RT.exe` ở thư mục gốc cùng các file
.lmtvà.lmu: RPG Maker 2000 hoặc 2003. Đây là một thế hệ engine hoàn toàn khác. - Một file
.exenặng hàng chục hoặc hàng trăm megabyte mà không cówww/haydata/bên cạnh: nhiều khả năng là bản dựng Enigma Virtual Box với dữ liệu đóng gói bên trong file thực thi. Xem phần bên dưới.
MV và MZ giống nhau đến mức người ta hay nhầm, nhưng chúng khác ở những điểm quan trọng khi bắt đầu chỉnh sửa. Bài so sánh MV và MZ đi qua bố cục thư mục, định dạng plugin và khác biệt ở khung thoại.
Văn bản game RPG Maker 2000 và 2003 không được hỗ trợ. RuneTranslate chỉ đọc các file lưu .lsd của chúng qua trình sửa tệp lưu và không làm gì thêm. Nếu bạn có game dùng RPG_RT.exe và muốn dịch kịch bản, công cụ đúng là EasyRPG, không phải công cụ này. Rời trang này ngay còn hơn mất một giờ để tự nhận ra.
Quy trình bốn bước
- Trỏ Dự án mới vào thư mục game. Chọn thư mục chứa
Game.exe. Engine được phát hiện từ nội dung bên trong, bạn không chọn MV hay MZ từ danh sách thả xuống, và nếu kết quả phát hiện khác với điều bạn nghĩ thì đó là thông tin đáng đọc. - Chọn nhà cung cấp và ngôn ngữ đích. Có mười một nhà cung cấp, trong đó bốn nhà không cần khóa API hay tài khoản nào.
- Dịch. Trình chạy gom các dòng thành lô, thử lại các lô lỗi với độ trễ tăng dần, và hiển thị thanh tiến độ thật cùng thời gian còn lại ước tính. Bạn sửa được bất kỳ dòng nào trong bảng khi đang chạy và sau khi chạy xong.
- Xuất bản dựng chơi được vào một thư mục bạn chọn. Thứ nằm ở đó là một bản sao đầy đủ, chạy được của game, với các file dữ liệu đã dịch được đặt đúng chỗ.
Thư mục game gốc không bao giờ bị sửa. Mọi thao tác ghi đều đi vào thư mục xuất bạn đã chọn, nên một lần xuất hỏng chỉ tốn chút dung lượng ổ đĩa: xóa đi rồi xuất lại. Điều đó cũng có nghĩa bạn có thể giữ bản tiếng Nhật được cài sẵn và chơi được song song.
RuneTranslate chạy trên Windows 10 và 11, và chạy gốc trên Linux và Steam Deck. Lần mở đầu tiên cần đăng nhập miễn phí (Patreon, Google hoặc email). Gói Miễn phí mở khóa mọi engine và mọi nhà cung cấp trừ RuneLingua, chỉ giới hạn tốc độ xử lý và cho giữ một dự án mỗi lần, chứ không khóa tính năng sau tường phí.
Những gì thực sự được dịch
Với MV và MZ, bộ trích xuất đi qua mọi file bản đồ và mọi danh sách lệnh sự kiện, rồi lấy ra các lệnh tạo ra văn bản người chơi nhìn thấy:
- `401` Show Text: dòng hội thoại. Đây là phần lớn nội dung của một game RPG Maker.
- `405` Show Scrolling Text: đoạn mở đầu, credits, thư từ, phần dẫn truyện cuộn.
- `102` Show Choices: các mục trong cửa sổ lựa chọn. Nhãn nhánh
When [choice]hiển thị từ cùng mảng này, nên dịch lựa chọn là dịch cả hai. - `320` / `324` / `325`: Change Actor Name, Nickname và Profile, mà game dùng cho các màn tiết lộ và biến hình giữa truyện.
- Cơ sở dữ liệu:
Actors.json(tên, biệt danh, tiểu sử),Classes.json,Skills.json(tên, mô tả và các dòng chiến đấumessage1/message2),Items.json,Weapons.json,Armors.json,Enemies.json,States.json. - `System.json`: tên game, đơn vị tiền tệ và toàn bộ bảng thuật ngữ hệ thống: mọi nhãn menu, tên lệnh và chuỗi trạng thái cơ bản mà engine vẽ ra.
- Tên bản đồ trong `MapInfos.json` và
CommonEvents.json: sự kiện chung chứa lượng kịch bản đáng ngạc nhiên ở những game dẫn hội thoại qua một trình xử lý dùng chung. - Tham số plugin trong
plugins.js, và đối số lệnh plugin của MZ (mã lệnh357). Nhiều game MV/MZ hiện đại để văn bản menu ở đây.
Chú thích sự kiện (108 và các dòng nối tiếp 408) là ghi chú của nhà phát triển mà engine không hiển thị cho người chơi, nên mặc định bị loại trừ. Chúng không bị xóa mà xuất hiện như các dòng tùy chọn để bạn tích chọn, vì một số plugin bong bóng thoại và popup có hiển thị chúng. Nhãn sự kiện và popup khi lại gần của VisuStella, vốn nằm trong chú thích, được nhận ra và dịch như hội thoại. Cách xử lý này áp dụng cả cho thứ mà bộ phân loại cho là mã định danh hoặc đường dẫn file: bị loại trừ, vẫn nhìn thấy, đảo ngược được.
Mã điều khiển, và vì sao chúng làm hỏng bản dịch
Hội thoại RPG Maker không phải văn bản thuần. Nó mang các mã escape nằm trong dòng, mà engine mở rộng khi vẽ:
\C[1]: đổi màu chữ sang chỉ số 1 trong bảng màu.\N[2]: thay bằng tên của nhân vật số 2.\V[3]: thay bằng giá trị của biến số 3.\G: đơn vị tiền tệ.\I[123]: vẽ biểu tượng số 123 ngay trong dòng.\.\|\!\{\}: chờ một nhịp, chờ một giây, chờ nhập, phóng to phông chữ, thu nhỏ lại.
Đưa thô bất kỳ mã nào trong số này cho trình dịch máy, bạn sẽ nhận lại chúng bị méo mó. Google Translate đổi thứ tự của chúng. Mô hình cục bộ nhỏ làm rơi một dấu ngoặc, viết thường chữ cái, hoặc thay ngoặc ASCII bằng ngoặc toàn chiều rộng. Một LLM thỉnh thoảng cho rằng \C[1] là lỗi đánh máy và tiện tay xóa nó. Kết quả trong game là khung thoại in ra một dấu gạch chéo ngược nguyên văn, mất màu giữa chừng, hoặc để trống ở chỗ lẽ ra là tên nhân vật.
RuneTranslate che mọi mã thành chỗ giữ chỗ có đánh số, như [[T0]], [[T1]], trước khi nhà cung cấp nhìn thấy chuỗi, rồi khôi phục chúng từ bảng ánh xạ sau đó. Việc khôi phục được cố ý làm khoan dung: nó chấp nhận chỗ giữ chỗ trả về thiếu một bên ngoặc, có thêm khoảng trắng bên trong, bị viết thường hoặc dùng ngoặc toàn chiều rộng, vì thực tế cả bốn trường hợp đều xảy ra. Nếu một mã mất hẳn thì dòng đó được gắn cờ, không bị lặng lẽ xuất đi.
Hai trường hợp ít rõ ràng hơn cũng nằm trong cùng cơ chế. RPG Maker còn dùng cách thay thế kiểu printf, như %1 và %2 trong Terms và trong thông báo chiến đấu của kỹ năng, chẳng hạn %1の攻撃! với %1 thành tên nhân vật, và những mã này cũng được che, vì nhà cung cấp yếu sẽ bịa ra rác ngoặc ở chỗ đó. Và nhiều game kèm plugin thay tên dùng các token trần trong ngoặc như [名前] hoặc [呼名] mà engine đổi thành tên người chơi lúc chạy; chúng cũng được che, đủ hẹp để văn xuôi có ngoặc thông thường không bị đụng tới.
Các mã nhiều chữ do plugin định nghĩa, như \FFF[20] hay \FH[ON], khớp cùng mẫu và được bảo vệ mà không cần cấu hình riêng cho từng plugin.
Ngắt dòng ở 46 ký tự
Tiếng Nhật chứa nhiều ý hơn hẳn tiếng Anh trên mỗi ký tự. Một dòng vừa vặn thoải mái trong khung thoại khi còn tiếng Nhật sẽ tràn ra mép phải sau khi dịch, và RPG Maker không tự ngắt dòng cho bạn: nó cứ vẽ ra ngoài cửa sổ, phần tràn không nhìn thấy được. Bạn sẽ không nhận ra cho đến khi có người chơi báo rằng mất nửa câu.
Khi xuất, hội thoại trong lệnh 401 và 405 được ngắt ở 46 ký tự mỗi dòng, xấp xỉ sức chứa của khung thoại mặc định với cỡ chữ mặc định. Chỗ ngắt được chèn ở ranh giới từ, và các dòng mới có sẵn trong văn bản gốc được giữ nguyên, nên ngắt trang và ngắt dòng có chủ ý của tác giả vẫn còn. Game có hệ thống thoại tùy biến hoặc cỡ chữ nhỏ hơn có thể cần một con số khác; game vẽ chữ trong cửa sổ rộng hơn sẽ chỉ ngắt sớm hơn mức cần, đó là vấn đề thẩm mỹ chứ không phải lỗi.
Ảnh đóng gói và kho nén
MV và MZ có thể phát hành ảnh ở định dạng đóng gói, được đổi tên thành .rpgmvp hoặc .png_. RuneTranslate đọc chúng thẳng từ file, kể cả các biến thể do một số plugin tạo ra, và ghi lại bất cứ thứ gì nó đổi theo cùng định dạng để game vẫn nạp được.
Với XP, VX và VX Ace, kho nén .rgssad / .rgss2a / .rgss3a được đọc trực tiếp và dữ liệu Ruby Marshal bên trong được phân tích bằng Rust, không cần cài Ruby, không cần công cụ giải nén ngoài. Game XP và VX lưu văn bản không gắn thẻ mã hóa (Shift-JIS hoặc UTF-8, RuneTranslate nhận diện theo từng game), nên các trường hợp biên về mã hóa dễ xảy ra hơn so với MZ.
Chữ được vẽ thẳng vào hình, như màn hình tiêu đề, nút menu hay biển hiệu trong CG, không nằm trong file dữ liệu nào và không bộ trích xuất nào với tới được. Đó là việc của Studio ảnh: phát hiện vùng chữ, xóa nền, dàn chữ thay thế, rồi ghi ngược vào định dạng ảnh của chính game, kể cả các định dạng đóng gói.
Game đóng gói bằng Enigma Virtual Box
Khá nhiều game RPG Maker được phát hành không có thư mục www/ hay data/ nào nhìn thấy, vì toàn bộ hệ thống file ảo được đóng gói vào file thực thi bằng Enigma Virtual Box. Dấu hiệu nhận biết là điểm đánh dấu EVB\0 trong file exe và một thư mục game trông trống đến đáng ngờ.
Loại này được phát hiện và xử lý. Hệ thống file đóng gói được giải nén vào không gian làm việc riêng của dự án, dữ liệu được trích xuất và dịch như bình thường, và khi xuất thì toàn bộ hệ thống file ảo được ghi ra thành một thư mục chạy được: file thực thi bên trong đã khôi phục, các DLL của nó và www/, với dữ liệu đã dịch được vá vào. Bạn chạy file thực thi bên trong đã giải nén, lúc này là một game đã giải nén thường, đọc các file dữ liệu rời.
Buộc phải làm theo cách này. Cách làm trước đây là đặt một www/ đã dịch cạnh file thực thi đóng gói, và nó lặng lẽ không có tác dụng: lớp bọc đang chạy lấy www/ từ hệ thống file ảo nhúng sẵn của chính nó và bỏ qua file trên đĩa. Nếu bạn tự làm bằng công cụ khác, đây là cái bẫy: bản dịch trông như đã áp dụng nhưng game vẫn nạp văn bản gốc.
Chọn nhà cung cấp nào
Có mười một nhà cung cấp được hỗ trợ, trong đó bốn nhà không cần khóa API và không cần tài khoản ở đâu cả: Google, endpoint DeepL miễn phí, DeepL với lựa chọn mô hình Classic hoặc Next-gen, và Gemini Nano chạy ngay trên PC của bạn qua Chrome. Bạn có thể dịch trọn một game RPG Maker mà không trả tiền cho ai hay đăng ký thứ gì. Các lựa chọn trả phí là DeepL API, OpenAI, Anthropic Claude, DeepSeek, bất kỳ endpoint tương thích OpenAI nào, và một mô hình cục bộ qua Ollama hoặc LM Studio nếu bạn muốn không có gì rời khỏi máy. Các gói trả phí còn kèm RuneLingua, dịch AI do chúng tôi làm, không cần cài đặt gì.
Tóm tắt riêng cho RPG Maker: nhà cung cấp miễn phí ổn với menu, tên vật phẩm và các dòng ngắn, và là nơi phần lớn mọi người nên bắt đầu. Chúng yếu ở từ tượng thanh: nếu nhà cung cấp trả về nguyên văn bản gốc, dòng đó bị đánh dấu lỗi kèm ghi chú, thay vì âm thầm cho tiếng Nhật lọt vào bản xuất. LLM tốt hơn rõ rệt ở hội thoại dài, giọng điệu và bất cứ chỗ nào sắc thái lời nói của nhân vật quan trọng. Bài so sánh nhà cung cấp có đầy đủ các đánh đổi, còn bộ tinh chỉnh AI nói về việc chạy lượt thứ hai trên bản dịch đã xong để làm mượt.
Giữ tên nhất quán
Lời phàn nàn phổ biến nhất về game RPG Maker dịch máy là nhân vật chính bị gọi bằng bốn tên khác nhau. Bảng thuật ngữ giải quyết chuyện này: ghim cách đọc bạn muốn cho mọi nhân vật, địa danh, vật phẩm và kỹ năng trước khi chạy, và mọi lô đều dùng nó. Hướng dẫn bảng thuật ngữ đi qua cách xây một bảng. Bộ nhớ dịch cũng giúp theo hướng đó: các chuỗi gốc giống nhau cho bản dịch giống nhau trên toàn dự án, điều quan trọng với một engine mà cùng một mô tả vật phẩm xuất hiện ở cửa hàng, menu và sự kiện rương.
Một cái bẫy riêng của RPG Maker: một số plugin dò theo chuỗi tên của người nói bằng so sánh bằng tuyệt đối, và họ plugin TRP Skit cho MZ là ví dụ nổi tiếng. Nếu bạn dịch tên trong Actors.json mà để nguyên trong dữ liệu của plugin, việc so khớp thất bại âm thầm, và ảnh nhân vật hay đoạn skit không bao giờ chạy. RuneTranslate đồng bộ cả hai phía khi xuất. Nếu bạn tự sửa tay, hãy nhớ rằng một cái tên trong RPG Maker có thể vừa là văn bản hiển thị vừa là khóa tra cứu.
Khi có gì đó trục trặc
Một dòng vẫn còn tiếng Nhật
Ba nguyên nhân thường gặp. Dòng đó chưa bao giờ được trích xuất, vì nó nằm ở nơi bộ trích xuất không đi tới, như file dữ liệu riêng của một plugin tùy biến hoặc chữ nằm trong ảnh. Hoặc nó đã được trích xuất nhưng bị loại trừ, vì bộ phân loại coi nó là mã định danh; hãy tìm nó dưới dạng dòng tùy chọn và tích chọn. Hoặc nhà cung cấp trả về nguyên văn bản gốc, hiện ra là một dòng lỗi mà bạn có thể chạy lại bằng nhà cung cấp khác. Nếu bạn đã dịch game trước khi cập nhật ứng dụng, hãy dùng Re-scan source trong menu ⋯ của trình chỉnh sửa: quét lại chỉ thêm dòng mới, không bao giờ xóa bản dịch có sẵn của bạn.
Chữ tràn khỏi khung thoại
Cách ngắt dòng mặc định nhắm vào cửa sổ mặc định. Game có hệ thống thoại tùy biến, cỡ chữ lớn hơn, hoặc ảnh chân dung chiếm nửa khung sẽ cần dòng ngắn hơn. Sửa trực tiếp dòng gây lỗi và tự chèn ngắt dòng: ngắt dòng thủ công được giữ nguyên qua khâu xuất. Đây cũng là cách xử lý khi bản dịch đơn giản là quá dài dòng: hãy viết lại ngắn hơn thay vì chống lại cơ chế ngắt dòng.
Game không khởi động sau khi xuất
Hầu như luôn là do file dữ liệu hỏng chứ không phải do văn bản dịch sai. Kiểm tra xem bạn đã chạy file thực thi trong thư mục xuất chứ không phải bản gốc. Với bản dựng EVB, hãy chắc rằng bạn đang chạy file thực thi bên trong đã giải nén. Nếu một sự kiện cụ thể làm game sập, nghi phạm là một mã điều khiển không sống sót: mở dòng đó ra và so các mã của nó với bản gốc. Giữ nguyên thư mục game gốc để luôn có một bản chạy tốt làm mốc so sánh.
Một chuỗi plugin không được dịch
Tham số plugin trộn văn bản hiển thị với tên công tắc, đường dẫn file, phím tắt và cờ chế độ trong cùng một khối. Thứ gì trông như mã định danh hoặc đường dẫn sẽ tự động bị loại trừ, nhưng plugin dùng từ tiếng Nhật làm khóa nội bộ thì sẽ lọt qua. Đánh dấu các dòng đó là loại trừ và chúng giữ nguyên ngôn ngữ gốc khi xuất. Bộ lọc regex làm việc này hàng loạt khi tham số plugin có chung mẫu đặt tên.
Những giới hạn thẳng thắn
- Văn bản game RPG Maker 2000 / 2003 nằm ngoài phạm vi. Chỉ hỗ trợ file lưu, qua trình sửa tệp lưu. Dùng EasyRPG cho kịch bản.
- XP, VX và VX Ace là mảng gồ ghề hơn MV/MZ. Bộ đọc kho nén và bộ phân tích Ruby Marshal thuần Rust chạy được, nhưng XP và VX để văn bản không gắn thẻ mã hóa (Shift-JIS hoặc UTF-8, nhận diện theo từng game), nên hãy kiểm tra trong game các đích có dấu hoặc không phải chữ Latin.
- Văn bản trong JavaScript của một plugin tùy biến được liệt kê khi game hiển thị nó. Lệnh vẽ, nhãn và các chuỗi hiển thị khác trong plugin riêng của game trở thành dòng; chuỗi mà code đem so sánh hoặc tra cứu thì giữ nguyên, và một plugin khác thường vẫn có thể cần sửa tay.
- Game MZ phát hành dữ liệu ở dạng được bảo vệ cũng được hỗ trợ; hãy kiểm tra bản xuất trước khi cam kết một lượt chạy dài.
- Không gì ở đây thay thế được việc chơi thử bản dựng. Số dòng trích xuất và thanh tiến độ xanh không phải bằng chứng. Hãy mở game đã xuất và đọc mười phút đầu.
Hai thứ liên quan đáng biết
Chế độ gian lận đọc công tắc, biến và vật phẩm của chính game RPG Maker và cho bạn bật tắt chúng, đây là cách nhanh nhất để tới một sự kiện cuối game mà bạn cần kiểm tra bản dịch, và cũng là cách phần lớn mọi người kiểm tra bản xuất mà không phải chơi lại hai mươi giờ. Trình sửa tệp lưu mở trực tiếp các file lưu MV/MZ, XP/VX/VX Ace và 2000/2003 .lsd, nên một lượt chơi bị kẹt hay thiếu vật phẩm chính sẽ không làm bạn dừng cuộc chơi.
Nếu muốn nhìn bức tranh rộng hơn trước, danh sách engine liệt kê cả mười tám định dạng được hỗ trợ, trang engine RPG Maker có chi tiết về định dạng, và hướng dẫn chung là bản của bài này không gắn với engine cụ thể. Khi sẵn sàng, trang tải xuống có bộ cài.
Bài liên quan
Sẵn sàng thử RuneTranslate?
Gói miễn phí mở khóa mọi engine và mọi nhà cung cấp dịch trừ RuneLingua. Supporter ($3.99/tháng) mở khóa tốc độ tối đa.
Tải cho Windows & Linux
