<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://bulbapedia.bulbagarden.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ProfX</id>
	<title>Bulbapedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://bulbapedia.bulbagarden.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ProfX"/>
	<link rel="alternate" type="text/html" href="https://bulbapedia.bulbagarden.net/wiki/Special:Contributions/ProfX"/>
	<updated>2026-06-11T09:31:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://bulbapedia.bulbagarden.net/w/index.php?title=Pok%C3%A9mon_data_structure_(Generation_III)&amp;diff=3775704</id>
		<title>Pokémon data structure (Generation III)</title>
		<link rel="alternate" type="text/html" href="https://bulbapedia.bulbagarden.net/w/index.php?title=Pok%C3%A9mon_data_structure_(Generation_III)&amp;diff=3775704"/>
		<updated>2023-08-19T20:15:46Z</updated>

		<summary type="html">&lt;p&gt;ProfX: /* Data location */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pokémon in the {{game|Ruby and Sapphire|s}}, {{2v2|FireRed|LeafGreen}}, and {{v|Emerald}}s are all stored the same way in a 100-byte structure. All numbers are stored in little-endian order.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #88a; background: #f8f8ff; padding: 0.5em; border-collapse: collapse; float: right; margin: 0 0 0.5em 0.5em;&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; style=&amp;quot;text-align: center; background: #{{hoenn color}};&amp;quot; | &#039;&#039;&#039;Pokémon&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! || type || offset&lt;br /&gt;
