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

no edit summary
No edit summary
(33 intermediate revisions by 21 users not shown)
Line 1: Line 1:
==Specs==
==Specs==


A '''Pokédex data structure''' is a 34-byte piece of data.
A '''Pokédex data structure''' is a 36-byte (32-byte for Pokémon Emerald) piece of data.


Every [[Pokémon|Pokémon species]] in the [[Generation III]] games has data stored in the game that is used in [[Pokédex]] related functions and by some certain moves, such as {{m|Low Kick}}.
Every [[Pokémon species]] in the [[Generation III]] games has data stored in the game that is used in [[Pokédex]] related functions and by certain moves, such as {{m|Low Kick}}.


{| align="center" style="border: 1px solid #88a; background: #f8f8ff; padding: 0.5em;" cellspacing="1"
{| class="roundy" align="center" style="border: 3px solid #{{hoenn color dark}}; background: #{{hoenn color light}}; padding: 0.5em;" cellspacing="1"
|-  
|-  
! colspan="2" style="text-align: center; background: #ccf;" | '''Pokédex Data'''
! colspan="2" style="text-align: center; background: #{{hoenn color}}; {{roundy}}" | '''Pokédex Data'''
|-
| Padding || byte
|-
|-
| Name || 12 bytes
| Name || 12 bytes
Line 17: Line 15:
| Weight (10<sup>-1</sup> kg) || 2 bytes
| Weight (10<sup>-1</sup> kg) || 2 bytes
|-
|-
| Description pointer start || 4 bytes
| Description pointer #1 || 4 bytes (See Notes)
|-
|-
| Description pointer end || 4 bytes
| Description pointer #2 || 4 bytes (See Notes)
|-
| Padding || 2 Bytes
|-
|-
| Pokémon scale || 2 bytes
| Pokémon scale || 2 bytes
Line 27: Line 27:
| Trainer scale || 2 bytes
| Trainer scale || 2 bytes
|-
|-
| Trainer offset || byte
| Trainer offset || 2 bytes
|-
|-
| Padding || 2 bytes
| Padding || 2 Bytes
|}
|}


==Notes==
==Notes==
* '''Name''' is 12 bytes long and comes in capital letters. 0x00 fills possible empty bytes.
* '''Name''' is 12 bytes long and comes in capital letters. 0x00 fills possible empty bytes. This is the [[Pokémon category|category]] name and not the Pokémon species name ("SEED" instead of "BULBASAUR").
* '''Height''' is measured in decimetres (10<sup>-1</sup> metres), and is then converted to other units in some games.
* '''Height''' is measured in decimeters (10<sup>-1</sup> meters), and is then converted to other units in specific versions of games.
* '''Weight''' is measured comes in hectogrammes (10<sup>-1</sup> kilogrammes), it is then converted to other units in some games.</li>
* '''Weight''' is measured comes in hectograms (10<sup>-1</sup> kilograms), and is then converted to other units in specific versions of games.
* '''Description pointers''' show to the game where the description for the particular Pokémon is; remember the GBA is little endian. The MSB 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 0x08123456 (56 34 12 08).
* '''Description pointers''' show the game where the description for the particular Pokémon is. The GBA is Little Endian, and that a ROM file is loaded at an offset of 0x08000000.
* '''Pokémon offset''' is a signed 16-bit integer - if the raw value is greater 0x8000, then it is negative, with 0x8000 as -32,767 and 0xFFFF as -1.
:Ruby and Sapphire, being the only games that have two pages of text, are the only games that use both. FireRed and LeafGreen have the second description pointer pointing to an empty string which is never read, and Emerald removed Description pointer #2 entirely.
* '''Pokémon offset''' is a signed 16-bit integer; therefore, if the raw value is 0x8000 or greater, then it is negative, with 0x8000 as -32,768 and 0xFFFF as -1.


==Size compare function==
==Size compare function==


In [[Generation III]], there is 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:
In [[Generation III]], there is 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:


<code>
<code>
Line 47: Line 48:
</code>
</code>


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).
Where y is the sprite size (64 pixels in this case) and z is the appropriate scale in hex and x rounded down is the size of silhouette. The game then resizes the sprite in a way similar a computer would do (without anti-aliasing).
 
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).


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).
==Offsets==
Ruby: 0x083B1858<br />
Sapphire: 0x083B18B0<br />
Emerald: 0x0856B5B0<br />
FireRed: 0x0844E850<br />
LeafGreen: 0x0844E270


[[Category:Structures]]
{{data structure}}<br>
[[Category:Game mechanics]]
{{Project Games notice|data structure}}
317

edits