diff options
author | YamaArashi <shadow962@live.com> | 2016-09-12 15:42:25 -0700 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2016-09-12 15:42:25 -0700 |
commit | 64a39c38e34135028d7d73b4d77cf0542bf14e83 (patch) | |
tree | 46677533784f17dbc0f3670467bd3555ac72d72b | |
parent | 9db354596485ebabb05a6c026db0a2e41b07cb6d (diff) |
decompile pokemon functions
-rw-r--r-- | asm/rom3.s | 22 | ||||
-rw-r--r-- | asm/rom5.s | 20 | ||||
-rw-r--r-- | asm/rom_803D1FC.s | 902 | ||||
-rw-r--r-- | asm/rom_8065394.s | 2 | ||||
-rw-r--r-- | data/data2.s | 2 | ||||
-rw-r--r-- | data/event_scripts.s | 2 | ||||
-rw-r--r-- | data/specials.s | 1 | ||||
-rw-r--r-- | ewram_syms.txt | 10 | ||||
-rw-r--r-- | include/global.h | 21 | ||||
-rw-r--r-- | include/pokemon.h | 28 | ||||
-rw-r--r-- | src/pokemon_2.c | 212 |
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); +} |