“The Website Previously Known as Legendary Pokémon.”

Legacy, Weeklymech

Move Data Structure

by Arty2

Introduction

This article provides detailed documentation on the Move data structures in the GBA games. Move names are stored elsewhere.

If you have something to add feel free to comment and I’d be happy to see people contributing to these articles. After every article will follow some related links that will help you get additional information.

Always remember that ROM images are illegal if you do not own the actual game and should only be used for personal backup reasons. If you like a game, please buy it and help the producers make new games.

Specs.

A base stats structure is a 34-byte piece of data in the Advanced Generation games.

Move Data Structure
Data  Type  Description
Effect byte This is the move’s effect number. Some moves share the same effect number. Effectless moves have an Effect number of 0x00.
Base Power byte This is the move’s Base Power which is used when calculating inflicted damage.
Type byte This is the move’s Type.
Accuracy byte This is the move’s accuracy. Divide this value by 256 to get a % accuracy. An accuracy of 0x00 means that it will never fail.
PP byte The move’s base Power Points.
Effect Accuracy byte This is the effects’s accuracy. Divide this value by 100 to get a % accuracy. An accuracy of 0x00 means that the effect will always occur.
“Affects Whom” byte This determines who the move will hit on a 2on2 battle
Priotiry byte Priority determines the move’s speed, for example Extremespeed will always hit first. The byte is signed which means that it can be either positive or negative. The higher the number is, the faster the move is.
Special Flags byte A group of bit level flags that determine whether the move is affected by items such as King’s Rock or Brightpowder etc. See below for more.
Padding 3 bytes Always equals 0000. It is used as a divider/padding between the data entries.

Additional References

Types (decimal)

00  Normal      09  ???
01  Fighting    10  Fire
02  Flying      11  Water
03  Poison      12  Grass
04  Ground      13  Electric
05  Rock        14  Psychic
06  Bug         15  Ice
07  Ghost       17  Dark
08  Steel

“Affects Whom” table

Note than only Spikes has a value of 0x40.

0x00  Selected target
0x01  Last opponent who moved
0x02  Unused
0x04  Random target
0x08  Both opponents
0x10  User
0x20  Both opponents and partner
0x40  Opponent field
0x80  Unused

Special Flags

Format (bit level): 00?? ????

0  Empty
0  Empty
?  1: Affected by King’s Rock
?  1: Affected By Brightpowder

?  1: Affected by Snatch (Stat Altering)
?  1: No Damage For Opponent
?  1: Affects Opponent   0: Affects User
?  1: Physical Contact (Touch)

Sound moves

Moves that make sound and are therefore negated by the Soundproof ability.

It is unknown where this data is located.

Maximum PP

maxPP = floor((PP*20/100)*3 + PP)

Signed byte

Use this function to convert the Priority value to a readable number.

function signedbyte($number) {
if ($number < 128) { return $number; }
return $number-256;
}

Related links

About the author

Arty2

Heracles is an Athens-based architect and designer.
He founded LegendaryPKMN in 2001.