Issue [GBA] Thảo luận Việt hóa game Legend of Zelda: The Minish Cap

Thảo luận trong 'Tut - Tool hướng dẫn dịch game' bắt đầu bởi Lợi LÔ, 22/8/17.

  1. Lợi LÔ

    Lợi LÔ Thành viên cấp 1

    Xin chào anh em,

    Mình là thành viên mới của diễn đàn. Mê game, đặc biệt là các game Việt hóa do mình muốn hiểu hết ý nghĩa của game.

    Mình cũng mới chập chững học hỏi anh em về cách Việt hóa một tựa game thôi. Mình dự định Việt hóa trò chơi Legend of Zelda: The Minish Cap - Một tựa game được ra mắt năm 2004 trên hệ máy GBA của Nintendo.

    Qua tìm hiểu và trao đổi với bạn @NáNì và bạn @sulypac thì các bạn ấy đã hỗ trợ mình về Tool để thực hiện như sau:
    - Tilemolester: dùng để xem và vẽ ảnh, font (hiện tại mình chỉ biết có thế :) )
    - Crystaltile2: cũng dùng để xem tile ảnh cũng như font còn vẽ được hay không mình chưa biết dùng do phần mềm có cả tiếng Trung làm mình khó hiểu.
    - Cartographer chưa rõ chức năng*
    - Atlas chưa rõ chức năng*
    * mình có mầy mò rồi nhưng chưa hiểu rõ lắm. Sẽ cập nhật 2 tool này sau.
    - Ngoài ra, tất nhiên rồi, Unikey để gõ tiếng Việt, Notepad để ghi lại changelog, readme các thứ các thứ :) và một số phần mềm khác.

    ROM mình sử dụng bản ROM hệ US.
    Tất cả có trong link dropbox sau: https://www.dropbox.com/sh/7a7e61igdn5cp49/AACQWiSTEiu37NibtYvxmiZ6a?dl=0

    Về font chữ, 2 bạn ấy đã tìm ra giúp mình địa chỉ (offset) của font chữ là $692F60 và có kích thước Tile là: 8x16 4bpp GBA.

    Mình rất mong các bạn góp ý và thảo luận để cùng nhau Việt hóa một trò chơi cực kì hay này nhé!

    Cảm ơn anh em!
     
  2. Lợi LÔ

    Lợi LÔ Thành viên cấp 1

    [bảo vệ]
    viết để có ít nhất 20 kí tự!
     
  3. Lợi LÔ

    Lợi LÔ Thành viên cấp 1

    Đây là hình ảnh mình mở font chữ bằng CrystalTile2.
    Hình trên mình điền mã $692F50 và hình bên dưới là $692F60
    Có thể thấy thay đổi địa chỉ thì dẫn đến font chữ bị thay đổi theo. Vậy mình có câu hỏi là:
    - Mình chưa hiểu "hiện tượng" như trong hình lắm, tại sao khi thay đổi offset như vậy hình ảnh nhìn như là bị xô lệch đi so với chuẩn ban đầu của nó?
    - Phương pháp tìm ra được offset font chữ (tùy thuộc ROM nhưng ít nhất với ROM này) sao cho chính xác và tiết kiệm thời gian nhất?

    Hình ảnh:
    [​IMG]
     
  4. sulypac

    sulypac Thành viên mới

    27
    19
    3
    Nam
    HCM
    Bạn kẻ lưới 8x16 tức là từ offset bạn nhập vào nó sẽ chia ô, phạm vi 1 chữ đúng là 8x16, hết điểm 8 dòng 16 thì nó nhảy lên điểm đầu ô tiếp theo, nhưng bạn lùi về với khoảng bắt đầu lưng chừng nên mới ra kiểu đuôi này đầu kia (theo hex thì từ 50 -> 60 có 16 byte = 32 điểm ảnh, chia 8 là 4 dòng, cũng là 4 dòng màu vàng ở đầu như bạn thấy đó, nên 4 dòng đuôi của kí tự đó bị đẩy lên đầu kí tự tiếp theo, và cứ thế cứ thế) nên offset 692F60 @NáNì tìm ra đã chuẩn rồi, có dời tới lui thì bạn hãy dời theo bội số của 128 dec hay 80 hex nhé

    Còn muốn mở bằng TileMolester, bạn cũng Navigate - Go to... tới 692F60, vào View - Zoom- 400% cho dễ nhìn (kéo cái khung rộng ra để khỏi lăn ngang), vào View - Codec - 4bpp linear, reverse order (hình như mặc định ban đầu lun nên khỏi đổi), để thấy chữ bạn vào View - Row-interleaved, kẻ lưới để thấy giới hạn từng ký tự trc hết bạn vào View - Block Size - Custom... - Columns 1 và Rows 2, sau đó View - Block Grid, hơi dài dòng nhỉ, di chuyển bằng nút lên xuống chứ ko phải chuột nhé.
     
    Lợi LÔ thích bài này.
  5. NáNì

    NáNì Thành viên cấp 1

    43
    28
    18
    Nam
    Việt Nam
    Hệ máy GBA sử dụng font dạng bitmap, là 1 mảng ma trận các byte. Bạn có thể tham khảo mấy bài của bác @Yugisokubodai .
    Còn cách tìm font thì mình thường mò thôi, không mò được thì debug.
    Về 2 tool thì:
    -Cartographer : dump text từ rom với table lập được
    -Atlas : Chèn text vào rom với table lập được
    2 tool trên đều có tài liệu đi theo, ban đọc nó để biết cách dùng.
     
    Lợi LÔ thích bài này.
  6. Lợi LÔ

    Lợi LÔ Thành viên cấp 1

    Bạn có hướng dẫn sử dụng trình debug nào không ạ? Mình tìm hiểu thì debug có nhiều tác dụng thật đấy :)

    Hiện tại mình đã xác định được font chữ và đang chuẩn bị vẽ font bằng tilemolester rồi ạ.

    Còn về độ dài của câu chữ và vùng an toàn thì mình vẫn đang tìm hiểu thêm. Như hôm trước bạn nói thì không lo thiếu khoảng trống trong ROM nhưng mình vẫn chưa thực sự hiểu cặn kẽ.
     
  7. sulypac

    sulypac Thành viên mới

    27
    19
    3
    Nam
    HCM
    Xin đính chính tí nhé: câu cuối là nếu bạn dời tới lui thì theo bội số của 64 dec hay 40 hex nhé (mình lại nhầm với điểm ảnh rồi ^^)

    [​IMG]

    Thật ra thế này, bạn dùng HexEditor đi tới offset 692F60 thì sẽ chẳng thấy chữ hay ký tự nào ở phần màn hình Data Inspector bên phải đâu, ký tự đầu trống nên 40 byte đầu tính từ offset đó là 00 (40 là số theo hex nha, tức 64 cặp số đầu), 1 byte = 1 cặp số = 2 điểm ảnh, nhưng thứ tự 2 điểm sẽ bị đảo lại, 0 là điểm đen (nền), E là điểm tím (nét chữ) và F là điểm xanh (ko hiển thị) như hình bạn mở bằng TileMolester thấy. Ký tự kế tiếp là mũi tên chỉ wa phải, 5 dòng đầu trống -> 8x5=40 điểm đen -> 20 cặp số kế tiếp là 00; ở dòng thứ 6 thì cặp điểm đầu là tím-đen = E0, đảo lại là 0E; 6 điểm còn lại trên dòng 6 là đen = 00 00 00; xuống dòng 7 là 3 tím 5 đen = EE 0E 00 00 ... và rồi cứ thế cứ thế (nếu bạn siêng sửa theo cách nguyên thủy này rồi test thường xuyên chắc cũng vẽ lại đc font á, nhưng có phần mềm hỗ trợ thì tội j phải làm thế ^^)

    [​IMG]

    Việc bạn cần làm sau khi vẽ lại font là kiếm 1 phần mềm giúp bung text trong game ra, kèm có thể sửa đổi và repoint khi cần thiết (như A-Text ấy), nếu lập trình đc thì bạn có thể quy định ký tự tiếng Việt nào tương ứng với mã ASCII nào luôn, như vậy với mấy ký tự lạ bạn ko cần phải copy hay soạn bảng gõ tắt nữa mà cứ đánh tiếng Việt đều đều vào để phần mềm tự chuyển mã thôi (cái đó là nếu bạn viết đc)
     
    Chỉnh sửa cuối: 23/8/17
    Lợi LÔ thích bài này.
  8. Lợi LÔ

    Lợi LÔ Thành viên cấp 1

    Bạn có gợi ý nào cho mình về phần mềm Debugger nào không ạ? Mình cần dùng nó để tìm ra font chữ hiển thị nội dung "Saving file. Do not touch the Game Pak...." vì mình thử vẽ font nhưng những chữ hiển thị như trên thì font không hề bị thay đổi.

    Còn nội dung bạn mới comment ở #7 thì mình cần thêm thời gian nghiên cứu =) đọc như tẩu hỏa nhập ma ạ :-@

    Cập nhật: "Saving file. Do not touch the Game Pak...." vẫn sử dụng chung 1 font đó may quá anh em ạ. Em vừa sử thay đổi độ rộng của kí tự S và f thì khi lưu file độ rộng "Saving file" cũng thay đổi ạ.
    Nhưng em vẫn có nhu cầu muốn sử dụng 1 trình debugger, anh em tư vấn nhé. cũng search google rồi mà ra toàn trang stackoverflow chả hiểu gì cả.
     
    Chỉnh sửa cuối: 23/8/17
  9. Lợi LÔ

    Lợi LÔ Thành viên cấp 1

    Mình đã hiểu phần này và biết cách vẽ font bằng Hex Editor rồi ạ. Cảm ơn bạn đã hướng dẫn nhé.

    Bây giờ mình tìm hiểu thêm 1 chút về vẽ font. Mình sẽ cập nhật thêm sau.

    Cập nhật: Mã HEX - Mã ASCII - Kí tự Tiếng Việt có liên quan với nhau như thế nào ạ?
     
    Chỉnh sửa cuối: 24/8/17
  10. NáNì

    NáNì Thành viên cấp 1

    43
    28
    18
    Nam
    Việt Nam
    Debugger mình thường dùng là no$gba(có tài liệu hướng dẫn trong đó luôn)
    Còn về cái mình nói về pointer 4 byte, thì do dùng 4 byte bạn có thể di chuyển đoạn text dịch ra một đoạn khá xa, không bị tình trạng đè lên khối data khác trong game.
     
    Lợi LÔ thích bài này.
  11. Lợi LÔ

    Lợi LÔ Thành viên cấp 1

    mình chưa hiểu rõ pointer. Bạn có ví dụ nào không ạ?
     
  12. NáNì

    NáNì Thành viên cấp 1

    43
    28
    18
    Nam
    Việt Nam
    Pointer(Con trỏ) là 1 thứ (biến) lưu địa chỉ, mà địa chỉ này chính là địa chỉ của khối data khác. CPU sẽ nạp giá trị này vào thanh ghi, rồi nhảy đến đấy để load dữ liệu.
    Mượn một hình ở diễn đàn daynhauhoc
    [​IMG]
     
    Lợi LÔ thích bài này.
  13. sulypac

    sulypac Thành viên mới

    27
    19
    3
    Nam
    HCM
    Nôm na thôi nha, kiểu hiểu sao nói vậy à, pointer như 1 cái biển chỉ đường á, VD offset là 692F60 thì pointer của nó sẽ là 60 2F 69 08 (với GBA thì gồm 4 byte, thường byte cuối mặc định là 08, 3 byte đầu là offset bị đảo 2 cặp số đầu - cuối)

    Giả dụ khi ông già NPC hỏi nhân vật 1 câu, nếu chọn YES thì ông ta nói kiểu A, NO thì nói kiểu B; người ta sẽ ko viết script cho NPC đó kiểu liên tù tì như
    [chạm mặt - hỏi: TIN TA CHÉM NGƯƠI KO? - nếu có: BIẾT SỢ LÀ TỐT + cười bỏ đi - nếu ko: NÀY THÌ LÁO! + chém roẹt roẹt...]
    Trong quá trình làm game, khi muốn thêm/bớt hay thay đổi lời thoại sẽ tạo khoảng trống hoặc phải chồng lên mã lệnh kế tiếp (như hành động sau đó ở VD trên). Thay vào đó người ta làm như sau:
    [chạm mặt - hỏi: pointer (1) - nếu có: pointer (2) + cười bỏ đi - nếu ko: pointers (3) + chém roẹt roẹt...]
    Sau đó sẽ có 3 offset khác nhau để bắt đầu cho 3 đoạn text đó, sau này nếu muốn sửa hay thay thế thì chỉ việc đổi pointer để nó chỉ điểm tới 1 nơi khác để xuất text (vẫn chỉ là 4 byte ở vị trí cũ trong script của NPC, ko chồng chéo cái j hết) --> cái việc dời này gọi là repoint

    Sau này bạn sẽ còn gặp cái gọi là table of pointer, khác với table thường là liệt kê hết nội dung từng thành phần một cách liên tiếp (như game PKM: table của tên move là 13 byte/ 1 move, tức ko có tên move nào quá 12 ký tự + byte cuối là FF để ngắt, khi muốn truy xuất tên move nào thì chỉ việc lấy số thứ tự move đó nhân 13 ra X byte rồi từ offset của table đi xuống X byte là tên cần tìm bắt đầu ở đó, offset của table là vị trí bắt đầu của table đó), còn table pointer là nó chỉ chứa toàn pointer liên tiếp nhau và dĩ nhiên là 4 byte cho 1 thành phần (PKM: như table phần mô tả của move, vì nó ko bị giới hạn và cố định độ dài như tên move nên người ta để pointer cho đồng bộ, chứ để cái dài cái ngắn thì sẽ khó cho việc truy xuất và sửa đổi, khi game cần xuất phần mô tả của move nào thì tới vị trí move đó trên table sẽ nhận đc pointer chỉ điểm tới nơi có text cụ thể)
     
    Chỉnh sửa cuối: 24/8/17
    Lợi LÔ thích bài này.
  14. Lợi LÔ

    Lợi LÔ Thành viên cấp 1

    kiểu như là mục lục một quyển sách chứa tóm tắt nội dung kèm theo số trang (offset) hoặc 1 dấu * nhỏ sau đó dành hẳn 1 trang giấy để giải thích cái * nhỏ đúng không ạ?
     
  15. sulypac

    sulypac Thành viên mới

    27
    19
    3
    Nam
    HCM
    Um, về nghĩa thì pointer na ná offset. Nói chung pointer là cách ghi offset để trình xử lý hiểu và tới nơi cần truy xuất dữ liệu.
     
    Lợi LÔ thích bài này.
  16. Lợi LÔ

    Lợi LÔ Thành viên cấp 1

    Mày mò cả buổi chẳng biết phải sử dụng no$GBA Debugger như nào cả :-@ bạn chỉ mình vài đường cơ bản với. Mình tải trên romhacking về không có hướng dẫn dùng emo~~
     
  17. NáNì

    NáNì Thành viên cấp 1

    43
    28
    18
    Nam
    Việt Nam
    Mình vừa xem qua text game thì thấy được nó được pack vào 1 file tại 0x9B1D90 pointer trỏ đến pack file này tại 0x109218, sau khi unpack thì có 80 file script tất cả.
    [​IMG]

    dùng Cartographer dump thử:
    [​IMG]
     
    Lợi LÔ thích bài này.
  18. NáNì

    NáNì Thành viên cấp 1

    43
    28
    18
    Nam
    Việt Nam
    Bạn vào mục help trong phần mềm ấy. Mà bạn muốn debug tìm font?
     
  19. Lợi LÔ

    Lợi LÔ Thành viên cấp 1

    À mình muốn 2 điều như sau:
    1. biết cách sử dụng một trình debugger, cụ thể ở đây là no$GBA Debugger. File mình tải về trên romhacking thì không có tài liệu. Mở readme ra thì nó còn nói "đừng có hỏi tao về cách sử dụng phần mềm miễn phí!" -_-
    2. Mình muốn biết là khi nào thì gọi một dữ liệu trong rom ra. ví dụ: lúc đầu nó load lên chữ (c) NINTENDO ở bên dưới, sau đó nó hiện thêm: PRESS START.
    Mình muốn biết làm thế nào để biết giả lập đang sử dụng file gì và nó lấy từ đâu trong ROM.

    Nhờ bạn hướng dẫn cụ thể chỗ này được không ạ?

    Còn về # trên nữa mình vẫn đang cố gắng để hiểu ý bạn nói ạ -_- a hi hi
     
    Chỉnh sửa cuối: 15/9/17
  20. Lợi LÔ

    Lợi LÔ Thành viên cấp 1

    Với lại đang vào tilemolester chụp ảnh cái font chữ lại để nhờ người bạn nhận dạng chữ cái Nhật hộ để sau này còn biết đường mà gõ ạ :D chữ Nhật bẻ tư bẻ năm em cũng không biết luôn :(
     

Chia sẻ trang này