Pokédex data structure (Generation III): Difference between revisions

From Bulbapedia, the community-driven Pokémon encyclopedia.
Jump to navigationJump to search
(Corrected units for weight/height based on French versions (which do not use conversions))
Line 15: Line 15:
| Species || 12 bytes
| Species || 12 bytes
|-
|-
| Height (cm) || 2 bytes
| Height (* 10^(-1) m) || 2 bytes
|-
|-
| Weight (kg) || 2 bytes
| Weight (* 10^(-1) Kg) || 2 bytes
|-
|-
| Description pointer start || 4 bytes
| Description pointer start || 4 bytes
Line 39: Line 39:
<ul>
<ul>
   <li><b>Species</b> is 12 bytes long and comes in capital letters. 0x00 fills possible empty bytes.</li>
   <li><b>Species</b> is 12 bytes long and comes in capital letters. 0x00 fills possible empty bytes.</li>
   <li><b>Height</b> is actually a word (2 bytes) and comes in centimetres, it is then converted to other unites in some games.</li>
   <li><b>Height</b> is actually a word (2 bytes) and comes in decimetres (10^(-1) metres), it is then converted to other unites in some games.</li>
   <li><b>Weight</b> is actually a word (2 bytes) and comes in kilogrammes, it is then converted to other unites in some games.</li>
   <li><b>Weight</b> is actually a word (2 bytes) and comes in hectogrammes (10^(-1) kilogrammes), it is then converted to other unites in some games.</li>
   <li><b>Description pointers</b> show to the game where the description for the particular Pokémon is; they are reversed of course (little endian format). The 4th byte is always set to 0x08 (8), so this matches a BRANCH instruction (B) in assembly. For example, if the location is 0x123456, it will appear here as 0x56341208.</li>
   <li><b>Description pointers</b> show to the game where the description for the particular Pokémon is; they are reversed of course (little endian format). The 4th byte is always set to 0x08 (8), so this matches a BRANCH instruction (B) in assembly. For example, if the location is 0x123456, it will appear here as 0x56341208.</li>
   <li><b>Offset +/-</b> determines whether the <b>Pokémon offset</b> will be negative or not.</li>
   <li><b>Offset +/-</b> determines whether the <b>Pokémon offset</b> will be negative or not.</li>

Revision as of 10:09, 19 March 2005

Specs

A Pokédex data structure is a 37-byte piece of data.

Every Pokémon species in the Generation III games has a Pokédex data stored in the game that is used in Pokédex related functions and also by some moves like Low Kick.

Pokédex Data
Effect byte
Padding byte
Species 12 bytes
Height (* 10^(-1) m) 2 bytes
Weight (* 10^(-1) Kg) 2 bytes
Description pointer start 4 bytes
Description pointer end 4 bytes
Pokémon scale 2 bytes
Pokémon offset byte
Offset +/- byte
Trainer scale 2 bytes
Trainer offset byte
Padding 2 bytes

Notes

  • Species is 12 bytes long and comes in capital letters. 0x00 fills possible empty bytes.
  • Height is actually a word (2 bytes) and comes in decimetres (10^(-1) metres), it is then converted to other unites in some games.
  • Weight is actually a word (2 bytes) and comes in hectogrammes (10^(-1) kilogrammes), it is then converted to other unites in some games.
  • Description pointers show to the game where the description for the particular Pokémon is; they are reversed of course (little endian format). The 4th byte is always set to 0x08 (8), so this matches a BRANCH instruction (B) in assembly. For example, if the location is 0x123456, it will appear here as 0x56341208.
  • Offset +/- determines whether the Pokémon offset will be negative or not.

Size compare function

In the Generation III, there's a size page on the Pokédex, which uses data from the Pokédex to create a silhouette of the Pokémon standing next to the trainer. The size of both the trainer and Pokémon are determined by this formula:
x = (y × 256/z) pixels
Where y is the sprite size (64 pixels in our case) and z is the appropriate scale in hex and x rounded down is the size of silhouette. The game then resized the sprite in a way similar a computer would do (without anti-aliasing of course).
The offset determines where exactly the silhouette will be placed. For example if Pokémon offset = 10 then the silhouette of the Pokémon will be 10 pixels from the top and 10 pixels from the left. (for some reason, that cannot be exactly simulated outside of the game).
If Offset +/- is equal to 0xFF then the actual Pokémon offset will be equal to -(256 - Pokémon offset), otherwise the actual Pokémon offset stays the same.