summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2016-09-12 15:42:25 -0700
committerYamaArashi <shadow962@live.com>2016-09-12 15:42:25 -0700
commit64a39c38e34135028d7d73b4d77cf0542bf14e83 (patch)
tree46677533784f17dbc0f3670467bd3555ac72d72b
parent9db354596485ebabb05a6c026db0a2e41b07cb6d (diff)
decompile pokemon functions
-rw-r--r--asm/rom3.s22
-rw-r--r--asm/rom5.s20
-rw-r--r--asm/rom_803D1FC.s902
-rw-r--r--asm/rom_8065394.s2
-rw-r--r--data/data2.s2
-rw-r--r--data/event_scripts.s2
-rw-r--r--data/specials.s1
-rw-r--r--ewram_syms.txt10
-rw-r--r--include/global.h21
-rw-r--r--include/pokemon.h28
-rw-r--r--src/pokemon_2.c212
11 files changed, 299 insertions, 923 deletions
diff --git a/asm/rom3.s b/asm/rom3.s
index 8a2052dfd..1f0a120c6 100644
--- a/asm/rom3.s
+++ b/asm/rom3.s
@@ -11628,7 +11628,7 @@ _08011406:
ldrh r0, [r1]
ldrb r1, [r1, 0x17]
lsrs r1, 7
- bl sub_803DB14
+ bl GetAbilityBySpecies
mov r2, r8
ldrb r1, [r2]
muls r1, r7
@@ -13834,7 +13834,7 @@ _0801264E:
ldrb r1, [r1]
lsls r2, r4, 24
lsrs r2, 24
- bl CalcPPWithPPUps
+ bl CalculatePPWithBonus
mov r2, r10
adds r1, r2, r4
strb r0, [r1]
@@ -14094,7 +14094,7 @@ _0801289E:
_080128A8: .4byte 0x02024a60
_080128AC: .4byte 0x0201606c
_080128B0:
- bl sub_803DD20
+ bl PlayerPartyAndPokemonStorageFull
lsls r0, 24
cmp r0, 0
beq _08012968
@@ -28906,7 +28906,7 @@ _0801A37E:
lsls r2, r4, 24
lsrs r2, 24
adds r0, r6, 0
- bl CalcPPWithPPUps
+ bl CalculatePPWithBonus
lsls r0, 24
lsrs r2, r0, 24
add r0, sp, 0x4
@@ -45115,7 +45115,7 @@ _0802262C:
ldrh r0, [r1]
ldrb r1, [r1, 0x17]
lsrs r1, 7
- bl sub_803DB14
+ bl GetAbilityBySpecies
ldrb r1, [r7]
muls r1, r6
adds r1, r4
@@ -47871,7 +47871,7 @@ _08023D20:
adds r0, r1, 0
adds r0, r7
adds r1, r5, 0
- bl sub_803DE34
+ bl RemoveMonPPBonus
ldrb r0, [r6]
mov r2, r8
muls r2, r0
@@ -47905,7 +47905,7 @@ _08023D20:
bne _08023DB0
adds r0, r4, 0
adds r1, r5, 0
- bl sub_803DE70
+ bl RemoveBattleMonPPBonus
ldrh r1, [r7]
adds r0, r4, 0
adds r2, r5, 0
@@ -47949,7 +47949,7 @@ _08023DB0:
adds r4, 0xB0
adds r0, r4, 0
adds r1, r5, 0
- bl sub_803DE70
+ bl RemoveBattleMonPPBonus
ldr r0, _08023E18
ldrh r1, [r0]
adds r0, r4, 0
@@ -57491,7 +57491,7 @@ _08028A00: .4byte gBitTable
_08028A04:
adds r0, r5, 0
adds r1, r4, 0
- bl sub_803DB14
+ bl GetAbilityBySpecies
lsls r0, 24
lsrs r0, 24
_08028A10:
@@ -81382,7 +81382,7 @@ c2_8123744: @ 8034BFC
lsls r0, 3
cmp r1, r0
bne _08034C1C
- bl sub_803DCA8
+ bl GetSecretBaseTrainerPicIndex
b _08034C42
.align 2, 0
_08034C18: .4byte 0x0202ff5e
@@ -81593,7 +81593,7 @@ sub_8034DC0: @ 8034DC0
lsls r0, 3
cmp r1, r0
bne _08034DE0
- bl sub_803DCA8
+ bl GetSecretBaseTrainerPicIndex
b _08034E06
.align 2, 0
_08034DDC: .4byte 0x0202ff5e
diff --git a/asm/rom5.s b/asm/rom5.s
index bdc8d88bb..5a65a49d8 100644
--- a/asm/rom5.s
+++ b/asm/rom5.s
@@ -75525,7 +75525,7 @@ _0809FDF8:
lsls r1, 24
lsrs r1, 24
adds r0, r4, 0
- bl sub_803DB14
+ bl GetAbilityBySpecies
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
@@ -76006,7 +76006,7 @@ _080A020C:
lsrs r1, 24
adds r0, r6, 0
adds r2, r7, 0
- bl CalcPPWithPPUps
+ bl CalculatePPWithBonus
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
@@ -135390,7 +135390,7 @@ sub_80BCE1C: @ 80BCE1C
lsls r0, 5
ldr r1, _080BCE48
adds r0, r1
- bl create_enemy_party
+ bl CreateSecretBaseEnemyParty
pop {r4}
pop {r0}
bx r0
@@ -152132,7 +152132,7 @@ _080C5304:
lsrs r0, 16
adds r1, r7, 0
adds r2, r5, 0
- bl CalcPPWithPPUps
+ bl CalculatePPWithBonus
strb r0, [r6]
adds r1, r5, 0
adds r1, 0x11
@@ -162394,7 +162394,7 @@ ItemUseInBattle_PokeBall: @ 80CA244
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl sub_803DD20
+ bl PlayerPartyAndPokemonStorageFull
lsls r0, 24
cmp r0, 0
bne _080CA26C
@@ -261137,7 +261137,7 @@ sub_80FA0DC: @ 80FA0DC
muls r0, r6
adds r0, r5
ldrb r1, [r4]
- bl sub_803DE34
+ bl RemoveMonPPBonus
ldrh r4, [r4]
cmp r4, 0x2
bhi _080FA130
@@ -312757,7 +312757,7 @@ _08112E24:
lsrs r4, 24
mov r0, r9
adds r1, r4, 0
- bl sub_803DE34
+ bl RemoveMonPPBonus
ldr r0, _08112E84
ldrh r1, [r0]
mov r0, r9
@@ -314053,7 +314053,7 @@ _08113970:
lsrs r4, 24
mov r0, r8
adds r1, r4, 0
- bl sub_803DE34
+ bl RemoveMonPPBonus
ldr r0, _081139D4
ldrh r1, [r0]
mov r0, r8
@@ -341987,7 +341987,7 @@ _0812174C:
lsls r0, 3
cmp r1, r0
bne _08121768
- bl sub_803DCE4
+ bl GetSecretBaseTrainerNameIndex
lsls r0, 24
lsrs r0, 24
movs r1, 0xD
@@ -378468,7 +378468,7 @@ _08132EA4:
ldr r2, _08132F48
adds r1, r2
ldrb r1, [r1]
- bl sub_803DE34
+ bl RemoveMonPPBonus
ldr r3, [r7]
adds r4, r3, r4
ldrb r0, [r4]
diff --git a/asm/rom_803D1FC.s b/asm/rom_803D1FC.s
index 311f0aab1..802d64cef 100644
--- a/asm/rom_803D1FC.s
+++ b/asm/rom_803D1FC.s
@@ -6,884 +6,6 @@
.text
- thumb_func_start sub_803DAA0
-sub_803DAA0: @ 803DAA0
- push {r4-r6,lr}
- movs r6, 0
- bl CalculatePlayerPartyCount
- ldr r1, _0803DB0C
- ldrb r0, [r1]
- cmp r0, 0x1
- beq _0803DB04
- movs r5, 0
- ldrb r1, [r1]
- cmp r6, r1
- bge _0803DAFC
-_0803DAB8:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _0803DB10
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- beq _0803DAF2
- adds r0, r4, 0
- movs r1, 0x41
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- beq _0803DAF2
- adds r0, r4, 0
- movs r1, 0x41
- movs r2, 0
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _0803DAF2
- adds r6, 0x1
-_0803DAF2:
- adds r5, 0x1
- ldr r0, _0803DB0C
- ldrb r0, [r0]
- cmp r5, r0
- blt _0803DAB8
-_0803DAFC:
- movs r0, 0
- cmp r6, 0x1
- bgt _0803DB04
- movs r0, 0x2
-_0803DB04:
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0803DB0C: .4byte 0x03004350
-_0803DB10: .4byte 0x03004360
- thumb_func_end sub_803DAA0
-
- thumb_func_start sub_803DB14
-sub_803DB14: @ 803DB14
- push {lr}
- lsls r0, 16
- lsrs r3, r0, 16
- lsls r1, 24
- cmp r1, 0
- beq _0803DB38
- ldr r2, _0803DB30
- ldr r1, _0803DB34
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x17]
- b _0803DB46
- .align 2, 0
-_0803DB30: .4byte 0x02024c06
-_0803DB34: .4byte gBaseStats
-_0803DB38:
- ldr r2, _0803DB50
- ldr r1, _0803DB54
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x16]
-_0803DB46:
- strb r0, [r2]
- ldrb r0, [r2]
- pop {r1}
- bx r1
- .align 2, 0
-_0803DB50: .4byte 0x02024c06
-_0803DB54: .4byte gBaseStats
- thumb_func_end sub_803DB14
-
- thumb_func_start GetMonAbility
-GetMonAbility: @ 803DB58
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0x2E
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_803DB14
- lsls r0, 24
- lsrs r0, 24
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end GetMonAbility
-
- thumb_func_start create_enemy_party
-create_enemy_party: @ 803DB8C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- adds r4, r0, 0
- bl ZeroEnemyPartyMons
- ldr r5, _0803DC8C
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0xA0
- bl memcpy
- movs r7, 0
-_0803DBAC:
- lsls r0, r7, 1
- mov r9, r0
- ldr r2, _0803DC8C
- adds r2, 0x7C
- mov r10, r2
- mov r1, r9
- add r1, r10
- ldrh r0, [r1]
- adds r2, r7, 0x1
- str r2, [sp, 0x10]
- cmp r0, 0
- beq _0803DC64
- movs r0, 0x64
- adds r6, r7, 0
- muls r6, r0
- ldr r2, _0803DC90
- mov r8, r2
- adds r5, r6, r2
- ldrh r1, [r1]
- ldr r0, _0803DC8C
- adds r0, 0x94
- adds r0, r7, r0
- ldrb r2, [r0]
- movs r0, 0x1
- str r0, [sp]
- lsls r4, r7, 2
- ldr r0, _0803DC8C
- adds r0, 0x34
- adds r0, r4, r0
- ldr r0, [r0]
- str r0, [sp, 0x4]
- movs r0, 0x2
- str r0, [sp, 0x8]
- movs r0, 0
- str r0, [sp, 0xC]
- adds r0, r5, 0
- movs r3, 0xF
- bl CreateMon
- ldr r2, _0803DC94
- add r2, r9
- adds r0, r5, 0
- movs r1, 0xC
- bl SetMonData
- movs r5, 0
- mov r9, r4
- mov r3, r8
- mov r4, r10
- adds r4, 0x1E
-_0803DC10:
- adds r1, r5, 0
- adds r1, 0x1A
- adds r0, r6, r3
- adds r2, r7, r4
- str r3, [sp, 0x14]
- bl SetMonData
- adds r5, 0x1
- ldr r3, [sp, 0x14]
- cmp r5, 0x5
- ble _0803DC10
- movs r5, 0
- movs r0, 0x64
- adds r1, r7, 0
- muls r1, r0
- ldr r0, _0803DC90
- adds r7, r1, r0
- mov r2, r9
- lsls r6, r2, 1
-_0803DC36:
- adds r1, r5, 0
- adds r1, 0xD
- ldr r4, _0803DC98
- adds r4, r6, r4
- adds r0, r7, 0
- adds r2, r4, 0
- bl SetMonData
- adds r1, r5, 0
- adds r1, 0x11
- ldrh r0, [r4]
- lsls r2, r0, 1
- adds r2, r0
- lsls r2, 2
- ldr r0, _0803DC9C
- adds r2, r0
- adds r0, r7, 0
- bl SetMonData
- adds r6, 0x2
- adds r5, 0x1
- cmp r5, 0x3
- ble _0803DC36
-_0803DC64:
- ldr r7, [sp, 0x10]
- cmp r7, 0x5
- ble _0803DBAC
- ldr r1, _0803DCA0
- movs r0, 0x8
- strh r0, [r1]
- ldr r1, _0803DCA4
- movs r2, 0x80
- lsls r2, 3
- adds r0, r2, 0
- strh r0, [r1]
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0803DC8C: .4byte 0x02017000
-_0803DC90: .4byte 0x030045c0
-_0803DC94: .4byte 0x02017088
-_0803DC98: .4byte 0x0201704c
-_0803DC9C: .4byte gBattleMoves + 0x4 @ PP offset
-_0803DCA0: .4byte 0x020239f8
-_0803DCA4: .4byte 0x0202ff5e
- thumb_func_end create_enemy_party
-
- thumb_func_start sub_803DCA8
-sub_803DCA8: @ 803DCA8
- push {r4,r5,lr}
- ldr r5, _0803DCD8
- ldr r4, _0803DCDC
- ldrb r0, [r4, 0x9]
- movs r1, 0x5
- bl __umodsi3
- lsls r0, 24
- lsrs r0, 24
- ldrb r2, [r4, 0x1]
- lsls r2, 27
- lsrs r2, 31
- lsls r1, r2, 2
- adds r1, r2
- adds r0, r1
- adds r0, r5
- ldrb r0, [r0]
- ldr r1, _0803DCE0
- adds r0, r1
- ldrb r0, [r0]
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0803DCD8: .4byte gUnknown_082082E8
-_0803DCDC: .4byte 0x02017000
-_0803DCE0: .4byte gTrainerClassToPicIndex
- thumb_func_end sub_803DCA8
-
- thumb_func_start sub_803DCE4
-sub_803DCE4: @ 803DCE4
- push {r4,r5,lr}
- ldr r5, _0803DD14
- ldr r4, _0803DD18
- ldrb r0, [r4, 0x9]
- movs r1, 0x5
- bl __umodsi3
- lsls r0, 24
- lsrs r0, 24
- ldrb r2, [r4, 0x1]
- lsls r2, 27
- lsrs r2, 31
- lsls r1, r2, 2
- adds r1, r2
- adds r0, r1
- adds r0, r5
- ldrb r0, [r0]
- ldr r1, _0803DD1C
- adds r0, r1
- ldrb r0, [r0]
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0803DD14: .4byte gUnknown_082082E8
-_0803DD18: .4byte 0x02017000
-_0803DD1C: .4byte gTrainerClassToNameIndex
- thumb_func_end sub_803DCE4
-
- thumb_func_start sub_803DD20
-sub_803DD20: @ 803DD20
- push {r4,lr}
- movs r4, 0
-_0803DD24:
- movs r0, 0x64
- muls r0, r4
- ldr r1, _0803DD3C
- adds r0, r1
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0803DD40
- movs r0, 0
- b _0803DD4E
- .align 2, 0
-_0803DD3C: .4byte 0x03004360
-_0803DD40:
- adds r4, 0x1
- cmp r4, 0x5
- ble _0803DD24
- bl sub_803DD54
- lsls r0, 24
- lsrs r0, 24
-_0803DD4E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_803DD20
-
- thumb_func_start sub_803DD54
-sub_803DD54: @ 803DD54
- push {r4-r7,lr}
- sub sp, 0x4
- movs r3, 0
- movs r7, 0
-_0803DD5C:
- movs r5, 0
- adds r6, r7, 0
- movs r4, 0
-_0803DD62:
- ldr r0, _0803DD7C
- adds r0, r4, r0
- adds r0, r6, r0
- movs r1, 0xB
- movs r2, 0
- str r3, [sp]
- bl GetBoxMonData
- ldr r3, [sp]
- cmp r0, 0
- bne _0803DD80
- movs r0, 0
- b _0803DD96
- .align 2, 0
-_0803DD7C: .4byte 0x020300a4
-_0803DD80:
- adds r4, 0x50
- adds r5, 0x1
- cmp r5, 0x1D
- ble _0803DD62
- movs r0, 0x96
- lsls r0, 4
- adds r7, r0
- adds r3, 0x1
- cmp r3, 0xD
- ble _0803DD5C
- movs r0, 0x1
-_0803DD96:
- add sp, 0x4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_803DD54
-
- thumb_func_start GetSpeciesName
-GetSpeciesName: @ 803DDA0
- push {r4-r7,lr}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r5, r1, 16
- movs r1, 0
- movs r0, 0xCE
- lsls r0, 1
- mov r12, r0
- ldr r7, _0803DDBC
- movs r0, 0xB
- muls r0, r5
- adds r3, r0, r7
- adds r2, r6, 0
- b _0803DDC6
- .align 2, 0
-_0803DDBC: .4byte gSpeciesNames
-_0803DDC0:
- adds r3, 0x1
- adds r2, 0x1
- adds r1, 0x1
-_0803DDC6:
- adds r4, r6, r1
- cmp r1, 0xA
- bgt _0803DDE0
- cmp r5, r12
- bls _0803DDD6
- adds r0, r1, r7
- ldrb r0, [r0]
- b _0803DDD8
-_0803DDD6:
- ldrb r0, [r3]
-_0803DDD8:
- strb r0, [r2]
- ldrb r0, [r4]
- cmp r0, 0xFF
- bne _0803DDC0
-_0803DDE0:
- movs r0, 0xFF
- strb r0, [r4]
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end GetSpeciesName
-
- thumb_func_start CalcPPWithPPUps
-CalcPPWithPPUps: @ 803DDEC
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- lsls r2, 24
- lsrs r2, 24
- ldr r4, _0803DE2C
- lsls r3, r0, 1
- adds r3, r0
- lsls r3, 2
- adds r3, r4
- ldrb r4, [r3, 0x4]
- ldr r0, _0803DE30
- adds r0, r2, r0
- ldrb r3, [r0]
- ands r3, r1
- lsls r2, 1
- asrs r3, r2
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 2
- muls r0, r4
- movs r1, 0x64
- bl __divsi3
- adds r4, r0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0803DE2C: .4byte gBattleMoves
-_0803DE30: .4byte gUnknown_08208238
- thumb_func_end CalcPPWithPPUps
-
- thumb_func_start sub_803DE34
-sub_803DE34: @ 803DE34
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- lsls r4, r1, 24
- lsrs r4, 24
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- mov r1, sp
- strb r0, [r1]
- ldr r1, _0803DE6C
- adds r4, r1
- ldrb r1, [r4]
- ands r1, r0
- mov r0, sp
- strb r1, [r0]
- adds r0, r5, 0
- movs r1, 0x15
- mov r2, sp
- bl SetMonData
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0803DE6C: .4byte gUnknown_0820823C
- thumb_func_end sub_803DE34
-
- thumb_func_start sub_803DE70
-sub_803DE70: @ 803DE70
- lsls r1, 24
- lsrs r1, 24
- adds r0, 0x3B
- ldr r2, _0803DE84
- adds r1, r2
- ldrb r2, [r0]
- ldrb r1, [r1]
- ands r1, r2
- strb r1, [r0]
- bx lr
- .align 2, 0
-_0803DE84: .4byte gUnknown_0820823C
- thumb_func_end sub_803DE70
-
- thumb_func_start battle_data_fill
-battle_data_fill: @ 803DE88
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x14]
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- movs r0, 0x64
- mov r5, r9
- muls r5, r0
- ldr r0, _0803E170
- adds r5, r0
- adds r0, r5, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- ldr r1, _0803E174
- mov r8, r1
- movs r1, 0x58
- ldr r2, [sp, 0x14]
- adds r4, r2, 0
- muls r4, r1
- mov r3, r8
- adds r6, r4, r3
- strh r0, [r6]
- adds r0, r5, 0
- movs r1, 0xC
- movs r2, 0
- bl GetMonData
- strh r0, [r6, 0x2E]
- movs r6, 0
- mov r0, r8
- adds r0, 0x24
- adds r7, r4, r0
-_0803DEDA:
- adds r1, r6, 0
- adds r1, 0xD
- adds r0, r5, 0
- movs r2, 0
- bl GetMonData
- movs r1, 0xC
- add r1, r8
- mov r10, r1
- adds r1, r4, r1
- strh r0, [r1]
- adds r1, r6, 0
- adds r1, 0x11
- adds r0, r5, 0
- movs r2, 0
- bl GetMonData
- strb r0, [r7]
- adds r7, 0x1
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _0803DEDA
- movs r0, 0x64
- mov r4, r9
- muls r4, r0
- ldr r0, _0803E170
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0x15
- movs r2, 0
- bl GetMonData
- movs r2, 0xC
- negs r2, r2
- add r2, r10
- mov r9, r2
- movs r1, 0x58
- ldr r3, [sp, 0x14]
- adds r5, r3, 0
- muls r5, r1
- adds r7, r5, r2
- adds r1, r7, 0
- adds r1, 0x3B
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x20
- movs r2, 0
- bl GetMonData
- adds r1, r7, 0
- adds r1, 0x2B
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x19
- movs r2, 0
- bl GetMonData
- mov r1, r10
- adds r1, 0x38
- adds r1, r5, r1
- str r0, [r1]
- adds r0, r4, 0
- movs r1, 0x27
- movs r2, 0
- bl GetMonData
- movs r6, 0x1F
- ands r0, r6
- ldrb r2, [r7, 0x14]
- movs r1, 0x20
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r7, 0x14]
- adds r0, r4, 0
- movs r1, 0x28
- movs r2, 0
- bl GetMonData
- movs r1, 0x1F
- mov r8, r1
- mov r2, r8
- ands r0, r2
- lsls r0, 5
- ldrh r2, [r7, 0x14]
- ldr r1, _0803E178
- ands r1, r2
- orrs r1, r0
- strh r1, [r7, 0x14]
- adds r0, r4, 0
- movs r1, 0x29
- movs r2, 0
- bl GetMonData
- ands r0, r6
- lsls r0, 2
- ldrb r2, [r7, 0x15]
- movs r1, 0x7D
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r7, 0x15]
- adds r0, r4, 0
- movs r1, 0x2A
- movs r2, 0
- bl GetMonData
- movs r1, 0x1F
- ands r1, r0
- lsls r1, 15
- ldr r0, [r7, 0x14]
- ldr r2, _0803E17C
- ands r0, r2
- orrs r0, r1
- str r0, [r7, 0x14]
- adds r0, r4, 0
- movs r1, 0x2B
- movs r2, 0
- bl GetMonData
- mov r3, r8
- ands r0, r3
- lsls r0, 4
- ldrh r2, [r7, 0x16]
- ldr r1, _0803E180
- ands r1, r2
- orrs r1, r0
- strh r1, [r7, 0x16]
- adds r0, r4, 0
- movs r1, 0x2C
- movs r2, 0
- bl GetMonData
- ands r0, r6
- lsls r0, 1
- ldrb r2, [r7, 0x17]
- movs r1, 0x3F
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r7, 0x17]
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0
- bl GetMonData
- mov r1, r10
- adds r1, 0x3C
- adds r1, r5, r1
- str r0, [r1]
- adds r0, r4, 0
- movs r1, 0x37
- movs r2, 0
- bl GetMonData
- mov r1, r10
- adds r1, 0x40
- adds r1, r5, r1
- str r0, [r1]
- adds r0, r4, 0
- movs r1, 0x38
- movs r2, 0
- bl GetMonData
- adds r1, r7, 0
- adds r1, 0x2A
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- strh r0, [r7, 0x28]
- adds r0, r4, 0
- movs r1, 0x3A
- movs r2, 0
- bl GetMonData
- strh r0, [r7, 0x2C]
- adds r0, r4, 0
- movs r1, 0x3B
- movs r2, 0
- bl GetMonData
- strh r0, [r7, 0x2]
- adds r0, r4, 0
- movs r1, 0x3C
- movs r2, 0
- bl GetMonData
- strh r0, [r7, 0x4]
- adds r0, r4, 0
- movs r1, 0x3D
- movs r2, 0
- bl GetMonData
- strh r0, [r7, 0x6]
- adds r0, r4, 0
- movs r1, 0x3E
- movs r2, 0
- bl GetMonData
- strh r0, [r7, 0x8]
- adds r0, r4, 0
- movs r1, 0x3F
- movs r2, 0
- bl GetMonData
- strh r0, [r7, 0xA]
- adds r0, r4, 0
- movs r1, 0x2D
- movs r2, 0
- bl GetMonData
- movs r1, 0x1
- ands r0, r1
- lsls r0, 6
- ldrb r2, [r7, 0x17]
- movs r1, 0x41
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r7, 0x17]
- adds r0, r4, 0
- movs r1, 0x2E
- movs r2, 0
- bl GetMonData
- lsls r0, 7
- ldrb r2, [r7, 0x17]
- movs r1, 0x7F
- ands r1, r2
- orrs r1, r0
- strb r1, [r7, 0x17]
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0
- bl GetMonData
- mov r1, r10
- adds r1, 0x48
- adds r1, r5, r1
- str r0, [r1]
- ldr r2, _0803E184
- ldrh r1, [r7]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x6]
- adds r1, r7, 0
- adds r1, 0x21
- strb r0, [r1]
- ldrh r1, [r7]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x7]
- adds r1, r7, 0
- adds r1, 0x22
- strb r0, [r1]
- ldrh r0, [r7]
- ldrb r1, [r7, 0x17]
- lsrs r1, 7
- bl sub_803DB14
- adds r1, r7, 0
- adds r1, 0x20
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- mov r0, r10
- adds r0, 0x24
- adds r0, r5, r0
- mov r1, sp
- bl StringCopy10
- mov r2, r10
- adds r2, 0x30
- adds r2, r5, r2
- adds r0, r4, 0
- movs r1, 0x7
- bl GetMonData
- ldr r0, [sp, 0x14]
- bl battle_side_get_owner
- lsls r0, 24
- lsrs r0, 23
- ldr r1, _0803E188
- adds r0, r1
- ldrh r1, [r7, 0x28]
- strh r1, [r0]
- movs r2, 0x6
- mov r1, r9
- movs r6, 0x7
- add r5, r10
- adds r0, r5, 0
- adds r0, 0x13
-_0803E13A:
- strb r2, [r0]
- subs r0, 0x1
- subs r6, 0x1
- cmp r6, 0
- bge _0803E13A
- movs r2, 0
- movs r0, 0x58
- ldr r3, [sp, 0x14]
- muls r0, r3
- adds r1, 0x50
- adds r0, r1
- str r2, [r0]
- ldr r0, [sp, 0x14]
- bl sub_80157C4
- ldr r0, [sp, 0x14]
- movs r1, 0
- bl sub_8032AA8
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0803E170: .4byte 0x03004360
-_0803E174: .4byte 0x02024a80
-_0803E178: .4byte 0xfffffc1f
-_0803E17C: .4byte 0xfff07fff
-_0803E180: .4byte 0xfffffe0f
-_0803E184: .4byte gBaseStats
-_0803E188: .4byte 0x020160bc
- thumb_func_end battle_data_fill
-
thumb_func_start ExecuteTableBasedItemEffect_
ExecuteTableBasedItemEffect_: @ 803E18C
push {r4,lr}
@@ -1670,7 +792,7 @@ _0803E77C:
lsrs r1, 24
adds r0, r4, 0
ldr r2, [sp, 0x10]
- bl CalcPPWithPPUps
+ bl CalculatePPWithBonus
lsls r0, 24
lsrs r0, 24
str r0, [sp, 0x28]
@@ -1704,7 +826,7 @@ _0803E77C:
lsls r1, 24
lsrs r1, 24
ldr r2, [sp, 0x10]
- bl CalcPPWithPPUps
+ bl CalculatePPWithBonus
lsls r0, 24
lsrs r0, 24
ldr r3, [sp, 0x28]
@@ -1880,7 +1002,7 @@ _0803E954:
lsls r1, 24
lsrs r1, 24
ldr r0, [sp, 0x34]
- bl battle_data_fill
+ bl CopyPlayerPartyMonToBattleData
ldr r0, _0803E9B0
ldrb r0, [r0]
b _0803E9CC
@@ -2134,7 +1256,7 @@ _0803EB70:
lsrs r6, r0, 24
adds r0, r4, 0
adds r2, r6, 0
- bl CalcPPWithPPUps
+ bl CalculatePPWithBonus
lsls r0, 24
lsrs r0, 24
ldr r1, [sp]
@@ -2162,7 +1284,7 @@ _0803EB70:
lsrs r1, 24
adds r0, r4, 0
adds r2, r6, 0
- bl CalcPPWithPPUps
+ bl CalculatePPWithBonus
lsls r0, 24
lsrs r0, 24
ldr r1, [sp]
@@ -2184,7 +1306,7 @@ _0803EB70:
lsrs r1, 24
adds r0, r4, 0
adds r2, r6, 0
- bl CalcPPWithPPUps
+ bl CalculatePPWithBonus
lsls r0, 24
lsrs r0, 24
str r0, [sp]
@@ -2286,7 +1408,7 @@ _0803ECB8:
lsrs r1, 24
adds r0, r4, 0
ldr r2, [sp, 0x10]
- bl CalcPPWithPPUps
+ bl CalculatePPWithBonus
lsls r0, 24
lsrs r0, 24
ldr r2, [sp]
@@ -2320,7 +1442,7 @@ _0803ED00:
lsrs r1, 24
adds r0, r4, 0
ldr r2, [sp, 0x10]
- bl CalcPPWithPPUps
+ bl CalculatePPWithBonus
lsls r0, 24
lsrs r0, 24
ldr r1, [sp]
@@ -2342,7 +1464,7 @@ _0803ED00:
lsrs r1, 24
adds r0, r4, 0
ldr r2, [sp, 0x10]
- bl CalcPPWithPPUps
+ bl CalculatePPWithBonus
lsls r0, 24
lsrs r0, 24
str r0, [sp]
@@ -2569,7 +1691,7 @@ _0803EF18:
lsrs r1, 24
adds r0, r4, 0
ldr r2, [sp, 0x10]
- bl CalcPPWithPPUps
+ bl CalculatePPWithBonus
lsls r0, 24
lsrs r4, r0, 24
mov r0, r8
@@ -2604,7 +1726,7 @@ _0803EF18:
lsls r1, 24
lsrs r1, 24
ldr r2, [sp, 0x10]
- bl CalcPPWithPPUps
+ bl CalculatePPWithBonus
lsls r0, 24
lsrs r0, 24
subs r0, r4
@@ -6387,7 +5509,7 @@ _08040B30:
lsls r2, r6, 24
lsrs r2, 24
adds r0, r4, 0
- bl CalcPPWithPPUps
+ bl CalculatePPWithBonus
mov r1, sp
strb r0, [r1]
adds r1, r6, 0
diff --git a/asm/rom_8065394.s b/asm/rom_8065394.s
index c7f9b9722..f79867f66 100644
--- a/asm/rom_8065394.s
+++ b/asm/rom_8065394.s
@@ -21202,7 +21202,7 @@ sub_806F53C: @ 806F53C
lsls r1, 24
lsrs r1, 24
adds r0, r5, 0
- bl sub_803DE34
+ bl RemoveMonPPBonus
ldr r5, [r4]
ldrh r4, [r4, 0x8]
bl sub_809FA30
diff --git a/data/data2.s b/data/data2.s
index a5258494f..734d6c793 100644
--- a/data/data2.s
+++ b/data/data2.s
@@ -1948,7 +1948,7 @@ gSpriteTemplate_8208288:: @ 8208288
spr_template 0xFFFF, 0, gOamData_81F96F0, NULL, gSpriteImageTable_81E7A50, gSpriteAffineAnimTable_81E7B70, sub_80105A0
spr_template 0xFFFF, 0, gOamData_81F96E8, NULL, gSpriteImageTable_81E7A70, gSpriteAffineAnimTable_81E7BEC, oac_poke_opponent
-gUnknown_082082E8:: @ 82082E8
+gSecretBaseTrainerClasses:: @ 82082E8
.byte TRAINER_CLASS_YOUNGSTER, TRAINER_CLASS_BUG_CATCHER, TRAINER_CLASS_RICH_BOY, TRAINER_CLASS_CAMPER, TRAINER_CLASS_COOL_TRAINER_M
.byte TRAINER_CLASS_LASS, TRAINER_CLASS_SCHOOL_KID_F, TRAINER_CLASS_LADY, TRAINER_CLASS_PICNICKER, TRAINER_CLASS_COOL_TRAINER_F
diff --git a/data/event_scripts.s b/data/event_scripts.s
index 966e32ad2..96b25e695 100644
--- a/data/event_scripts.s
+++ b/data/event_scripts.s
@@ -7,6 +7,7 @@
@ 814AE30
.include "data/script_cmd_table.s"
+ .align 2
gUnknown_0814B14C::
.4byte 0x202e8c4
.4byte 0x202e8c6
@@ -29,6 +30,7 @@ gUnknown_0814B14C::
.include "data/specials.s"
+ .align 2
gStdScripts::
.4byte Std_ObtainItem
.4byte Std_FindItem
diff --git a/data/specials.s b/data/specials.s
index 1161f32d1..318534084 100644
--- a/data/specials.s
+++ b/data/specials.s
@@ -1,3 +1,4 @@
+ .align 2
gSpecials::
.4byte sp000_heal_pokemon
.4byte sub_8068FEC
diff --git a/ewram_syms.txt b/ewram_syms.txt
index e357f6020..260c9deaa 100644
--- a/ewram_syms.txt
+++ b/ewram_syms.txt
@@ -1,8 +1,16 @@
unk_2000000 = 0x2000000;
unk_2004000 = 0x2004000;
+unk_20160BC = 0x20160BC;
+
+gSecretBaseRecord = 0x2017000;
+
gUnknown_020239F8 = 0x20239F8;
+gBattleMons = 0x2024A80;
+
+byte_2024C06 = 0x2024C06;
+
word_2024E82 = 0x2024E82;
byte_2024E88 = 0x2024E88;
@@ -25,6 +33,8 @@ gPaletteDecompressionBuffer = 0x202F39C;
gPaletteStructs = 0x202F2C8;
gPaletteFade = 0x202F388;
+word_202FF5E = 0x202FF5E;
+
gPokemonStorage = 0x20300A0;
word_203855E = 0x203855E;
diff --git a/include/global.h b/include/global.h
index e42684b58..e7e828aec 100644
--- a/include/global.h
+++ b/include/global.h
@@ -51,6 +51,27 @@ struct Coords16
s16 y;
};
+struct SecretBaseRecord
+{
+ u8 sbr_field_0; // ID?
+ u8 sbr_field_1_0:4;
+ u8 gender:1;
+ u8 sbr_field_1_5:1;
+ u8 sbr_field_2[7]; // 0xFF bytes?
+ u8 trainerId[4]; // byte 0 is used for determining trainer class
+ u16 sbr_field_e;
+ u8 sbr_field_10;
+ u8 sbr_field_11;
+ u8 decorations[16];
+ u8 sbr_field_22[16];
+ u32 partyPersonality[6];
+ u16 partyMoves[6 * 4];
+ u16 partySpecies[6];
+ u16 partyHeldItems[6];
+ u8 partyLevels[6];
+ u8 partyEVs[6];
+};
+
struct Time
{
s16 days;
diff --git a/include/pokemon.h b/include/pokemon.h
index 9b5a1c1bb..bed60925b 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -255,14 +255,9 @@ struct BattlePokemon
u32 speedIV:5;
u32 spAttackIV:5;
u32 spDefenseIV:5;
- u8 hpStage; // not used
- u8 attackStage;
- u8 defenseStage;
- u8 speedStage;
- u8 spAttackStage;
- u8 spDefenseStage;
- u8 accuracyStage;
- u8 evasionStage;
+ u32 isEgg:1;
+ u32 altAbility:1;
+ u8 statStages[8];
u8 ability;
u8 type1, type2;
u8 unknown;
@@ -273,9 +268,9 @@ struct BattlePokemon
u16 maxHP;
u16 item;
u8 nickname[POKEMON_NAME_LENGTH + 1];
- u8 unknown2;
+ u8 ppBonuses;
u8 otName[8];
- u32 unknown3;
+ u32 experience;
u32 personality;
u32 status1;
u32 status2;
@@ -389,6 +384,19 @@ u8 GiveMonToPlayer(struct Pokemon *mon);
u8 SendMonToPC(struct Pokemon *mon);
u8 CalculatePlayerPartyCount(void);
u8 CalculateEnemyPartyCount(void);
+u8 sub_803DAA0(void);
+u8 GetAbilityBySpecies(u16 species, bool8 altAbility);
+u8 GetMonAbility(struct Pokemon *mon);
+void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord);
+u8 GetSecretBaseTrainerPicIndex(void);
+u8 GetSecretBaseTrainerNameIndex(void);
+u8 PlayerPartyAndPokemonStorageFull(void);
+u8 PokemonStorageFull(void);
+void GetSpeciesName(u8 *name, u16 species);
+u8 CalculatePPWithBonus(u16 move, u8 ppBonuses, u8 moveIndex);
+void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex);
+void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex);
+void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex);
u8 GetNature(struct Pokemon *mon);
u8 GetNatureFromPersonality(u32 personality);
diff --git a/src/pokemon_2.c b/src/pokemon_2.c
index 04a1ed622..a05f2dbaa 100644
--- a/src/pokemon_2.c
+++ b/src/pokemon_2.c
@@ -11,17 +11,32 @@ extern struct Pokemon gPlayerParty[6];
extern u8 gEnemyPartyCount;
extern struct Pokemon gEnemyParty[6];
+extern u16 unk_20160BC[];
+extern struct SecretBaseRecord gSecretBaseRecord;
+extern u16 gUnknown_020239F8;
+extern struct BattlePokemon gBattleMons[4];
+extern u8 byte_2024C06;
extern struct SpriteTemplate gUnknown_02024E8C;
+extern u16 word_202FF5E;
extern struct PokemonStorage gPokemonStorage;
extern u8 gBadEggNickname[];
extern u8 gEggNickname[];
extern u32 gBitTable[];
extern struct BaseStats gBaseStats[];
+extern u8 gSpeciesNames[][11];
+extern struct BattleMove gBattleMoves[];
extern struct SpriteTemplate gSpriteTemplate_8208288[];
extern union AmimCmd *gSpriteAnimTable_81E7C64[];
extern union AnimCmd **gUnknown_081EC2A4[];
extern union AnimCmd **gUnknown_081ECACC[];
+extern u8 gTrainerClassToPicIndex[];
+extern u8 gTrainerClassToNameIndex[];
+extern u8 gSecretBaseTrainerClasses[];
+extern u8 gUnknown_08208238[];
+extern u8 gUnknown_0820823C[];
+
+extern u8 battle_side_get_owner(u8);
u8 GetMonGender(struct Pokemon *mon)
{
@@ -932,3 +947,200 @@ u8 CalculateEnemyPartyCount(void)
return gEnemyPartyCount;
}
+
+u8 sub_803DAA0(void)
+{
+ s32 aliveCount = 0;
+ s32 i;
+ CalculatePlayerPartyCount();
+
+ if (gPlayerPartyCount == 1)
+ return gPlayerPartyCount;
+
+ for (i = 0; i < gPlayerPartyCount; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0
+ && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_NONE
+ && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != 412)
+ aliveCount++;
+ }
+
+ return (aliveCount > 1) ? 0 : 2;
+}
+
+u8 GetAbilityBySpecies(u16 species, bool8 altAbility)
+{
+ if (altAbility)
+ byte_2024C06 = gBaseStats[species].ability2;
+ else
+ byte_2024C06 = gBaseStats[species].ability1;
+
+ return byte_2024C06;
+}
+
+u8 GetMonAbility(struct Pokemon *mon)
+{
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
+ u8 altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY, NULL);
+ return GetAbilityBySpecies(species, altAbility);
+}
+
+void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord)
+{
+ s32 i, j;
+
+ ZeroEnemyPartyMons();
+ memcpy(&gSecretBaseRecord, secretBaseRecord, sizeof(*secretBaseRecord));
+
+ for (i = 0; i < 6; i++)
+ {
+ if (gSecretBaseRecord.partySpecies[i])
+ {
+ CreateMon(&gEnemyParty[i],
+ gSecretBaseRecord.partySpecies[i],
+ gSecretBaseRecord.partyLevels[i],
+ 15,
+ 1,
+ gSecretBaseRecord.partyPersonality[i],
+ 2,
+ 0);
+
+ SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, (u8 *)&gSecretBaseRecord.partyHeldItems[i]);
+
+ for (j = 0; j < 6; j++)
+ SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &gSecretBaseRecord.partyEVs[i]);
+
+ for (j = 0; j < 4; j++)
+ {
+ SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, (u8 *)&gSecretBaseRecord.partyMoves[i * 4 + j]);
+ SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gSecretBaseRecord.partyMoves[i * 4 + j]].pp);
+ }
+ }
+ }
+
+ gUnknown_020239F8 = 8;
+ word_202FF5E = 1024;
+}
+
+u8 GetSecretBaseTrainerPicIndex(void)
+{
+ u8 trainerClass = gSecretBaseTrainerClasses[(gSecretBaseRecord.trainerId[0] % 5) + (5 * gSecretBaseRecord.gender)];
+ return gTrainerClassToPicIndex[trainerClass];
+}
+
+u8 GetSecretBaseTrainerNameIndex(void)
+{
+ u8 trainerClass = gSecretBaseTrainerClasses[(gSecretBaseRecord.trainerId[0] % 5) + (5 * gSecretBaseRecord.gender)];
+ return gTrainerClassToNameIndex[trainerClass];
+}
+
+u8 PlayerPartyAndPokemonStorageFull(void)
+{
+ s32 i;
+
+ for (i = 0; i < 6; i++)
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) == SPECIES_NONE)
+ return 0;
+
+ return PokemonStorageFull();
+}
+
+u8 PokemonStorageFull(void)
+{
+ s32 i, j;
+
+ for (i = 0; i < 14; i++)
+ for (j = 0; j < 30; j++)
+ if (GetBoxMonData(&gPokemonStorage.boxes[i][j], MON_DATA_SPECIES, NULL) == SPECIES_NONE)
+ return 0;
+
+ return 1;
+}
+
+void GetSpeciesName(u8 *name, u16 species)
+{
+ s32 i;
+
+ for (i = 0; i <= POKEMON_NAME_LENGTH; i++)
+ {
+ if (species > 412)
+ name[i] = gSpeciesNames[0][i];
+ else
+ name[i] = gSpeciesNames[species][i];
+
+ if (name[i] == EOS)
+ break;
+ }
+
+ name[i] = EOS;
+}
+
+u8 CalculatePPWithBonus(u16 move, u8 ppBonuses, u8 moveIndex)
+{
+ u8 basePP = gBattleMoves[move].pp;
+ return basePP + ((basePP * 20 * ((gUnknown_08208238[moveIndex] & ppBonuses) >> (2 * moveIndex))) / 100);
+}
+
+void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex)
+{
+ u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES, NULL);
+ ppBonuses &= gUnknown_0820823C[moveIndex];
+ SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses);
+}
+
+void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex)
+{
+ mon->ppBonuses &= gUnknown_0820823C[moveIndex];
+}
+
+void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex)
+{
+ s32 i;
+ s8 nickname[POKEMON_NAME_LENGTH * 2];
+
+ gBattleMons[battleIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL);
+ gBattleMons[battleIndex].item = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM, NULL);
+
+ for (i = 0; i < 4; i++)
+ {
+ gBattleMons[battleIndex].moves[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1 + i, NULL);
+ gBattleMons[battleIndex].pp[i] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP1 + i, NULL);
+ }
+
+ gBattleMons[battleIndex].ppBonuses = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PP_BONUSES, NULL);
+ gBattleMons[battleIndex].friendship = GetMonData(&gPlayerParty[partyIndex], MON_DATA_FRIENDSHIP, NULL);
+ gBattleMons[battleIndex].experience = GetMonData(&gPlayerParty[partyIndex], MON_DATA_EXP, NULL);
+ gBattleMons[battleIndex].hpIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP_IV, NULL);
+ gBattleMons[battleIndex].attackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK_IV, NULL);
+ gBattleMons[battleIndex].defenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF_IV, NULL);
+ gBattleMons[battleIndex].speedIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPD_IV, NULL);
+ gBattleMons[battleIndex].spAttackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK_IV, NULL);
+ gBattleMons[battleIndex].spDefenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF_IV, NULL);
+ gBattleMons[battleIndex].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY, NULL);
+ gBattleMons[battleIndex].status1 = GetMonData(&gPlayerParty[partyIndex], MON_DATA_STATUS, NULL);
+ gBattleMons[battleIndex].level = GetMonData(&gPlayerParty[partyIndex], MON_DATA_LEVEL, NULL);
+ gBattleMons[battleIndex].hp = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP, NULL);
+ gBattleMons[battleIndex].maxHP = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MAX_HP, NULL);
+ gBattleMons[battleIndex].attack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK, NULL);
+ gBattleMons[battleIndex].defense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF, NULL);
+ gBattleMons[battleIndex].speed = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPD, NULL);
+ gBattleMons[battleIndex].spAttack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK, NULL);
+ gBattleMons[battleIndex].spDefense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF, NULL);
+ gBattleMons[battleIndex].isEgg = GetMonData(&gPlayerParty[partyIndex], MON_DATA_IS_EGG, NULL);
+ gBattleMons[battleIndex].altAbility = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ALT_ABILITY, NULL);
+ gBattleMons[battleIndex].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID, NULL);
+ gBattleMons[battleIndex].type1 = gBaseStats[gBattleMons[battleIndex].species].type1;
+ gBattleMons[battleIndex].type2 = gBaseStats[gBattleMons[battleIndex].species].type2;
+ gBattleMons[battleIndex].ability = GetAbilityBySpecies(gBattleMons[battleIndex].species, gBattleMons[battleIndex].altAbility);
+ GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, nickname);
+ StringCopy10(gBattleMons[battleIndex].nickname, nickname);
+ GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_NAME, gBattleMons[battleIndex].otName);
+ *(unk_20160BC + battle_side_get_owner(battleIndex)) = gBattleMons[battleIndex].hp;
+
+ for (i = 0; i < 8; i++)
+ gBattleMons[battleIndex].statStages[i] = 6;
+
+ gBattleMons[battleIndex].status2 = 0;
+ sub_80157C4(battleIndex);
+ sub_8032AA8(battleIndex, 0);
+}