Hướng dẫn dịch game Console

Thảo luận trong 'Thảo luận chung & Trình giả lập' bắt đầu bởi asm65816, 5/6/10.

  1. VnHoangAnh

    VnHoangAnh Donkey Kong

    Tham gia ngày:
    30/10/07
    Bài viết:
    383
    Nơi ở:
    Ha Noi, Vietnam,
    nếu chủ 2pic để vào tag spoil thì sẽ rất cám ơn :)) dù sao cũng cám ơn vì bài viết khá bổ ích vì hồi chơi game trên GBA console toàn tự đi lung tung kiếm đường và làm theo nhiệm vụ, ít khi đọc lời thoại nhiều
     
  2. huuphuoc999

    huuphuoc999 Fire in the hole! Lão Làng GVN

    Tham gia ngày:
    4/7/06
    Bài viết:
    2,980
    Nơi ở:
    Ho Chi Minh City
    Bạn có thể cho mình xin yahoo của bạn được ko. Có gì nói chuyện. Mình đang vướng vụ thêm dấu tiếng việt cho game.:D Có gì thì add nick mình vào nhé
     
  3. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Bạn add a 6 m 6 5 0 c 8 1 6 không có dấu cách.
     
  4. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Pointer


    Nếu đã nắm kỹ những gì tôi nói bên trên thì tại thời điểm này, bạn đã có thể dịch một game sang thứ tiếng mà bạn muốn. Nhưng như vậy chưa phải là đủ. Vì sao?
    Vì một lý do rất đơn giản: như tôi có đề cập ở phần trước, các câu thoại trong Rom thường được sắp xếp nối tiếp nhau tạo thành một khối hội thoại. Trong đó câu 1 ngăn cách với câu 2, câu 3, câu 4,… bằng control code chỉ định kết thúc câu. Và thông thường thì khi dịch một câu từ ngôn ngữ nguồn sang ngôn ngữ đích thì câu được dịch dài hơn câu gốc, do đó dẫn đến hiện tượng không đủ chỗ nếu muốn dịch hết và dịch đầy đủ và hiện tượng các câu nằm chồng lên nhau như hình minh họa dưới đây

    [​IMG]

    Phần màu hồng là 3 câu trong ngôn ngữ nguồn và phần màu đen là 3 câu đã được dịch ra. Một ví dụ khác, nếu mỗi một chữ cái là một Hex code và block hội thoại của chúng ta gồm 2 câu: Hello<end>Goodbye<end>
    (<end> tượng trưng cho Hex code chỉ kết thúc câu). Trong trường hợp này thì block của chúng ta có 14 Hex code (14 bytes) bao gồm cả 2 control code. Nếu dịch block này sang tiếng Việt thì

    Mã:
    Xin chao<end>Tam b
    Như vậy thì chưa dịch hết câu thứ 2 trong block mà chúng ta đã sử dụng hết 14 bytes. Trường hợp nếu chỉ dịch câu đầu tiên trong block thì

    Mã:
    Xin chao<end>dbye<end>
    Rõ ràng bạn thấy câu 1 (được dịch) lấn sang câu 2 (chưa dịch). Vậy phải giải quyết trường hợp này như thế nào?
    Có nhiều cách để giải quyết:

    + Dùng kiến thức Asm để viết lại toàn bộ cấu trúc lời thoại, sắp xếp lại các câu thoại.
    + Dùng kiến thức Asm để mở rộng Rom, tăng thêm chỗ trống cho các câu thoại.
    + Dùng Pointer.

    Trong các cách trên thì sử dụng Pointer không đòi hỏi phải có kiến thức về Asm và là vũ khí duy nhất của bạn trong giai đoạn này. Phần này tôi sẽ giải thích về Pointer và cách hoạt dụng của nó. Đây là phần quan trọng nhất trong toàn bộ bài viết này, nếu không nắm và ứng dụng được nó thì rất nhiều khả năng Project dịch thuật của bạn bị phá sản.

    Vậy pointer là gì?
    Như mọi thành phần khác trong Rom, Pointer cũng chỉ là các Hex code (có thể là 2 bytes, 3 bytes, 4 bytes,…). Và đúng như tên gọi của nó, các Hex code này làm nhiệm vụ chỉ chỗ (địa chỉ) cho game đọc dữ liệu (trong trường hợp này là text) cần thiết. Chẳng hạn, trong Rom Super Mario Bros. có sẵn đoạn text “Game Over” và đoạn này được hiển thị ra màn hình khi người chơi “hết mạng”.
    Nguyên tắc hoạt động như sau: game kiểm tra xem người chơi còn bao nhiêu “mạng”, nếu số “mạng” bằng 0 thì nó sẽ đọc một Pointer và Pointer này chỉ đến vị trí của đoạn text “Game Over”. Nhưng Pointer không chỉ đến toàn vị trí của toàn dữ liệu (dòng text “Game Over”) mà nó chỉ tới byte đầu tiên trong khối dữ liệu đó (cụ thể ở đây là chữ G). CPU sẽ đọc từ byte đầu tiên được Pointer dẫn đường này cho tới khi gặp control code báo kết thúc.
    Mọi thành phần trong Rom được xác định bằng hai thành phần cơ bản là giá trị Hex của nó và địa chỉ (offset) của nó.
    Để dễ hiểu hơn, bạn hãy làm theo hướng dẫn như dưới đây.

    Đầu tiên hãy load Rom FE3 gốc (chưa thay đổi font chữ) và chơi đoạn mở đầu, xác nhận lời thoại đầu tiên trong game là câu sau

    [​IMG]

    Đoạn, load Rom bằng Winhed và file Table, bạn dễ dàng tìm được vị trí bắt đầu của đoạn hội thoại này trong Rom là $71A3C (đối với Rom có 200 bytes header). Thử thay đổi vài Hex code để xác nhận xem địa chỉ bạn tìm được đã chính xác chưa rồi backup lại Rom. Bây giờ nhảy tới địa chỉ $71416, tại đây bạn sẽ thấy các Hex code: 2E-98-8E-4D-99-8E-41-9B-8E…
    Thử thay đổi 3 bytes đầu tiên là 2E-98-8E thành 4D-99-8E, save Rom và kiểm tra bằng giả lập.

    [​IMG]

    Kỳ lạ thay! Đoạn hội thoại mở đầu đã thay đổi hoàn toàn trong khi bạn chỉ edit mỗi 3 bytes ở một địa chỉ khác hoàn toàn không liên quan đến text hội thoại. Giờ hãy thay đổi 3 bytes vừa rồi thành 41-9B-8E xem sao.

    [​IMG]

    Đoạn hội thoại mở đầu lại thay đổi!
    Điều này nghĩa là sao? Tôi sẽ giải thích qua, hãy đọc kỹ phần dưới đây.

    Bạn vừa edit 3 bytes đầu tiên tại địa chỉ $71A3. Địa chỉ này tuy không phải là địa chỉ chứa text nhưng lại là nơi chứa các Pointer chỉ đến các đoạn hội thoại nằm ở chỗ khác trong Rom. Và 3 bytes bạn vừa edit chính là giá tri của Pointer chỉ đến đoạn hội thoại mở đầu game. Vì vậy, khi edit 3 bytes này tức là bạn đã edit giá trị của Pointer và nó sẽ chỉ đến đoạn hội thoại khác, tùy vào giá trị mà bạn edit. Nói cách khác, giá trị của Pointer chính là địa chỉ của dữ liệu (text) mà nó chỉ đến. Game Snes sử dụng các loại Pointer sau:

    + Pointer 16 bit hay còn gọi là Pointer 2 bytes. Chính vì có độ dài 2 bytes nên nó có thể chỉ tới bất kỳ vị trí nào trong phạm vi từ $00~$FFFF. FF4 trên Snes là game sử dụng Pointer 2 bytes.

    + Pointer 32 bit hay còn gọi là Pointer 3 bytes. hính vì có độ dài 2 bytes nên nó có thể chỉ tới bất kỳ vị trí nào trong phạm vi từ $00~$FFFFFF. Vì dung lượng của game Snes thường được giới hạn trong phạm vi 4Mb nên Pointer 3 bytes có thể chỉ tới bất cứ vị trí nào trong Rom. FE3 là game sử dụng Pointer 3 bytes.

    Lưu ý rằng các hệ máy khác nhau thì dùng Pointer có kích thước khác nhau.

    Lợi ích của Pointer:
    Như đã nói trên, Pointer là vũ khí lợi hại nhất của bạn trong giai đoạn này để giải quyết vấn đề thiếu chỗ trống trong Rom. Bởi vì trong Rom luôn tồn tại những vị trống, tức là vị trí mà tại đó không chứa bất kỳ dữ liệu nào của Rom (thường là khu vực với Hex $00 hoặc $FF) nên bạn có thể chuyển chỗ những câu thoại dài trong block hội thoại ra những khu vực trống này và edit lại Pointer để nó chỉ tới vị trí hội thoại mới.

    [​IMG]

    Trong hình trên, màu đỏ là vị trí các câu hội thoại ban đầu trong block, màu đen là sau khi dời một số câu đi chỗ khác. Mũi tên là các Pointer.
    Do vậy dễ dàng thấy rằng tuy bản thân việc edit giá trị của Pointer không làm tăng thêm chỗ trống cũng như không làm giảm đi kích thước của văn bản nhưng nó cho phép ta sắp xếp các câu thoại vào từng chỗ trong Rom hiệu quả hơn. Những người dịch game bằng cách edit text trực tiếp mà không dùng đến Pointer thường lâm vào tình cảnh không đủ chỗ trống để dịch câu đầy đủ nên phải sử dụng khá nhiều từ viết tắt, lược bỏ đi nhiều từ và do vậy chất lượng của bản dịch cũng không được nguyên vẹn trong khi đó trong Rom vẫn còn nhiều chỗ trống khác.
    Nói cách khác, Pointer giúp bạn khai thác hiệu quả không gian trống trong Rom nếu sử dụng đúng cách và là vũ khí quan trọng bậc nhất trong việc hách Rom.
     
  5. huuphuoc999

    huuphuoc999 Fire in the hole! Lão Làng GVN

    Tham gia ngày:
    4/7/06
    Bài viết:
    2,980
    Nơi ở:
    Ho Chi Minh City
    Cho mình hỏi cách sử dụng fedian với, nó kêu mình cài PHP vào rồi mà cài xong ko bik làm sao nữa :(
     
  6. bongphap

    bongphap Mega Man

    Tham gia ngày:
    27/7/06
    Bài viết:
    3,296
    Nơi ở:
    Theatre Of Dream
    Bác này giỏi tiếng Nhật ghê phải chi bác làm Việt hóa cho game psp thì sướng biết mấy, trên psp game Nhật nhiều game đỉnh lắm mà ngại là nhìn ko hiểu gì hết =((
     
  7. MapleKhoa

    MapleKhoa The Warrior of Light

    Tham gia ngày:
    20/11/06
    Bài viết:
    2,312
    cái này áp dụng cho game ps2 hay wii dc không ?
     
  8. Hoursea

    Hoursea Mayor of SimCity Lão Làng GVN

    Tham gia ngày:
    31/12/09
    Bài viết:
    4,317
    Mấy đại ca đưa lời thoại Tiếng Việt vào FFX thì tuyệt vời ( không cần dịch menu gameplay đâu ), chứ dịch mấy cái FE cũ làm gì :(
     
  9. nhomhoanmy

    nhomhoanmy Fire in the hole! Lão Làng GVN

    Tham gia ngày:
    11/11/09
    Bài viết:
    2,626
    Nơi ở:
    HN
    Người ta dịch hay không thì kệ người ta... Mắc mớ gì mà xen vào?

    CHủ thớt có thể hướng dẫn thêm về dịch game tiếng anh ko?... Mình chả biết tiếng nhật nên xem cái này cũng chả để làm gì..
     
  10. game master

    game master Mr & Ms Pac-Man

    Tham gia ngày:
    24/2/03
    Bài viết:
    137
    Bài viết rất hay :) Bái phục. Tui thấy bác bỏ rất nhiều tâm huyết vào bài viết này. Cảm ơn bác :D
     
  11. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Dịch game từ tiếng gì cũng như nhau thôi bạn. Các nguyên tắc cũ có thể áp dụng lại. Bạn có thể tải các file ví dụ ở trên về làm thử là hiểu liền à.

    @Hữu phước: Fedian thì xem cách dùng trong cái diễn đàn trong bài viết ở trên.
     
  12. Narga

    Narga Youtube Master Race

    Tham gia ngày:
    24/1/03
    Bài viết:
    68
    Mình đang thử thêm và edit một số từ trong Romance of three kingdom 4 (SNES) bản tiếng anh bằng cách vẽ thêm chữ ê vào cuối file, table của nó nằm cuối cùng ($2f5c60), phía trên một số graph lằng ngoằng nào đó nhưng ko thể nào chỉ đến chữ ê đó được (bank d1) dù thay dần các giá trị hex nhưng nó luôn chỉ đến kí tự $ mà thôi.
    Table của nó là 61=a.. 7a=z và 41=A và 5A=Z
    Bạn có thể hướng dẫn mình cách chỉ đến chữ ê ko hoặc tạo dùm mình table tiếng việt để mình thử được kông
     
  13. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Chưa thử trò này nhưng nghe bạn mô tả thì đây là hiện tượng thường gặp. Đừng cố vẽ thêm chữ ở những tile sau mà hãy vẽ đè lên những tile trước, chữ nào không dùng thì bỏ đi.
     
  14. nhomhoanmy

    nhomhoanmy Fire in the hole! Lão Làng GVN

    Tham gia ngày:
    11/11/09
    Bài viết:
    2,626
    Nơi ở:
    HN
    Cho hỏi asm dịch giùm mình câu này đc ko? Lên google thì biết đc nó tiết lộ mật khẩu nhưng ko biết câu nào là mật khẩu :(
    (パスワードはぱろでぃ★ばんダウンタウン熱血物語EX2007で謎の研究所がある町の名前をローマ字で入力) 
     
  15. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Password là ぱろでぃ (Parody): chính hắn đây.
    Câu sau là hãy nhập tên của thành phố có viện nghiên cứu bí ẩn trong Downtown Nekketsu Monogatari EX2007 (nhập bằng chữ La Tinh).
     
  16. www_pftmclub_vn

    www_pftmclub_vn Fire in the hole!

    Tham gia ngày:
    18/4/08
    Bài viết:
    2,506
    Nơi ở:
    Hà Nội
    CHắc mình phải chơi thật kĩ monogatari để biết được phần còn lại của password :D
    http://www.geocities.jp/nekketsukouha920kun/monogatariEX_fu.html
     
    Chỉnh sửa cuối: 6/9/10
  17. haloly

    haloly Youtube Master Race

    Tham gia ngày:
    29/9/08
    Bài viết:
    17
    Khiếp thật, bác chủ pic wa là có 1 niềm đam mê đáng nể. Tiếc là bi h hok thik chơi game thế kỉ trước này nữa. Ah nhưng cũng cố xem thử, sau này sinh con về dịch hay chế nội dung mấy game hay hay cho nó choi ^^
     
  18. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Những nguyên tắc nêu trong bài là cơ bản, có thể áp dụng cho game ở mọi hệ máy. Tuy nhiên mỗi hệ máy có đặc thù riêng và cần phải nghiên cứu thêm.

    [​IMG]
     
  19. rish

    rish Donkey Kong

    Tham gia ngày:
    30/5/10
    Bài viết:
    330
    Nơi ở:
    Bình Thuận
    font nó bị chênh lệch kìa.Asm chỉnh lại đi
    ASM cho tớ hỏi làm thế nào để xác định pointer trong mấy cái file .mes nhỉ?Table thì tớ đã lập rồi
     
    Chỉnh sửa cuối: 30/9/10
  20. fantasia198x

    fantasia198x Legend of Zelda

    Tham gia ngày:
    11/12/09
    Bài viết:
    1,068
    Nơi ở:
    Balamb Garden
    2pic vẫn đang hoạt động chứ ạh ?
    bác chủ thớt cho mình xin cái FF8 trên đi.
    mình thích FF8 nhất trên hệ PS1.
    làm ơn đi, đc kô ạh !?
     

Chia sẻ trang này