[Gen III][Game Mechanic + Hacktool]Pokemon data

Thảo luận trong 'Pokédex' bắt đầu bởi PaiN_Agent, 28/7/12.

Trạng thái chủ đề:
Không mở trả lời sau này.
  1. PaiN_Agent

    PaiN_Agent Youtube Master Race

    Tham gia ngày:
    19/7/10
    Bài viết:
    35
    Nơi ở:
    PaiN Studio
    Đầu tiên xin lỗi dark_dragons vì đã trễ hẹn, cũng vì thi đại học xong bận đủ thứ, đến giờ vẫn đang đợi điểm nên dành thời gian rỗi post bài. Mọi người thông cảm :)
    Mình định nói về RNG nhưng vấn đề này có quá nhiều lĩnh vực liên quan chắc phải dùng clip để mô tả thì mới dễ hiểu, vậy nên sẽ tạm chưa post bài về RNG, xin phép được post bài về pokemon data. Xin phép bắt đầu luôn nhé:

    Bài viết thuộc Gen III, có vẻ lỗi thời nhưng cũng mong đóng góp những gì nghiên cứu trong hè :)

    POKEMON DATA


    Forum đã có bài viết chi tiết về PID (Personality Value) của dark_dragons nên mình không nhắc lại. Nếu ai từng đọc thì chắc hẳn sẽ nắm được phần nào về PID. Để hiểu rõ hơn về PID, chúng ta cùng tìm hiểu cách khám phá "chỉ số" PID của pokemon và cách game tạo/lưu dữ liệu về 1 pokemon.

    MEMORY VIEWER - VBA

    Trong giả lập VBA, chọn Tools > Memory viewer..., một bảng toàn mã số hiện ra. Trông rắc rối như vậy nhưng lại rất hữu ích đặc biệt với hacker. Toàn bộ thông tin đc lưu ở đây. Nếu bạn vô tình chỉnh sửa 1 kí tự có thể gây ra hậu quả khủng khiếp như đơ game, pokemon biến thành bad egg... Vì thế nên cẩn thận khi dùng memory viewer.
    Chúng ta đều biết trong pokemon có 2 nơi để "cất giữ" pokemon: party và PC, (Daycare cũng có thể kể đến nhưng không phổ biến lắm). Bạn có bao giờ tự hỏi tại sao cất pokemon vào PC thì nó lại trở về bình thường như vừa được hồi ở pokemon center? Câu trả lời chính là vì cách game lưu dữ liệu của pokemon trong party và PC khác nhau. Đối với PC, dữ liệu về pokemon không có phần stats và status (Poison, par, sleep...) còn pokemon trong party có đầy đủ cả. Tổng dữ liệu cho 1 pokemon trong party là 100 bytes còn trong PC là 80 bytes. 100 bytes này được lưu trong memory viewer, address khác nhau với mỗi bản: FR/LG; R/S; Emerald. Sau đây là các address tương ứng với party slot (vị trí của PC sẽ cập nhật sau):



    ---------- Post added at 16:33 ---------- Previous post was at 15:44 ----------

    100 BYTES POKEMON DATA​


    Đây là 1 hình ảnh về dữ liệu lưu trong Memory Viewer. Metagross ở party slot 2 trong pokemon Emerald sẽ có dữ liệu tương ứng lưu ở 0x02024550. Ở chế độ view 32-bit, cứ mỗi cụm XXXXYYZZ là 1 dword = 4 byte, cụm XXXX và YYZZ là 1 word = 2 byte, cụm XX, YY, ZZ là 1 byte. Nếu để chế độ view là 16-bit cụm XXXXYYZZ sẽ chuyển thành YYZZ XXXX và ở 8-bit là ZZ YY XX XX. Thứ tự sắp xếp được đảo lại

    Tất cả dữ liệu lưu dưới hệ Hex (khác với hệ thập phân quen thuộc).
    Trong hình trên, phần trong khung màu đỏ chính là PID, nghĩa là PID sẽ nằm ở đầu tiên trong phần lưu thông tin về pokemon. Các thông tin lưu như sau:

    Xin mod đừng khóa topic để tối viết nốt
     
    dark_dragons thích bài này.
  2. PaiN_Agent

    PaiN_Agent Youtube Master Race

    Tham gia ngày:
    19/7/10
    Bài viết:
    35
    Nơi ở:
    PaiN Studio
    48 BYTES MAIN DATA

    48 Bytes dữ liệu chính phức tạp hơn một chút. Nó được chia thành 4 nhóm, mỗi nhóm 12 bytes tương đương 3 chuỗi hay 3 dword. Các nhóm có cấu trúc riêng
    Các chuỗi trong từng cấu trúc chỉ thay đổi giá trị, không thay đổi vị trí. Cấu trúc được sắp xếp dựa vào PID.

    Sau khi các chỉ số được tính xong, chúng được mã hóa bằng thuật toán XOR và lưu vào bộ nhớ.

    CheckSum nằm ở 32 byte đầu nhưng liên quan mật thiết đến 48 byte dữ liệu
    Khi chuyển pokemon vào PC, phần thông tin 20 byte cuối được bỏ đi. Do đó, toàn bộ thông tin khi lấy pokemon ra được tính lại từ 48 byte dữ liệu trên.

    Hãy cùng xem xét một ví dụ cụ thể như sau:


    ---------- Post added at 00:38 ---------- Previous post was at 00:03 ----------

    Pokemon Maker - Code Generator

    Xin được giới thiệu tới mọi người chương trình viết code cho pokemon dựa trên 100 byte pokemon data của mình. Ngày xưa viết tay nhiều nên giờ làm hẳn 1 chương trình tự động hết cho nhanh đỡ phải tra bảng. Nếu bạn đã đọc và hiểu được phần đầu thì bạn sẽ sử dụng chương trình này dễ dàng!

    Vùng 1: Các thông tin về pokemon ở các nhóm Growth, Attack, Effort, Misc
    Vùng 2: Phần tên
    Vùng 3: Phần Info có PID, Trainer ID, Secret ID...
    Vùng 4: Mark cho pokemon
    Vùng 5: Ability. Sau khi kiểm tra kĩ thấy có nhiều vấn đề về ability. Nếu để auto thì ability dựa vào PID nên pokemon có 1 ability có thể bị mất ability (có lợi cho slaking, I know >:))
    Force Ability 0/1 thì code chọn ability cho pokemon
    Vùng 6: Vùng code chính, điền vào đúng address của party slot trong memory viewer để có pokemon bạn cần
    Vùng 7: Phần để debug. Nếu sau khi điền code cẩn thận nhiều lần mà vẫn bị bad egg thì chụp chương trình có cả phần này để mình tìm bug. Vì là bản alpha nên chưa biết sẽ có những lỗi gì nữa...
    Vùng 8: Menu

    Trong menu có tích hợp các bảng thông tin để tra cứu offline luôn cho tiện, cũng có cả phần tính hidden power, tính stats và tính IVs dựa trên memory viewer.

    Trình độ tiếng anh cũng vừa thôi nhưng dù sao cũng thích viết bằng tiếng anh vì dịch ra thấy gượng lắm. Các bạn dùng có gì không hiểu hỏi mình. Mà chắc cũng ít người còn chơi gen III lắm nên có lẽ sẽ không được để ý mấy. Dù sao cũng mong được ủng hộ ^^!

    Bài viết có tham khảo từ nhiều nguồn:
    - Bulbapedia
    - Smogons
    - Serebii
    - Psypokes
    - ppnstudio
    - ...

    Link liên quan:
    http://bulbapedia.bulbagarden.net/wiki/Pokémon_data_substructures_in_the_GBA
    http://bulbapedia.bulbagarden.net/wiki/Pokémon_data_structure_in_Generation_III
    http://www.ppnstudio.com/maker/PokemonMakerHelp.txt

    Link down Pokemon Code Gen: here
     
    Last edited by a moderator: 29/7/12
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này