QuânSysAd's Blog: hexadecimal
Hiển thị các bài đăng có nhãn hexadecimal. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn hexadecimal. Hiển thị tất cả bài đăng

09 tháng 8 2018

Street Of Rage 3: Score và Cheat Engine.

Lâu lâu ngồi suy nghĩ thời ấu thơ tôi vẫn hay dùng Artmoney để chỉnh các thông số của game. Lúc đó chỉ mới dùng phương pháp Extract Value. Mà hồi đó cứ làm mà không hiểu gì.
Bỗng nhiên hôm nay tôi hứng lên nên lục lại để nghiên cứu thêm.

Cái mà tôi định Cheat là điểm số trong Street Of Rage 3 của hệ máy Sega Genesis. Dùng trình giả lập Fusion 3.64. Do bây giờ thì có thêm cái Cheat Engine miễn phí, ngày xưa Artmoney thì tính phí. Bây giờ tôi muốn dùng open source nên tôi chọn Cheat Engine.


Lúc đầu tôi tưởng là dễ dàng. Nhưng tìm mãi không ra. Tôi biết rằng các giá trị điểm số thường phải là số nguyên và có độ dài tận 4 byte. Tôi chơi một lúc và nhận ra rằng tôi đã có điểm số là 3750.

Tôi sẽ phân tích như một người chưa biết gì (một người ngu đần đang tìm hiểu điều mình chưa rõ).

3750 tôi chuyển sang hệ hexadecimal là EA6 (hay còn gọi là 0xEA6, phần 0x để chỉ đây là hệ hexa).

Tôi bắt đầu suy nghĩ. Tìm cái này mà không ra ắt hẳn là có nguyên nhân gì đó mà tôi không hiểu.

EA6 số này nếu tính ra thì chỉ mới chiếm có chưa được 2 byte (thực tế hiện giờ là nó chỉ chiếm có 12 bit). Vì thế để tròn 4 byte thì EA6 phải được viết về dạng;

EA6 -> 00 00 0E A6

Nhưng mà, tôi để ý rằng trong hệ Little Edian thì các chữ số có nghĩa thường có thứ tự ngược lại. Vì thế tôi viết từng cặp byte theo thứ tự ngược lại. Và các cặp số được ghép để tròn 1 byte (Vì các bộ nhớ từng segment được cấp phát tròn theo từng byte)

00 00 0E A6 được viết ngược lại sẽ thành A6 0E 00 00

A6 0E 00 00 ở hệ hexa chuyển sang hệ decimal (thập phân) là : 2785935360

Tôi thực hiện tìm chính xác giá trị này theo kiểu 4 byte. Và đã tìm được địa chỉ bộ nhớ chính xác.