Pokémon data substructures (Generation III): Difference between revisions

From Bulbapedia, the community-driven Pokémon encyclopedia.
⧼bulbapediamonobook-jumptonavigation⧽⧼bulbapediamonobook-jumptosearch⧽
m Format: Better code... In the "Order" subsection, the letter explanation should preface the table. Other misc.
Tables...)("Move" used to be "Attacks"; that's simpler than having two labels starting with "M" in the "order" section)(Ribbons section from http://www.ppnstudio.com/maker/PokemonMakerHelp.txt
Line 2: Line 2:


==Format==
==Format==
A Pokémon's data is slightly more complex than the rest of the  [[Pokémon data structure in Generation III|encapsulating structure]]. It is stored as four distinct substructures, each 12 bytes in length:
A Pokémon's data is slightly more complex than the rest of the  [[Pokémon data structure in Generation III|encapsulating structure]]. It is stored as four distinct substructures, each 12 bytes in length. (The Notes section below explains some of these fields in greater detail.)


{| cellspacing="3" style="border: 1px solid #88a; padding: 0.5em"
{| cellspacing="3" style="border: 1px solid #88a; padding: 0.5em"
|- style="background: #ccf;"
|- style="background: #ccf;"
! colspan="3" | Growth
! colspan="3" | Growth
! colspan="3" | [[Move]]s
! colspan="3" | [[Move|Attacks]]
! colspan="3" | [[Effort values|EVs]] & [[Contest condition|Condition]]
! colspan="3" | [[Effort values|EVs]] & [[Contest condition|Condition]]
! colspan="3" | Miscellaneous
! colspan="3" | Miscellaneous
Line 24: Line 24:
| Move 2 || 2 || 2
| Move 2 || 2 || 2
| [[Stats#Attack|Attack]] EV || 1 || 1
| [[Stats#Attack|Attack]] EV || 1 || 1
| Met [[List of locations by index number (Generation III)|location]] || 1 || 1
| [[List of locations by index number (Generation III)|Met location]] || 1 || 1
|-
|-
| [[Experience]] || 4 || 4
| [[Experience]] || 4 || 4
Line 34: Line 34:
| Move 4 || 2 || 6
| Move 4 || 2 || 6
| [[Stats#Speed|Speed]] EV || 1 || 3
| [[Stats#Speed|Speed]] EV || 1 || 3
| [[Individual values|IVs]] || 4 || 4
| [[Individual values|IVs]], {{pkmn|Egg}}, and [[Ability]] || 4 || 4
|-
|-
| [[Friendship]] || 1 || 9
| [[Friendship]] || 1 || 9
| {{PP}} 1 || 1 || 8
| {{PP}} 1 || 1 || 8
| [[Stats#Special Attack|Special Attack]] EV || 1 || 4
| [[Stats#Special Attack|Special Attack]] EV || 1 || 4
| [[Ribbons]] || 4 || 8
| [[Ribbons]] and [[Obedience]] || 4 || 8
|-
|-
| ''Unknown'' || 2 || 10
| ''Unknown'' || 2 || 10
Line 47: Line 47:
| colspan="3" rowspan="2" |
| colspan="3" rowspan="2" |
| PP 3 || 1 || 10
| PP 3 || 1 || 10
| Coolness || 1 || 6
| {{OBP|Cool|condition}}ness || 1 || 6
|-
|-
| PP 4 || 1 || 11
| PP 4 || 1 || 11
| Beauty || 1 || 7
| {{OBP|Beauty|condition}} || 1 || 7
|-
|-
| colspan="6" rowspan="4" |
| colspan="6" rowspan="4" |
| Cuteness || 1 || 8
| {{OBP|Cute|condition}}ness || 1 || 8
|-
|-
| Smartness || 1 || 9
| {{OBP|Smart|condition}}ness || 1 || 9
|-
|-
| Toughness || 1 || 10
| {{OBP|Tough|condition}}ness || 1 || 10
|-
|-
| Feel || 1 || 11
| {{DL|Pokéblock|Feel}} || 1 || 11
|}
|}


===Substructure order===
===Substructure order===
The order of the structures is determined by the [[personality value]] of the Pokémon modulo 24, as shown below, where G, A, E, and M stand for the substructures growth, moves, EVs and condition, and miscellaneous, respectively.
The order of the structures is determined by the [[personality value]] of the Pokémon modulo 24, as shown below, where G, A, E, and M stand for the substructures growth, attacks, EVs and condition, and miscellaneous, respectively.


{| style="margin:auto; border: 1px solid #88a; background: #f8f8ff; padding: 1px; text-align: center;" cellspacing="1" cellpadding="2"
{| style="margin:auto; border: 1px solid #88a; background: #f8f8ff; padding: 1px; text-align: center;" cellspacing="1" cellpadding="2"
Line 102: Line 102:
==Notes==
==Notes==
===PP bonuses===
===PP bonuses===
The PP bonuses byte stores the number of [[PP Up]]s used for each move. Two bits per move, starting with the first move from the least significant bits upward to the last move.
The PP bonuses byte stores the number of times [[Power points|PP]] has been increased for each move in the attacks substructure. Each move has two bits, meaning the PP of each move can be increased 0 to 3 times.
{| style="border: 1px solid #88a; background: #f8f8ff; padding: 0.5em; border-collapse: collapse; margin: 0 0 0.5em 0.5em" cellpadding=2
! Bits || Move
|-
| 0-1 || Move 1
|-
| 2-3 || Move 2
|-
| 4-5 || Move 3
|-
| 6-7 || Move 4
|}


===Pokérus status===
===Pokérus status===
[[Pokérus]] status is stored in a single byte. The lower 4 bits represents the number of units of time left until the virus wears away. If any bit in the upper 4 bits is set, the Pokémon is immune to Pokérus, indicated a small black dot appears on the Pokémon's status screen. Both values are completely random when caught, leading to the fact that not all Pokémon contract the virus for the same amount of time and some are able to catch it again.
[[Pokérus]] status is stored in a single byte, with the upper and lower halves representing distinct values.
{| style="border: 1px solid #88a; background: #f8f8ff; padding: 0.5em; border-collapse: collapse; margin: 0 0 0.5em 0.5em" cellpadding=2
! Bits || Interpretation
|-
| 0-3 || Days left until Pokérus is cured
|-
| 4-7 || Pokérus "strain"
|}
Any value from 0 to 15 is valid for the strain, with 0 indicating that the Pokémon does not have Pokérus at all. The number of days can be any value from 0 to 4, although for some "strains", some of those higher values [[Pokérus#Strains|are also invalid]]. If any bit is set in the "strain" and the number of days is at 0, the Pokémon has been "cured" of Pokérus, as indicated by a small black dot on the Pokémon's status screen.


===Origins===
===Origins===
<code>FBBBBGGGGLLLLLLL</code>
''Trainer gender'' tells the game how to color the name of the Pokémon's [[Original Trainer]] on the Pokémon's status screen. If ''Level met'' is 0, it is interpreted as the Pokémon having been hatched from an {{pkmn|Egg}}; however, the games only differentiate a hatched Pokémon from other Pokémon if its current Trainer is the Pokémon's Original Trainer. If a hatched Pokémon is traded, its origin text on the status screen is displayed just like a caught Pokémon's and will not say "Hatched" or "Egg".
{| style="border: 1px solid #88a; padding: 0.5em" cellpadding=2 cellspacing=3
|- style="background: #ccf;"
! colspan=2 | Trainer gender || colspan=2 | Poké Ball caught in || colspan=2 | Game of origin || colspan=2 | Level met
|- style="text-align:center"
| colspan=2 | ''Bit 15'' || colspan=2 | ''Bits 11 - 14'' || colspan=2 | ''Bits 7 - 10'' || colspan=2 | ''Bits 0 - 6''
|-
! Value || Gender || Value || Ball || Value || Game || Value || Interpretation
|-
| 0 || style="color:#{{blue color}}" | '''Male''' || 1 || {{bag|Master Ball}}[[Master Ball]] || 0 || {{pkmn|Colosseum Bonus Disc}} || 0 || Hatched
|-
| 1 || style="color:#{{red color}}" | '''Female''' || 2 || {{bag|Master Ball}}{{ball|Ultra}} || 1 || '''{{color2|{{sapphire color}}|Pokémon Ruby and Sapphire Versions|Sapphire}}''' || >0 || Caught or other
|-
| rowspan=10 colspan=2 | || 3 || {{bag|Great Ball}}{{ball|Great}} || 2 || '''{{color2|{{ruby color}}|Pokémon Ruby and Sapphire Versions|Ruby}}'''
|-
| 4 || {{bag|Poké Ball}}{{ball|Poké}} || 3 || '''{{color2|{{emerald color}}|Pokémon Emerald Version|Emerald}}'''
|-
| 5 || {{bag|Safari Ball}}{{ball|Safari}} || 4 || '''{{color2|{{firered color}}|Pokémon FireRed and LeafGreen Versions|FireRed}}'''
|-
| 6 || {{bag|Net Ball}}{{ball|Net}} || 5 || '''{{color2|{{leafgreen color}}|Pokémon FireRed and LeafGreen Versions|LeafGreen}}'''
|-
| 7 || {{bag|Dive Ball}}{{ball|Dive}} || 15 || '''{{color2|{{colo color}}|Pokémon Colosseum|Colosseum}}''' or '''{{color2|{{xd color}}|Pokémon XD: Gale of Darkness|XD}}'''
|-
| 8 || {{bag|Nest Ball}}{{ball|Nest}}
|-
| 9 || {{bag|Repeat Ball}}{{ball|Repeat}}
|-
| 10 || {{bag|Timer Ball}}{{ball|Timer}}
|-
| 11 || {{bag|Luxury Ball}}{{ball|Luxury}}
|-
| 12 || {{bag|Premier Ball}}{{ball|Premier}}
|}


This byte is sometimes divided into two bytes:
===IVs, Egg, and Ability===
[[Individual values|IVs]] for each of the [[stats]] from HP to Special Defense take up the first 30 bits of this field, each IV taking 5 bits. Bit 30 is a 1 if the Pokémon is still an Egg or 0 otherwise. Bit 31 indicates the [[Ability]] the Pokémon has: 0 indicates its first Ability, while 1 indicates its second Ability (if it has one).
{| style="border: 1px solid #88a; background: #f8f8ff; padding: 0.5em; border-collapse: collapse; margin: 0 0 0.5em 0.5em" cellpadding=2
! Bits || Stat
|-
| 0-4 || HP
|-
| 5-9 || Attack
|-
| 10-14 || Defense
|-
| 15-19 || Speed
|-
| 20-24 || Special Attack
|-
| 25-29 || Special Defense
|-
| 30 || Egg?
|-
| 31 || Ability
|}


<code>GLLLLLLL</code> (Game/Level)<br>
===Ribbons and Obedience===
<code>FBBBBGGG</code> (Trainer gender/Ball/Game)
For most of the [[Ribbon]]s, a value of 0 indicates that the Pokémon does not have the Ribbon while 1 indicates that it does. For the {{pkmn|Contest}} Ribbons, the values 1 to 4 indicate that the Pokémon has the Ribbon or Ribbons for (respectively) the Normal, Super, Hyper, and Master Ranks of that Contest.


====Level met====
The last 6 possible spots for Ribbons are variable. The data identifying what Ribbons these spots correspond to is stored elsewhere. The full list of possibilities for these can be seen [[List of Ribbons in the games#Generation III|here]]. The only two of these special Ribbons that remain reliably obtainable are those {{DL|List of Ribbons in the games|National Ribbon|for purifying a Shadow Pokémon}} and {{DL|List of Ribbons in the games|Earth Ribbon|for beating Mt. Battle}}.
Level met (represented by L above) is a 7-bit value stored in the lowest seven bits of the origins-word. It is limited to the range of 1-127. This value being zero represents being hatched from an Egg, so will display "Level 5 (egg)" instead of the regular "Level # (met)" message.
{| style="border: 1px solid #88a; background: #f8f8ff; padding: 0.5em; border-collapse: collapse; margin: 0 0 0.5em 0.5em" cellpadding=2
 
! Bits || Ribbon
When examining the Level-byte on its own, the highest bit has to be cleared.
|-
 
| 0-2 || {{DL|List of Ribbons in the games|Cool Ribbon|Cool}}
====Game of origin====
|-
Game of origin (represented by G above) is contained in bits 7-10, when considering the origins-word as a whole word rather than two separate bytes.
| 3-5 || {{DL|List of Ribbons in the games|Beauty Ribbon|Beauty}}
 
|-
* 0 = [[Pokémon Colosseum Bonus Disc]]
| 6-8 || {{DL|List of Ribbons in the games|Cute Ribbon|Cute}}
* 1 = [[Pokémon Sapphire]]
|-
* 2 = [[Pokémon Ruby]]
| 9-12 || {{DL|List of Ribbons in the games|Smart Ribbon|Smart}}
* 3 = [[Pokémon Emerald]]
|-
* 4 = [[Pokémon FireRed]]
| 12-15 || {{DL|List of Ribbons in the games|Tough Ribbon|Tough}}
* 5 = [[Pokémon LeafGreen]]
|-
* 15 = [[Pokémon Colosseum]] or {{Pokémon XD}}
| 16 || {{DL|List of Ribbons in the games|Champion Ribbon|Champion}}
 
|-
====Poké Ball====
| 17 || {{DL|List of Ribbons in the games|Winning Ribbon|Winning}}
The type of Poké Ball obtained in (represented by B above) is stored in bits 3-6 when considering offset 3 a single byte, and in bits 11-14 when considered a two-byte word.
|-
*1 = [[Master Ball]]
| 18 || {{DL|List of Ribbons in the games|Victory Ribbon|Victory}}
*2 = {{ball|Ultra}}
|-
*3 = {{ball|Great}}
| 19 || {{DL|List of Ribbons in the games|Artist Ribbon|Artist}}
*4 = {{ball|Poké}}
|-
*5 = {{ball|Safari}}
| 20 || {{DL|List of Ribbons in the games|Effort Ribbon|Effort}}
*6 = {{ball|Net}}
|-
*7 = {{ball|Dive}}
| 21 || Special 1
*8 = {{ball|Nest}}
|-
*9 = {{ball|Repeat}}
| 22 || Special 2
*10 = {{ball|Timer}}
|-
*11 = {{ball|Luxury}}
| 23 || Special 3
*12 = {{ball|Premier}}
|-
| 24 || Special 4
|-
| 25 || Special 5
|-
| 27<!--According to http://www.ppnstudio.com/maker/PokemonMakerHelp.txt , 27 is correct...--> || Special 6
|}


====Trainer gender====
The last bit of this field, bit 31, determines the [[obedience]] of {{p|Mew}} and {{p|Deoxys}}.<!--I don't know how, exactly...-->
The most significant bit (represented by F above) stores whether the original Trainer is female. This is used to color the name in the status screen.
 
===IVs===
IVs are stored pretty logically. Starting from the least significant bit, each stat from HP to Special Defense takes up 5 bits.
 
The uppermost bit of this value stores which of its abilities the Pokémon has. If the bit is set to 0, the first ability is used. If it is set to 1, the second ability is used. If the Pokémon can only have one ability, this bit can still be one.
 
The second-most significant bit of this value is a 1 if this entry is still an egg, 0 if not.


==See also==
==See also==
* [[Pokémon data structure in the GBA]]
* [[Pokémon data structure in the GBA]]
==Links==
* [http://www.ppnstudio.com/maker/PokemonMakerHelp.txt PokemonMakerV4x Help and 80 bytes Make a Pokémon]


{{data structure}}<br>
{{data structure}}<br>
{{Project Games notice|data structure}}
{{Project Games notice|data structure}}

Revision as of 00:09, 23 March 2014

This is the list of Pokémon data substructures in the Generation III Game Boy Advance games, Pokémon Ruby, Sapphire, FireRed, LeafGreen, and Emerald.

Format

A Pokémon's data is slightly more complex than the rest of the encapsulating structure. It is stored as four distinct substructures, each 12 bytes in length. (The Notes section below explains some of these fields in greater detail.)

Growth Attacks EVs & Condition Miscellaneous
size
(bytes)
offset
(bytes)
size
(bytes)
offset
(bytes)
size
(bytes)
offset
(bytes)
size
(bytes)
offset
(bytes)
Species 2 0 Move 1 2 0 HP EV 1 0 Pokérus status 1 0
Item held 2 2 Move 2 2 2 Attack EV 1 1 Met location 1 1
Experience 4 4 Move 3 2 4 Defense EV 1 2 Origins info 2 2
PP bonuses 1 8 Move 4 2 6 Speed EV 1 3 IVs, Egg, and Ability 4 4
Friendship 1 9 PP 1 1 8 Special Attack EV 1 4 Ribbons and Obedience 4 8
Unknown 2 10 PP 2 1 9 Special Defense EV 1 5
PP 3 1 10 Coolness 1 6
PP 4 1 11 Beauty 1 7
Cuteness 1 8
Smartness 1 9
Toughness 1 10
Feel 1 11

Substructure order

The order of the structures is determined by the personality value of the Pokémon modulo 24, as shown below, where G, A, E, and M stand for the substructures growth, attacks, EVs and condition, and miscellaneous, respectively.

00. GAEM 06. AGEM 12. EGAM 18. MGAE
01. GAME 07. AGME 13. EGMA 19. MGEA
02. GEAM 08. AEGM 14. EAGM 20. MAGE
03. GEMA 09. AEMG 15. EAMG 21. MAEG
04. GMAE 10. AMGE 16. EMGA 22. MEGA
05. GMEA 11. AMEG 17. EMAG 23. MEAG

Encryption

The four data substructures are stored in an encrypted form. Decrypting the data involves two steps: actually decrypting the data, and validating the decrypted data. To obtain the 32-bit decryption key, the entire Original Trainer ID number must be XORed with the personality value of the entry. This key can then be used to decrypt the data by XORing it, 32 bits (or 4 bytes) at a time. To validate the checksum given in the encapsulating Pokémon data structure, the entirety of the four unencrypted data substructures must be summed into a 16-bit value.

Notes

PP bonuses

The PP bonuses byte stores the number of times PP has been increased for each move in the attacks substructure. Each move has two bits, meaning the PP of each move can be increased 0 to 3 times.

Bits Move
0-1 Move 1
2-3 Move 2
4-5 Move 3
6-7 Move 4

Pokérus status

Pokérus status is stored in a single byte, with the upper and lower halves representing distinct values.

Bits Interpretation
0-3 Days left until Pokérus is cured
4-7 Pokérus "strain"

Any value from 0 to 15 is valid for the strain, with 0 indicating that the Pokémon does not have Pokérus at all. The number of days can be any value from 0 to 4, although for some "strains", some of those higher values are also invalid. If any bit is set in the "strain" and the number of days is at 0, the Pokémon has been "cured" of Pokérus, as indicated by a small black dot on the Pokémon's status screen.

Origins

Trainer gender tells the game how to color the name of the Pokémon's Original Trainer on the Pokémon's status screen. If Level met is 0, it is interpreted as the Pokémon having been hatched from an Egg; however, the games only differentiate a hatched Pokémon from other Pokémon if its current Trainer is the Pokémon's Original Trainer. If a hatched Pokémon is traded, its origin text on the status screen is displayed just like a caught Pokémon's and will not say "Hatched" or "Egg".

Trainer gender Poké Ball caught in Game of origin Level met
Bit 15 Bits 11 - 14 Bits 7 - 10 Bits 0 - 6
Value Gender Value Ball Value Game Value Interpretation
0 Male 1 Master BallMaster Ball 0 Colosseum Bonus Disc 0 Hatched
1 Female 2 Master BallUltra Ball 1 Sapphire >0 Caught or other
3 Great BallGreat Ball 2 Ruby
4 Poké BallPoké Ball 3 Emerald
5 Safari BallSafari Ball 4 FireRed
6 Net BallNet Ball 5 LeafGreen
7 Dive BallDive Ball 15 Colosseum or XD
8 Nest BallNest Ball
9 Repeat BallRepeat Ball
10 Timer BallTimer Ball
11 Luxury BallLuxury Ball
12 Premier BallPremier Ball

IVs, Egg, and Ability

IVs for each of the stats from HP to Special Defense take up the first 30 bits of this field, each IV taking 5 bits. Bit 30 is a 1 if the Pokémon is still an Egg or 0 otherwise. Bit 31 indicates the Ability the Pokémon has: 0 indicates its first Ability, while 1 indicates its second Ability (if it has one).

Bits Stat
0-4 HP
5-9 Attack
10-14 Defense
15-19 Speed
20-24 Special Attack
25-29 Special Defense
30 Egg?
31 Ability

Ribbons and Obedience

For most of the Ribbons, a value of 0 indicates that the Pokémon does not have the Ribbon while 1 indicates that it does. For the Contest Ribbons, the values 1 to 4 indicate that the Pokémon has the Ribbon or Ribbons for (respectively) the Normal, Super, Hyper, and Master Ranks of that Contest.

The last 6 possible spots for Ribbons are variable. The data identifying what Ribbons these spots correspond to is stored elsewhere. The full list of possibilities for these can be seen here. The only two of these special Ribbons that remain reliably obtainable are those for purifying a Shadow Pokémon and for beating Mt. Battle.

Bits Ribbon
0-2 Cool
3-5 Beauty
6-8 Cute
9-12 Smart
12-15 Tough
16 Champion
17 Winning
18 Victory
19 Artist
20 Effort
21 Special 1
22 Special 2
23 Special 3
24 Special 4
25 Special 5
27 Special 6

The last bit of this field, bit 31, determines the obedience of Mew and Deoxys.

See also

Links

Data structure in the Pokémon games
General Character encoding
Generation I Pokémon speciesPokémonPoké MartCharacter encoding (Stadium) • Save
Generation II Pokémon speciesPokémonTrainerCharacter encoding (StadiumKorean) • Save
Generation III Pokémon species (EvolutionPokédexType chart)
Pokémon (substructures) • MoveContestContest moveItem
Trainer TowerBattle FrontierCharacter encoding (GameCube) • Save
Generation IV Pokémon species (EvolutionLearnsets)
PokémonSaveCharacter encoding (Wii)
Generation V–present Character encoding
Generation VIII Save
TCG GB and GB2 Character encoding


This data structure article is part of Project Games, a Bulbapedia project that aims to write comprehensive articles on the Pokémon games.