|-&lt;br /&gt;
| [[Personality value]] || dword || 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Original Trainer|OT]] [[Trainer ID number|ID]] || dword || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Nickname]] || 10 bytes || 8&lt;br /&gt;
|-&lt;br /&gt;
| Language || byte || 18&lt;br /&gt;
|-&lt;br /&gt;
| Egg Name || byte || 19&lt;br /&gt;
|-&lt;br /&gt;
| OT name || 7 bytes || 20&lt;br /&gt;
|-&lt;br /&gt;
| [[Marking]]s || byte || 27&lt;br /&gt;
|-&lt;br /&gt;
| Checksum || word || 28&lt;br /&gt;
|-&lt;br /&gt;
| ???? || word  || 30&lt;br /&gt;
|-&lt;br /&gt;
| {{OBP|Pokémon data substructures|Generation III|Data}} || 48 bytes || 32&lt;br /&gt;
|-&lt;br /&gt;
| [[Status condition]] || dword || 80&lt;br /&gt;
|-&lt;br /&gt;
| [[Level]] || byte || 84&lt;br /&gt;
|-&lt;br /&gt;
| [[Pokérus]] remaining || byte || 85&lt;br /&gt;
|-&lt;br /&gt;
| Current [[stats|HP]] || word || 86&lt;br /&gt;
|-&lt;br /&gt;
| Total [[stats|HP]] || word || 88&lt;br /&gt;
|-&lt;br /&gt;
| [[stats|Attack]] || word || 90&lt;br /&gt;
|-&lt;br /&gt;
| [[stats|Defense]] || word || 92&lt;br /&gt;
|-&lt;br /&gt;
| [[stats|Speed]] || word || 94&lt;br /&gt;
|-&lt;br /&gt;
| [[stats|Sp. Attack]] || word || 96&lt;br /&gt;
|-&lt;br /&gt;
| [[stats|Sp. Defense]] || word || 98&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Personality value===&lt;br /&gt;
The [[personality value]] controls many things, including [[gender]], {{p|Unown}}&#039;s letter, {{p|Spinda}}&#039;s dots, any Pokémon&#039;s [[Nature]], and more.&lt;br /&gt;
&lt;br /&gt;
===OT ID===&lt;br /&gt;
The [[Original Trainer]]&#039;s [[Trainer ID number|ID number]]. This number is part of the XOR encryption key for the {{OBP|Pokémon data substructures|Generation III|data}} section, and is also used in [[Shiny Pokémon|Shiny]] determination and the [[Pokémon Lottery Corner|lottery]]. The least significant bytes of this number are the Trainer ID visible on the status screen. The most significant bits (top 16) are the Secret ID of the trainer that caught it.&lt;br /&gt;
&lt;br /&gt;
===Nickname===&lt;br /&gt;
The Pokémon&#039;s [[nickname]], limited to 10 characters. The characters represented by each byte are determined by the {{OBP|Character encoding|Generation III|proprietary character set}}.&lt;br /&gt;
&lt;br /&gt;
===Language===&lt;br /&gt;
The [[language of origin]] is language of the game the Pokémon originates from.&lt;br /&gt;
&lt;br /&gt;
In Western languages, a Pokémon&#039;s language of origin determines which font to use to display its name and Original Trainer. This allows the names and Original Trainers of Pokémon from Japanese games to display correctly, including displaying Latin letters as {{wp|fullwidth}} characters.&lt;br /&gt;
&lt;br /&gt;
In Japanese, the language of origin is entirely ignored—names are always rendered using the Japanese character set. This causes all names to be truncated to five characters (even though they can be up to 10 characters in Western languages). In some cases, this causes characters to render as {{wp|mojibake}}; for example, if the {{DL|In-game trade|Pokémon FireRed and LeafGreen|in-game trade}} {{p|Seel}} from Spanish {{game|FireRed and LeafGreen|s}} (whose nickname is normally SEELÍN) is traded to a Japanese game, its nickname will be displayed as ＳＥＥＬコ.&lt;br /&gt;
&lt;br /&gt;
The values that the languages correspond to are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Index || Language&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Japanese&lt;br /&gt;
|-&lt;br /&gt;
| 2 || English&lt;br /&gt;
|-&lt;br /&gt;
| 3 || French&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Italian&lt;br /&gt;
|-&lt;br /&gt;
| 5 || German&lt;br /&gt;
|-&lt;br /&gt;
| 6 || &#039;&#039;unused&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Spanish&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In the Generation III games, [[Pokémon Egg|Eggs]] always have their language set to Japanese. This does not cause any issues as, upon hatching, the language of the Egg is set to the language of the game it hatched in.&lt;br /&gt;
&lt;br /&gt;
===Egg Name===&lt;br /&gt;
This byte houses 3 flags:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Is Bad Egg (Bit 0):&#039;&#039;&#039; When this flag is set, the Pokémon will be treated as a [[Bad Egg]]. If a Pokémon&#039;s [[#Checksum|checksum]] is invalid, this flag is set, marking it as a Bad Egg and making it unusable.&lt;br /&gt;
* &#039;&#039;&#039;Has Species (Bit 1):&#039;&#039;&#039; This flag is set whenever the Pokémon species index is non-zero, which should be the case for any Pokémon. It is used as a sanity check for empty spaces, and any Pokémon without this flag set cannot be bred and will disappear when group selected. &lt;br /&gt;
* &#039;&#039;&#039;Use Egg Name (Bit 2):&#039;&#039;&#039; When this flag is set, the Pokémon will ignore their [[#Nickname|nickname]] and display the game&#039;s regional variant of &amp;quot;EGG&amp;quot;. Only eggs should have this flag set. Note that this flag is independent from the [[Pokémon data substructures (Generation III)#IVs, Egg, and Ability|egg flag]] in the subdata structure.&lt;br /&gt;
* &#039;&#039;&#039;Bits 3-7&#039;&#039;&#039;: These bits are unused, and are just padding for the three flags. They should be set to 0.&lt;br /&gt;
&lt;br /&gt;
===OT name===&lt;br /&gt;
The name of the Pokémon&#039;s Original Trainer. The characters represented by each byte are determined by the {{OBP|Character encoding|Generation III|proprietary character set}}.&lt;br /&gt;
&lt;br /&gt;
===Markings===&lt;br /&gt;
The markings seen in the [[Pokémon Storage System|storage Box]]. These markings serve only to aid in organizing large collections of Pokémon.&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #88a; background: #f8f8ff; padding: 0.5em; border-collapse: collapse; margin: 0 0 0.5em 0.5em&amp;quot; cellpadding=2&lt;br /&gt;
! Bit || Mark&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ●&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ■&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ▲&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ♥&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Checksum===&lt;br /&gt;
The checksum for the 48-byte {{OBP|Pokémon data substructures|Generation III|data}} section of this structure. It is computed by adding all of the unencrypted values of that section one word at a time. If the computed sum and the stored checksum do not match, the Pokémon is interpreted as a [[Bad Egg]].&lt;br /&gt;
&lt;br /&gt;
===????===&lt;br /&gt;
Unknown, possibly simply padding (not used and usually set to either 0 or -1, depending on the data type).&lt;br /&gt;
&lt;br /&gt;
===Data===&lt;br /&gt;
Certain {{OBP|Pokémon data substructures|Generation III|data}} pertaining to the Pokémon that is stored in a special and encrypted format.&lt;br /&gt;
&lt;br /&gt;
===Status condition===&lt;br /&gt;
The Pokémon&#039;s [[status condition]] is stored as follows:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #88a; background: #f8f8ff; padding: 0.5em; border-collapse: collapse; margin: 0 0 0.5em 0.5em&amp;quot; cellpadding=2&lt;br /&gt;
! Bit || colspan=2 | Status&lt;br /&gt;
|-&lt;br /&gt;
| 0-2 || class=&amp;quot;roundy&amp;quot; style=&amp;quot;background:#{{status color}}; border:1px solid #f8f8ff; text-align:center&amp;quot; width=&amp;quot;32px&amp;quot; | &amp;lt;small&amp;gt;{{color2|FFFFFF|Sleep (status condition)|SLP}}&amp;lt;/small&amp;gt; || Sleep&lt;br /&gt;
|-&lt;br /&gt;
| 3 || class=&amp;quot;roundy&amp;quot; style=&amp;quot;background:#{{poison color}}; border:1px solid #f8f8ff; text-align:center&amp;quot; | &amp;lt;small&amp;gt;{{color2|FFFFFF|Poison (status condition)|PSN}}&amp;lt;/small&amp;gt; || Poison&lt;br /&gt;
|-&lt;br /&gt;
| 4 || class=&amp;quot;roundy&amp;quot; style=&amp;quot;background:#{{fire color}}; border:1px solid #f8f8ff; text-align:center&amp;quot; | &amp;lt;small&amp;gt;{{color2|FFF|Burn (status condition)|BRN}}&amp;lt;/small&amp;gt; || Burn&lt;br /&gt;
|-&lt;br /&gt;
| 5 || class=&amp;quot;roundy&amp;quot; style=&amp;quot;background:#{{ice color}}; border:1px solid #f8f8ff; text-align:center&amp;quot; | &amp;lt;small&amp;gt;{{color2|FFFFFF|Freeze (status condition)|FRZ}}&amp;lt;/small&amp;gt; || Freeze&lt;br /&gt;
|-&lt;br /&gt;
| 6 || class=&amp;quot;roundy&amp;quot; style=&amp;quot;background:#{{electric color}}; border:1px solid #f8f8ff; text-align:center&amp;quot; | &amp;lt;small&amp;gt;{{color2|FFFFFF|Paralysis (status condition)|PAR}}&amp;lt;/small&amp;gt; || Paralysis&lt;br /&gt;
|-&lt;br /&gt;
| 7 || class=&amp;quot;roundy&amp;quot; style=&amp;quot;background:#{{poison color}}; border:1px solid #f8f8ff; border-bottom:1px solid; text-align:center&amp;quot; | &amp;lt;small&amp;gt;{{color2|FFFFFF|Poison (status condition)|PSN}}&amp;lt;/small&amp;gt; || Bad Poison&lt;br /&gt;
|}&lt;br /&gt;
The three sleep bits are used to indicate turns of sleep. So 111&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 7 turns of sleep, 101&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = 5 turns, et cetera.&lt;br /&gt;
&lt;br /&gt;
===Pokérus===&lt;br /&gt;
{{incomplete|section|What happens when this value ticks down to 0? What determines when it ticks down?}}&lt;br /&gt;
{{main|Pokérus}}&lt;br /&gt;
Not the same as the value found in [[Pokémon data substructures (Generation III)#Pokérus status|the miscellaneous data substructure]], which is a [[Pokérus#Technical information|standard Pokérus byte]]. Instead, this value starts at 0xFF (and is in fact set to 0xFF initially even for Pokémon who haven&#039;t contracted Pokérus) and slowly ticks down. Cured Pokémon have this value set to 0.&lt;br /&gt;
&lt;br /&gt;
==Data location==&lt;br /&gt;
{{incomplete|section|Are the addresses below only for US games? Also, is the mentioned &amp;quot;general region&amp;quot; of box data correct?}}&lt;br /&gt;
A Trainer&#039;s [[party]] starts at the following addresses in the GBA&#039;s RAM.&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #88a; background: #f8f8ff; padding: 0.5em; border-collapse: collapse; margin: 0 0 0.5em 0.5em&amp;quot; cellpadding=2&lt;br /&gt;
! Game || Address&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;{{color2|{{ruby color}}|Pokémon Ruby and Sapphire Versions|Ruby}}&#039;&#039;&#039; || rowspan=2 | 0x03004360&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;{{color2|{{sapphire color}}|Pokémon Ruby and Sapphire Versions|Sapphire}}&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;{{color2|{{emerald color}}|Pokémon Emerald Version|Emerald}}&#039;&#039;&#039; || 0x02024190&amp;lt;br&amp;gt;0x020244EC&amp;lt;sup&amp;gt;{{tt|US,FR|for US and FR games}}&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;{{color2|{{firered color}}|Pokémon FireRed and LeafGreen Versions|FireRed}}&#039;&#039;&#039; || 0x02024284&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;{{color2|{{leafgreen color}}|Pokémon FireRed and LeafGreen Versions|LeafGreen}}&#039;&#039;&#039; || 0x020241E4&amp;lt;br&amp;gt;0x02024284&amp;lt;sup&amp;gt;{{tt|US|for US games}}&amp;lt;/sup&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
An opponent&#039;s party, or a wild Pokémon, starts at the following addresses.&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #88a; background: #f8f8ff; padding: 0.5em; border-collapse: collapse; margin: 0 0 0.5em 0.5em&amp;quot; cellpadding=2&lt;br /&gt;
! Game || Address&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;{{color2|{{ruby color}}|Pokémon Ruby and Sapphire Versions|Ruby}}&#039;&#039;&#039; || rowspan=2 | 0x030045C0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;{{color2|{{sapphire color}}|Pokémon Ruby and Sapphire Versions|Sapphire}}&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;{{color2|{{emerald color}}|Pokémon Emerald Version|Emerald}}&#039;&#039;&#039; || 0x02024744&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;{{color2|{{firered color}}|Pokémon FireRed and LeafGreen Versions|FireRed}}&#039;&#039;&#039; || 0x0202402C&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The 600 bytes following these addresses describe a whole team of 6 Pokémon.&lt;br /&gt;
&lt;br /&gt;
The full 100-byte structure for a Pokémon is only used to describe Pokémon being held in the player&#039;s party. When Pokémon are stored in the PC, their data is recorded using only the first 80 bytes of this structure, stopping after the {{OBP|Pokémon data substructures|Generation III|data}} field. The last 20 bytes (excepting status condition, current  HP, and Pokerus remaining byte) can all be recalculated from data in the data substructure when a Pokémon is withdrawn (level being derived from experience). This also explains why Pokémon suffering a status condition are &amp;quot;cured&amp;quot; when put in the PC.&lt;br /&gt;
&lt;br /&gt;
This means there are also 33,600 bytes (80 bytes * 30 per Box * 14 Boxes) elsewhere in the GBA&#039;s RAM describing Pokémon in the PC. When the GBA&#039;s saved state (including memory contents) is unzipped into a 740,000+ byte file and viewed, the 14 Boxes of 420 Pokémon are stored in the general region of $038000 and $040000. In the US version of Pokémon Emerald, box data is between 0x02FE9888 and 0x02FF1BC8, non-inclusive. Depending on the emulator or game it can be in a different address for example on mgba pokemon emerald(BPEE) the ram address was 0x02FE9880. The first 6 80-byte structures make up, from left to right, the first row of Pokémon in box 1. The next Pokémon gets placed on the next row. After 5 rows (30 80-byte structures), the next Pokémon is placed in box 2, and so on.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Pokémon data substructures (Generation III)]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://www.ppnstudio.com/maker/PokemonMakerHelp.txt PokemonMakerV4x Help and 80 bytes Make a Pokémon]&lt;br /&gt;
&lt;br /&gt;
{{data structure}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Project Games notice|data structure}}&lt;/div&gt;</summary>
		<author><name>ProfX</name></author>
	</entry>
</feed>