Tôi xem mấy cái video hướng dẫn của bác về cách dịch rom SNES tiếng Nhật thì biết cách tìm font, vẽ lại font, thay đổi text, nhưng có điều font gốc tiếng Nhật nó dùng khung font hình vuông trong khi font chữ latinh là hình chữ nhật đứng, cho nên nếu vẽ lại trực tiếp từ font tiếng Nhật thì các ký tự nó bị giãn khoảng cách chứ không nằm sát nhau, ngoài ra có một số game nó dùng font chữ rất to nếu chuyển qua ký tự latinh nhìn sẽ rất xấu. [1]
Tôi thấy trong bản hướng dẫn dịch FF9 có nhắc đến việc có thể thay đổi độ rộng ký tự nhưng không có hướng dẫn cụ thể, bác có video nào hướng dẫn cách thay hoặc thêm font khác vào rom không? [2]
Với lại text trong rom gốc có giới hạn cố định số ký tự trong 1 câu, thường khi dịch 1 câu tiếng Nhật sang tiếng Việt thì sẽ rất dài không đủ để viết, nhưng rom bác dịch thấy câu từ rất thoải mái không có giới hạn này, bác có video hướng dẫn cách viết text dài không?[3]
Trả lời lại từng ý cho rõ ràng hơn.
[1] Độ rộng của font
Có 2 loại font, là mono-space (fixed width) và proportional (variable width), dịch ra tiếng Việt là font có độ rộng bất biến và loại có độ rộng khả biến.
Tất cả mọi game từng được sản xuất đều có font thuộc một trong số hai loại font này, không có loại khác.
Đối với loại đầu, font có độ rộng cố định thì cần debug để tìm hiểu cách mà CPU đọc bộ font đó như thế nào, rồi từ đó viết thêm code để khi CPU render từng ký tự thì phải tham chiếu đến bảng dữ liệu độ rộng mà ta thêm vào.
Chẳng hạn game gốc sử dụng độ rộng cố định là 8 pixel cho mỗi ký tự. Khi đó ta cần vẽ bộ font mới với các chữ cái lần lượt có kích thước
a= 7 pixel
b= 6 pixel
i = 3 pixel
Tiếp đến, phải code lại để khi CPU render ký tự "a" thì nó đọc dữ liệu 7 pixel, để rồi bất cứ ký tự nào được render sau "a" sẽ đứng cách vị trí của "a" là 7 pixel.
Hầu hết các bản dịch game ăn thua nhau ở khoảng này.
Còn đối với bộ font có độ rộng khả biến sẵn thì mọi việc đơn giản hơn. Lúc này ta không cần code thêm gì cả. Việc duy nhất cần làm là debug để xem CPU đọc dữ liệu độ rộng từ đâu, rồi chỉnh lại (mod/modify) dữ liệu đó cho hợp với nhu cầu, với bộ font mới.
Chẳng hạn game gốc có độ rộng của "a" = 7 pixel nhưng ta vẽ bộ font mới nhỏ hơn, thì chỉ cần chỉnh lại dữ liệu đó thành con số nhỏ hơn 7 là được.
Dù game có dùng loại font nào đi nữa, độ rộng của từng ký tự là cố định hay khả biến đi nữa thì độ cao của ký tự luôn là bất biến.
Tuy nhiên, ta hoàn toàn có thể chỉnh sửa độ cao của ký tự bằng Assembly.
[2] Thêm font/thay font
Đầu tiên cần debug để biết CPU đọc font tại vị trí nào trong Rom.
Khi đã biết địa chỉ Rom thì mọi việc còn lại đơn giản thôi. Vẽ bộ font mới rồi chèn vào vị trí đó.
Hoặc cũng có thể chèn vào bất kỳ vị trí nào khác trong Rom, rồi chỉnh lại code để CPU load font đúng chỗ.
Một số game tiếng Anh có số slot ký tự trong bộ font rất ít, không đủ slot chứa toàn bộ ký tự có dấu của tiếng Việt thì làm cách này.
Sau khi biết được cách mà CPU load font thì ta có thể chèn thêm bao nhiêu loại font vào cùng một game cũng được.
Lúc đó chỉ cần đặt flag cho từng loại font là được. Chẳng hạn, có thể buộc CPU trước khi load font thì phải đọc giá trị ở một vị trí Ram nào đó, rồi từ đó chọn loại font tùy vào giá trị của địa chỉ đó.
[3] Kích thước thoại
Hầu hết các bản dịch đều có kích thước thoại phình to hơn so với bản gốc, nên sẽ nảy sinh vấn đề không gian.
Bản dịch dài hơn thì sẽ lấn vào vùng dữ liệu khác có thể khiến đơ game.
Còn nếu cố gắng viết sao cho bản dịch nằm gọn trong vùng không gian có sẵn thì bản dịch bị gò bó tù túng, nhiều khi sai lệch ngữ nghĩa vốn có.
Để giải quyết vấn đề này thì cần phải chuyển khối text sang vị trí trống mới, hoặc cắt nó thành nhiều phần, bố trí vào nhiều nơi khác nhau.
Trong Rom luôn có những vùng trống không chứa dữ liệu mà ta có thể tận dụng.
Hoặc giả không còn bất kỳ chỗ trống nào thì ta vẫn có thể mở rộng Rom để tăng thêm không gian trống.
Lúc này cần chỉnh lại vị trí mà CPU load text là được.
Dĩ nhiên, để chỉnh được thì cần phải debug để hiểu cách mà CPU load như thế nào.
Để đọc được debug thì cần phải hiểu đặc thù phần cứng + ngôn ngữ máy của nó. Không có cách nào khác.