Bài viết được viết và chia sẻ bởi đội ngũ của AowVN , vui lòng ghi nguồn AowVN nếu copy đi nơi khác , cảm ơn
LƯU Ý: Bài viết nằm trong chuyên mục hơi nâng cao, yêu cầu có kiến thức cơ bản về hex và cách sử dụng hex editor
Trong quá trình hack dịch game, nếu đã tìm hiểu đến 1 mức nào đó thì các bạn sẽ gặp phải 1 số thuật ngữ như table, pointer…
Và bài này mình sẽ chủ yếu đề cập đến pointer
Pointer thường sẽ gặp khi các bạn dịch các game trên các hệ console, và đôi khi game pc và android cũng sử dụng nó.
Pointer là 1 dạng con trỏ chứa biến, trong đó nó chứa offset của dữ liệu mà máy tính cần tìm.
Hãy tưởng tượng pointer là 1 cái bảng chỉ đường, trên đó ghi địa điểm mà máy cần tìm tới.
Pointer chia làm 2 loại: Absolute pointer và Relative pointer.
Absolute pointer sẽ trực tiếp chứa địa chỉ của nơi ta cần tìm đến, ví dụ như trong text của zenonia:
ở đây là 1 pointer trỏ tới offset $1DD0 (được lật ngược lại từ $D01D do game dùng kiểu dữ liệu little endian)
Bạn có thể thấy việc duy nhất phải làm là áp dụng little endian vào, và lật ngược dữ liệu được ghi tại pointer, ta sẽ tới được dữ liệu cần tìm.
Công thức:
Data tại pointer ghi lại offset tới địa chỉ cần tìm
Kiểu pointer còn lại là relative pointer, hơi rắc rối hơn 1 chút so với absolute pointer
Mình sẽ lấy ví dụ với zelda gba:
ở đây ta sẽ hiểu là lấy giá trị tại pointer, áp dụng little endian vào, và cộng với 1 giá trị gốc được gọi là Base pointer để đến đc nơi cần đến.
Như ở hình trên, giá trị pointer hiển thị là $CD01, bạn cần phải lật ngược thành $01CD, và cộng với 1 giá trị gốc. Ở đây base pointer sẽ là chính bản thân offset của pointer đầu tiên, ta cộng 9CD924 với 1CD sẽ được 9CDAF1, là offset của đoạn thoại này.
Công thức:
Base pointer + giá trị tại pointer thứ n = offset
Vậy rốt cuộc ta cần hiểu về pointer để làm j?
Khi dịch game, sẽ có đôi lúc câu thoại bạn dịch dài hơn câu thoại gốc. Nếu bạn không sửa sẽ ghi đè lên câu thoại tiếp theo, khiến cho pointer trỏ tới câu thoại đó bị lỗi.
Đây là lúc mà hiểu biết về pointer phát huy tác dụng.
việc của bạn là sửa pointer lại tới vị trí mới của câu thoại đó, để máy sẽ trỏ chính xác tới đó.
Vậy thôi, đây là hướng dẫn sơ lược, lúc khác mình sẽ đăng 1 bài về cách sử dụng phần mềm hỗ trợ để dịch game với pointer.