Xin chào, đã lâu không gặp!
Mình là FM, nay trồi lên thả cho các bạn thêm 1 bài hướng dẫn hack rom nữa đây
Ở bài trước thì mình đã chia sẻ về pointer trong hack dịch game rồi, nhưng tại sao chúng ta lại cần đến nó nhỉ?
Trước đó thì mình đã nói sẽ có những lúc câu thoại của chúng ta dài hơn câu thoại gốc nên sẽ cần dùng đến pointer, nhưng thực tế không hẳn là như vậy. Đôi khi thứ dài hơn không phải là câu thoại, mà là encode của ký tự dài hơn. Ví dụ như chữ A trong encode utf 8 là 41, còn trong encode utf 16 sẽ là 0041 chẳng hạn
Từ từ đã nào, mình đi hơi nhanh quá đúng không?
Chắc có lẽ với ai chưa tìm hiểu sâu, bạn sẽ không hiểu “encode” là gì phải không?
Vậy nên hôm nay mình sẽ nói về Encode và Table trong dịch game nhé.
Đầu tiên, Encode là gì?
Thực ra nó rất dễ hiểu, encode là cách mà máy tính sẽ đọc dữ liệu từ 1 nguồn nào đó rồi biên dịch ra, ở đây là file game, thành ký tự mà con người hiểu được.
Các cách biên dịch khác nhau sẽ tạo thành các mã encode khác nhau, như UTF8 hay Shift-Jis là các kiểu encode phổ biến khi nghiên cứu để dịch game.
Như ảnh trên các bạn có thể thấy, phần mình bôi đen ở cột bên phải là các ký tự chúng ta có thể đọc được, và phần biên mã của nó nằm ở cột bên trái. Các ký tự 19 6E vv… là phần mã ký tự đại diện cho các ký tự I n…
Như đã nói ở bài viết về Pointer, chúng ta không thể nào nhập tay rồi sửa từng ký tự được, như vậy sẽ rất mất thời gian và có thể khiến pointer gặp vấn đề. Vậy chúng ta cần phải làm sao?
Chúng ta có thể note các mã Hex đó đại diện cho ký tự nào vào 1 file và dùng 1 công cụ hỗ trợ để xuất ra 1 file văn bản để chỉnh sửa rồi nhập lại, như vậy sẽ dễ dàng hơn RẤT nhiều cho việc chỉnh sửa và dò lỗi về sau này.
Và file dùng để note các ký tự đó trong giới hack rom được gọi chung là table.
Table hay 1 bảng là nơi bạn ghi chú lại về các mã ký tự được tựa game đó sử dụng, và dùng nó như bộ khung trong việc thay thế ký tự.
Table thì có rất nhiều loại, nhưng loại phổ biến nhất và được áp dụng cho những công cụ hỗ trợ phổ biến nhất như Atlas hay Cartographer là dạng table như sau
Các bạn sẽ có phần mã ký tự nằm ở ngoài cùng, sau đó là dấu “=” để phân tách và cuối cùng là ký tự cần biểu diễn.
Mỗi game có thể sử dụng 1 table khác nhau, hay thậm chí 1 game có thể dùng vài table khác nhau cũng có.
Muốn tìm xem game đó sử dụng table nào mà không có ghi chú hay thông tin từ trước thì bạn chỉ có cách… mò.
Nhưng không sao vì chúng ta không phải mò kim đáy bể 1 cách vô căn cứ, chúng ta có thể mò bằng cách thử.
Nếu các bạn có thể đọc được phần văn bản bằng HxD hay bất cứ trình Hex editor nào, thì bạn có thể mò bằng cách sửa đổi ký tự đó sang 1 ký tự khác rồi mò dần.
Còn khi các bạn không thể đọc được do game sử dụng bộ mã khác với các encode hiện tại thì cũng đừng lo, vì chúng ta sẽ có 1 công cụ gọi là “Relative Search”.
Hãy hiểu đơn giản là thay vì chúng ta mò đoạn văn bản đó, chúng ta sẽ mò chính encode của nó bằng cách tìm ra sự tương quan giữa các ký tự.
Ví dụ như ở table của mình cho game Zelda TmC, các bạn có thể thấy Ký tự A có mã là 41, còn B là 42, C là 43…
Các bạn có thấy gì đặc biệt không?
Đúng vậy, các mã ký tự không phải các mã vô nghĩa và ngẫu nhiên, mà được sắp xếp theo 1 quy luật.
Relative Search chính là phương pháp đi dò Encode bằng cách tìm ra “Khoảng cách” giữa các ký tự với nhau.
Vậy thay vì chúng ta tìm 1 đoạn thoại là AABBCC thì chúng ta sẽ phải đi tìm đoạn 41 41 42 42 43 43.
Còn trong trường hợp game sử dụng 1 encode được shift lefft(dời sang trái) thì sao nhỉ?
Vậy hãy gọi giá trị của A là x nhé. Chúng ta sẽ đi tìm đoạn x x (x + 1) (x+1) (x +2) (x + 2). Dễ hiểu phải không nào!
Tất nhiên quy luật này sẽ không thể bao hàm được toàn bộ game, nhưng nó sẽ là bộ khung cho công cuộc “mò kim đáy bể” này của các bạn.
Ở bài hướng dẫn tiếp theo mình sẽ nói về 2 công cụ phổ biến và hữu dụng trong hack rom là Atlas và Cartographer cùng với cách ứng dụng hiểu biết về Pointer cùng với Table nhé.