summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/pokemon_s.s365
-rw-r--r--arm9/src/pokemon.c160
-rw-r--r--include/constants/moves.h473
-rw-r--r--include/move_data.h1
4 files changed, 631 insertions, 368 deletions
diff --git a/arm9/asm/pokemon_s.s b/arm9/asm/pokemon_s.s
index b0657999..472197ae 100644
--- a/arm9/asm/pokemon_s.s
+++ b/arm9/asm/pokemon_s.s
@@ -2,378 +2,13 @@
.include "global.inc"
.include "constants/species.h"
- .extern gGameLanguage
.extern gGameVersion
.extern sItemOdds
- .extern sFriendshipModTable
.extern sLegendaryMonsList
.extern UNK_020F7F16
- .extern sNatureStatMods
-
- .section .data
-
- .global __local_str_poketool_personal_pms_narc
-__local_str_poketool_personal_pms_narc: ; 0x02105FC8
- .asciz "poketool/personal/pms.narc"
.text
- .extern LoadGrowthTable
- .extern GetExpByGrowthRateAndLevel
-
- .extern BoxMonIsShiny
-
- thumb_func_start ReadFromPersonalPmsNarc
-ReadFromPersonalPmsNarc: ; 0x02069558
- push {r3-r4, lr}
- sub sp, #0x4c
- add r4, r0, #0x0
- mov r1, #0x0
- add r0, sp, #0x0
- strh r1, [r0, #0x0]
- ldr r0, _020695A0 ; =SPECIES_EGG
- cmp r4, r0
- blo _0206956E
- bl ErrorHandling
-_0206956E:
- add r0, sp, #0x4
- bl FS_InitFile
- ldr r1, _020695A4 ; =__local_str_poketool_personal_pms_narc
- add r0, sp, #0x4
- bl FS_OpenFile
- add r0, sp, #0x4
- lsl r1, r4, #0x1
- mov r2, #0x0
- bl FS_SeekFile
- add r0, sp, #0x4
- add r1, sp, #0x0
- mov r2, #0x2
- bl FS_ReadFile
- add r0, sp, #0x4
- bl FS_CloseFile
- add r0, sp, #0x0
- ldrh r0, [r0, #0x0]
- add sp, #0x4c
- pop {r3-r4, pc}
- nop
-_020695A0: .word SPECIES_EGG
-_020695A4: .word __local_str_poketool_personal_pms_narc
-
- thumb_func_start GetEggSpecies
-GetEggSpecies: ; 0x020695A8
- push {r3, lr}
- cmp r0, #SPECIES_SUDOWOODO
- bgt _020695CC
- cmp r0, #SPECIES_MARILL
- blt _020695BA
- beq _020695EC
- cmp r0, #SPECIES_SUDOWOODO
- beq _020695EC
- b _020695E8
-_020695BA:
- cmp r0, #SPECIES_MR_MIME
- bgt _020695C6
- bge _020695EC
- cmp r0, #SPECIES_CHANSEY
- beq _020695EC
- b _020695E8
-_020695C6:
- cmp r0, #SPECIES_SNORLAX
- beq _020695EC
- b _020695E8
-_020695CC:
- cmp r0, #SPECIES_MANTINE
- bgt _020695D8
- bge _020695EC
- cmp r0, #SPECIES_WOBBUFFET
- beq _020695EC
- b _020695E8
-_020695D8:
- ldr r1, _020695F0 ; =SPECIES_ROSELIA
- cmp r0, r1
- bgt _020695E2
- beq _020695EC
- b _020695E8
-_020695E2:
- add r1, #SPECIES_CHIMECHO-SPECIES_ROSELIA
- cmp r0, r1
- beq _020695EC
-_020695E8:
- bl ReadFromPersonalPmsNarc
-_020695EC:
- pop {r3, pc}
- nop
-_020695F0: .word SPECIES_ROSELIA
-
- thumb_func_start InitBoxMonMoveset
-InitBoxMonMoveset: ; 0x020695F4
- push {r3-r7, lr}
- sub sp, #0x8
- add r5, r0, #0x0
- mov r0, #0x0
- mov r1, #0x2c
- bl AllocFromHeap
- str r0, [sp, #0x0]
- add r0, r5, #0x0
- bl AcquireBoxMonLock
- str r0, [sp, #0x4]
- add r0, r5, #0x0
- mov r1, #0x5
- mov r2, #0x0
- bl GetBoxMonData
- lsl r0, r0, #0x10
- lsr r4, r0, #0x10
- add r0, r5, #0x0
- mov r1, #0x70
- mov r2, #0x0
- bl GetBoxMonData
- add r7, r0, #0x0
- add r0, r5, #0x0
- bl CalcBoxMonLevel
- lsl r0, r0, #0x18
- lsr r6, r0, #0x18
- ldr r2, [sp, #0x0]
- add r0, r4, #0x0
- add r1, r7, #0x0
- bl LoadWotbl_HandleAlternateForme
- ldr r0, [sp, #0x0]
- ldrh r1, [r0, #0x0]
- ldr r0, _02069690 ; =0x0000FFFF
- cmp r1, r0
- beq _0206967C
- ldr r4, [sp, #0x0]
- lsl r7, r6, #0x9
-_02069648:
- ldrh r1, [r4, #0x0]
- mov r0, #0xfe
- lsl r0, r0, #0x8
- and r0, r1
- cmp r0, r7
- bgt _0206967C
- ldr r0, _02069694 ; =0x000001FF
- and r0, r1
- lsl r0, r0, #0x10
- lsr r6, r0, #0x10
- add r0, r5, #0x0
- add r1, r6, #0x0
- bl FUN_020696A8
- ldr r1, _02069690 ; =0x0000FFFF
- cmp r0, r1
- bne _02069672
- add r0, r5, #0x0
- add r1, r6, #0x0
- bl FUN_02069718
-_02069672:
- add r4, r4, #0x2
- ldrh r1, [r4, #0x0]
- ldr r0, _02069690 ; =0x0000FFFF
- cmp r1, r0
- bne _02069648
-_0206967C:
- ldr r0, [sp, #0x0]
- bl FreeToHeap
- ldr r1, [sp, #0x4]
- add r0, r5, #0x0
- bl ReleaseBoxMonLock
- add sp, #0x8
- pop {r3-r7, pc}
- nop
-_02069690: .word 0x0000FFFF
-_02069694: .word 0x000001FF
-
- thumb_func_start FUN_02069698
-FUN_02069698: ; 0x02069698
- push {r4, lr}
- add r4, r1, #0x0
- bl FUN_020690E4
- add r1, r4, #0x0
- bl FUN_020696A8
- pop {r4, pc}
-
- thumb_func_start FUN_020696A8
-FUN_020696A8: ; 0x020696A8
- push {r3-r7, lr}
- sub sp, #0x8
- add r5, r1, #0x0
- ldr r1, _02069700 ; =0x0000FFFF
- add r6, r0, #0x0
- str r1, [sp, #0x4]
- bl AcquireBoxMonLock
- mov r4, #0x0
- str r0, [sp, #0x0]
- add r7, r4, #0x0
-_020696BE:
- add r1, r4, #0x0
- add r0, r6, #0x0
- add r1, #0x36
- add r2, r7, #0x0
- bl GetBoxMonData
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- bne _020696E0
- lsl r2, r4, #0x18
- add r0, r6, #0x0
- add r1, r5, #0x0
- lsr r2, r2, #0x18
- bl FUN_020697D4
- str r5, [sp, #0x4]
- b _020696F0
-_020696E0:
- cmp r0, r5
- bne _020696EA
- ldr r0, _02069704 ; =0x0000FFFE
- str r0, [sp, #0x4]
- b _020696F0
-_020696EA:
- add r4, r4, #0x1
- cmp r4, #0x4
- blt _020696BE
-_020696F0:
- ldr r1, [sp, #0x0]
- add r0, r6, #0x0
- bl ReleaseBoxMonLock
- ldr r0, [sp, #0x4]
- add sp, #0x8
- pop {r3-r7, pc}
- nop
-_02069700: .word 0x0000FFFF
-_02069704: .word 0x0000FFFE
-
- thumb_func_start FUN_02069708
-FUN_02069708: ; 0x02069708
- push {r4, lr}
- add r4, r1, #0x0
- bl FUN_020690E4
- add r1, r4, #0x0
- bl FUN_02069718
- pop {r4, pc}
-
- thumb_func_start FUN_02069718
-FUN_02069718: ; 0x02069718
- push {r3-r7, lr}
- sub sp, #0x20
- add r5, r0, #0x0
- str r1, [sp, #0x0]
- bl AcquireBoxMonLock
- str r0, [sp, #0xc]
- add r0, sp, #0x18
- mov r4, #0x0
- str r0, [sp, #0x4]
- add r7, sp, #0x14
- add r6, sp, #0x10
-_02069730:
- add r1, r4, #0x0
- add r0, r5, #0x0
- add r1, #0x37
- mov r2, #0x0
- bl GetBoxMonData
- ldr r1, [sp, #0x4]
- mov r2, #0x0
- strh r0, [r1, #0x0]
- add r1, r4, #0x0
- add r0, r5, #0x0
- add r1, #0x3b
- bl GetBoxMonData
- add r1, r4, #0x0
- strb r0, [r7, #0x0]
- add r0, r5, #0x0
- add r1, #0x3f
- mov r2, #0x0
- bl GetBoxMonData
- strb r0, [r6, #0x0]
- ldr r0, [sp, #0x4]
- add r4, r4, #0x1
- add r0, r0, #0x2
- str r0, [sp, #0x4]
- add r7, r7, #0x1
- add r6, r6, #0x1
- cmp r4, #0x3
- blt _02069730
- ldr r0, [sp, #0x0]
- add r1, sp, #0x10
- strh r0, [r1, #0xe]
- ldr r0, [sp, #0x0]
- mov r1, #0x5
- bl FUN_0206AB18
- add r1, sp, #0x10
- strb r0, [r1, #0x7]
- mov r4, #0x0
- add r0, sp, #0x18
- strb r4, [r1, #0x3]
- str r0, [sp, #0x8]
- add r7, sp, #0x14
- add r6, sp, #0x10
-_0206978A:
- add r1, r4, #0x0
- ldr r2, [sp, #0x8]
- add r0, r5, #0x0
- add r1, #0x36
- bl SetBoxMonData
- add r1, r4, #0x0
- add r0, r5, #0x0
- add r1, #0x3a
- add r2, r7, #0x0
- bl SetBoxMonData
- add r1, r4, #0x0
- add r0, r5, #0x0
- add r1, #0x3e
- add r2, r6, #0x0
- bl SetBoxMonData
- ldr r0, [sp, #0x8]
- add r4, r4, #0x1
- add r0, r0, #0x2
- str r0, [sp, #0x8]
- add r7, r7, #0x1
- add r6, r6, #0x1
- cmp r4, #0x4
- blt _0206978A
- ldr r1, [sp, #0xc]
- add r0, r5, #0x0
- bl ReleaseBoxMonLock
- add sp, #0x20
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_020697CC
-FUN_020697CC: ; 0x020697CC
- ldr r3, _020697D0 ; =FUN_020697D4
- bx r3
- .balign 4
-_020697D0: .word FUN_020697D4
-
- thumb_func_start FUN_020697D4
-FUN_020697D4: ; 0x020697D4
- push {r0-r3}
- push {r3-r5, lr}
- add r4, r2, #0x0
- add r1, r4, #0x0
- add r1, #0x36
- add r2, sp, #0x14
- add r5, r0, #0x0
- bl SetBoxMonData
- add r1, r4, #0x0
- add r0, r5, #0x0
- add r1, #0x3e
- mov r2, #0x0
- bl GetBoxMonData
- lsl r0, r0, #0x18
- lsr r1, r0, #0x18
- add r0, sp, #0x10
- ldrh r0, [r0, #0x4]
- bl FUN_0206AB30
- add r1, sp, #0x0
- strb r0, [r1, #0x0]
- add r4, #0x3a
- add r0, r5, #0x0
- add r1, r4, #0x0
- add r2, sp, #0x0
- bl SetBoxMonData
- pop {r3-r5}
- pop {r3}
- add sp, #0x10
- bx r3
- .balign 4
-
thumb_func_start FUN_02069818
FUN_02069818: ; 0x02069818
push {r3-r7, lr}
diff --git a/arm9/src/pokemon.c b/arm9/src/pokemon.c
index f1fbcd1d..d3c4ead6 100644
--- a/arm9/src/pokemon.c
+++ b/arm9/src/pokemon.c
@@ -11,6 +11,7 @@
#include "text.h"
#include "constants/abilities.h"
#include "constants/items.h"
+#include "constants/moves.h"
#pragma thumb on
@@ -25,6 +26,11 @@ u16 ModifyStatByNature(u8 nature, u16 statval, u8 statno);
u8 GetGenderBySpeciesAndPersonality_PreloadedPersonal(struct BaseStats * personal, u16 species, u32 pid);
u8 BoxMonIsShiny(struct BoxPokemon * boxmon);
u8 CalcShininessByOtIdAndPersonality(u32 otid, u32 pid);
+void InitBoxMonMoveset(struct BoxPokemon * boxmon);
+u32 FUN_020696A8(struct BoxPokemon * boxmon, u16 move);
+void FUN_02069718(struct BoxPokemon * boxmon, u16 move);
+void FUN_020697D4(struct BoxPokemon * boxmon, u16 move, u8 slot);
+void LoadWotbl_HandleAlternateForme(int species, int forme, u16 * wotbl);
u32 MaskOfFlagNo(int flagno);
void LoadMonPersonal(int species, struct BaseStats * personal);
void LoadMonEvolutionTable(u16 species, struct Evolution * dest);
@@ -35,7 +41,6 @@ void MonEncryptSegment(void * datap, u32 size, u32 key);
void MonDecryptSegment(void * datap, u32 size, u32 key);
u16 MonEncryptionLCRNG(u32 * seed);
u16 CalcMonChecksum(void * datap, u32 size);
-void InitBoxMonMoveset(struct BoxPokemon * boxmon);
PokemonDataBlock * GetSubstruct(struct BoxPokemon * boxmon, u32 personality, u32 which_struct);
void LoadMonBaseStats_HandleAlternateForme(u32 species, u32 forme, struct BaseStats * baseStats);
@@ -2448,9 +2453,9 @@ u8 FUN_020690D4(struct BoxPokemon * boxmon)
return GetBoxMonData(boxmon, MON_DATA_FORME, NULL);
}
-void FUN_020690E4(void)
+struct BoxPokemon * FUN_020690E4(struct Pokemon * pokemon)
{
-
+ return &pokemon->box;
}
BOOL FUN_020690E8(struct Pokemon * pokemon)
@@ -2720,3 +2725,152 @@ u16 GetMonEvolution(struct PlayerParty * party, struct Pokemon * pokemon, u32 co
FreeToHeap(evoTable);
return target;
}
+
+u16 ReadFromPersonalPmsNarc(u16 species)
+{
+ u16 ret = SPECIES_NONE;
+ GF_ASSERT(species < SPECIES_EGG);
+ {
+ FSFile file;
+ FS_InitFile(&file);
+ FS_OpenFile(&file, "poketool/personal/pms.narc");
+ FS_SeekFile(&file, species * sizeof(u16), FS_SEEK_SET);
+ FS_ReadFile(&file, &ret, sizeof(u16));
+ FS_CloseFile(&file);
+ }
+ return ret;
+}
+
+u16 GetEggSpecies(u16 species)
+{
+ switch (species)
+ {
+ case SPECIES_SUDOWOODO:
+ case SPECIES_MARILL:
+ case SPECIES_MR_MIME:
+ case SPECIES_CHANSEY:
+ case SPECIES_SNORLAX:
+ case SPECIES_MANTINE:
+ case SPECIES_WOBBUFFET:
+ case SPECIES_ROSELIA:
+ case SPECIES_CHIMECHO:
+ return species;
+ default:
+ return ReadFromPersonalPmsNarc(species);
+ }
+}
+
+#define WOTBL_END 0xFFFF
+#define WOTBL_MOVE_MASK 0x01FF
+#define WOTBL_MOVE_SHIFT 0
+#define WOTBL_LVL_MASK 0xFE00
+#define WOTBL_LVL_SHIFT 9
+#define WOTBL_MOVE(x) (((x) & WOTBL_MOVE_MASK) >> WOTBL_MOVE_SHIFT)
+#define WOTBL_LVL(x) (((x) & WOTBL_LVL_MASK) >> WOTBL_LVL_SHIFT)
+
+void InitBoxMonMoveset(struct BoxPokemon * boxmon)
+{
+ BOOL decry;
+ u16 * wotbl;
+ int i;
+ u16 species;
+ u32 forme;
+ u8 level;
+ u16 move;
+ wotbl = AllocFromHeap(0, 22 * sizeof(u16));
+ decry = AcquireBoxMonLock(boxmon);
+ species = GetBoxMonData(boxmon, MON_DATA_SPECIES, NULL);
+ forme = GetBoxMonData(boxmon, MON_DATA_FORME, NULL);
+ level = CalcBoxMonLevel(boxmon);
+ LoadWotbl_HandleAlternateForme(species, forme, wotbl);
+ for (i = 0; wotbl[i] != WOTBL_END; i++)
+ {
+ if ((wotbl[i] & WOTBL_LVL_MASK) > (level << WOTBL_LVL_SHIFT))
+ break;
+ move = WOTBL_MOVE(wotbl[i]);
+ if (FUN_020696A8(boxmon, move) == 0xFFFF)
+ FUN_02069718(boxmon, move);
+ }
+ FreeToHeap(wotbl);
+ ReleaseBoxMonLock(boxmon, decry);
+}
+
+u32 FUN_02069698(struct Pokemon * pokemon, u16 move)
+{
+ return FUN_020696A8(FUN_020690E4(pokemon), move);
+}
+
+u32 FUN_020696A8(struct BoxPokemon * boxmon, u16 move)
+{
+ u32 ret = 0xFFFF;
+ int i;
+ BOOL decry = AcquireBoxMonLock(boxmon);
+ u16 cur_move;
+ for (i = 0; i < 4; i++)
+ {
+ cur_move = GetBoxMonData(boxmon, MON_DATA_MOVE1 + i, NULL);
+ if (cur_move == MOVE_NONE)
+ {
+ FUN_020697D4(boxmon, move, i);
+ ret = move;
+ break;
+ }
+ if (cur_move == move)
+ {
+ ret = 0xFFFE;
+ break;
+ }
+ }
+ ReleaseBoxMonLock(boxmon, decry);
+ return ret;
+}
+
+void FUN_02069708(struct Pokemon * pokemon, u16 move)
+{
+ FUN_02069718(FUN_020690E4(pokemon), move);
+}
+
+void FUN_02069718(struct BoxPokemon * boxmon, u16 move)
+{
+ BOOL decry = AcquireBoxMonLock(boxmon);
+ int i;
+ u16 moves[4];
+ u8 pp[4];
+ u8 ppUp[4];
+
+ for (i = 0; i < 3; i++)
+ {
+ moves[i] = GetBoxMonData(boxmon, MON_DATA_MOVE1 + i + 1, NULL);
+ pp[i] = GetBoxMonData(boxmon, MON_DATA_MOVE1PP + i + 1, NULL);
+ ppUp[i] = GetBoxMonData(boxmon, MON_DATA_MOVE1PPUP + i + 1, NULL);
+ }
+
+ moves[3] = move;
+ pp[3] = FUN_0206AB18(move, 5);
+ ppUp[3] = 0;
+
+ for (i = 0; i < 4; i++)
+ {
+ SetBoxMonData(boxmon, MON_DATA_MOVE1 + i, &moves[i]);
+ SetBoxMonData(boxmon, MON_DATA_MOVE1PP + i, &pp[i]);
+ SetBoxMonData(boxmon, MON_DATA_MOVE1PPUP + i, &ppUp[i]);
+ }
+
+ ReleaseBoxMonLock(boxmon, decry);
+}
+
+void FUN_020697CC(struct Pokemon * pokemon, u16 move, u8 slot)
+{
+ FUN_020697D4(&pokemon->box, move, slot);
+}
+
+void FUN_020697D4(struct BoxPokemon * boxmon, u16 move, u8 slot)
+{
+ u8 ppUp;
+ u8 pp;
+
+ SetBoxMonData(boxmon, MON_DATA_MOVE1 + slot, &move);
+ ppUp = GetBoxMonData(boxmon, MON_DATA_MOVE1PPUP + slot, NULL);
+ pp = FUN_0206AB30(move, ppUp);
+ SetBoxMonData(boxmon, MON_DATA_MOVE1PP + slot, &pp);
+}
diff --git a/include/constants/moves.h b/include/constants/moves.h
new file mode 100644
index 00000000..e25c16c9
--- /dev/null
+++ b/include/constants/moves.h
@@ -0,0 +1,473 @@
+#ifndef POKEDIAMOND_CONSTANTS_MOVES_H
+#define POKEDIAMOND_CONSTANTS_MOVES_H
+
+#define MOVE_NONE 0
+#define MOVE_POUND 1
+#define MOVE_KARATE_CHOP 2
+#define MOVE_DOUBLE_SLAP 3
+#define MOVE_COMET_PUNCH 4
+#define MOVE_MEGA_PUNCH 5
+#define MOVE_PAY_DAY 6
+#define MOVE_FIRE_PUNCH 7
+#define MOVE_ICE_PUNCH 8
+#define MOVE_THUNDER_PUNCH 9
+#define MOVE_SCRATCH 10
+#define MOVE_VISE_GRIP 11
+#define MOVE_GUILLOTINE 12
+#define MOVE_RAZOR_WIND 13
+#define MOVE_SWORDS_DANCE 14
+#define MOVE_CUT 15
+#define MOVE_GUST 16
+#define MOVE_WING_ATTACK 17
+#define MOVE_WHIRLWIND 18
+#define MOVE_FLY 19
+#define MOVE_BIND 20
+#define MOVE_SLAM 21
+#define MOVE_VINE_WHIP 22
+#define MOVE_STOMP 23
+#define MOVE_DOUBLE_KICK 24
+#define MOVE_MEGA_KICK 25
+#define MOVE_JUMP_KICK 26
+#define MOVE_ROLLING_KICK 27
+#define MOVE_SAND_ATTACK 28
+#define MOVE_HEADBUTT 29
+#define MOVE_HORN_ATTACK 30
+#define MOVE_FURY_ATTACK 31
+#define MOVE_HORN_DRILL 32
+#define MOVE_TACKLE 33
+#define MOVE_BODY_SLAM 34
+#define MOVE_WRAP 35
+#define MOVE_TAKE_DOWN 36
+#define MOVE_THRASH 37
+#define MOVE_DOUBLE_EDGE 38
+#define MOVE_TAIL_WHIP 39
+#define MOVE_POISON_STING 40
+#define MOVE_TWINEEDLE 41
+#define MOVE_PIN_MISSILE 42
+#define MOVE_LEER 43
+#define MOVE_BITE 44
+#define MOVE_GROWL 45
+#define MOVE_ROAR 46
+#define MOVE_SING 47
+#define MOVE_SUPERSONIC 48
+#define MOVE_SONIC_BOOM 49
+#define MOVE_DISABLE 50
+#define MOVE_ACID 51
+#define MOVE_EMBER 52
+#define MOVE_FLAMETHROWER 53
+#define MOVE_MIST 54
+#define MOVE_WATER_GUN 55
+#define MOVE_HYDRO_PUMP 56
+#define MOVE_SURF 57
+#define MOVE_ICE_BEAM 58
+#define MOVE_BLIZZARD 59
+#define MOVE_PSYBEAM 60
+#define MOVE_BUBBLE_BEAM 61
+#define MOVE_AURORA_BEAM 62
+#define MOVE_HYPER_BEAM 63
+#define MOVE_PECK 64
+#define MOVE_DRILL_PECK 65
+#define MOVE_SUBMISSION 66
+#define MOVE_LOW_KICK 67
+#define MOVE_COUNTER 68
+#define MOVE_SEISMIC_TOSS 69
+#define MOVE_STRENGTH 70
+#define MOVE_ABSORB 71
+#define MOVE_MEGA_DRAIN 72
+#define MOVE_LEECH_SEED 73
+#define MOVE_GROWTH 74
+#define MOVE_RAZOR_LEAF 75
+#define MOVE_SOLAR_BEAM 76
+#define MOVE_POISON_POWDER 77
+#define MOVE_STUN_SPORE 78
+#define MOVE_SLEEP_POWDER 79
+#define MOVE_PETAL_DANCE 80
+#define MOVE_STRING_SHOT 81
+#define MOVE_DRAGON_RAGE 82
+#define MOVE_FIRE_SPIN 83
+#define MOVE_THUNDER_SHOCK 84
+#define MOVE_THUNDERBOLT 85
+#define MOVE_THUNDER_WAVE 86
+#define MOVE_THUNDER 87
+#define MOVE_ROCK_THROW 88
+#define MOVE_EARTHQUAKE 89
+#define MOVE_FISSURE 90
+#define MOVE_DIG 91
+#define MOVE_TOXIC 92
+#define MOVE_CONFUSION 93
+#define MOVE_PSYCHIC 94
+#define MOVE_HYPNOSIS 95
+#define MOVE_MEDITATE 96
+#define MOVE_AGILITY 97
+#define MOVE_QUICK_ATTACK 98
+#define MOVE_RAGE 99
+#define MOVE_TELEPORT 100
+#define MOVE_NIGHT_SHADE 101
+#define MOVE_MIMIC 102
+#define MOVE_SCREECH 103
+#define MOVE_DOUBLE_TEAM 104
+#define MOVE_RECOVER 105
+#define MOVE_HARDEN 106
+#define MOVE_MINIMIZE 107
+#define MOVE_SMOKESCREEN 108
+#define MOVE_CONFUSE_RAY 109
+#define MOVE_WITHDRAW 110
+#define MOVE_DEFENSE_CURL 111
+#define MOVE_BARRIER 112
+#define MOVE_LIGHT_SCREEN 113
+#define MOVE_HAZE 114
+#define MOVE_REFLECT 115
+#define MOVE_FOCUS_ENERGY 116
+#define MOVE_BIDE 117
+#define MOVE_METRONOME 118
+#define MOVE_MIRROR_MOVE 119
+#define MOVE_SELF_DESTRUCT 120
+#define MOVE_EGG_BOMB 121
+#define MOVE_LICK 122
+#define MOVE_SMOG 123
+#define MOVE_SLUDGE 124
+#define MOVE_BONE_CLUB 125
+#define MOVE_FIRE_BLAST 126
+#define MOVE_WATERFALL 127
+#define MOVE_CLAMP 128
+#define MOVE_SWIFT 129
+#define MOVE_SKULL_BASH 130
+#define MOVE_SPIKE_CANNON 131
+#define MOVE_CONSTRICT 132
+#define MOVE_AMNESIA 133
+#define MOVE_KINESIS 134
+#define MOVE_SOFT_BOILED 135
+#define MOVE_HIGH_JUMP_KICK 136
+#define MOVE_GLARE 137
+#define MOVE_DREAM_EATER 138
+#define MOVE_POISON_GAS 139
+#define MOVE_BARRAGE 140
+#define MOVE_LEECH_LIFE 141
+#define MOVE_LOVELY_KISS 142
+#define MOVE_SKY_ATTACK 143
+#define MOVE_TRANSFORM 144
+#define MOVE_BUBBLE 145
+#define MOVE_DIZZY_PUNCH 146
+#define MOVE_SPORE 147
+#define MOVE_FLASH 148
+#define MOVE_PSYWAVE 149
+#define MOVE_SPLASH 150
+#define MOVE_ACID_ARMOR 151
+#define MOVE_CRABHAMMER 152
+#define MOVE_EXPLOSION 153
+#define MOVE_FURY_SWIPES 154
+#define MOVE_BONEMERANG 155
+#define MOVE_REST 156
+#define MOVE_ROCK_SLIDE 157
+#define MOVE_HYPER_FANG 158
+#define MOVE_SHARPEN 159
+#define MOVE_CONVERSION 160
+#define MOVE_TRI_ATTACK 161
+#define MOVE_SUPER_FANG 162
+#define MOVE_SLASH 163
+#define MOVE_SUBSTITUTE 164
+#define MOVE_STRUGGLE 165
+#define MOVE_SKETCH 166
+#define MOVE_TRIPLE_KICK 167
+#define MOVE_THIEF 168
+#define MOVE_SPIDER_WEB 169
+#define MOVE_MIND_READER 170
+#define MOVE_NIGHTMARE 171
+#define MOVE_FLAME_WHEEL 172
+#define MOVE_SNORE 173
+#define MOVE_CURSE 174
+#define MOVE_FLAIL 175
+#define MOVE_CONVERSION_2 176
+#define MOVE_AEROBLAST 177
+#define MOVE_COTTON_SPORE 178
+#define MOVE_REVERSAL 179
+#define MOVE_SPITE 180
+#define MOVE_POWDER_SNOW 181
+#define MOVE_PROTECT 182
+#define MOVE_MACH_PUNCH 183
+#define MOVE_SCARY_FACE 184
+#define MOVE_FEINT_ATTACK 185
+#define MOVE_SWEET_KISS 186
+#define MOVE_BELLY_DRUM 187
+#define MOVE_SLUDGE_BOMB 188
+#define MOVE_MUD_SLAP 189
+#define MOVE_OCTAZOOKA 190
+#define MOVE_SPIKES 191
+#define MOVE_ZAP_CANNON 192
+#define MOVE_FORESIGHT 193
+#define MOVE_DESTINY_BOND 194
+#define MOVE_PERISH_SONG 195
+#define MOVE_ICY_WIND 196
+#define MOVE_DETECT 197
+#define MOVE_BONE_RUSH 198
+#define MOVE_LOCK_ON 199
+#define MOVE_OUTRAGE 200
+#define MOVE_SANDSTORM 201
+#define MOVE_GIGA_DRAIN 202
+#define MOVE_ENDURE 203
+#define MOVE_CHARM 204
+#define MOVE_ROLLOUT 205
+#define MOVE_FALSE_SWIPE 206
+#define MOVE_SWAGGER 207
+#define MOVE_MILK_DRINK 208
+#define MOVE_SPARK 209
+#define MOVE_FURY_CUTTER 210
+#define MOVE_STEEL_WING 211
+#define MOVE_MEAN_LOOK 212
+#define MOVE_ATTRACT 213
+#define MOVE_SLEEP_TALK 214
+#define MOVE_HEAL_BELL 215
+#define MOVE_RETURN 216
+#define MOVE_PRESENT 217
+#define MOVE_FRUSTRATION 218
+#define MOVE_SAFEGUARD 219
+#define MOVE_PAIN_SPLIT 220
+#define MOVE_SACRED_FIRE 221
+#define MOVE_MAGNITUDE 222
+#define MOVE_DYNAMIC_PUNCH 223
+#define MOVE_MEGAHORN 224
+#define MOVE_DRAGON_BREATH 225
+#define MOVE_BATON_PASS 226
+#define MOVE_ENCORE 227
+#define MOVE_PURSUIT 228
+#define MOVE_RAPID_SPIN 229
+#define MOVE_SWEET_SCENT 230
+#define MOVE_IRON_TAIL 231
+#define MOVE_METAL_CLAW 232
+#define MOVE_VITAL_THROW 233
+#define MOVE_MORNING_SUN 234
+#define MOVE_SYNTHESIS 235
+#define MOVE_MOONLIGHT 236
+#define MOVE_HIDDEN_POWER 237
+#define MOVE_CROSS_CHOP 238
+#define MOVE_TWISTER 239
+#define MOVE_RAIN_DANCE 240
+#define MOVE_SUNNY_DAY 241
+#define MOVE_CRUNCH 242
+#define MOVE_MIRROR_COAT 243
+#define MOVE_PSYCH_UP 244
+#define MOVE_EXTREME_SPEED 245
+#define MOVE_ANCIENT_POWER 246
+#define MOVE_SHADOW_BALL 247
+#define MOVE_FUTURE_SIGHT 248
+#define MOVE_ROCK_SMASH 249
+#define MOVE_WHIRLPOOL 250
+#define MOVE_BEAT_UP 251
+#define MOVE_FAKE_OUT 252
+#define MOVE_UPROAR 253
+#define MOVE_STOCKPILE 254
+#define MOVE_SPIT_UP 255
+#define MOVE_SWALLOW 256
+#define MOVE_HEAT_WAVE 257
+#define MOVE_HAIL 258
+#define MOVE_TORMENT 259
+#define MOVE_FLATTER 260
+#define MOVE_WILL_O_WISP 261
+#define MOVE_MEMENTO 262
+#define MOVE_FACADE 263
+#define MOVE_FOCUS_PUNCH 264
+#define MOVE_SMELLING_SALTS 265
+#define MOVE_FOLLOW_ME 266
+#define MOVE_NATURE_POWER 267
+#define MOVE_CHARGE 268
+#define MOVE_TAUNT 269
+#define MOVE_HELPING_HAND 270
+#define MOVE_TRICK 271
+#define MOVE_ROLE_PLAY 272
+#define MOVE_WISH 273
+#define MOVE_ASSIST 274
+#define MOVE_INGRAIN 275
+#define MOVE_SUPERPOWER 276
+#define MOVE_MAGIC_COAT 277
+#define MOVE_RECYCLE 278
+#define MOVE_REVENGE 279
+#define MOVE_BRICK_BREAK 280
+#define MOVE_YAWN 281
+#define MOVE_KNOCK_OFF 282
+#define MOVE_ENDEAVOR 283
+#define MOVE_ERUPTION 284
+#define MOVE_SKILL_SWAP 285
+#define MOVE_IMPRISON 286
+#define MOVE_REFRESH 287
+#define MOVE_GRUDGE 288
+#define MOVE_SNATCH 289
+#define MOVE_SECRET_POWER 290
+#define MOVE_DIVE 291
+#define MOVE_ARM_THRUST 292
+#define MOVE_CAMOUFLAGE 293
+#define MOVE_TAIL_GLOW 294
+#define MOVE_LUSTER_PURGE 295
+#define MOVE_MIST_BALL 296
+#define MOVE_FEATHER_DANCE 297
+#define MOVE_TEETER_DANCE 298
+#define MOVE_BLAZE_KICK 299
+#define MOVE_MUD_SPORT 300
+#define MOVE_ICE_BALL 301
+#define MOVE_NEEDLE_ARM 302
+#define MOVE_SLACK_OFF 303
+#define MOVE_HYPER_VOICE 304
+#define MOVE_POISON_FANG 305
+#define MOVE_CRUSH_CLAW 306
+#define MOVE_BLAST_BURN 307
+#define MOVE_HYDRO_CANNON 308
+#define MOVE_METEOR_MASH 309
+#define MOVE_ASTONISH 310
+#define MOVE_WEATHER_BALL 311
+#define MOVE_AROMATHERAPY 312
+#define MOVE_FAKE_TEARS 313
+#define MOVE_AIR_CUTTER 314
+#define MOVE_OVERHEAT 315
+#define MOVE_ODOR_SLEUTH 316
+#define MOVE_ROCK_TOMB 317
+#define MOVE_SILVER_WIND 318
+#define MOVE_METAL_SOUND 319
+#define MOVE_GRASS_WHISTLE 320
+#define MOVE_TICKLE 321
+#define MOVE_COSMIC_POWER 322
+#define MOVE_WATER_SPOUT 323
+#define MOVE_SIGNAL_BEAM 324
+#define MOVE_SHADOW_PUNCH 325
+#define MOVE_EXTRASENSORY 326
+#define MOVE_SKY_UPPERCUT 327
+#define MOVE_SAND_TOMB 328
+#define MOVE_SHEER_COLD 329
+#define MOVE_MUDDY_WATER 330
+#define MOVE_BULLET_SEED 331
+#define MOVE_AERIAL_ACE 332
+#define MOVE_ICICLE_SPEAR 333
+#define MOVE_IRON_DEFENSE 334
+#define MOVE_BLOCK 335
+#define MOVE_HOWL 336
+#define MOVE_DRAGON_CLAW 337
+#define MOVE_FRENZY_PLANT 338
+#define MOVE_BULK_UP 339
+#define MOVE_BOUNCE 340
+#define MOVE_MUD_SHOT 341
+#define MOVE_POISON_TAIL 342
+#define MOVE_COVET 343
+#define MOVE_VOLT_TACKLE 344
+#define MOVE_MAGICAL_LEAF 345
+#define MOVE_WATER_SPORT 346
+#define MOVE_CALM_MIND 347
+#define MOVE_LEAF_BLADE 348
+#define MOVE_DRAGON_DANCE 349
+#define MOVE_ROCK_BLAST 350
+#define MOVE_SHOCK_WAVE 351
+#define MOVE_WATER_PULSE 352
+#define MOVE_DOOM_DESIRE 353
+#define MOVE_PSYCHO_BOOST 354
+#define MOVE_ROOST 355
+#define MOVE_GRAVITY 356
+#define MOVE_MIRACLE_EYE 357
+#define MOVE_WAKE_UP_SLAP 358
+#define MOVE_HAMMER_ARM 359
+#define MOVE_GYRO_BALL 360
+#define MOVE_HEALING_WISH 361
+#define MOVE_BRINE 362
+#define MOVE_NATURAL_GIFT 363
+#define MOVE_FEINT 364
+#define MOVE_PLUCK 365
+#define MOVE_TAILWIND 366
+#define MOVE_ACUPRESSURE 367
+#define MOVE_METAL_BURST 368
+#define MOVE_U_TURN 369
+#define MOVE_CLOSE_COMBAT 370
+#define MOVE_PAYBACK 371
+#define MOVE_ASSURANCE 372
+#define MOVE_EMBARGO 373
+#define MOVE_FLING 374
+#define MOVE_PSYCHO_SHIFT 375
+#define MOVE_TRUMP_CARD 376
+#define MOVE_HEAL_BLOCK 377
+#define MOVE_WRING_OUT 378
+#define MOVE_POWER_TRICK 379
+#define MOVE_GASTRO_ACID 380
+#define MOVE_LUCKY_CHANT 381
+#define MOVE_ME_FIRST 382
+#define MOVE_COPYCAT 383
+#define MOVE_POWER_SWAP 384
+#define MOVE_GUARD_SWAP 385
+#define MOVE_PUNISHMENT 386
+#define MOVE_LAST_RESORT 387
+#define MOVE_WORRY_SEED 388
+#define MOVE_SUCKER_PUNCH 389
+#define MOVE_TOXIC_SPIKES 390
+#define MOVE_HEART_SWAP 391
+#define MOVE_AQUA_RING 392
+#define MOVE_MAGNET_RISE 393
+#define MOVE_FLARE_BLITZ 394
+#define MOVE_FORCE_PALM 395
+#define MOVE_AURA_SPHERE 396
+#define MOVE_ROCK_POLISH 397
+#define MOVE_POISON_JAB 398
+#define MOVE_DARK_PULSE 399
+#define MOVE_NIGHT_SLASH 400
+#define MOVE_AQUA_TAIL 401
+#define MOVE_SEED_BOMB 402
+#define MOVE_AIR_SLASH 403
+#define MOVE_X_SCISSOR 404
+#define MOVE_BUG_BUZZ 405
+#define MOVE_DRAGON_PULSE 406
+#define MOVE_DRAGON_RUSH 407
+#define MOVE_POWER_GEM 408
+#define MOVE_DRAIN_PUNCH 409
+#define MOVE_VACUUM_WAVE 410
+#define MOVE_FOCUS_BLAST 411
+#define MOVE_ENERGY_BALL 412
+#define MOVE_BRAVE_BIRD 413
+#define MOVE_EARTH_POWER 414
+#define MOVE_SWITCHEROO 415
+#define MOVE_GIGA_IMPACT 416
+#define MOVE_NASTY_PLOT 417
+#define MOVE_BULLET_PUNCH 418
+#define MOVE_AVALANCHE 419
+#define MOVE_ICE_SHARD 420
+#define MOVE_SHADOW_CLAW 421
+#define MOVE_THUNDER_FANG 422
+#define MOVE_ICE_FANG 423
+#define MOVE_FIRE_FANG 424
+#define MOVE_SHADOW_SNEAK 425
+#define MOVE_MUD_BOMB 426
+#define MOVE_PSYCHO_CUT 427
+#define MOVE_ZEN_HEADBUTT 428
+#define MOVE_MIRROR_SHOT 429
+#define MOVE_FLASH_CANNON 430
+#define MOVE_ROCK_CLIMB 431
+#define MOVE_DEFOG 432
+#define MOVE_TRICK_ROOM 433
+#define MOVE_DRACO_METEOR 434
+#define MOVE_DISCHARGE 435
+#define MOVE_LAVA_PLUME 436
+#define MOVE_LEAF_STORM 437
+#define MOVE_POWER_WHIP 438
+#define MOVE_ROCK_WRECKER 439
+#define MOVE_CROSS_POISON 440
+#define MOVE_GUNK_SHOT 441
+#define MOVE_IRON_HEAD 442
+#define MOVE_MAGNET_BOMB 443
+#define MOVE_STONE_EDGE 444
+#define MOVE_CAPTIVATE 445
+#define MOVE_STEALTH_ROCK 446
+#define MOVE_GRASS_KNOT 447
+#define MOVE_CHATTER 448
+#define MOVE_JUDGMENT 449
+#define MOVE_BUG_BITE 450
+#define MOVE_CHARGE_BEAM 451
+#define MOVE_WOOD_HAMMER 452
+#define MOVE_AQUA_JET 453
+#define MOVE_ATTACK_ORDER 454
+#define MOVE_DEFEND_ORDER 455
+#define MOVE_HEAL_ORDER 456
+#define MOVE_HEAD_SMASH 457
+#define MOVE_DOUBLE_HIT 458
+#define MOVE_ROAR_OF_TIME 459
+#define MOVE_SPACIAL_REND 460
+#define MOVE_LUNAR_DANCE 461
+#define MOVE_CRUSH_GRIP 462
+#define MOVE_MAGMA_STORM 463
+#define MOVE_DARK_VOID 464
+#define MOVE_SEED_FLARE 465
+#define MOVE_OMINOUS_WIND 466
+#define MOVE_SHADOW_FORCE 467
+
+#endif //POKEDIAMOND_CONSTANTS_MOVES_H
diff --git a/include/move_data.h b/include/move_data.h
index 975bcf8d..8da864b0 100644
--- a/include/move_data.h
+++ b/include/move_data.h
@@ -2,5 +2,6 @@
#define POKEDIAMOND_MOVE_DATA_H
int FUN_0206AB30(u16 move, u8 ppUp);
+u32 FUN_0206AB18(u16 move, u32 attr);
#endif //POKEDIAMOND_MOVE_DATA_H