[NDS] Hướng dẫn dịch Harvest Moon The Tale of Two Towns

2town.png

Sau đây mình sẽ hướng dẫn cách việt ngữ game từ Text game cho đến font

Phần mềm sử dụng trong bài viết:

  • CrystalTile2
  • Tinke
  • Notepad
  • HxD
  • Caculator
  • Cartographer
  • Atlas
  • No$gba

Xác định Text game:

Dùng Tinke mở Rom game lên

Capture.PNG

Do bản Rom mình đang dùng là bản của USA nên nhập vào ô tìm kiếm (trong hình là Buscar:) là us và kết quả:

Capture2.PNG

Game có mã hóa Encoding đơn giản, nên bạn dùng trình xem Hex có sẵn của Tinke, là ra file chứa text. Cụ thể như file mes_data_us.bin

3.PNG

Ở đây, 2 file là event_mes_data_us.bin và mes_data_us.bin chính là file chứa text ta cần tìm.

Cấu trúc file:

Sau khi đã tìm được file chứa text bây giờ đến công đoạn xác định cấu trúc file như nào.

Mở file event_mes_data_us.bin lên bằng trình xem Hex ở đây mình dùng HxD.

File này thuộc dạng pack file .

4.PNG

4 byte đầu là số lượng file đã được pack: 50070000

Bạn chú ý con số 5007.

Do hệ máy NDS đọc dữ liệu theo kiểu Little endian, nên bạn đọc ngược lại thành 0750.

Đổi ra hệ 10 được 1872 -> có 1872 file được pack.

Từ các byte tiếp theo cho đến 0x3A83 có dạng:

[Địa chỉ lệch][Kích thước file pack]

Địa chỉ thực = ([Số file pack]*8) +4 + [Địa chỉ lệch]

Từ đó có thể tự viết tool unpack file này.

Ở đây do CrystalTile2  có hỗ trợ định dạng pack này nên mình sẽ hướng dẫn unpack và pack file này lại.

Mở file bằng CrystalTile2 lên sẽ xuất hiện một list danh sách file đã pack

5.PNG

Chọn file muốn unpack nhấn chuột phải -> Export. Ở đây mình sẽ export file đầu tiên để xác định pointer.

Xác định pointer:

6.PNG

Mở file đã export ra bằng HxD ta thấy tại 0x00 là 80, 0x04 là 8E -> pointer sử dụng 4 byte (32bit) dạng Little endian.

Pointer dạng này gặp ở rất nhiều game, giá trị của nó cũng chính là địa chỉ trỏ đến đầu đoạn text.

Lập Table:

Bạn nhìn xuống vị trí 0x80 là 2208,

0x82 là 4508 -> dạng XX08 -> dùng 2 byte cho một charset -> lập table 16 bit (2 byte)

Charset của game này có một chút thay đổi với bảng mã ASCII, lấy ví dụ pointer đầu tiên trỏ đến đoạn text:

“.E.N.C.H….’

hex:  22 08 45 08 4E 08 43 08 48 08 0E 08 0E 27

Pointer thứ 2:

/.U.T.S.I.D.E…O.F…T.O.W.N….’

hex : 2F 08 55 08 54 08 53 08 49 08 44 08 45 08 00 08 4F 08 46 08 00 08 54 08 4F 08 57 08 4E 08 0E 08 0E 27

Bạn nhìn thấy chữ cái đầu bị sai không ? cả mấy chữ đằng sau là chữ in hoa không phải in thường.

Ở đây charset của game đã bị dịch chuyển xuống 0x20h so với bảng mã ASCII

nghĩa là bình thường thì chữ ‘a’ theo ASCII có mã là 0x61 thì chữ ‘a’ trong game

có mã = 0x61 – 0x20 = 0x41 thành ra trong trình xem hex nó mới hiện toàn chữ in hoa ở đằng sau và chữ đầu tiên thì lại là các kí tự.

Từ đó ta lập được table………..

Còn một cách đơn giản hơn là dùng Relative Search.

Có được table rồi + cách thức hoạt động của pointer ta hoàn toàn có thể viết tool để dump text. Do pointer dạng này đơn giản nên có thể dùng Cartographer cho tiện.

Text sau khi dump:

7.PNG

Font:

Tiếp theo đến một phần quan trọng không kém là tìm font và việt hóa font.

Tại ô tìm kiếm của Tinke tìm với từ font sẽ ra 1 kết quả là file font_data.bin

file này cũng được pack lại. Gồm các Palette của font và 2 bộ font.

Mở file này bằng CrystalTile2 ở đây chúng ta không cần phải export file như trên. Mà chuyển qua phần hiển thị Tile của phần mềm chỉnh các thông số như sau như trong hình:

8.PNG

Việc còn lại là việt hóa font -> lập table tiếng việt -> insert text (viết tool hoặc Atlas)  -> repack ->done

Đây là kết quả:

9.PNG

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s