diff options
Diffstat (limited to 'arm9')
50 files changed, 1427 insertions, 2753 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 203a97ea..f2ac2c77 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -87,7 +87,8 @@ Static arm9 Object sav_system_info.o Object player_data.o Object unk_02023AC4.o - Object unk_02023C40.o + Object daycare.o + Object pokedex.o Object unk_02024E64.o Object options.o Object unk_020250A4.o @@ -282,7 +283,7 @@ Static arm9 Object unk_02083D48.o Object unk_02084098.o Object unk_020842D0.o - Object unk_020842DC.o + Object use_item_on_mon.o Object unk_020851B8.o Object nutdata.o Object unk_02085338.o diff --git a/arm9/asm/player_data.s b/arm9/asm/player_data.s deleted file mode 100644 index 9761eb48..00000000 --- a/arm9/asm/player_data.s +++ /dev/null @@ -1,364 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start Sav2_PlayerData_sizeof -Sav2_PlayerData_sizeof: ; 0x020238C4 - mov r0, #0x2c - bx lr - - thumb_func_start Sav2_PlayerData_init -Sav2_PlayerData_init: ; 0x020238C8 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x0 - add r1, r4, #0x0 - mov r2, #0x2c - bl MIi_CpuClearFast - add r0, r4, #0x0 - bl Options_init - add r0, r4, #0x4 - bl PlayerProfile_Clear - add r0, r4, #0x0 - add r0, #0x24 - bl InitCoins - add r4, #0x26 - add r0, r4, #0x0 - bl InitIGT - pop {r4, pc} - - thumb_func_start Sav2_PlayerData_GetProfileAddr -Sav2_PlayerData_GetProfileAddr: ; 0x020238F4 - push {r3, lr} - mov r1, #0x1 - bl SavArray_get - add r0, r0, #0x4 - pop {r3, pc} - - thumb_func_start Sav2_PlayerData_GetOptionsAddr -Sav2_PlayerData_GetOptionsAddr: ; 0x02023900 - ldr r3, _02023908 ; =SavArray_get - mov r1, #0x1 - bx r3 - nop -_02023908: .word SavArray_get - - thumb_func_start Sav2_PlayerData_GetCoinsAddr -Sav2_PlayerData_GetCoinsAddr: ; 0x0202390C - push {r3, lr} - mov r1, #0x1 - bl SavArray_get - add r0, #0x24 - pop {r3, pc} - - thumb_func_start Sav2_PlayerData_GetIGTAddr -Sav2_PlayerData_GetIGTAddr: ; 0x02023918 - push {r3, lr} - mov r1, #0x1 - bl SavArray_get - add r0, #0x26 - pop {r3, pc} - - thumb_func_start PlayerProfile_sizeof -PlayerProfile_sizeof: ; 0x02023924 - mov r0, #0x20 - bx lr - - thumb_func_start PlayerProfile_init -PlayerProfile_init: ; 0x02023928 - push {r4, lr} - mov r1, #0x20 - bl AllocFromHeap - add r4, r0, #0x0 - bl PlayerProfile_Clear - add r0, r4, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start PlayerProfile_Copy -PlayerProfile_Copy: ; 0x0202393C - ldr r3, _02023944 ; =MI_CpuCopy8 - mov r2, #0x20 - bx r3 - nop -_02023944: .word MI_CpuCopy8 - - thumb_func_start PlayerProfile_Clear -PlayerProfile_Clear: ; 0x02023948 - push {r4, lr} - mov r1, #0x0 - mov r2, #0x20 - add r4, r0, #0x0 - bl memset - mov r0, #0x2 - strb r0, [r4, #0x19] - pop {r4, pc} - .balign 4 - - thumb_func_start CopyPlayerName -CopyPlayerName: ; 0x0202395C - push {r3-r5, lr} - add r4, r1, #0x0 - add r5, r0, #0x0 - add r0, r4, #0x0 - bl StringLength - cmp r0, #0x8 - blt _02023970 - bl ErrorHandling -_02023970: - add r0, r5, #0x0 - add r1, r4, #0x0 - bl CopyU16StringArray - pop {r3-r5, pc} - .balign 4 - - thumb_func_start PlayerName_StringToFlat -PlayerName_StringToFlat: ; 0x0202397C - ldr r3, _02023988 ; =CopyStringToU16Array - add r2, r0, #0x0 - add r0, r1, #0x0 - add r1, r2, #0x0 - mov r2, #0x8 - bx r3 - .balign 4 -_02023988: .word CopyStringToU16Array - - thumb_func_start PlayerProfile_GetNamePtr -PlayerProfile_GetNamePtr: ; 0x0202398C - bx lr - .balign 4 - - thumb_func_start PlayerName_FlatToString -PlayerName_FlatToString: ; 0x02023990 - ldr r3, _0202399C ; =CopyU16ArrayToString - add r2, r0, #0x0 - add r0, r1, #0x0 - add r1, r2, #0x0 - bx r3 - nop -_0202399C: .word CopyU16ArrayToString - - thumb_func_start PlayerProfile_GetPlayerName_NewString -PlayerProfile_GetPlayerName_NewString: ; 0x020239A0 - push {r3-r5, lr} - add r5, r0, #0x0 - mov r0, #0x8 - bl String_ctor - add r4, r0, #0x0 - add r0, r5, #0x0 - add r1, r4, #0x0 - bl PlayerName_FlatToString - add r0, r4, #0x0 - pop {r3-r5, pc} - - thumb_func_start PlayerProfile_SetTrainerID -PlayerProfile_SetTrainerID: ; 0x020239B8 - str r1, [r0, #0x10] - bx lr - - thumb_func_start PlayerProfile_GetTrainerID -PlayerProfile_GetTrainerID: ; 0x020239BC - ldr r0, [r0, #0x10] - bx lr - - thumb_func_start PlayerProfile_GetTrainerID_VisibleHalf -PlayerProfile_GetTrainerID_VisibleHalf: ; 0x020239C0 - ldr r0, [r0, #0x10] - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bx lr - - thumb_func_start PlayerProfile_SetTrainerGender -PlayerProfile_SetTrainerGender: ; 0x020239C8 - strb r1, [r0, #0x18] - bx lr - - thumb_func_start PlayerProfile_GetTrainerGender -PlayerProfile_GetTrainerGender: ; 0x020239CC - ldrb r0, [r0, #0x18] - bx lr - - thumb_func_start PlayerProfile_TestBadgeFlag -PlayerProfile_TestBadgeFlag: ; 0x020239D0 - ldrb r3, [r0, #0x1a] - mov r0, #0x1 - add r2, r0, #0x0 - lsl r2, r1 - add r1, r3, #0x0 - tst r1, r2 - bne _020239E0 - mov r0, #0x0 -_020239E0: - bx lr - .balign 4 - - thumb_func_start PlayerProfile_SetBadgeFlag -PlayerProfile_SetBadgeFlag: ; 0x020239E4 - ldrb r3, [r0, #0x1a] - mov r2, #0x1 - lsl r2, r1 - add r1, r3, #0x0 - orr r1, r2 - strb r1, [r0, #0x1a] - bx lr - .balign 4 - - thumb_func_start PlayerProfile_CountBadges -PlayerProfile_CountBadges: ; 0x020239F4 - ldrb r3, [r0, #0x1a] - mov r2, #0x0 - cmp r3, #0x0 - beq _02023A0A - mov r0, #0x1 -_020239FE: - add r1, r3, #0x0 - tst r1, r0 - beq _02023A06 - add r2, r2, #0x1 -_02023A06: - lsr r3, r3, #0x1 - bne _020239FE -_02023A0A: - add r0, r2, #0x0 - bx lr - .balign 4 - - thumb_func_start PlayerProfile_GetMoney -PlayerProfile_GetMoney: ; 0x02023A10 - ldr r0, [r0, #0x14] - bx lr - - thumb_func_start PlayerProfile_SetMoney -PlayerProfile_SetMoney: ; 0x02023A14 - ldr r2, _02023A24 ; =0x000F423F - cmp r1, r2 - bls _02023A1C - add r1, r2, #0x0 -_02023A1C: - str r1, [r0, #0x14] - add r0, r1, #0x0 - bx lr - nop -_02023A24: .word 0x000F423F - - thumb_func_start FUN_02023A28 -FUN_02023A28: ; 0x02023A28 - ldrb r0, [r0, #0x1b] - bx lr - - thumb_func_start FUN_02023A2C -FUN_02023A2C: ; 0x02023A2C - strb r1, [r0, #0x1b] - bx lr - - thumb_func_start PlayerProfile_AddMoney -PlayerProfile_AddMoney: ; 0x02023A30 - ldr r2, _02023A50 ; =0x000F423F - cmp r1, r2 - bls _02023A3A - str r2, [r0, #0x14] - b _02023A40 -_02023A3A: - ldr r2, [r0, #0x14] - add r1, r2, r1 - str r1, [r0, #0x14] -_02023A40: - ldr r2, [r0, #0x14] - ldr r1, _02023A50 ; =0x000F423F - cmp r2, r1 - bls _02023A4A - str r1, [r0, #0x14] -_02023A4A: - ldr r0, [r0, #0x14] - bx lr - nop -_02023A50: .word 0x000F423F - - thumb_func_start PlayerProfile_SubMoney -PlayerProfile_SubMoney: ; 0x02023A54 - ldr r2, [r0, #0x14] - cmp r2, r1 - bhs _02023A5E - mov r1, #0x0 - b _02023A60 -_02023A5E: - sub r1, r2, r1 -_02023A60: - str r1, [r0, #0x14] - ldr r0, [r0, #0x14] - bx lr - .balign 4 - - thumb_func_start FUN_02023A68 -FUN_02023A68: ; 0x02023A68 - ldrb r0, [r0, #0x1c] - bx lr - - thumb_func_start FUN_02023A6C -FUN_02023A6C: ; 0x02023A6C - strb r1, [r0, #0x1c] - bx lr - - thumb_func_start FUN_02023A70 -FUN_02023A70: ; 0x02023A70 - ldrb r0, [r0, #0x19] - bx lr - - thumb_func_start FUN_02023A74 -FUN_02023A74: ; 0x02023A74 - strb r1, [r0, #0x19] - bx lr - - thumb_func_start FUN_02023A78 -FUN_02023A78: ; 0x02023A78 - ldrb r2, [r0, #0x1d] - mov r1, #0x1 - bic r2, r1 - mov r1, #0x1 - orr r1, r2 - strb r1, [r0, #0x1d] - bx lr - .balign 4 - - thumb_func_start FUN_02023A88 -FUN_02023A88: ; 0x02023A88 - ldrb r0, [r0, #0x1d] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - bx lr - - thumb_func_start FUN_02023A90 -FUN_02023A90: ; 0x02023A90 - ldrb r2, [r0, #0x1d] - mov r1, #0x2 - orr r1, r2 - strb r1, [r0, #0x1d] - bx lr - .balign 4 - - thumb_func_start FUN_02023A9C -FUN_02023A9C: ; 0x02023A9C - ldrb r0, [r0, #0x1d] - lsl r0, r0, #0x1e - lsr r0, r0, #0x1f - bx lr - - thumb_func_start PlayerProfile_NameAndOTIDMatchPlayer -PlayerProfile_NameAndOTIDMatchPlayer: ; 0x02023AA4 - push {r3-r5, lr} - mov r2, #0x7 - add r5, r0, #0x0 - add r4, r1, #0x0 - bl StringNotEqualN - cmp r0, #0x0 - bne _02023AC0 - ldr r1, [r5, #0x10] - ldr r0, [r4, #0x10] - cmp r1, r0 - bne _02023AC0 - mov r0, #0x1 - pop {r3-r5, pc} -_02023AC0: - mov r0, #0x0 - pop {r3-r5, pc} diff --git a/arm9/asm/unk_02023C40.s b/arm9/asm/pokedex.s index 0de40519..11a29cda 100644 --- a/arm9/asm/unk_02023C40.s +++ b/arm9/asm/pokedex.s @@ -1,231 +1,46 @@ .include "asm/macros.inc" .include "global.inc" + .include "constants/species.h" .section .rodata .global UNK_020EE940 UNK_020EE940: ; 0x020EE940 - .short 0x01EA, 0x0097, 0x00F9, 0x00FA, 0x00FB, 0x0181, 0x0182, 0x01E9 - .short 0x01EA, 0x01EB, 0x01EC, 0x01ED + .short SPECIES_MANAPHY + .short SPECIES_MEW + .short SPECIES_LUGIA + .short SPECIES_HO_OH + .short SPECIES_CELEBI + .short SPECIES_JIRACHI + .short SPECIES_DEOXYS + .short SPECIES_PHIONE + .short SPECIES_MANAPHY + .short SPECIES_DARKRAI + .short SPECIES_SHAYMIN + .short SPECIES_ARCEUS .text - thumb_func_start FUN_02023C40 -FUN_02023C40: ; 0x02023C40 - mov r0, #0x1e - lsl r0, r0, #0x4 - bx lr - .balign 4 - - thumb_func_start FUN_02023C48 -FUN_02023C48: ; 0x02023C48 - push {r4, lr} - mov r2, #0x1e - add r4, r0, #0x0 - mov r1, #0x0 - lsl r2, r2, #0x4 - bl memset - add r0, r4, #0x0 - bl ZeroBoxMonData - add r0, r4, #0x0 - add r0, #0xec - bl ZeroBoxMonData - mov r0, #0x76 - mov r1, #0x0 - lsl r0, r0, #0x2 - str r1, [r4, r0] - add r0, r0, #0x4 - strb r1, [r4, r0] - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02023C74 -FUN_02023C74: ; 0x02023C74 - mov r2, #0xec - mul r2, r1 - add r0, r0, r2 - bx lr - - thumb_func_start FUN_02023C7C -FUN_02023C7C: ; 0x02023C7C - bx lr - .balign 4 - - thumb_func_start FUN_02023C80 -FUN_02023C80: ; 0x02023C80 - add r0, #0x88 - bx lr - - thumb_func_start FUN_02023C84 -FUN_02023C84: ; 0x02023C84 - add r0, #0xe8 - ldr r0, [r0, #0x0] - bx lr - .balign 4 - - thumb_func_start FUN_02023C8C -FUN_02023C8C: ; 0x02023C8C - bx lr - .balign 4 - - thumb_func_start FUN_02023C90 -FUN_02023C90: ; 0x02023C90 - mov r1, #0x76 - lsl r1, r1, #0x2 - ldr r0, [r0, r1] - bx lr - - thumb_func_start FUN_02023C98 -FUN_02023C98: ; 0x02023C98 - mov r1, #0x77 - lsl r1, r1, #0x2 - ldrb r0, [r0, r1] - bx lr - - thumb_func_start FUN_02023CA0 -FUN_02023CA0: ; 0x02023CA0 - add r0, #0xe8 - str r1, [r0, #0x0] - bx lr - .balign 4 - - thumb_func_start FUN_02023CA8 -FUN_02023CA8: ; 0x02023CA8 - add r2, r0, #0x0 - add r2, #0xe8 - ldr r2, [r2, #0x0] - add r0, #0xe8 - add r1, r2, r1 - str r1, [r0, #0x0] - bx lr - .balign 4 - - thumb_func_start FUN_02023CB8 -FUN_02023CB8: ; 0x02023CB8 - mov r2, #0x76 - lsl r2, r2, #0x2 - str r1, [r0, r2] - bx lr - - thumb_func_start FUN_02023CC0 -FUN_02023CC0: ; 0x02023CC0 - mov r2, #0x77 - lsl r2, r2, #0x2 - strb r1, [r0, r2] - bx lr - - thumb_func_start FUN_02023CC8 -FUN_02023CC8: ; 0x02023CC8 - push {r3-r5, lr} - add r5, r0, #0x0 - mov r1, #0xc - mov r2, #0x0 - bl GetBoxMonData - add r5, #0xec - add r4, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0xc - mov r2, #0x0 - bl GetBoxMonData - cmp r4, r0 - beq _02023CEA - mov r0, #0x1 - pop {r3-r5, pc} -_02023CEA: - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02023CF0 -FUN_02023CF0: ; 0x02023CF0 - push {r3-r4} - add r4, r0, #0x0 - add r3, r1, #0x0 - mov r2, #0x1d -_02023CF8: - ldmia r3!, {r0-r1} - stmia r4!, {r0-r1} - sub r2, r2, #0x1 - bne _02023CF8 - ldr r0, [r3, #0x0] - str r0, [r4, #0x0] - pop {r3-r4} - bx lr - - thumb_func_start FUN_02023D08 -FUN_02023D08: ; 0x02023D08 - push {r3-r4} - mov r1, #0x0 - add r2, r0, #0x0 - add r4, r1, #0x0 -_02023D10: - add r1, r1, #0x1 - strh r4, [r2, #0x38] - add r2, r2, #0x2 - cmp r1, #0x8 - blt _02023D10 - add r3, r0, #0x0 - mov r2, #0x0 -_02023D1E: - add r1, r3, #0x0 - add r1, #0x48 - add r4, r4, #0x1 - add r3, r3, #0x2 - strh r2, [r1, #0x0] - cmp r4, #0xb - blt _02023D1E - ldr r1, _02023D38 ; =0x0000FFFF - strh r1, [r0, #0x38] - add r0, #0x48 - strh r1, [r0, #0x0] - pop {r3-r4} - bx lr - .balign 4 -_02023D38: .word 0x0000FFFF - - thumb_func_start FUN_02023D3C -FUN_02023D3C: ; 0x02023D3C - push {r4, lr} - add r4, r0, #0x0 - bl ZeroBoxMonData - add r0, r4, #0x0 - mov r1, #0x0 - add r0, #0xe8 - add r4, #0x88 - str r1, [r0, #0x0] - add r0, r4, #0x0 - bl FUN_02023D08 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02023D58 -FUN_02023D58: ; 0x02023D58 - ldr r3, _02023D60 ; =SavArray_get - mov r1, #0x8 - bx r3 - nop -_02023D60: .word SavArray_get - - thumb_func_start FUN_02023D64 -FUN_02023D64: ; 0x02023D64 + thumb_func_start Sav2_Pokedex_sizeof +Sav2_Pokedex_sizeof: ; 0x02023D64 mov r0, #0x4f lsl r0, r0, #0x2 bx lr .balign 4 - thumb_func_start FUN_02023D6C -FUN_02023D6C: ; 0x02023D6C + thumb_func_start Sav2_Pokedex_new +Sav2_Pokedex_new: ; 0x02023D6C push {r4, lr} mov r1, #0x4f lsl r1, r1, #0x2 bl AllocFromHeap add r4, r0, #0x0 - bl FUN_02024378 + bl Sav2_Pokedex_init add r0, r4, #0x0 pop {r4, pc} - thumb_func_start FUN_02023D80 -FUN_02023D80: ; 0x02023D80 + thumb_func_start Sav2_Pokedex_Copy +Sav2_Pokedex_Copy: ; 0x02023D80 ldr r3, _02023D88 ; =MI_CpuCopy8 mov r2, #0x4f lsl r2, r2, #0x2 @@ -1071,8 +886,8 @@ _0202436E: nop _02024374: .word 0x000001EA - thumb_func_start FUN_02024378 -FUN_02024378: ; 0x02024378 + thumb_func_start Sav2_Pokedex_init +Sav2_Pokedex_init: ; 0x02024378 push {r4, lr} mov r2, #0x4f mov r1, #0x0 @@ -1177,7 +992,7 @@ _0202443C: .word 0x000001ED FUN_02024440: ; 0x02024440 push {r4, lr} add r4, r0, #0x0 - bl FUN_02024CA4 + bl Pokedex_GetNatDexFlag cmp r0, #0x0 beq _02024454 add r0, r4, #0x0 @@ -2296,8 +2111,8 @@ _02024C78: .word 0xBEEFCAFE _02024C7C: .word 0x000001ED _02024C80: .word 0x00000147 - thumb_func_start FUN_02024C84 -FUN_02024C84: ; 0x02024C84 + thumb_func_start Pokedex_SetNatDexFlag +Pokedex_SetNatDexFlag: ; 0x02024C84 push {r4, lr} add r4, r0, #0x0 ldr r1, [r4, #0x0] @@ -2314,8 +2129,8 @@ _02024C94: _02024C9C: .word 0xBEEFCAFE _02024CA0: .word 0x00000139 - thumb_func_start FUN_02024CA4 -FUN_02024CA4: ; 0x02024CA4 + thumb_func_start Pokedex_GetNatDexFlag +Pokedex_GetNatDexFlag: ; 0x02024CA4 push {r4, lr} add r4, r0, #0x0 ldr r1, [r4, #0x0] diff --git a/arm9/asm/scrcmd.s b/arm9/asm/scrcmd.s index 1cd62a91..3f324f9f 100644 --- a/arm9/asm/scrcmd.s +++ b/arm9/asm/scrcmd.s @@ -5263,13 +5263,13 @@ FUN_0203C300: ; 0x0203C300 .balign 4 _0203C328: .word FUN_0203BB90 - thumb_func_start FUN_0203C32C -FUN_0203C32C: ; 0x0203C32C + thumb_func_start ScrCmd_halloffame +ScrCmd_halloffame: ; 0x0203C32C push {r3, lr} add r0, #0x80 ldr r0, [r0, #0x0] ldr r0, [r0, #0x10] - bl FUN_02048694 + bl Special_EnterHallOfFame mov r0, #0x1 pop {r3, pc} @@ -7876,7 +7876,7 @@ FUN_0203D834: ; 0x0203D834 lsl r1, r1, #0x18 add r0, r4, #0x0 lsr r1, r1, #0x18 - bl FUN_02023A2C + bl PlayerProfile_SetAvatar mov r0, #0x0 pop {r3-r5, pc} .balign 4 @@ -7910,8 +7910,8 @@ FUN_0203D874: ; 0x0203D874 pop {r3-r5, pc} .balign 4 - thumb_func_start FUN_0203D8A0 -FUN_0203D8A0: ; 0x0203D8A0 + thumb_func_start ScrCmd_getplayergender +ScrCmd_getplayergender: ; 0x0203D8A0 push {r3-r5, lr} add r5, r0, #0x0 add r0, #0x80 @@ -7932,14 +7932,14 @@ FUN_0203D8A0: ; 0x0203D8A0 mov r0, #0x0 pop {r3-r5, pc} - thumb_func_start FUN_0203D8D0 -FUN_0203D8D0: ; 0x0203D8D0 + thumb_func_start ScrCmd_healparty +ScrCmd_healparty: ; 0x0203D8D0 push {r3, lr} ldr r0, [r0, #0x74] bl FUN_02046528 ldr r0, [r0, #0xc] bl SavArray_PlayerParty_get - bl FUN_02085140 + bl HealParty mov r0, #0x0 pop {r3, pc} .balign 4 @@ -10034,12 +10034,12 @@ FUN_0203E968: ; 0x0203E968 ldr r0, [r0, #0x0] ldr r0, [r0, #0xc] bl FUN_02024DA0 - bl FUN_02024C84 + bl Pokedex_SetNatDexFlag add r5, #0x80 ldr r0, [r5, #0x0] ldr r0, [r0, #0xc] bl Sav2_PlayerData_GetProfileAddr - bl FUN_02023A90 + bl PlayerProfile_SetNatDexFlag b _0203E9C8 _0203E9AE: cmp r4, #0x2 @@ -10048,7 +10048,7 @@ _0203E9AE: ldr r0, [r5, #0x0] ldr r0, [r0, #0xc] bl FUN_02024DA0 - bl FUN_02024CA4 + bl Pokedex_GetNatDexFlag strh r0, [r6, #0x0] b _0203E9C8 _0203E9C4: diff --git a/arm9/asm/scrcmd_16.s b/arm9/asm/scrcmd_16.s index dba4514e..8afbf518 100644 --- a/arm9/asm/scrcmd_16.s +++ b/arm9/asm/scrcmd_16.s @@ -13,7 +13,7 @@ FUN_02043E00: ; 0x02043E00 bl FUN_02039438 add r4, r0, #0x0 add r0, r5, #0x0 - bl FUN_02023D58 + bl Sav2_DayCare_get ldr r1, [r4, #0x0] bl MOD05_021ED4E0 mov r0, #0x0 @@ -75,7 +75,7 @@ FUN_02043E68: ; 0x02043E68 add r2, r0, #0x0 add r0, r6, #0x0 add r1, r5, #0x0 - bl MOD05_021ED0CC + bl MOD05_DayCare_GiveEggToPlayer mov r0, #0x0 pop {r4-r6, pc} @@ -306,7 +306,7 @@ FUN_02044034: ; 0x02044034 bl VarGet add r4, r0, #0x0 add r0, r5, #0x0 - bl FUN_02023D58 + bl Sav2_DayCare_get lsl r1, r4, #0x18 lsr r1, r1, #0x18 str r1, [sp, #0x0] @@ -365,7 +365,7 @@ FUN_020440F0: ; 0x020440F0 add r0, r4, #0x0 mov r1, #0x8 bl SavArray_get - bl FUN_02023C90 + bl Sav2_DayCare_GetEggPID strh r0, [r5, #0x0] mov r0, #0x0 pop {r3-r5, pc} diff --git a/arm9/asm/scrcmd_3.s b/arm9/asm/scrcmd_3.s index 3de355ea..4d4d924c 100644 --- a/arm9/asm/scrcmd_3.s +++ b/arm9/asm/scrcmd_3.s @@ -145,7 +145,7 @@ FUN_0203FF10: ; 0x0203FF10 ldr r0, [r0, #0x0] ldr r0, [r0, #0xc] bl FUN_02024DA0 - bl FUN_02024CA4 + bl Pokedex_GetNatDexFlag add r1, sp, #0x14 strb r0, [r1, #0x4] strb r6, [r1, #0x5] diff --git a/arm9/asm/scrcmd_4.s b/arm9/asm/scrcmd_4.s index b3af2c5c..14d6ef99 100644 --- a/arm9/asm/scrcmd_4.s +++ b/arm9/asm/scrcmd_4.s @@ -441,7 +441,7 @@ FUN_02040A30: ; 0x02040A30 bl PlayerProfile_GetTrainerGender add r7, r0, #0x0 add r0, r4, #0x0 - bl FUN_02023A28 + bl PlayerProfile_GetAvatar add r1, r0, #0x0 add r0, r7, #0x0 mov r2, #0x2 diff --git a/arm9/asm/unk_02025954.s b/arm9/asm/unk_02025954.s index bb8ebe4f..8cbf5483 100644 --- a/arm9/asm/unk_02025954.s +++ b/arm9/asm/unk_02025954.s @@ -501,14 +501,14 @@ _02025C72: add r1, #0xa0 str r0, [r1, #0x0] add r0, r6, #0x0 - bl FUN_02023A70 + bl PlayerProfile_GetLanguage ldr r1, [sp, #0x0] add r2, r7, r1 mov r1, #0x41 lsl r1, r1, #0x2 strb r0, [r2, r1] add r0, r6, #0x0 - bl FUN_02023A68 + bl PlayerProfile_GetVersion ldr r1, [sp, #0x0] add r2, r7, r1 ldr r1, _02025CD4 ; =0x00000109 @@ -549,7 +549,7 @@ _02025CE8: cmp r0, #0x0 beq _02025D32 add r0, r1, #0x0 - bl PlayerProfile_init + bl PlayerProfile_new ldr r1, [sp, #0x0] add r6, r0, #0x0 add r1, r7, r1 @@ -558,13 +558,13 @@ _02025CE8: add r2, r5, r4 ldrb r1, [r2, r1] add r0, r6, #0x0 - bl FUN_02023A6C + bl PlayerProfile_SetVersion mov r1, #0x41 add r2, r5, r4 lsl r1, r1, #0x2 ldrb r1, [r2, r1] add r0, r6, #0x0 - bl FUN_02023A74 + bl PlayerProfile_SetLanguage lsl r1, r4, #0x2 add r1, r5, r1 add r1, #0xa0 diff --git a/arm9/asm/unk_0202DB14.s b/arm9/asm/unk_0202DB14.s index a725a6c0..22ffb2e4 100644 --- a/arm9/asm/unk_0202DB14.s +++ b/arm9/asm/unk_0202DB14.s @@ -452,7 +452,7 @@ FUN_0202DE78: ; 0x0202DE78 mov r0, #0xd2 lsl r0, r0, #0x2 ldr r0, [r1, r0] - bl PlayerProfile_Clear + bl PlayerProfile_init ldr r0, _0202DEA0 ; =UNK_021C59E4 mov r2, #0x0 ldr r0, [r0, #0x0] diff --git a/arm9/asm/unk_02033778.s b/arm9/asm/unk_02033778.s index 844eac17..763e7b30 100644 --- a/arm9/asm/unk_02033778.s +++ b/arm9/asm/unk_02033778.s @@ -28,7 +28,7 @@ _02033792: add r6, r0, #0x0 add r0, r5, #0x0 bl FUN_0202DFA4 - bl FUN_02023A70 + bl PlayerProfile_GetLanguage add r3, r0, #0x0 ldr r0, [sp, #0x0] add r1, r4, #0x0 diff --git a/arm9/asm/unk_02033874.s b/arm9/asm/unk_02033874.s index e48fdc8a..ddd4483b 100644 --- a/arm9/asm/unk_02033874.s +++ b/arm9/asm/unk_02033874.s @@ -341,7 +341,7 @@ _02033B22: ldr r0, [sp, #0x10] bl String_dtor add r0, r6, #0x0 - bl FUN_02023A28 + bl PlayerProfile_GetAvatar add r3, r0, #0x0 add r0, r4, #0x0 add r1, r5, #0x0 diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index 667b0c58..73daf808 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -325,7 +325,7 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203C2E0 .word FUN_0203C2F0 .word FUN_0203C300 - .word FUN_0203C32C + .word ScrCmd_halloffame .word FUN_0203C33C .word FUN_0203C368 .word FUN_0203C3C8 @@ -482,8 +482,8 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203FE48 .word FUN_0203D868 .word FUN_0203D874 - .word FUN_0203D8A0 - .word FUN_0203D8D0 + .word ScrCmd_getplayergender + .word ScrCmd_healparty .word FUN_0203D8E8 .word FUN_0203D8EC .word FUN_0203D938 diff --git a/arm9/asm/unk_0204653C.s b/arm9/asm/unk_0204653C.s index 15eacf44..b74847fc 100644 --- a/arm9/asm/unk_0204653C.s +++ b/arm9/asm/unk_0204653C.s @@ -203,7 +203,7 @@ _020466A4: beq _020466BC ldr r0, [r6, #0xc] bl SavArray_PlayerParty_get - bl FUN_02085140 + bl HealParty _020466BC: ldr r1, [r5, #0x10] add r0, r6, #0x0 @@ -771,7 +771,7 @@ _02046B3E: beq _02046B56 ldr r0, [r5, #0xc] bl SavArray_PlayerParty_get - bl FUN_02085140 + bl HealParty _02046B56: ldr r1, [r4, #0x10] add r0, r5, #0x0 diff --git a/arm9/asm/unk_020476CC.s b/arm9/asm/unk_020476CC.s index 9bf1d22a..bf857f21 100644 --- a/arm9/asm/unk_020476CC.s +++ b/arm9/asm/unk_020476CC.s @@ -85,7 +85,7 @@ _02047748: add r4, r7, #0x0 _0204775C: add r0, r5, #0x0 - bl PlayerProfile_init + bl PlayerProfile_new add r1, r4, #0x0 add r1, #0xf8 add r6, r6, #0x1 @@ -111,7 +111,7 @@ _02047774: lsl r1, r1, #0x2 str r0, [r7, r1] add r0, r5, #0x0 - bl FUN_02023D6C + bl Sav2_Pokedex_new mov r1, #0x11 lsl r1, r1, #0x4 str r0, [r7, r1] @@ -508,7 +508,7 @@ FUN_02047A78: ; 0x02047A78 lsl r1, r1, #0x4 ldr r0, [sp, #0x4] ldr r1, [r5, r1] - bl FUN_02023D80 + bl Sav2_Pokedex_Copy mov r1, #0x13 lsl r1, r1, #0x4 ldr r0, [sp, #0xc] @@ -707,7 +707,7 @@ _02047C98: lsl r1, r1, #0x4 ldr r0, [sp, #0xc] ldr r1, [r6, r1] - bl FUN_02023D80 + bl Sav2_Pokedex_Copy mov r1, #0x13 lsl r1, r1, #0x4 ldr r0, [sp, #0x4] @@ -891,7 +891,7 @@ _02047E2C: lsl r1, r1, #0x4 ldr r0, [sp, #0x18] ldr r1, [r5, r1] - bl FUN_02023D80 + bl Sav2_Pokedex_Copy mov r1, #0x13 lsl r1, r1, #0x4 ldr r0, [sp, #0x10] @@ -950,7 +950,7 @@ _02047E2C: cmp r0, #0x0 beq _02047F10 ldr r0, [sp, #0x20] - bl FUN_02023A28 + bl PlayerProfile_GetAvatar add r4, r0, #0x0 ldr r0, [sp, #0x20] bl PlayerProfile_GetTrainerGender @@ -1042,7 +1042,7 @@ FUN_02047F38: ; 0x02047F38 lsl r0, r0, #0x4 ldr r0, [r4, r0] ldr r1, [sp, #0x4] - bl FUN_02023D80 + bl Sav2_Pokedex_Copy mov r0, #0x19 lsl r0, r0, #0x4 ldr r0, [r4, r0] @@ -1067,7 +1067,7 @@ FUN_02047FA4: ; 0x02047FA4 mov r0, #0x11 lsl r0, r0, #0x4 ldr r0, [r4, r0] - bl FUN_02023D80 + bl Sav2_Pokedex_Copy pop {r3-r5, pc} thumb_func_start FUN_02047FD0 diff --git a/arm9/asm/unk_020484A8.s b/arm9/asm/unk_020484A8.s index 81c79a9a..f38c0676 100644 --- a/arm9/asm/unk_020484A8.s +++ b/arm9/asm/unk_020484A8.s @@ -159,7 +159,7 @@ _020485AE: _020485C0: ldr r0, [r6, #0xc] bl SavArray_PlayerParty_get - bl FUN_02085140 + bl HealParty bl SaveSetDirtyBit ldr r0, [r6, #0xc] bl FUN_02022720 @@ -253,8 +253,8 @@ _02048688: nop _02048690: .word 0x0000061B - thumb_func_start FUN_02048694 -FUN_02048694: ; 0x02048694 + thumb_func_start Special_EnterHallOfFame +Special_EnterHallOfFame: ; 0x02048694 push {r4-r7, lr} sub sp, #0xc add r7, r0, #0x0 @@ -319,7 +319,7 @@ _0204871E: add r0, r6, #0x0 bl FUN_0205ECFC ldr r0, [sp, #0x0] - bl FUN_02023A78 + bl PlayerProfile_SetGameClearFlag ldr r0, [r4, #0xc] bl FUN_02029FC8 mov r1, #0x2e diff --git a/arm9/asm/unk_0204CB20.s b/arm9/asm/unk_0204CB20.s index e95b8c81..52fbcfa7 100644 --- a/arm9/asm/unk_0204CB20.s +++ b/arm9/asm/unk_0204CB20.s @@ -4714,7 +4714,7 @@ FUN_0204EEBC: ; 0x0204EEBC beq _0204EF44 mov r0, #0xf lsl r4, r5, #0x2 - bl PlayerProfile_init + bl PlayerProfile_new mov r3, #0x29 ldr r1, _0204EF48 ; =UNK_021C5A68 add r2, r0, #0x0 @@ -6044,7 +6044,7 @@ FUN_0204F930: ; 0x0204F930 pop {r3-r5, pc} _0204F96E: mov r0, #0xf - bl PlayerProfile_init + bl PlayerProfile_new add r4, r0, #0x0 mov r0, #0x14 mov r1, #0xf @@ -6190,7 +6190,7 @@ FUN_0204FA78: ; 0x0204FA78 _0204FA98: mov r0, #0xf lsl r4, r5, #0x2 - bl PlayerProfile_init + bl PlayerProfile_new ldr r2, _0204FAC8 ; =UNK_021C5A68 ldr r1, [r2, #0x0] add r3, r1, r4 diff --git a/arm9/asm/unk_020520AC.s b/arm9/asm/unk_020520AC.s index 48a4f8ec..b7b805a2 100644 --- a/arm9/asm/unk_020520AC.s +++ b/arm9/asm/unk_020520AC.s @@ -1546,7 +1546,7 @@ _02052B32: lsl r1, r4, #0x2 str r0, [r5, r1] add r0, r7, #0x0 - bl FUN_02023A28 + bl PlayerProfile_GetAvatar str r0, [sp, #0x0] add r0, r7, #0x0 bl PlayerProfile_GetTrainerGender @@ -1688,7 +1688,7 @@ _02052C46: cmp r0, #0x4 beq _02052C78 ldr r0, [r5, #0x8] - bl FUN_02023A28 + bl PlayerProfile_GetAvatar add r4, r0, #0x0 ldr r0, [r5, #0x8] bl PlayerProfile_GetTrainerGender @@ -1820,7 +1820,7 @@ _02052D3C: mov r1, #0x1 bl BufferPlayersName add r0, r4, #0x0 - bl FUN_02023A70 + bl PlayerProfile_GetLanguage add r4, r0, #0x0 cmp r4, #0x1 blt _02052D80 @@ -1967,7 +1967,7 @@ FUN_02052E38: ; 0x02052E38 bl PlayerProfile_GetTrainerGender add r5, r0, #0x0 ldr r0, [r4, #0x8] - bl FUN_02023A28 + bl PlayerProfile_GetAvatar add r1, r0, #0x0 add r0, r5, #0x0 mov r2, #0x0 diff --git a/arm9/asm/unk_02052EE8.s b/arm9/asm/unk_02052EE8.s index d46e356e..5a3ae781 100644 --- a/arm9/asm/unk_02052EE8.s +++ b/arm9/asm/unk_02052EE8.s @@ -342,7 +342,7 @@ _02053166: cmp r6, #0x0 beq _020531D8 ldr r0, [sp, #0xc] - bl FUN_02023A28 + bl PlayerProfile_GetAvatar strb r0, [r5, #0x14] ldr r0, [sp, #0xc] bl PlayerProfile_GetTrainerID diff --git a/arm9/asm/unk_0205CE48.s b/arm9/asm/unk_0205CE48.s index c42ef09c..aa8d85d5 100644 --- a/arm9/asm/unk_0205CE48.s +++ b/arm9/asm/unk_0205CE48.s @@ -1667,7 +1667,7 @@ _0205DB1A: ldr r0, [r4, #0x18] ldr r0, [r0, #0xc] bl FUN_02024DA0 - bl FUN_02024CA4 + bl Pokedex_GetNatDexFlag cmp r0, #0x0 bne _0205DB30 mov r0, #0x0 diff --git a/arm9/asm/unk_02064E90.s b/arm9/asm/unk_02064E90.s index 27f1c143..ea21d648 100644 --- a/arm9/asm/unk_02064E90.s +++ b/arm9/asm/unk_02064E90.s @@ -27,7 +27,7 @@ FUN_02064E90: ; 0x02064E90 bl FUN_02065078 str r0, [sp, #0x24] add r0, r7, #0x0 - bl FUN_02023A70 + bl PlayerProfile_GetLanguage str r0, [sp, #0x0] str r5, [sp, #0x4] ldr r0, [sp, #0x10] diff --git a/arm9/asm/unk_02066840.s b/arm9/asm/unk_02066840.s index 52fefe54..d443fce9 100644 --- a/arm9/asm/unk_02066840.s +++ b/arm9/asm/unk_02066840.s @@ -72,7 +72,7 @@ FUN_02066840: ; 0x02066840 add r0, #0xc8 strb r1, [r0, #0x0] add r0, r4, #0x0 - bl FUN_02023A28 + bl PlayerProfile_GetAvatar add r1, r0, #0x0 add r0, r7, #0x0 add r0, #0xc8 diff --git a/arm9/asm/unk_0206BB28.s b/arm9/asm/unk_0206BB28.s index 6416c65f..c460f6c3 100644 --- a/arm9/asm/unk_0206BB28.s +++ b/arm9/asm/unk_0206BB28.s @@ -13,7 +13,7 @@ FUN_0206BB28: ; 0x0206BB28 thumb_func_start FUN_0206BB34 FUN_0206BB34: ; 0x0206BB34 push {r3, lr} - bl FUN_02024CA4 + bl Pokedex_GetNatDexFlag cmp r0, #0x1 bne _0206BB42 mov r0, #0x1 diff --git a/arm9/asm/unk_0206BF90.s b/arm9/asm/unk_0206BF90.s index b6551933..d672d875 100644 --- a/arm9/asm/unk_0206BF90.s +++ b/arm9/asm/unk_0206BF90.s @@ -998,10 +998,10 @@ FUN_0206C66C: ; 0x0206C66C bl PlayerProfile_GetTrainerID str r0, [r4, #0x10] add r0, r6, #0x0 - bl FUN_02023A70 + bl PlayerProfile_GetLanguage strb r0, [r4, #0x14] add r0, r6, #0x0 - bl FUN_02023A68 + bl PlayerProfile_GetVersion strb r0, [r4, #0x15] add r0, r6, #0x0 bl PlayerProfile_GetTrainerGender diff --git a/arm9/asm/unk_0206F3FC.s b/arm9/asm/unk_0206F3FC.s index 3e7aed0c..db3328a4 100644 --- a/arm9/asm/unk_0206F3FC.s +++ b/arm9/asm/unk_0206F3FC.s @@ -5406,7 +5406,7 @@ _02071E5A: ldrh r1, [r1, #0x24] ldrb r2, [r5, r2] mov r3, #0x0 - bl FUN_020847F8 + bl CanUseItemOnMonInParty cmp r0, #0x1 bne _02071F02 ldr r0, _02071F1C ; =0x000005A4 diff --git a/arm9/asm/unk_0207550C.s b/arm9/asm/unk_0207550C.s index 9b71148c..d4608a0d 100644 --- a/arm9/asm/unk_0207550C.s +++ b/arm9/asm/unk_0207550C.s @@ -982,7 +982,7 @@ FUN_02075D20: ; 0x02075D20 ldrb r2, [r5, r2] ldr r0, [r4, #0x0] mov r3, #0x0 - bl FUN_02084DD0 + bl UseItemOnMonInParty ldr r1, _02075DAC ; =0x00000B25 add r0, r5, #0x0 ldrb r1, [r5, r1] @@ -1106,7 +1106,7 @@ FUN_02075DC0: ; 0x02075DC0 ldrb r2, [r5, r2] ldr r0, [r6, #0x0] mov r3, #0x0 - bl FUN_02084DD0 + bl UseItemOnMonInParty ldr r1, _02075F50 ; =0x00000B25 add r0, r5, #0x0 ldrb r1, [r5, r1] @@ -1237,7 +1237,7 @@ FUN_02075F60: ; 0x02075F60 ldrb r2, [r5, r2] ldr r0, [r4, #0x0] mov r3, #0x0 - bl FUN_02084DD0 + bl UseItemOnMonInParty ldr r0, _02076080 ; =0x000005A4 ldr r1, _02076084 ; =0x00000B25 ldr r0, [r5, r0] @@ -1570,7 +1570,7 @@ _02076212: ldr r1, [r4, r1] mov r2, #0x0 ldrh r1, [r1, #0x24] - bl FUN_02084810 + bl UseItemOnPokemon add r0, r5, #0x0 mov r1, #0xa2 mov r2, #0x0 @@ -1832,7 +1832,7 @@ FUN_0207640C: ; 0x0207640C ldrb r2, [r5, r2] ldr r0, [r6, #0x0] mov r3, #0x0 - bl FUN_02084DD0 + bl UseItemOnMonInParty add r0, r4, #0x0 mov r1, #0xa0 mov r2, #0x0 @@ -3367,7 +3367,7 @@ _0207716A: ldrb r2, [r5, r2] ldr r0, [r6, #0x0] lsr r3, r3, #0x18 - bl FUN_02084DD0 + bl UseItemOnMonInParty cmp r0, #0x1 bne _020771F6 ldr r0, _02077234 ; =0x000005A4 diff --git a/arm9/asm/unk_02080C38.s b/arm9/asm/unk_02080C38.s index ed311aef..80943988 100644 --- a/arm9/asm/unk_02080C38.s +++ b/arm9/asm/unk_02080C38.s @@ -2350,7 +2350,7 @@ _02081DEC: bl ErrorHandling _02081DFA: add r0, r7, #0x0 - bl FUN_02023A88 + bl PlayerProfile_GetGameClearFlag cmp r0, #0x0 beq _02081E0A add r5, r5, #0x1 @@ -2377,7 +2377,7 @@ _02081E1E: bl ErrorHandling _02081E2C: add r0, r7, #0x0 - bl FUN_02023A9C + bl PlayerProfile_GetNatDexFlag cmp r0, #0x0 beq _02081E3C add r5, r5, #0x1 diff --git a/arm9/asm/unk_020842DC.s b/arm9/asm/unk_020842DC.s deleted file mode 100644 index b016ceb3..00000000 --- a/arm9/asm/unk_020842DC.s +++ /dev/null @@ -1,1843 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_020842DC -FUN_020842DC: ; 0x020842DC - push {r3-r7, lr} - sub sp, #0x18 - str r1, [sp, #0x4] - add r6, r0, #0x0 - add r7, r2, #0x0 - ldr r0, [sp, #0x4] - mov r1, #0x0 - add r2, r3, #0x0 - bl LoadItemDataOrGfx - mov r1, #0xe - add r4, r0, #0x0 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x1 - beq _02084308 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x0 - pop {r3-r7, pc} -_02084308: - add r0, r6, #0x0 - mov r1, #0x9f - mov r2, #0x0 - bl GetMonData - add r5, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0xf - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084332 - mov r0, #0x7 - tst r0, r5 - beq _02084332 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_02084332: - add r0, r4, #0x0 - mov r1, #0x10 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084350 - mov r0, #0x88 - tst r0, r5 - beq _02084350 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_02084350: - add r0, r4, #0x0 - mov r1, #0x11 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _0208436E - mov r0, #0x10 - tst r0, r5 - beq _0208436E - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_0208436E: - add r0, r4, #0x0 - mov r1, #0x12 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _0208438C - mov r0, #0x20 - tst r0, r5 - beq _0208438C - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_0208438C: - add r0, r4, #0x0 - mov r1, #0x13 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _020843AA - mov r0, #0x40 - tst r0, r5 - beq _020843AA - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_020843AA: - add r0, r6, #0x0 - mov r1, #0xa2 - mov r2, #0x0 - bl GetMonData - add r5, r0, #0x0 - add r0, r4, #0x0 - mov r1, #0x17 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - bne _020843CE - add r0, r4, #0x0 - mov r1, #0x18 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _020843EA -_020843CE: - add r0, r4, #0x0 - mov r1, #0x19 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - bne _020843EA - cmp r5, #0x0 - bne _02084414 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_020843EA: - add r0, r4, #0x0 - mov r1, #0x26 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084414 - cmp r5, #0x0 - beq _02084414 - add r0, r6, #0x0 - mov r1, #0xa3 - mov r2, #0x0 - bl GetMonData - cmp r5, r0 - bhs _02084414 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_02084414: - add r0, r4, #0x0 - mov r1, #0x19 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _0208443A - add r0, r6, #0x0 - mov r1, #0xa0 - mov r2, #0x0 - bl GetMonData - cmp r0, #0x64 - bhs _0208443A - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_0208443A: - add r0, r4, #0x0 - mov r1, #0x1a - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084464 - mov r0, #0x0 - str r0, [sp, #0x0] - ldr r3, [sp, #0x4] - add r1, r6, #0x0 - mov r2, #0x3 - bl GetMonEvolution - cmp r0, #0x0 - beq _02084464 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_02084464: - add r0, r4, #0x0 - mov r1, #0x22 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - bne _0208447C - add r0, r4, #0x0 - mov r1, #0x23 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _020844B2 -_0208447C: - add r1, r7, #0x0 - add r0, r6, #0x0 - add r1, #0x3e - mov r2, #0x0 - bl GetMonData - cmp r0, #0x3 - bhs _020844B2 - add r1, r7, #0x0 - add r0, r6, #0x0 - add r1, #0x36 - mov r2, #0x0 - bl GetMonData - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - mov r1, #0x0 - bl WazaGetMaxPp - cmp r0, #0x5 - blo _020844B2 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_020844B2: - add r0, r4, #0x0 - mov r1, #0x24 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _020844D6 - add r0, r6, #0x0 - add r1, r7, #0x0 - bl FUN_02084DF0 - cmp r0, #0x1 - bne _020844D6 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_020844D6: - add r0, r4, #0x0 - mov r1, #0x25 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084502 - mov r5, #0x0 -_020844E4: - add r0, r6, #0x0 - add r1, r5, #0x0 - bl FUN_02084DF0 - cmp r0, #0x1 - bne _020844FC - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_020844FC: - add r5, r5, #0x1 - cmp r5, #0x4 - blt _020844E4 -_02084502: - add r0, r6, #0x0 - mov r1, #0xd - mov r2, #0x0 - bl GetMonData - add r5, r0, #0x0 - add r0, r6, #0x0 - mov r1, #0xe - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0x14] - add r0, r6, #0x0 - mov r1, #0xf - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0x10] - add r0, r6, #0x0 - mov r1, #0x10 - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0xc] - add r0, r6, #0x0 - mov r1, #0x11 - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0x8] - add r0, r6, #0x0 - mov r1, #0x12 - mov r2, #0x0 - bl GetMonData - add r7, r0, #0x0 - add r0, r6, #0x0 - mov r1, #0x5 - mov r2, #0x0 - bl GetMonData - mov r1, #0x49 - lsl r1, r1, #0x2 - cmp r0, r1 - beq _020845C6 - add r0, r4, #0x0 - mov r1, #0x27 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _020845C6 - add r0, r4, #0x0 - mov r1, #0x30 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - ble _0208459C - cmp r5, #0x64 - bge _020845C6 - ldr r0, [sp, #0x14] - add r1, r5, r0 - ldr r0, [sp, #0x10] - add r1, r0, r1 - ldr r0, [sp, #0xc] - add r1, r0, r1 - ldr r0, [sp, #0x8] - add r0, r0, r1 - add r1, r7, r0 - ldr r0, _020847F4 ; =0x000001FE - cmp r1, r0 - bge _020845C6 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_0208459C: - bge _020845C6 - cmp r5, #0x0 - ble _020845AE - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_020845AE: - add r0, r6, #0x0 - add r1, r4, #0x0 - bl FUN_02085000 - cmp r0, #0x1 - bne _020845C6 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_020845C6: - add r0, r4, #0x0 - mov r1, #0x28 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084632 - add r0, r4, #0x0 - mov r1, #0x31 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - ble _02084606 - ldr r0, [sp, #0x14] - cmp r0, #0x64 - bge _02084632 - add r1, r5, r0 - ldr r0, [sp, #0x10] - add r1, r0, r1 - ldr r0, [sp, #0xc] - add r1, r0, r1 - ldr r0, [sp, #0x8] - add r0, r0, r1 - add r1, r7, r0 - ldr r0, _020847F4 ; =0x000001FE - cmp r1, r0 - bge _02084632 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_02084606: - bge _02084632 - ldr r0, [sp, #0x14] - cmp r0, #0x0 - ble _0208461A - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_0208461A: - add r0, r6, #0x0 - add r1, r4, #0x0 - bl FUN_02085000 - cmp r0, #0x1 - bne _02084632 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_02084632: - add r0, r4, #0x0 - mov r1, #0x29 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _020846A0 - add r0, r4, #0x0 - mov r1, #0x32 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - ble _02084674 - ldr r0, [sp, #0x10] - cmp r0, #0x64 - bge _020846A0 - ldr r0, [sp, #0x14] - add r1, r5, r0 - ldr r0, [sp, #0x10] - add r1, r0, r1 - ldr r0, [sp, #0xc] - add r1, r0, r1 - ldr r0, [sp, #0x8] - add r0, r0, r1 - add r1, r7, r0 - ldr r0, _020847F4 ; =0x000001FE - cmp r1, r0 - bge _020846A0 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_02084674: - bge _020846A0 - ldr r0, [sp, #0x10] - cmp r0, #0x0 - ble _02084688 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_02084688: - add r0, r6, #0x0 - add r1, r4, #0x0 - bl FUN_02085000 - cmp r0, #0x1 - bne _020846A0 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_020846A0: - add r0, r4, #0x0 - mov r1, #0x2a - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _0208470E - add r0, r4, #0x0 - mov r1, #0x33 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - ble _020846E2 - ldr r0, [sp, #0xc] - cmp r0, #0x64 - bge _0208470E - ldr r0, [sp, #0x14] - add r1, r5, r0 - ldr r0, [sp, #0x10] - add r1, r0, r1 - ldr r0, [sp, #0xc] - add r1, r0, r1 - ldr r0, [sp, #0x8] - add r0, r0, r1 - add r1, r7, r0 - ldr r0, _020847F4 ; =0x000001FE - cmp r1, r0 - bge _0208470E - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_020846E2: - bge _0208470E - ldr r0, [sp, #0xc] - cmp r0, #0x0 - ble _020846F6 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_020846F6: - add r0, r6, #0x0 - add r1, r4, #0x0 - bl FUN_02085000 - cmp r0, #0x1 - bne _0208470E - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_0208470E: - add r0, r4, #0x0 - mov r1, #0x2b - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _0208477C - add r0, r4, #0x0 - mov r1, #0x34 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - ble _02084750 - ldr r0, [sp, #0x8] - cmp r0, #0x64 - bge _0208477C - ldr r0, [sp, #0x14] - add r1, r5, r0 - ldr r0, [sp, #0x10] - add r1, r0, r1 - ldr r0, [sp, #0xc] - add r1, r0, r1 - ldr r0, [sp, #0x8] - add r0, r0, r1 - add r1, r7, r0 - ldr r0, _020847F4 ; =0x000001FE - cmp r1, r0 - bge _0208477C - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_02084750: - bge _0208477C - ldr r0, [sp, #0x8] - cmp r0, #0x0 - ble _02084764 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_02084764: - add r0, r6, #0x0 - add r1, r4, #0x0 - bl FUN_02085000 - cmp r0, #0x1 - bne _0208477C - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_0208477C: - add r0, r4, #0x0 - mov r1, #0x2c - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _020847E6 - add r0, r4, #0x0 - mov r1, #0x35 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - ble _020847BC - cmp r7, #0x64 - bge _020847E6 - ldr r0, [sp, #0x14] - add r1, r5, r0 - ldr r0, [sp, #0x10] - add r1, r0, r1 - ldr r0, [sp, #0xc] - add r1, r0, r1 - ldr r0, [sp, #0x8] - add r0, r0, r1 - add r1, r7, r0 - ldr r0, _020847F4 ; =0x000001FE - cmp r1, r0 - bge _020847E6 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_020847BC: - bge _020847E6 - cmp r7, #0x0 - ble _020847CE - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_020847CE: - add r0, r6, #0x0 - add r1, r4, #0x0 - bl FUN_02085000 - cmp r0, #0x1 - bne _020847E6 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x18 - mov r0, #0x1 - pop {r3-r7, pc} -_020847E6: - add r0, r4, #0x0 - bl FreeToHeap - mov r0, #0x0 - add sp, #0x18 - pop {r3-r7, pc} - nop -_020847F4: .word 0x000001FE - - thumb_func_start FUN_020847F8 -FUN_020847F8: ; 0x020847F8 - push {r3-r5, lr} - add r5, r1, #0x0 - add r1, r2, #0x0 - add r4, r3, #0x0 - bl GetPartyMonByIndex - ldr r3, [sp, #0x10] - add r1, r5, #0x0 - add r2, r4, #0x0 - bl FUN_020842DC - pop {r3-r5, pc} - - thumb_func_start FUN_02084810 -FUN_02084810: ; 0x02084810 - push {r3-r7, lr} - sub sp, #0x70 - add r5, r0, #0x0 - ldr r0, [sp, #0x88] - str r2, [sp, #0x4] - str r0, [sp, #0x88] - add r0, r1, #0x0 - ldr r2, [sp, #0x88] - mov r1, #0x0 - str r3, [sp, #0x8] - bl LoadItemDataOrGfx - mov r1, #0xe - add r4, r0, #0x0 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x1 - beq _02084840 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x70 - mov r0, #0x0 - pop {r3-r7, pc} -_02084840: - mov r6, #0x0 - add r0, r5, #0x0 - mov r1, #0x9f - add r2, r6, #0x0 - add r7, r6, #0x0 - bl GetMonData - str r0, [sp, #0x50] - str r0, [sp, #0x54] - add r0, r4, #0x0 - mov r1, #0xf - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084868 - ldr r1, [sp, #0x54] - mov r0, #0x7 - bic r1, r0 - str r1, [sp, #0x54] - mov r7, #0x1 -_02084868: - add r0, r4, #0x0 - mov r1, #0x10 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _0208487E - ldr r1, [sp, #0x54] - ldr r0, _02084A28 ; =0xFFFFF077 - mov r7, #0x1 - and r0, r1 - str r0, [sp, #0x54] -_0208487E: - add r0, r4, #0x0 - mov r1, #0x11 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084894 - ldr r1, [sp, #0x54] - mov r0, #0x10 - bic r1, r0 - str r1, [sp, #0x54] - mov r7, #0x1 -_02084894: - add r0, r4, #0x0 - mov r1, #0x12 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _020848AA - ldr r1, [sp, #0x54] - mov r0, #0x20 - bic r1, r0 - str r1, [sp, #0x54] - mov r7, #0x1 -_020848AA: - add r0, r4, #0x0 - mov r1, #0x13 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _020848C0 - ldr r1, [sp, #0x54] - mov r0, #0x40 - bic r1, r0 - str r1, [sp, #0x54] - mov r7, #0x1 -_020848C0: - ldr r1, [sp, #0x50] - ldr r0, [sp, #0x54] - cmp r1, r0 - beq _020848D4 - add r0, r5, #0x0 - mov r1, #0x9f - add r2, sp, #0x54 - bl SetMonData - mov r6, #0x1 -_020848D4: - add r0, r5, #0x0 - mov r1, #0xa2 - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0x50] - add r0, r5, #0x0 - mov r1, #0xa3 - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0x54] - add r0, r4, #0x0 - mov r1, #0x17 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - bne _02084904 - add r0, r4, #0x0 - mov r1, #0x18 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084930 -_02084904: - add r0, r4, #0x0 - mov r1, #0x19 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084930 - ldr r0, [sp, #0x50] - cmp r0, #0x0 - bne _0208492C - add r0, r4, #0x0 - mov r1, #0x36 - bl GetItemAttr_PreloadedItemData - add r3, r0, #0x0 - ldr r1, [sp, #0x50] - ldr r2, [sp, #0x54] - add r0, r5, #0x0 - bl FUN_02084F68 - mov r6, #0x1 -_0208492C: - mov r7, #0x1 - b _0208495C -_02084930: - add r0, r4, #0x0 - mov r1, #0x26 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _0208495C - ldr r1, [sp, #0x50] - ldr r0, [sp, #0x54] - cmp r1, r0 - bge _0208495A - add r0, r4, #0x0 - mov r1, #0x36 - bl GetItemAttr_PreloadedItemData - add r3, r0, #0x0 - ldr r1, [sp, #0x50] - ldr r2, [sp, #0x54] - add r0, r5, #0x0 - bl FUN_02084F68 - mov r6, #0x1 -_0208495A: - mov r7, #0x1 -_0208495C: - add r0, r5, #0x0 - mov r1, #0xa0 - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0x58] - add r0, r4, #0x0 - mov r1, #0x19 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _020849B4 - ldr r0, [sp, #0x58] - cmp r0, #0x64 - bge _020849B2 - add r0, r5, #0x0 - bl CalcMonExpToNextLevel - add r2, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x8 - bl AddMonData - add r0, r5, #0x0 - bl CalcMonLevelAndStats - ldr r0, [sp, #0x50] - cmp r0, #0x0 - bne _020849B0 - add r0, r5, #0x0 - mov r1, #0xa3 - mov r2, #0x0 - bl GetMonData - add r2, r0, #0x0 - ldr r3, [sp, #0x54] - ldr r1, [sp, #0x50] - add r0, r5, #0x0 - sub r3, r2, r3 - str r2, [sp, #0x5c] - bl FUN_02084F68 -_020849B0: - mov r6, #0x1 -_020849B2: - mov r7, #0x1 -_020849B4: - add r0, r4, #0x0 - mov r1, #0x1a - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _020849C2 - mov r7, #0x1 -_020849C2: - add r0, r4, #0x0 - mov r1, #0x22 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _020849E2 - ldr r1, [sp, #0x4] - add r0, r5, #0x0 - mov r2, #0x1 - bl FUN_02084EC0 - cmp r0, #0x1 - bne _020849DE - mov r6, #0x1 -_020849DE: - mov r7, #0x1 - b _02084A00 -_020849E2: - add r0, r4, #0x0 - mov r1, #0x23 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084A00 - ldr r1, [sp, #0x4] - add r0, r5, #0x0 - mov r2, #0x3 - bl FUN_02084EC0 - cmp r0, #0x1 - bne _020849FE - mov r6, #0x1 -_020849FE: - mov r7, #0x1 -_02084A00: - add r0, r4, #0x0 - mov r1, #0x24 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084A2C - add r0, r4, #0x0 - mov r1, #0x37 - bl GetItemAttr_PreloadedItemData - add r2, r0, #0x0 - ldr r1, [sp, #0x4] - add r0, r5, #0x0 - bl FUN_02084E40 - cmp r0, #0x1 - bne _02084A24 - mov r6, #0x1 -_02084A24: - mov r7, #0x1 - b _02084A66 - .balign 4 -_02084A28: .word 0xFFFFF077 -_02084A2C: - add r0, r4, #0x0 - mov r1, #0x25 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084A66 - mov r0, #0x0 - str r0, [sp, #0x50] - cmp r0, #0x4 - bge _02084A64 - mov r7, #0x37 -_02084A42: - add r0, r4, #0x0 - add r1, r7, #0x0 - bl GetItemAttr_PreloadedItemData - add r2, r0, #0x0 - ldr r1, [sp, #0x50] - add r0, r5, #0x0 - bl FUN_02084E40 - cmp r0, #0x1 - bne _02084A5A - mov r6, #0x1 -_02084A5A: - ldr r0, [sp, #0x50] - add r0, r0, #0x1 - str r0, [sp, #0x50] - cmp r0, #0x4 - blt _02084A42 -_02084A64: - mov r7, #0x1 -_02084A66: - add r0, r5, #0x0 - mov r1, #0xd - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0x50] - add r0, r5, #0x0 - mov r1, #0xe - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0x54] - add r0, r5, #0x0 - mov r1, #0xf - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0x58] - add r0, r5, #0x0 - mov r1, #0x10 - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0x5c] - add r0, r5, #0x0 - mov r1, #0x11 - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0x60] - add r0, r5, #0x0 - mov r1, #0x12 - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0x64] - add r0, r5, #0x0 - mov r1, #0x5 - mov r2, #0x0 - bl GetMonData - mov r1, #0x49 - lsl r1, r1, #0x2 - cmp r0, r1 - beq _02084B20 - add r0, r4, #0x0 - mov r1, #0x27 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084B20 - add r0, r4, #0x0 - mov r1, #0x30 - bl GetItemAttr_PreloadedItemData - ldr r1, [sp, #0x60] - ldr r2, [sp, #0x54] - str r1, [sp, #0x10] - ldr r1, [sp, #0x5c] - str r0, [sp, #0xc] - str r1, [sp, #0x14] - ldr r1, [sp, #0x58] - str r0, [sp, #0x6c] - add r2, r2, r1 - ldr r1, [sp, #0x14] - ldr r3, [sp, #0x64] - add r2, r1, r2 - ldr r1, [sp, #0x10] - ldr r0, [sp, #0x50] - add r1, r1, r2 - ldr r2, [sp, #0xc] - add r1, r3, r1 - bl FUN_02084FA8 - mov r1, #0x0 - mvn r1, r1 - str r0, [sp, #0x68] - cmp r0, r1 - beq _02084B18 - str r0, [sp, #0x50] - add r0, r5, #0x0 - mov r1, #0xd - add r2, sp, #0x50 - bl SetMonData - add r0, r5, #0x0 - bl CalcMonLevelAndStats - mov r6, #0x1 -_02084B18: - ldr r0, [sp, #0x6c] - cmp r0, #0x0 - ble _02084B20 - mov r7, #0x1 -_02084B20: - add r0, r4, #0x0 - mov r1, #0x28 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084B80 - add r0, r4, #0x0 - mov r1, #0x31 - bl GetItemAttr_PreloadedItemData - ldr r1, [sp, #0x60] - ldr r2, [sp, #0x50] - str r1, [sp, #0x1c] - ldr r1, [sp, #0x5c] - str r0, [sp, #0x18] - str r1, [sp, #0x20] - ldr r1, [sp, #0x58] - str r0, [sp, #0x6c] - add r2, r2, r1 - ldr r1, [sp, #0x20] - ldr r3, [sp, #0x64] - add r2, r1, r2 - ldr r1, [sp, #0x1c] - ldr r0, [sp, #0x54] - add r1, r1, r2 - ldr r2, [sp, #0x18] - add r1, r3, r1 - bl FUN_02084FA8 - mov r1, #0x0 - mvn r1, r1 - str r0, [sp, #0x68] - cmp r0, r1 - beq _02084B78 - str r0, [sp, #0x54] - add r0, r5, #0x0 - mov r1, #0xe - add r2, sp, #0x54 - bl SetMonData - add r0, r5, #0x0 - bl CalcMonLevelAndStats - mov r6, #0x1 -_02084B78: - ldr r0, [sp, #0x6c] - cmp r0, #0x0 - ble _02084B80 - mov r7, #0x1 -_02084B80: - add r0, r4, #0x0 - mov r1, #0x29 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084BE0 - add r0, r4, #0x0 - mov r1, #0x32 - bl GetItemAttr_PreloadedItemData - ldr r1, [sp, #0x60] - ldr r2, [sp, #0x50] - str r1, [sp, #0x28] - ldr r1, [sp, #0x5c] - str r0, [sp, #0x24] - str r1, [sp, #0x2c] - ldr r1, [sp, #0x54] - str r0, [sp, #0x6c] - add r2, r2, r1 - ldr r1, [sp, #0x2c] - ldr r3, [sp, #0x64] - add r2, r1, r2 - ldr r1, [sp, #0x28] - ldr r0, [sp, #0x58] - add r1, r1, r2 - ldr r2, [sp, #0x24] - add r1, r3, r1 - bl FUN_02084FA8 - mov r1, #0x0 - mvn r1, r1 - str r0, [sp, #0x68] - cmp r0, r1 - beq _02084BD8 - str r0, [sp, #0x58] - add r0, r5, #0x0 - mov r1, #0xf - add r2, sp, #0x58 - bl SetMonData - add r0, r5, #0x0 - bl CalcMonLevelAndStats - mov r6, #0x1 -_02084BD8: - ldr r0, [sp, #0x6c] - cmp r0, #0x0 - ble _02084BE0 - mov r7, #0x1 -_02084BE0: - add r0, r4, #0x0 - mov r1, #0x2a - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084C40 - add r0, r4, #0x0 - mov r1, #0x33 - bl GetItemAttr_PreloadedItemData - ldr r1, [sp, #0x60] - ldr r2, [sp, #0x50] - str r1, [sp, #0x34] - ldr r1, [sp, #0x58] - str r0, [sp, #0x30] - str r1, [sp, #0x38] - ldr r1, [sp, #0x54] - str r0, [sp, #0x6c] - add r2, r2, r1 - ldr r1, [sp, #0x38] - ldr r3, [sp, #0x64] - add r2, r1, r2 - ldr r1, [sp, #0x34] - ldr r0, [sp, #0x5c] - add r1, r1, r2 - ldr r2, [sp, #0x30] - add r1, r3, r1 - bl FUN_02084FA8 - mov r1, #0x0 - mvn r1, r1 - str r0, [sp, #0x68] - cmp r0, r1 - beq _02084C38 - str r0, [sp, #0x5c] - add r0, r5, #0x0 - mov r1, #0x10 - add r2, sp, #0x5c - bl SetMonData - add r0, r5, #0x0 - bl CalcMonLevelAndStats - mov r6, #0x1 -_02084C38: - ldr r0, [sp, #0x6c] - cmp r0, #0x0 - ble _02084C40 - mov r7, #0x1 -_02084C40: - add r0, r4, #0x0 - mov r1, #0x2b - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084CA0 - add r0, r4, #0x0 - mov r1, #0x34 - bl GetItemAttr_PreloadedItemData - ldr r1, [sp, #0x5c] - ldr r2, [sp, #0x50] - str r1, [sp, #0x40] - ldr r1, [sp, #0x58] - str r0, [sp, #0x3c] - str r1, [sp, #0x44] - ldr r1, [sp, #0x54] - str r0, [sp, #0x6c] - add r2, r2, r1 - ldr r1, [sp, #0x44] - ldr r3, [sp, #0x64] - add r2, r1, r2 - ldr r1, [sp, #0x40] - ldr r0, [sp, #0x60] - add r1, r1, r2 - ldr r2, [sp, #0x3c] - add r1, r3, r1 - bl FUN_02084FA8 - mov r1, #0x0 - mvn r1, r1 - str r0, [sp, #0x68] - cmp r0, r1 - beq _02084C98 - str r0, [sp, #0x60] - add r0, r5, #0x0 - mov r1, #0x11 - add r2, sp, #0x60 - bl SetMonData - add r0, r5, #0x0 - bl CalcMonLevelAndStats - mov r6, #0x1 -_02084C98: - ldr r0, [sp, #0x6c] - cmp r0, #0x0 - ble _02084CA0 - mov r7, #0x1 -_02084CA0: - add r0, r4, #0x0 - mov r1, #0x2c - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084D00 - add r0, r4, #0x0 - mov r1, #0x35 - bl GetItemAttr_PreloadedItemData - ldr r1, [sp, #0x5c] - ldr r2, [sp, #0x50] - str r1, [sp, #0x4c] - ldr r1, [sp, #0x58] - str r0, [sp, #0x48] - mov r12, r1 - ldr r1, [sp, #0x54] - str r0, [sp, #0x6c] - add r1, r2, r1 - mov r2, r12 - add r2, r2, r1 - ldr r1, [sp, #0x4c] - ldr r3, [sp, #0x60] - add r1, r1, r2 - ldr r0, [sp, #0x64] - ldr r2, [sp, #0x48] - add r1, r3, r1 - bl FUN_02084FA8 - mov r1, #0x0 - mvn r1, r1 - str r0, [sp, #0x68] - cmp r0, r1 - beq _02084CF8 - str r0, [sp, #0x64] - add r0, r5, #0x0 - mov r1, #0x12 - add r2, sp, #0x64 - bl SetMonData - add r0, r5, #0x0 - bl CalcMonLevelAndStats - mov r6, #0x1 -_02084CF8: - ldr r0, [sp, #0x6c] - cmp r0, #0x0 - ble _02084D00 - mov r7, #0x1 -_02084D00: - cmp r6, #0x0 - bne _02084D14 - cmp r7, #0x1 - bne _02084D14 - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x70 - mov r0, #0x0 - pop {r3-r7, pc} -_02084D14: - add r0, r5, #0x0 - mov r1, #0x9 - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0x50] - cmp r0, #0x64 - bge _02084D54 - add r0, r4, #0x0 - mov r1, #0x2d - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084DC2 - add r0, r4, #0x0 - mov r1, #0x38 - bl GetItemAttr_PreloadedItemData - add r2, r0, #0x0 - ldr r0, [sp, #0x88] - str r0, [sp, #0x0] - ldr r1, [sp, #0x50] - ldr r3, [sp, #0x8] - add r0, r5, #0x0 - bl FUN_0208508C - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x70 - add r0, r6, #0x0 - pop {r3-r7, pc} -_02084D54: - blt _02084D8A - cmp r0, #0xc8 - bge _02084D8A - add r0, r4, #0x0 - mov r1, #0x2e - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084DC2 - add r0, r4, #0x0 - mov r1, #0x39 - bl GetItemAttr_PreloadedItemData - add r2, r0, #0x0 - ldr r0, [sp, #0x88] - str r0, [sp, #0x0] - ldr r1, [sp, #0x50] - ldr r3, [sp, #0x8] - add r0, r5, #0x0 - bl FUN_0208508C - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x70 - add r0, r6, #0x0 - pop {r3-r7, pc} -_02084D8A: - cmp r0, #0xc8 - blt _02084DC2 - cmp r0, #0xff - bgt _02084DC2 - add r0, r4, #0x0 - mov r1, #0x2f - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02084DC2 - add r0, r4, #0x0 - mov r1, #0x3a - bl GetItemAttr_PreloadedItemData - add r2, r0, #0x0 - ldr r0, [sp, #0x88] - str r0, [sp, #0x0] - ldr r1, [sp, #0x50] - ldr r3, [sp, #0x8] - add r0, r5, #0x0 - bl FUN_0208508C - add r0, r4, #0x0 - bl FreeToHeap - add sp, #0x70 - add r0, r6, #0x0 - pop {r3-r7, pc} -_02084DC2: - add r0, r4, #0x0 - bl FreeToHeap - add r0, r6, #0x0 - add sp, #0x70 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02084DD0 -FUN_02084DD0: ; 0x02084DD0 - push {r3-r5, lr} - add r5, r1, #0x0 - add r1, r2, #0x0 - add r4, r3, #0x0 - bl GetPartyMonByIndex - ldr r1, [sp, #0x14] - add r3, sp, #0x0 - str r1, [sp, #0x0] - ldrh r3, [r3, #0x10] - add r1, r5, #0x0 - add r2, r4, #0x0 - bl FUN_02084810 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02084DF0 -FUN_02084DF0: ; 0x02084DF0 - push {r3-r7, lr} - add r6, r1, #0x0 - add r1, #0x36 - mov r2, #0x0 - add r5, r0, #0x0 - bl GetMonData - lsl r0, r0, #0x10 - lsr r7, r0, #0x10 - bne _02084E08 - mov r0, #0x0 - pop {r3-r7, pc} -_02084E08: - add r1, r6, #0x0 - add r0, r5, #0x0 - add r1, #0x3a - mov r2, #0x0 - bl GetMonData - lsl r0, r0, #0x18 - add r6, #0x3e - lsr r4, r0, #0x18 - add r0, r5, #0x0 - add r1, r6, #0x0 - mov r2, #0x0 - bl GetMonData - lsl r0, r0, #0x18 - lsr r1, r0, #0x18 - add r0, r7, #0x0 - bl WazaGetMaxPp - cmp r4, r0 - bhs _02084E36 - mov r0, #0x1 - b _02084E38 -_02084E36: - mov r0, #0x0 -_02084E38: - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02084E40 -FUN_02084E40: ; 0x02084E40 - push {r3-r7, lr} - sub sp, #0x8 - add r5, r1, #0x0 - add r4, r2, #0x0 - add r1, #0x36 - mov r2, #0x0 - add r6, r0, #0x0 - bl GetMonData - lsl r0, r0, #0x10 - lsr r7, r0, #0x10 - bne _02084E5E - add sp, #0x8 - mov r0, #0x0 - pop {r3-r7, pc} -_02084E5E: - add r0, r5, #0x0 - str r0, [sp, #0x0] - add r0, #0x3a - str r0, [sp, #0x0] - ldr r1, [sp, #0x0] - add r0, r6, #0x0 - mov r2, #0x0 - bl GetMonData - add r1, sp, #0x4 - strb r0, [r1, #0x0] - add r5, #0x3e - add r0, r6, #0x0 - add r1, r5, #0x0 - mov r2, #0x0 - bl GetMonData - add r1, r0, #0x0 - lsl r1, r1, #0x18 - add r0, r7, #0x0 - lsr r1, r1, #0x18 - bl WazaGetMaxPp - add r1, sp, #0x4 - ldrb r2, [r1, #0x0] - cmp r2, r0 - bhs _02084EB8 - cmp r4, #0x7f - bne _02084E9C - strb r0, [r1, #0x0] - b _02084EA8 -_02084E9C: - add r2, r2, r4 - strb r2, [r1, #0x0] - ldrb r2, [r1, #0x0] - cmp r2, r0 - bls _02084EA8 - strb r0, [r1, #0x0] -_02084EA8: - ldr r1, [sp, #0x0] - add r0, r6, #0x0 - add r2, sp, #0x4 - bl SetMonData - add sp, #0x8 - mov r0, #0x1 - pop {r3-r7, pc} -_02084EB8: - mov r0, #0x0 - add sp, #0x8 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02084EC0 -FUN_02084EC0: ; 0x02084EC0 - push {r4-r7, lr} - sub sp, #0xc - add r6, r2, #0x0 - add r4, r1, #0x0 - str r1, [sp, #0x0] - add r1, #0x3e - mov r2, #0x0 - add r5, r0, #0x0 - str r1, [sp, #0x0] - bl GetMonData - add r1, sp, #0x8 - strb r0, [r1, #0x0] - ldrb r0, [r1, #0x0] - cmp r0, #0x3 - bne _02084EE6 - add sp, #0xc - mov r0, #0x0 - pop {r4-r7, pc} -_02084EE6: - add r1, r4, #0x0 - add r0, r5, #0x0 - add r1, #0x36 - mov r2, #0x0 - bl GetMonData - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - mov r1, #0x0 - str r0, [sp, #0x4] - bl WazaGetMaxPp - cmp r0, #0x5 - bhs _02084F08 - add sp, #0xc - mov r0, #0x0 - pop {r4-r7, pc} -_02084F08: - add r4, #0x3a - add r0, r5, #0x0 - add r1, r4, #0x0 - mov r2, #0x0 - bl GetMonData - add r1, sp, #0x8 - strb r0, [r1, #0x1] - ldrb r1, [r1, #0x0] - ldr r0, [sp, #0x4] - bl WazaGetMaxPp - add r7, r0, #0x0 - add r0, sp, #0x8 - ldrb r0, [r0, #0x0] - add r0, r0, r6 - cmp r0, #0x3 - bls _02084F30 - mov r0, #0x3 - b _02084F34 -_02084F30: - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 -_02084F34: - add r1, sp, #0x8 - strb r0, [r1, #0x0] - ldrb r1, [r1, #0x0] - ldr r0, [sp, #0x4] - bl WazaGetMaxPp - add r1, sp, #0x8 - ldrb r2, [r1, #0x1] - add r0, r2, r0 - sub r0, r0, r7 - strb r0, [r1, #0x1] - ldr r1, [sp, #0x0] - add r0, r5, #0x0 - add r2, sp, #0x8 - bl SetMonData - add r2, sp, #0x8 - add r0, r5, #0x0 - add r1, r4, #0x0 - add r2, #0x1 - bl SetMonData - mov r0, #0x1 - add sp, #0xc - pop {r4-r7, pc} - .balign 4 - - thumb_func_start FUN_02084F68 -FUN_02084F68: ; 0x02084F68 - push {r0-r3} - push {r3, lr} - cmp r2, #0x1 - bne _02084F74 - mov r3, #0x1 - b _02084F8A -_02084F74: - cmp r3, #0xff - bne _02084F7C - add r3, r2, #0x0 - b _02084F8A -_02084F7C: - cmp r3, #0xfe - bne _02084F84 - lsr r3, r2, #0x1 - b _02084F8A -_02084F84: - cmp r3, #0xfd - bne _02084F8A - lsr r3, r2, #0x2 -_02084F8A: - ldr r1, [sp, #0xc] - add r1, r1, r3 - cmp r1, r2 - bls _02084F96 - str r2, [sp, #0xc] - b _02084F98 -_02084F96: - str r1, [sp, #0xc] -_02084F98: - mov r1, #0xa2 - add r2, sp, #0xc - bl SetMonData - pop {r3} - pop {r3} - add sp, #0x10 - bx r3 - - thumb_func_start FUN_02084FA8 -FUN_02084FA8: ; 0x02084FA8 - push {r3-r4} - cmp r0, #0x0 - bne _02084FBA - cmp r2, #0x0 - bge _02084FBA - mov r0, #0x0 - mvn r0, r0 - pop {r3-r4} - bx lr -_02084FBA: - cmp r0, #0x64 - blt _02084FCA - cmp r2, #0x0 - ble _02084FCA - mov r0, #0x0 - mvn r0, r0 - pop {r3-r4} - bx lr -_02084FCA: - ldr r3, _02084FFC ; =0x000001FE - add r4, r0, r1 - cmp r4, r3 - blt _02084FDE - cmp r2, #0x0 - ble _02084FDE - mov r0, #0x0 - mvn r0, r0 - pop {r3-r4} - bx lr -_02084FDE: - add r0, r0, r2 - cmp r0, #0x64 - ble _02084FE8 - mov r0, #0x64 - b _02084FEE -_02084FE8: - cmp r0, #0x0 - bge _02084FEE - mov r0, #0x0 -_02084FEE: - ldr r2, _02084FFC ; =0x000001FE - add r3, r0, r1 - cmp r3, r2 - ble _02084FF8 - sub r0, r2, r1 -_02084FF8: - pop {r3-r4} - bx lr - .balign 4 -_02084FFC: .word 0x000001FE - - thumb_func_start FUN_02085000 -FUN_02085000: ; 0x02085000 - push {r4, lr} - add r4, r1, #0x0 - mov r1, #0x9 - mov r2, #0x0 - bl GetMonData - cmp r0, #0xff - blt _02085014 - mov r0, #0x0 - pop {r4, pc} -_02085014: - cmp r0, #0x64 - bge _02085038 - add r0, r4, #0x0 - mov r1, #0x2d - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02085034 - add r0, r4, #0x0 - mov r1, #0x38 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - ble _02085034 - mov r0, #0x1 - pop {r4, pc} -_02085034: - mov r0, #0x0 - pop {r4, pc} -_02085038: - blt _0208505E - cmp r0, #0xc8 - bge _0208505E - add r0, r4, #0x0 - mov r1, #0x2e - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _0208505A - add r0, r4, #0x0 - mov r1, #0x39 - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - ble _0208505A - mov r0, #0x1 - pop {r4, pc} -_0208505A: - mov r0, #0x0 - pop {r4, pc} -_0208505E: - cmp r0, #0xc8 - blt _02085086 - cmp r0, #0xff - bge _02085086 - add r0, r4, #0x0 - mov r1, #0x2f - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - beq _02085082 - add r0, r4, #0x0 - mov r1, #0x3a - bl GetItemAttr_PreloadedItemData - cmp r0, #0x0 - ble _02085082 - mov r0, #0x1 - pop {r4, pc} -_02085082: - mov r0, #0x0 - pop {r4, pc} -_02085086: - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_0208508C -FUN_0208508C: ; 0x0208508C - push {r0-r3} - push {r4-r6, lr} - add r4, r1, #0x0 - add r5, r0, #0x0 - add r6, r3, #0x0 - cmp r4, #0xff - bne _020850AA - ldr r0, [sp, #0x18] - cmp r0, #0x0 - ble _020850AA - mov r0, #0x0 - pop {r4-r6} - pop {r3} - add sp, #0x10 - bx r3 -_020850AA: - cmp r4, #0x0 - bne _020850BE - ldr r0, [sp, #0x18] - cmp r0, #0x0 - bge _020850BE - mov r0, #0x0 - pop {r4-r6} - pop {r3} - add sp, #0x10 - bx r3 -_020850BE: - ldr r0, [sp, #0x18] - cmp r0, #0x0 - ble _02085114 - add r0, r5, #0x0 - mov r1, #0x6 - mov r2, #0x0 - bl GetMonData - lsl r0, r0, #0x10 - ldr r2, [sp, #0x20] - lsr r0, r0, #0x10 - mov r1, #0x1 - bl GetItemAttr - cmp r0, #0x34 - bne _020850EC - ldr r1, [sp, #0x18] - mov r0, #0x96 - mul r0, r1 - mov r1, #0x64 - bl _s32_div_f - str r0, [sp, #0x18] -_020850EC: - add r0, r5, #0x0 - mov r1, #0x9a - mov r2, #0x0 - bl GetMonData - cmp r0, #0xb - bne _02085100 - ldr r0, [sp, #0x18] - add r0, r0, #0x1 - str r0, [sp, #0x18] -_02085100: - add r0, r5, #0x0 - mov r1, #0x97 - mov r2, #0x0 - bl GetMonData - cmp r6, r0 - bne _02085114 - ldr r0, [sp, #0x18] - add r0, r0, #0x1 - str r0, [sp, #0x18] -_02085114: - ldr r0, [sp, #0x18] - add r0, r0, r4 - str r0, [sp, #0x18] - cmp r0, #0xff - ble _02085122 - mov r0, #0xff - str r0, [sp, #0x18] -_02085122: - ldr r0, [sp, #0x18] - cmp r0, #0x0 - bge _0208512C - mov r0, #0x0 - str r0, [sp, #0x18] -_0208512C: - add r0, r5, #0x0 - mov r1, #0x9 - add r2, sp, #0x18 - bl SetMonData - mov r0, #0x1 - pop {r4-r6} - pop {r3} - add sp, #0x10 - bx r3 - - thumb_func_start FUN_02085140 -FUN_02085140: ; 0x02085140 - push {r4-r7, lr} - sub sp, #0xc - str r0, [sp, #0x0] - bl GetPartyCount - mov r7, #0x0 - str r0, [sp, #0x4] - cmp r0, #0x0 - ble _020851B4 - mov r6, #0x7f -_02085154: - ldr r0, [sp, #0x0] - add r1, r7, #0x0 - bl GetPartyMonByIndex - mov r1, #0xab - mov r2, #0x0 - add r5, r0, #0x0 - bl GetMonData - cmp r0, #0x0 - beq _020851AC - add r0, r5, #0x0 - mov r1, #0xa3 - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0x8] - add r0, r5, #0x0 - mov r1, #0xa2 - add r2, sp, #0x8 - bl SetMonData - mov r0, #0x0 - str r0, [sp, #0x8] - add r0, r5, #0x0 - mov r1, #0x9f - add r2, sp, #0x8 - bl SetMonData - mov r4, #0x0 -_02085190: - add r0, r5, #0x0 - add r1, r4, #0x0 - bl FUN_02084DF0 - cmp r0, #0x1 - bne _020851A6 - add r0, r5, #0x0 - add r1, r4, #0x0 - add r2, r6, #0x0 - bl FUN_02084E40 -_020851A6: - add r4, r4, #0x1 - cmp r4, #0x4 - blt _02085190 -_020851AC: - ldr r0, [sp, #0x4] - add r7, r7, #0x1 - cmp r7, r0 - blt _02085154 -_020851B4: - add sp, #0xc - pop {r4-r7, pc} diff --git a/arm9/global.inc b/arm9/global.inc index 96c2b6be..65ecb0e3 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -1476,9 +1476,9 @@ .extern Sav2_PlayerData_GetCoinsAddr .extern Sav2_PlayerData_GetIGTAddr .extern PlayerProfile_sizeof -.extern PlayerProfile_init +.extern PlayerProfile_new .extern PlayerProfile_Copy -.extern PlayerProfile_Clear +.extern PlayerProfile_init .extern CopyPlayerName .extern PlayerName_StringToFlat .extern PlayerProfile_GetNamePtr @@ -1494,18 +1494,18 @@ .extern PlayerProfile_CountBadges .extern PlayerProfile_GetMoney .extern PlayerProfile_SetMoney -.extern FUN_02023A28 -.extern FUN_02023A2C +.extern PlayerProfile_GetAvatar +.extern PlayerProfile_SetAvatar .extern PlayerProfile_AddMoney .extern PlayerProfile_SubMoney -.extern FUN_02023A68 -.extern FUN_02023A6C -.extern FUN_02023A70 -.extern FUN_02023A74 -.extern FUN_02023A78 -.extern FUN_02023A88 -.extern FUN_02023A90 -.extern FUN_02023A9C +.extern PlayerProfile_GetVersion +.extern PlayerProfile_SetVersion +.extern PlayerProfile_GetLanguage +.extern PlayerProfile_SetLanguage +.extern PlayerProfile_SetGameClearFlag +.extern PlayerProfile_GetGameClearFlag +.extern PlayerProfile_SetNatDexFlag +.extern PlayerProfile_GetNatDexFlag .extern PlayerProfile_NameAndOTIDMatchPlayer .extern FUN_02023AC4 .extern FUN_02023AC8 @@ -1517,27 +1517,27 @@ .extern FUN_02023BD4 .extern FUN_02023BE8 .extern FUN_02023C04 -.extern FUN_02023C40 -.extern FUN_02023C48 -.extern FUN_02023C74 -.extern FUN_02023C7C -.extern FUN_02023C80 -.extern FUN_02023C84 -.extern FUN_02023C8C -.extern FUN_02023C90 -.extern FUN_02023C98 -.extern FUN_02023CA0 -.extern FUN_02023CA8 -.extern FUN_02023CB8 -.extern FUN_02023CC0 -.extern FUN_02023CC8 -.extern FUN_02023CF0 -.extern FUN_02023D3C -.extern FUN_02023D58 -.extern FUN_02023D64 -.extern FUN_02023D6C -.extern FUN_02023D80 -.extern FUN_02024378 +.extern Sav2_DayCare_sizeof +.extern Sav2_DayCare_init +.extern Sav2_DayCare_GetMonX +.extern DayCareMon_GetBoxMon +.extern DayCareMon_GetExtras +.extern DayCareMon_GetSteps +.extern DayCareMail_GetCapsule +.extern Sav2_DayCare_GetEggPID +.extern Sav2_DayCare_GetEggCycleCounter +.extern DayCareMon_SetSteps +.extern DayCareMon_AddSteps +.extern Sav2_DayCare_SetEggPID +.extern Sav2_DayCare_SetEggCycleCounter +.extern Sav2_DayCare_MasudaCheck +.extern DayCareMon_Copy +.extern DayCareMon_Init +.extern Sav2_DayCare_get +.extern Sav2_Pokedex_sizeof +.extern Sav2_Pokedex_new +.extern Sav2_Pokedex_Copy +.extern Sav2_Pokedex_init .extern FUN_020243C8 .extern FUN_02024404 .extern FUN_02024440 @@ -1565,8 +1565,8 @@ .extern FUN_02024970 .extern FUN_0202498C .extern FUN_02024AF0 -.extern FUN_02024C84 -.extern FUN_02024CA4 +.extern Pokedex_SetNatDexFlag +.extern Pokedex_GetNatDexFlag .extern FUN_02024CC4 .extern FUN_02024CE0 .extern FUN_02024D00 @@ -2858,7 +2858,7 @@ .extern FUN_0203C2E0 .extern FUN_0203C2F0 .extern FUN_0203C300 -.extern FUN_0203C32C +.extern ScrCmd_halloffame .extern FUN_0203C33C .extern FUN_0203C368 .extern FUN_0203C3C8 @@ -2953,8 +2953,8 @@ .extern FUN_0203D834 .extern FUN_0203D868 .extern FUN_0203D874 -.extern FUN_0203D8A0 -.extern FUN_0203D8D0 +.extern ScrCmd_getplayergender +.extern ScrCmd_healparty .extern FUN_0203D8E8 .extern FUN_0203D8EC .extern FUN_0203D920 @@ -3478,7 +3478,7 @@ .extern FUN_020480E4 .extern FUN_0204837C .extern FUN_02048498 -.extern FUN_02048694 +.extern Special_EnterHallOfFame .extern FUN_020489DC .extern FUN_020489FC .extern FUN_02048C58 @@ -5296,10 +5296,10 @@ .extern FUN_02084098 .extern FUN_020842D0 .extern FUN_020842D8 -.extern FUN_020847F8 -.extern FUN_02084810 -.extern FUN_02084DD0 -.extern FUN_02085140 +.extern CanUseItemOnMonInParty +.extern UseItemOnPokemon +.extern UseItemOnMonInParty +.extern HealParty .extern FUN_020851B8 .extern FUN_020851DC .extern FUN_020851F8 @@ -6565,7 +6565,7 @@ .extern MOD05_021EC864 .extern MOD05_021ECD64 .extern MOD05_SetEggStats -.extern MOD05_021ED0CC +.extern MOD05_DayCare_GiveEggToPlayer .extern MOD05_021ED378 .extern MOD05_021ED49C .extern MOD05_021ED4E0 diff --git a/arm9/modules/05/asm/mod05_021D80E8.s b/arm9/modules/05/asm/mod05_021D80E8.s index f1a29149..946b25da 100644 --- a/arm9/modules/05/asm/mod05_021D80E8.s +++ b/arm9/modules/05/asm/mod05_021D80E8.s @@ -1765,7 +1765,7 @@ MOD05_021D8F38: ; 0x021D8F38 bl SavArray_PlayerParty_get add r5, r0, #0 ldr r0, [r4, #0xc] - bl FUN_02023D58 + bl Sav2_DayCare_get add r1, r5, #0 add r2, r4, #0 bl MOD05_021ED378 diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s index dabce6d4..2244fdd6 100644 --- a/arm9/modules/05/asm/module_05.s +++ b/arm9/modules/05/asm/module_05.s @@ -14321,8 +14321,8 @@ _021EC454: .word UNK05_021F7930 thumb_func_start MOD05_021EC458 MOD05_021EC458: ; 0x021EC458 push {r3, lr} - bl FUN_02023C74 - bl FUN_02023C7C + bl Sav2_DayCare_GetMonX + bl DayCareMon_GetBoxMon pop {r3, pc} thumb_func_start MOD05_021EC464 @@ -14335,8 +14335,8 @@ MOD05_021EC464: ; 0x021EC464 _021EC46E: add r0, r6, #0 add r1, r5, #0 - bl FUN_02023C74 - bl FUN_02023C7C + bl Sav2_DayCare_GetMonX + bl DayCareMon_GetBoxMon add r1, r7, #0 mov r2, #0 bl GetBoxMonData @@ -14367,8 +14367,8 @@ MOD05_021EC49C: ; 0x021EC49C _021EC4AA: add r0, r5, #0 add r1, r4, #0 - bl FUN_02023C74 - bl FUN_02023C7C + bl Sav2_DayCare_GetMonX + bl DayCareMon_GetBoxMon add r1, r6, #0 add r2, r7, #0 bl GetBoxMonData @@ -14410,10 +14410,10 @@ MOD05_021EC4F0: ; 0x021EC4F0 bl GetPartyMonByIndex add r4, r0, #0 add r0, r5, #0 - bl FUN_02023C80 + bl DayCareMon_GetExtras str r0, [sp, #8] add r0, r5, #0 - bl FUN_02023C7C + bl DayCareMon_GetBoxMon str r0, [sp, #4] add r0, r7, #0 bl Sav2_PlayerData_GetProfileAddr @@ -14428,7 +14428,7 @@ MOD05_021EC4F0: ; 0x021EC4F0 cmp r0, #0 beq _021EC544 ldr r0, [sp, #8] - bl FUN_02023C8C + bl DayCareMail_GetCapsule add r2, r0, #0 add r0, r4, #0 mov r1, #0xa9 @@ -14439,7 +14439,7 @@ _021EC544: bl FUN_02069BB4 add r0, r5, #0 mov r1, #0 - bl FUN_02023CA0 + bl DayCareMon_SetSteps ldr r1, [sp] add r0, r6, #0 bl RemoveMonFromParty @@ -14472,7 +14472,7 @@ MOD05_021EC57C: ; 0x021EC57C bl MOD05_021EC49C add r1, r0, #0 add r0, r4, #0 - bl FUN_02023C74 + bl Sav2_DayCare_GetMonX add r2, r0, #0 add r0, r5, #0 add r1, r6, #0 @@ -14486,17 +14486,17 @@ MOD05_021EC5B0: ; 0x021EC5B0 push {r3, r4, r5, r6, r7, lr} add r4, r0, #0 mov r1, #0 - bl FUN_02023C74 + bl Sav2_DayCare_GetMonX add r5, r0, #0 add r0, r4, #0 mov r1, #1 - bl FUN_02023C74 + bl Sav2_DayCare_GetMonX add r4, r0, #0 add r0, r5, #0 - bl FUN_02023C7C + bl DayCareMon_GetBoxMon add r6, r0, #0 add r0, r4, #0 - bl FUN_02023C7C + bl DayCareMon_GetBoxMon add r7, r0, #0 add r0, r6, #0 mov r1, #5 @@ -14512,9 +14512,9 @@ MOD05_021EC5B0: ; 0x021EC5B0 beq _021EC600 add r0, r5, #0 add r1, r4, #0 - bl FUN_02023CF0 + bl DayCareMon_Copy add r0, r4, #0 - bl FUN_02023D3C + bl DayCareMon_Init _021EC600: pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 @@ -14582,10 +14582,10 @@ MOD05_021EC668: ; 0x021EC668 bl AllocMonZeroed add r4, r0, #0 add r0, r6, #0 - bl FUN_02023C7C + bl DayCareMon_GetBoxMon add r5, r0, #0 add r0, r6, #0 - bl FUN_02023C80 + bl DayCareMon_GetExtras str r0, [sp, #4] add r0, r7, #0 mov r1, #0 @@ -14612,7 +14612,7 @@ MOD05_021EC668: ; 0x021EC668 bl GetMonData str r0, [sp, #8] add r0, r6, #0 - bl FUN_02023C84 + bl DayCareMon_GetSteps ldr r1, [sp, #8] add r2, sp, #8 add r0, r1, r0 @@ -14628,7 +14628,7 @@ _021EC6E0: cmp r0, #0 beq _021EC6FA ldr r0, [sp, #4] - bl FUN_02023C8C + bl DayCareMail_GetCapsule add r2, r0, #0 add r0, r4, #0 mov r1, #0xa9 @@ -14641,7 +14641,7 @@ _021EC6FA: bl ZeroBoxMonData add r0, r6, #0 mov r1, #0 - bl FUN_02023CA0 + bl DayCareMon_SetSteps add r0, r4, #0 bl FreeToHeap add r0, r7, #0 @@ -14656,7 +14656,7 @@ MOD05_021EC71C: ; 0x021EC71C add r4, r1, #0 add r0, r6, #0 add r1, r3, #0 - bl FUN_02023C74 + bl Sav2_DayCare_GetMonX add r1, r0, #0 add r0, r5, #0 add r2, r4, #0 @@ -14704,13 +14704,13 @@ MOD05_021EC744: ; 0x021EC744 MOD05_021EC78C: ; 0x021EC78C push {r4, r5, r6, lr} add r5, r0, #0 - bl FUN_02023C7C + bl DayCareMon_GetBoxMon add r6, r0, #0 bl CalcBoxMonLevel lsl r0, r0, #0x18 lsr r4, r0, #0x18 add r0, r5, #0 - bl FUN_02023C84 + bl DayCareMon_GetSteps add r1, r0, #0 add r0, r6, #0 bl MOD05_021EC744 @@ -14723,10 +14723,10 @@ MOD05_021EC78C: ; 0x021EC78C MOD05_021EC7B4: ; 0x021EC7B4 push {r3, r4, r5, lr} add r5, r0, #0 - bl FUN_02023C7C + bl DayCareMon_GetBoxMon add r4, r0, #0 add r0, r5, #0 - bl FUN_02023C84 + bl DayCareMon_GetSteps add r1, r0, #0 add r0, r4, #0 bl MOD05_021EC744 @@ -14741,7 +14741,7 @@ MOD05_021EC7D4: ; 0x021EC7D4 sub sp, #8 add r4, r0, #0 add r5, r1, #0 - bl FUN_02023C7C + bl DayCareMon_GetBoxMon add r6, r0, #0 add r0, r4, #0 bl MOD05_021EC78C @@ -14770,7 +14770,7 @@ MOD05_021EC810: ; 0x021EC810 sub sp, #8 add r4, r0, #0 add r5, r1, #0 - bl FUN_02023C7C + bl DayCareMon_GetBoxMon add r6, r0, #0 add r0, r4, #0 bl MOD05_021EC78C @@ -14801,7 +14801,7 @@ MOD05_021EC810: ; 0x021EC810 MOD05_021EC854: ; 0x021EC854 push {r4, lr} add r4, r2, #0 - bl FUN_02023C74 + bl Sav2_DayCare_GetMonX add r1, r4, #0 bl MOD05_021EC810 pop {r4, pc} @@ -14810,9 +14810,9 @@ MOD05_021EC854: ; 0x021EC854 MOD05_021EC864: ; 0x021EC864 push {r3, r4, r5, lr} add r5, r2, #0 - bl FUN_02023C74 + bl Sav2_DayCare_GetMonX add r4, r0, #0 - bl FUN_02023C7C + bl DayCareMon_GetBoxMon mov r1, #5 mov r2, #0 bl GetBoxMonData @@ -14935,7 +14935,7 @@ MOD05_021EC944: ; 0x021EC944 bl MTRandom add r1, r0, #0 ldr r0, [sp] - bl FUN_02023CB8 + bl Sav2_DayCare_SetEggPID pop {r3, r4, r5, r6, r7, pc} _021EC960: ldr r0, [sp] @@ -14962,7 +14962,7 @@ _021EC98A: _021EC990: ldr r0, [sp] add r1, r4, #0 - bl FUN_02023CB8 + bl Sav2_DayCare_SetEggPID pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 @@ -15467,10 +15467,10 @@ MOD05_021ECD64: ; 0x021ECD64 push {r4, lr} add r4, r0, #0 mov r1, #0 - bl FUN_02023CB8 + bl Sav2_DayCare_SetEggPID add r0, r4, #0 mov r1, #0 - bl FUN_02023CC0 + bl Sav2_DayCare_SetEggCycleCounter pop {r4, pc} thumb_func_start MOD05_021ECD78 @@ -15628,7 +15628,7 @@ _021ECE8C: cmp r4, #0x1d bne _021ECEBC ldr r0, [sp] - bl FUN_02023C90 + bl Sav2_DayCare_GetEggPID mov r1, #2 lsl r1, r1, #0xe tst r0, r1 @@ -15642,7 +15642,7 @@ _021ECEBC: cmp r4, r0 bne _021ECED6 ldr r0, [sp] - bl FUN_02023C90 + bl Sav2_DayCare_GetEggPID mov r1, #2 lsl r1, r1, #0xe tst r0, r1 @@ -15794,8 +15794,8 @@ _021ECFEE: .balign 4, 0 _021ED008: .word 0x000001EE - thumb_func_start MOD05_021ED00C -MOD05_021ED00C: ; 0x021ED00C + thumb_func_start MOD05_DayCare_CreateEgg +MOD05_DayCare_CreateEgg: ; 0x021ED00C push {r3, r4, r5, r6, r7, lr} sub sp, #0x18 str r1, [sp, #0x10] @@ -15808,10 +15808,10 @@ MOD05_021ED00C: ; 0x021ED00C add r1, sp, #0x14 strb r0, [r1] add r0, r5, #0 - bl FUN_02023C90 + bl Sav2_DayCare_GetEggPID add r4, r0, #0 add r0, r5, #0 - bl FUN_02023CC8 + bl Sav2_DayCare_MasudaCheck cmp r0, #0 beq _021ED05E add r0, r6, #0 @@ -15881,8 +15881,8 @@ _021ED05E: .balign 4, 0 _021ED0C8: .word 0x000001EE - thumb_func_start MOD05_021ED0CC -MOD05_021ED0CC: ; 0x021ED0CC + thumb_func_start MOD05_DayCare_GiveEggToPlayer +MOD05_DayCare_GiveEggToPlayer: ; 0x021ED0CC push {r4, r5, r6, r7, lr} sub sp, #0x14 add r5, r0, #0 @@ -15915,7 +15915,7 @@ MOD05_021ED0CC: ; 0x021ED0CC add r0, r4, #0 add r1, r6, #0 add r2, r5, #0 - bl MOD05_021ED00C + bl MOD05_DayCare_CreateEgg add r0, r4, #0 add r1, r5, #0 bl MOD05_021EC9D4 @@ -16251,9 +16251,9 @@ _021ED38E: beq _021ED3AC ldr r0, [sp] add r1, r4, #0 - bl FUN_02023C74 + bl Sav2_DayCare_GetMonX mov r1, #1 - bl FUN_02023CA8 + bl DayCareMon_AddSteps add r6, r6, #1 _021ED3AC: add r4, r4, #1 @@ -16261,15 +16261,15 @@ _021ED3AC: cmp r4, #2 blo _021ED38E ldr r0, [sp] - bl FUN_02023C90 + bl Sav2_DayCare_GetEggPID cmp r0, #0 bne _021ED3F8 cmp r6, #2 bne _021ED3F8 ldr r0, [sp] mov r1, #1 - bl FUN_02023C74 - bl FUN_02023C84 + bl Sav2_DayCare_GetMonX + bl DayCareMon_GetSteps lsl r0, r0, #0x18 lsr r0, r0, #0x18 cmp r0, #0xff @@ -16289,11 +16289,11 @@ _021ED3AC: bl MOD05_021EC944 _021ED3F8: ldr r0, [sp] - bl FUN_02023C98 + bl Sav2_DayCare_GetEggCycleCounter add r4, r0, #0 ldr r0, [sp] add r1, r4, #1 - bl FUN_02023CC0 + bl Sav2_DayCare_SetEggCycleCounter ldr r0, [sp, #4] bl MOD05_021ED334 add r1, r4, #1 @@ -16301,7 +16301,7 @@ _021ED3F8: bne _021ED490 ldr r0, [sp] mov r1, #0 - bl FUN_02023CC0 + bl Sav2_DayCare_SetEggCycleCounter add r0, r7, #0 bl MOD05_021ED190 add r6, r0, #0 @@ -16448,7 +16448,7 @@ MOD05_021ED52C: ; 0x021ED52C add r7, r2, #0 add r1, r6, #0 str r3, [sp, #8] - bl FUN_02023C74 + bl Sav2_DayCare_GetMonX str r0, [sp, #0xc] add r0, r5, #0 add r1, r6, #0 @@ -16459,7 +16459,7 @@ MOD05_021ED52C: ; 0x021ED52C add r2, r5, #0 bl BufferBoxMonNickname ldr r0, [sp, #0xc] - bl FUN_02023C84 + bl DayCareMon_GetSteps add r1, r0, #0 add r0, r5, #0 bl MOD05_021EC744 @@ -16531,7 +16531,7 @@ MOD05_021ED5C4: ; 0x021ED5C4 MOD05_021ED5EC: ; 0x021ED5EC push {r4, lr} add r4, r0, #0 - bl FUN_02023C90 + bl Sav2_DayCare_GetEggPID cmp r0, #0 beq _021ED5FC mov r0, #1 @@ -22038,7 +22038,7 @@ _021F000E: bl FUN_020286EC add r7, r0, #0 mov r0, #4 - bl PlayerProfile_init + bl PlayerProfile_new add r6, r0, #0 add r0, r7, #0 add r1, r4, #0 diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s index fd961cc0..dd12992e 100644 --- a/arm9/modules/06/asm/module_06.s +++ b/arm9/modules/06/asm/module_06.s @@ -5044,7 +5044,7 @@ _0223BBDA: add r0, r5, #0 bl ScriptEnvironment_GetSav2Ptr bl FUN_02024DA0 - bl FUN_02024CA4 + bl Pokedex_GetNatDexFlag add r6, r0, #0 add r0, r4, #0 add r1, sp, #0x64 @@ -5481,7 +5481,7 @@ _0223BF7E: add r0, r5, #0 bl ScriptEnvironment_GetSav2Ptr bl FUN_02024DA0 - bl FUN_02024CA4 + bl Pokedex_GetNatDexFlag add r6, r0, #0 add r0, r4, #0 add r1, sp, #0x5c @@ -5791,7 +5791,7 @@ _0223C222: add r0, r5, #0 bl ScriptEnvironment_GetSav2Ptr bl FUN_02024DA0 - bl FUN_02024CA4 + bl Pokedex_GetNatDexFlag add r6, r0, #0 ldr r0, [sp, #0x14] add r1, sp, #0x5c @@ -11448,7 +11448,7 @@ _0223EF28: ldr r1, [r1] str r0, [r1, #0x78] mov r0, #4 - bl PlayerProfile_init + bl PlayerProfile_new ldr r1, _0223EFF4 ; =0x02252420 ldr r2, [r1] str r0, [r2, #0x7c] @@ -23654,7 +23654,7 @@ _02245098: add r0, r5, #0 bl ScriptEnvironment_GetSav2Ptr bl FUN_02024DA0 - bl FUN_02024CA4 + bl Pokedex_GetNatDexFlag add r6, r0, #0 ldr r0, [r5, #0xc] bl FUN_0202A9B0 @@ -31000,9 +31000,9 @@ _0224886C: bl AllocMonZeroed str r0, [r4, #4] add r0, r5, #0 - bl PlayerProfile_init + bl PlayerProfile_new str r0, [r4, #8] - bl PlayerProfile_Clear + bl PlayerProfile_init add r0, r5, #0 add r1, r6, #4 bl GetInGameTradeMonOrPartnerName diff --git a/arm9/modules/11/asm/module_11_thumb1.s b/arm9/modules/11/asm/module_11_thumb1.s index b5cc45b0..bbcb304d 100644 --- a/arm9/modules/11/asm/module_11_thumb1.s +++ b/arm9/modules/11/asm/module_11_thumb1.s @@ -1185,7 +1185,7 @@ _0222DFEC: lsl r1, r1, #4 ldr r0, [r4, #0x60] ldr r1, [r7, r1] - bl FUN_02023D80 + bl Sav2_Pokedex_Copy ldr r0, [r4, #0x60] bl FreeToHeap mov r0, #0x45 @@ -1741,7 +1741,7 @@ MOD11_0222E520: ; 0x0222E520 add r5, r1, #0 _0222E532: mov r0, #5 - bl PlayerProfile_init + bl PlayerProfile_new add r1, r0, #0 add r0, r5, #0 str r1, [r6, #0x48] @@ -1767,14 +1767,14 @@ _0222E532: ldr r1, [r4, #0x58] bl Sav2_Bag_copy mov r0, #5 - bl FUN_02023D6C + bl Sav2_Pokedex_new str r0, [r4, #0x60] mov r1, #0x11 ldr r0, [sp, #4] lsl r1, r1, #4 ldr r0, [r0, r1] ldr r1, [r4, #0x60] - bl FUN_02023D80 + bl Sav2_Pokedex_Copy mov r1, #0x45 lsl r1, r1, #2 ldr r0, [sp, #4] diff --git a/arm9/modules/16/asm/module_16.s b/arm9/modules/16/asm/module_16.s index c3c739e5..14a64b6c 100644 --- a/arm9/modules/16/asm/module_16.s +++ b/arm9/modules/16/asm/module_16.s @@ -4573,7 +4573,7 @@ MOD16_021D9798: ; 0x021D9798 ldr r0, _021D9890 ; =0x00001744 str r1, [r5, r0] ldr r0, [r5] - bl FUN_02024CA4 + bl Pokedex_GetNatDexFlag cmp r0, #0 beq _021D97C2 mov r1, #1 @@ -4630,7 +4630,7 @@ _021D980C: add r0, r5, #0 bl MOD16_021D9A78 ldr r0, [r4, #4] - bl FUN_02023A68 + bl PlayerProfile_GetVersion ldr r1, _021D989C ; =0x0000174C str r0, [r5, r1] ldr r0, [r4, #4] @@ -4955,11 +4955,11 @@ _021D9A50: .word FUN_02024970 thumb_func_start MOD16_021D9A54 MOD16_021D9A54: ; 0x021D9A54 - ldr r3, _021D9A5C ; =FUN_02024CA4 + ldr r3, _021D9A5C ; =Pokedex_GetNatDexFlag ldr r0, [r0] bx r3 nop -_021D9A5C: .word FUN_02024CA4 +_021D9A5C: .word Pokedex_GetNatDexFlag thumb_func_end MOD16_021D9A54 thumb_func_start MOD16_021D9A60 diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s index 09b24dc9..bf7fde6d 100644 --- a/arm9/modules/18/asm/module_18.s +++ b/arm9/modules/18/asm/module_18.s @@ -3028,7 +3028,7 @@ MOD18_0223AE88: ; 0x0223AE88 add r4, r0, #0 add r0, r6, #0 bl FUN_02024DA0 - bl FUN_02024CA4 + bl Pokedex_GetNatDexFlag mov r1, #0 cmp r0, #0 beq _0223AEB6 @@ -38229,7 +38229,7 @@ MOD18_0224C0AC: ; 0x0224C0AC add r7, r0, #0 add r0, r5, #0 bl FUN_02024DA0 - bl FUN_02024CA4 + bl Pokedex_GetNatDexFlag str r0, [sp, #4] add r0, r7, #0 bl FUN_02025D40 diff --git a/arm9/modules/23/asm/module_23.s b/arm9/modules/23/asm/module_23.s index 56b78aaf..a7bb626a 100644 --- a/arm9/modules/23/asm/module_23.s +++ b/arm9/modules/23/asm/module_23.s @@ -1023,7 +1023,7 @@ MOD23_02254F94: ; 0x02254F94 bl MOD20_02252C40 bl FUN_02024DA0 add r5, r0, #0 - bl FUN_02024CA4 + bl Pokedex_GetNatDexFlag cmp r0, #0 beq _02254FCE lsl r0, r4, #0x10 diff --git a/arm9/modules/35/asm/module_35.s b/arm9/modules/35/asm/module_35.s index 7b347ca5..45cab8d3 100644 --- a/arm9/modules/35/asm/module_35.s +++ b/arm9/modules/35/asm/module_35.s @@ -48,7 +48,7 @@ MOD35_0225489C: ; 0x0225489C add r0, r4, #0 add r6, r2, #0 bl MOD20_02252C40 - bl FUN_02023D58 + bl Sav2_DayCare_get str r0, [r5, #0x30] ldr r1, [r5, #0x30] add r0, r5, #4 @@ -301,7 +301,7 @@ MOD35_02254A50: ; 0x02254A50 ldr r1, [sp] strb r0, [r1] ldr r0, [sp, #4] - bl FUN_02023C90 + bl Sav2_DayCare_GetEggPID ldr r1, [sp] mov r7, #0 strb r0, [r1, #1] @@ -314,9 +314,9 @@ MOD35_02254A50: ; 0x02254A50 _02254A7A: ldr r0, [sp, #4] add r1, r7, #0 - bl FUN_02023C74 + bl Sav2_DayCare_GetMonX str r0, [sp, #8] - bl FUN_02023C7C + bl DayCareMon_GetBoxMon add r4, r0, #0 bl AcquireBoxMonLock str r0, [sp, #0xc] diff --git a/arm9/modules/51/asm/module_51.s b/arm9/modules/51/asm/module_51.s index c28270a3..72a21ef0 100644 --- a/arm9/modules/51/asm/module_51.s +++ b/arm9/modules/51/asm/module_51.s @@ -1834,7 +1834,7 @@ MOD51_02255690: ; 0x02255690 cmp r0, #0 bne _02255714 mov r0, #4 - bl PlayerProfile_init + bl PlayerProfile_new str r0, [sp, #4] mov r6, #0 _022556AA: diff --git a/arm9/modules/52/asm/module_52.s b/arm9/modules/52/asm/module_52.s index 829ee276..3fac1c6f 100644 --- a/arm9/modules/52/asm/module_52.s +++ b/arm9/modules/52/asm/module_52.s @@ -198,7 +198,7 @@ _021D7656: lsl r1, r1, #0x18 add r0, r4, #0 lsr r1, r1, #0x18 - bl FUN_02023A2C + bl PlayerProfile_SetAvatar add r0, r5, #0 bl FUN_02024ECC ldr r1, [sp] diff --git a/arm9/modules/54/asm/module_54.s b/arm9/modules/54/asm/module_54.s index 2c2aad31..0acfed98 100644 --- a/arm9/modules/54/asm/module_54.s +++ b/arm9/modules/54/asm/module_54.s @@ -3141,7 +3141,7 @@ _021D8D9E: mov r0, #0xd9 lsl r0, r0, #2 ldr r0, [r6, r0] - bl FUN_02023A28 + bl PlayerProfile_GetAvatar str r0, [sp, #0x10] bl FUN_02031190 cmp r4, r0 diff --git a/arm9/modules/55/asm/module_55.s b/arm9/modules/55/asm/module_55.s index 78542890..eb124639 100644 --- a/arm9/modules/55/asm/module_55.s +++ b/arm9/modules/55/asm/module_55.s @@ -1974,7 +1974,7 @@ MOD55_021D84C8: ; 0x021D84C8 cmp r0, #0 beq _021D8534 mov r0, #0x34 - bl PlayerProfile_init + bl PlayerProfile_new add r4, r0, #0 add r0, r5, #0 add r0, #0xd4 @@ -3314,7 +3314,7 @@ _021D8F1A: add r0, r5, r1 bl FUN_02019220 mov r0, #0x34 - bl PlayerProfile_init + bl PlayerProfile_new mov r1, #0xf2 lsl r1, r1, #2 ldrb r1, [r5, r1] @@ -3504,7 +3504,7 @@ MOD55_021D90D8: ; 0x021D90D8 orr r0, r1 beq _021D9170 mov r0, #0x34 - bl PlayerProfile_init + bl PlayerProfile_new mov r1, #0xf2 lsl r1, r1, #2 ldrb r1, [r5, r1] @@ -4166,7 +4166,7 @@ _021D969A: mov r1, #0 bl FUN_02019620 mov r0, #0x34 - bl PlayerProfile_init + bl PlayerProfile_new str r0, [sp, #0x20] ldr r0, [sp, #0x1c] ldr r1, [sp, #0x18] @@ -4406,7 +4406,7 @@ _021D987C: add r3, r1, #0 bl AddTextPrinterParameterized2 mov r0, #0x34 - bl PlayerProfile_init + bl PlayerProfile_new add r5, r0, #0 ldr r0, [sp, #0x1c] ldr r1, [sp, #0x18] @@ -5204,7 +5204,7 @@ MOD55_021D9F8C: ; 0x021D9F8C add r5, r0, #0 mov r0, #0x34 add r6, r1, #0 - bl PlayerProfile_init + bl PlayerProfile_new add r4, r0, #0 ldr r0, [r5, #8] bl FUN_020286EC diff --git a/arm9/modules/56/asm/module_56.s b/arm9/modules/56/asm/module_56.s index 48a760dd..775315bc 100644 --- a/arm9/modules/56/asm/module_56.s +++ b/arm9/modules/56/asm/module_56.s @@ -2022,15 +2022,15 @@ _02212E52: blt _02212E52 _02212E82: ldr r0, [sp, #0x14] - bl FUN_02023A68 + bl PlayerProfile_GetVersion ldr r1, [r5, #4] strb r0, [r1, #0x18] ldr r0, [sp, #0x14] - bl FUN_02023A70 + bl PlayerProfile_GetLanguage ldr r1, [r5, #4] strb r0, [r1, #0x19] ldr r0, [sp, #0x10] - bl FUN_02024CA4 + bl Pokedex_GetNatDexFlag ldr r1, [r5, #4] strb r0, [r1, #0x1a] ldr r1, [r5, #4] @@ -2040,7 +2040,7 @@ _02212E82: mov r1, #0 strb r1, [r0, #0x1c] ldr r0, [sp, #0x14] - bl FUN_02023A28 + bl PlayerProfile_GetAvatar ldr r1, [r5, #4] strb r0, [r1, #0x1d] ldr r0, [sp, #0x14] @@ -7098,7 +7098,7 @@ _02215532: add r3, r1, #0 bl AddTextPrinterParameterized2 mov r0, #0x36 - bl PlayerProfile_init + bl PlayerProfile_new add r6, r0, #0 ldr r0, [r5] add r1, r4, #0 @@ -8431,7 +8431,7 @@ MOD56_022160E4: ; 0x022160E4 cmp r6, r0 beq _0221611C mov r0, #0x36 - bl PlayerProfile_init + bl PlayerProfile_new add r4, r0, #0 ldr r0, [r5] add r1, r6, #0 diff --git a/arm9/modules/71/asm/module_71.s b/arm9/modules/71/asm/module_71.s index b61bff20..4f418110 100644 --- a/arm9/modules/71/asm/module_71.s +++ b/arm9/modules/71/asm/module_71.s @@ -3751,10 +3751,10 @@ MOD71_0222F4BC: ; 0x0222F4BC bl PlayerProfile_GetTrainerID str r0, [r4, #0x10] add r0, r6, #0 - bl FUN_02023A70 + bl PlayerProfile_GetLanguage strb r0, [r4, #0x14] add r0, r6, #0 - bl FUN_02023A68 + bl PlayerProfile_GetVersion strb r0, [r4, #0x15] add r0, r6, #0 bl PlayerProfile_GetTrainerGender @@ -4348,7 +4348,7 @@ _0222F9A0: ldr r0, _0222FA24 ; =0x00003670 str r4, [r5, r0] mov r0, #0x1a - bl PlayerProfile_init + bl PlayerProfile_new add r6, r0, #0 ldr r0, _0222FA28 ; =0x00003694 add r1, r4, #0 diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s index d45b6251..196c959f 100644 --- a/arm9/modules/80/asm/module_80.s +++ b/arm9/modules/80/asm/module_80.s @@ -13612,7 +13612,7 @@ _022342BC: strb r0, [r5, r1] ldr r0, [r4] ldr r0, [r0, #0x1c] - bl FUN_02023A28 + bl PlayerProfile_GetAvatar mov r1, #0x12 lsl r1, r1, #4 strb r0, [r5, r1] @@ -13746,7 +13746,7 @@ MOD80_022343DC: ; 0x022343DC mov r6, #0 sub r7, r1, r0 add r0, r4, #0 - bl FUN_02024CA4 + bl Pokedex_GetNatDexFlag str r0, [sp, #0x14] ldr r0, _022344D8 ; =0x02237B50 ldrh r0, [r0, r5] @@ -17647,9 +17647,9 @@ MOD80_022361AC: ; 0x022361AC push {r3, r4, r5, lr} add r5, r0, #0 mov r0, #0x3e - bl PlayerProfile_init + bl PlayerProfile_new add r4, r0, #0 - bl PlayerProfile_Clear + bl PlayerProfile_init mov r1, #0x43 lsl r1, r1, #2 add r0, r4, #0 @@ -17658,11 +17658,11 @@ MOD80_022361AC: ; 0x022361AC ldr r1, _022361E0 ; =0x00000122 add r0, r4, #0 ldrb r1, [r5, r1] - bl FUN_02023A6C + bl PlayerProfile_SetVersion ldr r1, _022361E4 ; =0x00000123 add r0, r4, #0 ldrb r1, [r5, r1] - bl FUN_02023A74 + bl PlayerProfile_SetLanguage add r0, r4, #0 pop {r3, r4, r5, pc} .align 2, 0 diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s index c21879dd..fec76301 100644 --- a/arm9/modules/83/asm/module_83.s +++ b/arm9/modules/83/asm/module_83.s @@ -144,7 +144,7 @@ _0222D6BE: add r0, r4, #0 bl FUN_02016438 ldr r0, [r5, #8] - bl FUN_02024CA4 + bl Pokedex_GetNatDexFlag cmp r0, #0 beq _0222D6E6 bl MOD83_02236EA8 diff --git a/arm9/src/daycare.c b/arm9/src/daycare.c new file mode 100644 index 00000000..eff25151 --- /dev/null +++ b/arm9/src/daycare.c @@ -0,0 +1,114 @@ +#include "global.h" +#include "pokemon.h" +#include "seals.h" +#include "save_block_2.h" +#include "daycare.h" + +#pragma thumb on + +u32 Sav2_DayCare_sizeof(void) +{ + return sizeof(struct DayCare); +} + +void Sav2_DayCare_init(struct DayCare * daycare) +{ + memset(daycare, 0, sizeof(struct DayCare)); + ZeroBoxMonData(&daycare->mons[0].mon); + ZeroBoxMonData(&daycare->mons[1].mon); + daycare->egg_pid = 0; + daycare->egg_cycles = 0; +} + +struct DayCareMon * Sav2_DayCare_GetMonX(struct DayCare * daycare, s32 i) +{ + return &daycare->mons[i]; +} + +struct BoxPokemon * DayCareMon_GetBoxMon(struct DayCareMon * dcmon) +{ + return &dcmon->mon; +} + +struct DayCareMail * DayCareMon_GetExtras(struct DayCareMon * dcmon) +{ + return &dcmon->mail; +} + +u32 DayCareMon_GetSteps(struct DayCareMon * dcmon) +{ + return dcmon->steps; +} + +struct SealStruct * DayCareMail_GetCapsule(struct DayCareMail * dcmail) +{ + return &dcmail->seal; +} + +u32 Sav2_DayCare_GetEggPID(struct DayCare * daycare) +{ + return daycare->egg_pid; +} + +u8 Sav2_DayCare_GetEggCycleCounter(struct DayCare * daycare) +{ + return daycare->egg_cycles; +} + +void DayCareMon_SetSteps(struct DayCareMon * dcmon, u32 steps) +{ + dcmon->steps = steps; +} + +void DayCareMon_AddSteps(struct DayCareMon * dcmon, u32 steps) +{ + dcmon->steps += steps; +} + +void Sav2_DayCare_SetEggPID(struct DayCare * daycare, u32 pid) +{ + daycare->egg_pid = pid; +} + +void Sav2_DayCare_SetEggCycleCounter(struct DayCare * daycare, u8 count) +{ + daycare->egg_cycles = count; +} + +BOOL Sav2_DayCare_MasudaCheck(struct DayCare * daycare) +{ + // Checks if the pokemon come from different countries. + // Uses language as a proxy for country, even though it + // only accounts for European languages and Japanese. + // If true, shiny odds are increased (see overlay 05). + return GetBoxMonData(&daycare->mons[0].mon, MON_DATA_GAME_LANGUAGE, NULL) != GetBoxMonData(&daycare->mons[1].mon, MON_DATA_GAME_LANGUAGE, NULL); +} + +void DayCareMon_Copy(struct DayCareMon * dest, const struct DayCareMon * src) +{ + *dest = *src; +} + +void DayCareMon_Extras_init(struct DayCareMail * mail) +{ + int i; + + for (i = 0; i < OT_NAME_LENGTH + 1; i++) + mail->ot_name[i] = 0; + for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++) + mail->nickname[i] = 0; + mail->ot_name[0] = EOS; + mail->nickname[0] = EOS; +} + +void DayCareMon_Init(struct DayCareMon * mon) +{ + ZeroBoxMonData(&mon->mon); + mon->steps = 0; + DayCareMon_Extras_init(&mon->mail); +} + +struct DayCare * Sav2_DayCare_get(struct SaveBlock2 * sav2) +{ + return (struct DayCare *)SavArray_get(sav2, 8); +} diff --git a/arm9/src/itemtool.c b/arm9/src/itemtool.c index 9cd7552d..75785ee8 100644 --- a/arm9/src/itemtool.c +++ b/arm9/src/itemtool.c @@ -786,141 +786,141 @@ u32 GetItemAttr_PreloadedItemData(struct ItemData * itemData, u32 attr) { switch (attr) { - case 0: + case ITEMATTR_PRICE: return itemData->price; - case 1: + case ITEMATTR_HOLD_EFFECT: return itemData->holdEffect; - case 2: + case ITEMATTR_HOLD_EFFECT_PARAM: return itemData->holdEffectParam; - case 3: - return itemData->unk8_5; - case 4: - return itemData->unk8_6; - case 5: + case ITEMATTR_PREVENT_TOSS: + return itemData->prevent_toss; + case ITEMATTR_SELECTABLE: + return itemData->selectable; + case ITEMATTR_POCKET: return itemData->pocket; - case 6: + case ITEMATTR_UNKA: return itemData->unkA; - case 7: + case ITEMATTR_UNKB: return itemData->unkB; - case 8: + case ITEMATTR_UNK4: return itemData->unk4; - case 9: + case ITEMATTR_UNK5: return itemData->unk5; - case 10: + case ITEMATTR_UNK6: return itemData->unk6; - case 11: + case ITEMATTR_NATURAL_GIFT_POWER: return itemData->naturalGiftPower; - case 12: + case ITEMATTR_UNK8_0: return itemData->unk8_0; - case 13: + case ITEMATTR_UNK8_B: return itemData->unk8_B; - case 14: - return itemData->unkC; + case ITEMATTR_PARTY_USE: + return itemData->partyUse; default: - switch (itemData->unkC) + switch (itemData->partyUse) { case 0: - return itemData->unkE.flat; + return itemData->partyUseParam.flat; case 1: - return GetItemAttrSub(&itemData->unkE.sub, attr); + return GetItemAttrSub(&itemData->partyUseParam.sub, attr); default: return 0; } } } -u32 GetItemAttrSub(struct ItemDataSub * sub, u32 attr) +u32 GetItemAttrSub(struct ItemPartyUseParam * sub, u32 attr) { switch (attr) { - case 15: - return sub->unk0_0; - case 16: - return sub->unk0_1; - case 17: - return sub->unk0_2; - case 18: - return sub->unk0_3; - case 19: - return sub->unk0_4; - case 20: - return sub->unk0_5; - case 21: - return sub->unk0_6; - case 22: - return sub->unk0_7; - case 23: - return sub->unk1_0; - case 24: - return sub->unk1_1; - case 25: - return sub->unk1_2; - case 26: - return sub->unk1_3; - case 27: - return sub->unk1_4; - case 28: - return sub->unk2_0; - case 29: - return sub->unk2_4; - case 30: - return sub->unk3_0; - case 31: - return sub->unk3_4; - case 32: - return sub->unk4_0; - case 33: - return sub->unk4_4; - case 34: - return sub->unk4_6; - case 35: - return sub->unk4_7; - case 36: - return sub->unk5_0; - case 37: - return sub->unk5_1; - case 38: - return sub->unk5_2; - case 39: - return sub->unk5_3; - case 40: - return sub->unk5_4; - case 41: - return sub->unk5_5; - case 42: - return sub->unk5_6; - case 43: - return sub->unk5_7; - case 44: - return sub->unk6_0; - case 45: - return sub->unk6_1; - case 46: - return sub->unk6_2; - case 47: - return sub->unk6_3; - case 48: - return sub->unk7; - case 49: - return sub->unk8; - case 50: - return sub->unk9; - case 51: - return sub->unkA; - case 52: - return sub->unkB; - case 53: - return sub->unkC; - case 54: - return sub->unkD; - case 55: - return sub->unkE; - case 56: - return sub->unkF; - case 57: - return sub->unk10; - case 58: - return sub->unk11; + case ITEMATTR_SLP_HEAL: + return sub->slp_heal; + case ITEMATTR_PSN_HEAL: + return sub->psn_heal; + case ITEMATTR_BRN_HEAL: + return sub->brn_heal; + case ITEMATTR_FRZ_HEAL: + return sub->frz_heal; + case ITEMATTR_PRZ_HEAL: + return sub->prz_heal; + case ITEMATTR_CFS_HEAL: + return sub->cfs_heal; + case ITEMATTR_INF_HEAL: + return sub->inf_heal; + case ITEMATTR_GUARD_SPEC: + return sub->guard_spec; + case ITEMATTR_REVIVE: + return sub->revive; + case ITEMATTR_REVIVE_ALL: + return sub->revive_all; + case ITEMATTR_LEVEL_UP: + return sub->level_up; + case ITEMATTR_EVOLVE: + return sub->evolve; + case ITEMATTR_ATK_STAGES: + return sub->atk_stages; + case ITEMATTR_DEF_STAGES: + return sub->def_stages; + case ITEMATTR_SPATK_STAGES: + return sub->spatk_stages; + case ITEMATTR_SPDEF_STAGES: + return sub->spdef_stages; + case ITEMATTR_SPEED_STAGES: + return sub->speed_stages; + case ITEMATTR_ACCURACY_STAGES: + return sub->accuracy_stages; + case ITEMATTR_CRITRATE_STAGES: + return sub->critrate_stages; + case ITEMATTR_PP_UP: + return sub->pp_up; + case ITEMATTR_PP_MAX: + return sub->pp_max; + case ITEMATTR_PP_RESTORE: + return sub->pp_restore; + case ITEMATTR_PP_RESTORE_ALL: + return sub->pp_restore_all; + case ITEMATTR_HP_RESTORE: + return sub->hp_restore; + case ITEMATTR_HP_EV_UP: + return sub->hp_ev_up; + case ITEMATTR_ATK_EV_UP: + return sub->atk_ev_up; + case ITEMATTR_DEF_EV_UP: + return sub->def_ev_up; + case ITEMATTR_SPEED_EV_UP: + return sub->speed_ev_up; + case ITEMATTR_SPATK_EV_UP: + return sub->spatk_ev_up; + case ITEMATTR_SPDEF_EV_UP: + return sub->spdef_ev_up; + case ITEMATTR_FRIENDSHIP_MOD_LO: + return sub->friendship_mod_lo; + case ITEMATTR_FRIENDSHIP_MOD_MED: + return sub->friendship_mod_med; + case ITEMATTR_FRIENDSHIP_MOD_HI: + return sub->friendship_mod_hi; + case ITEMATTR_HP_EV_UP_PARAM: + return sub->hp_ev_up_param; + case ITEMATTR_ATK_EV_UP_PARAM: + return sub->atk_ev_up_param; + case ITEMATTR_DEF_EV_UP_PARAM: + return sub->def_ev_up_param; + case ITEMATTR_SPEED_EV_UP_PARAM: + return sub->speed_ev_up_param; + case ITEMATTR_SPATK_EV_UP_PARAM: + return sub->spatk_ev_up_param; + case ITEMATTR_SPDEF_EV_UP_PARAM: + return sub->spdef_ev_up_param; + case ITEMATTR_HP_RESTORE_PARAM: + return sub->hp_restore_param; + case ITEMATTR_PP_RESTORE_PARAM: + return sub->pp_restore_param; + case ITEMATTR_FRIENDSHIP_MOD_LO_PARAM: + return sub->friendship_mod_lo_param; + case ITEMATTR_FRIENDSHIP_MOD_MED_PARAM: + return sub->friendship_mod_med_param; + case ITEMATTR_FRIENDSHIP_MOD_HI_PARAM: + return sub->friendship_mod_hi_param; default: return 0; } diff --git a/arm9/src/nutdata.c b/arm9/src/nutdata.c index a8f916e2..27c600fa 100644 --- a/arm9/src/nutdata.c +++ b/arm9/src/nutdata.c @@ -1,7 +1,8 @@ #include "global.h" #include "filesystem.h" -#include "itemtool.h" +#include "nutdata.h" #include "msgdata.h" +#include "constants/items.h" #pragma thumb on diff --git a/arm9/src/player_data.c b/arm9/src/player_data.c new file mode 100644 index 00000000..ea5802aa --- /dev/null +++ b/arm9/src/player_data.c @@ -0,0 +1,232 @@ +#include "global.h" +#include "save_block_2.h" +#include "player_data.h" +#include "MI_memory.h" +#include "heap.h" +#include "string16.h" +#include "options.h" +#include "coins.h" + +#pragma thumb on + +void PlayerProfile_init(struct PlayerData * data); + +u32 Sav2_PlayerData_sizeof(void) +{ + return sizeof(struct PlayerDataSav); +} + +void Sav2_PlayerData_init(struct PlayerDataSav * pds) +{ + MI_CpuClearFast(pds, sizeof(struct PlayerDataSav)); + Options_init(&pds->options); + PlayerProfile_init(&pds->data); + InitCoins(&pds->coins); + InitIGT(&pds->igt); +} + +struct PlayerData * Sav2_PlayerData_GetProfileAddr(struct SaveBlock2 * sav2) +{ + return &((struct PlayerDataSav *)SavArray_get(sav2, 1))->data; +} + +struct Options * Sav2_PlayerData_GetOptionsAddr(struct SaveBlock2 * sav2) +{ + return &((struct PlayerDataSav *)SavArray_get(sav2, 1))->options; +} + +u16 * Sav2_PlayerData_GetCoinsAddr(struct SaveBlock2 * sav2) +{ + return &((struct PlayerDataSav *)SavArray_get(sav2, 1))->coins; +} + +struct IGT * Sav2_PlayerData_GetIGTAddr(struct SaveBlock2 * sav2) +{ + return &((struct PlayerDataSav *)SavArray_get(sav2, 1))->igt; +} + +u32 PlayerProfile_sizeof(void) +{ + return sizeof(struct PlayerData); +} + +struct PlayerData * PlayerProfile_new(u32 heap_id) +{ + struct PlayerData * ret = (struct PlayerData *)AllocFromHeap(heap_id, sizeof(struct PlayerData)); + PlayerProfile_init(ret); + return ret; +} + +void PlayerProfile_Copy(const struct PlayerData * src, struct PlayerData * dest) +{ + MI_CpuCopy8(src, dest, sizeof(struct PlayerData)); +} + +void PlayerProfile_init(struct PlayerData * data) +{ + memset(data, 0, sizeof(struct PlayerData)); + data->language = LANGUAGE_ENGLISH; +} + +void CopyPlayerName(u16 * dest, struct PlayerData * data) +{ + GF_ASSERT((s32)StringLength(data->playerName) < OT_NAME_LENGTH + 1); + CopyU16StringArray(dest, data->playerName); +} + +void PlayerName_StringToFlat(struct PlayerData * data, struct String * str) +{ + CopyStringToU16Array(str, data->playerName, OT_NAME_LENGTH + 1); +} + +u16 * PlayerProfile_GetNamePtr(struct PlayerData * data) +{ + return data->playerName; +} + +void PlayerName_FlatToString(struct PlayerData * data, struct String * str) +{ + CopyU16ArrayToString(str, data->playerName); +} + +struct String * PlayerProfile_GetPlayerName_NewString(struct PlayerData * data, u32 heap_id) +{ + struct String * str = String_ctor(OT_NAME_LENGTH + 1, heap_id); + PlayerName_FlatToString(data, str); + return str; +} + +void PlayerProfile_SetTrainerID(struct PlayerData * data, u32 otid) +{ + data->playerId = otid; +} + +u32 PlayerProfile_GetTrainerID(struct PlayerData * data) +{ + return data->playerId; +} + +u16 PlayerProfile_GetTrainerID_VisibleHalf(struct PlayerData * data) +{ + return (u16)data->playerId; +} + +void PlayerProfile_SetTrainerGender(struct PlayerData * data, u8 gender) +{ + data->gender = gender; +} + +u32 PlayerProfile_GetTrainerGender(struct PlayerData * data) +{ + return data->gender; +} + +BOOL PlayerProfile_TestBadgeFlag(struct PlayerData * data, u32 badgeno) +{ + return (data->badges & (1 << badgeno)) != 0; +} + +void PlayerProfile_SetBadgeFlag(struct PlayerData * data, u32 badgeno) +{ + data->badges |= (1 << badgeno); +} + +u32 PlayerProfile_CountBadges(struct PlayerData * data) +{ + u32 count; + u32 badges; + for (count = 0, badges = data->badges; badges != 0; badges >>= 1) + { + if (badges & 1) + count++; + } + return count; +} + +u32 PlayerProfile_GetMoney(struct PlayerData * data) +{ + return data->money; +} + +u32 PlayerProfile_SetMoney(struct PlayerData * data, u32 amount) +{ + if (amount > 999999) + amount = 999999; + data->money = amount; + return amount; +} + +u8 PlayerProfile_GetAvatar(struct PlayerData * data) +{ + return data->avatar; +} + +void PlayerProfile_SetAvatar(struct PlayerData * data, u8 avatar) +{ + data->avatar = avatar; +} + +u32 PlayerProfile_AddMoney(struct PlayerData * data, u32 amount) +{ + if (amount > 999999) + data->money = 999999; + else + data->money += amount; + if (data->money > 999999) + data->money = 999999; + return data->money; +} + +u32 PlayerProfile_SubMoney(struct PlayerData * data, u32 amount) +{ + if (data->money < amount) + data->money = 0; + else + data->money -= amount; + return data->money; +} + +u8 PlayerProfile_GetVersion(struct PlayerData * data) +{ + return data->version; +} + +void PlayerProfile_SetVersion(struct PlayerData * data, u8 a1) +{ + data->version = a1; +} + +u8 PlayerProfile_GetLanguage(struct PlayerData * data) +{ + return data->language; +} + +void PlayerProfile_SetLanguage(struct PlayerData * data, u8 language) +{ + data->language = language; +} + +void PlayerProfile_SetGameClearFlag(struct PlayerData * data) +{ + data->gameCleared = 1; +} + +BOOL PlayerProfile_GetGameClearFlag(struct PlayerData * data) +{ + return data->gameCleared; +} + +void PlayerProfile_SetNatDexFlag(struct PlayerData * data) +{ + data->nationalDex = 1; +} + +BOOL PlayerProfile_GetNatDexFlag(struct PlayerData * data) +{ + return data->nationalDex; +} + +BOOL PlayerProfile_NameAndOTIDMatchPlayer(struct PlayerData * a, struct PlayerData * b) +{ + return !StringNotEqualN(a->playerName, b->playerName, OT_NAME_LENGTH) && a->playerId == b->playerId; +} diff --git a/arm9/src/save_arrays.c b/arm9/src/save_arrays.c index 797539d2..96808ba6 100644 --- a/arm9/src/save_arrays.c +++ b/arm9/src/save_arrays.c @@ -9,11 +9,11 @@ #include "poketch.h" #include "hall_of_fame.h" #include "unk_020286F8.h" +#include "daycare.h" extern u32 FUN_0202AC20(void); extern u32 FUN_02034D7C(void); -extern u32 FUN_02023D64(void); -extern u32 FUN_02023C40(void); +extern u32 Sav2_Pokedex_sizeof(void); extern u32 FUN_020254B8(void); extern u32 FUN_02024E64(void); extern u32 FUN_02034D80(void); @@ -40,8 +40,7 @@ extern u32 FUN_0202C0E0(void); extern u32 FUN_02013B28(void); extern void FUN_0202AC28(void *); extern void FUN_02034D98(void *); -extern void FUN_02024378(void *); -extern void FUN_02023C48(void *); +extern void Sav2_Pokedex_init(void *); extern void FUN_020254CC(void *); extern void FUN_02024E6C(void *); extern void FUN_02034D88(void *); @@ -80,8 +79,8 @@ const struct SaveChunkHeader UNK_020EE700[] = { { 4, 0, (SAVSIZEFN)SavArray_Flags_sizeof, (SAVINITFN)SavArray_Flags_init }, { 5, 0, (SAVSIZEFN)Sav2_Poketch_sizeof, (SAVINITFN)Sav2_Poketch_init }, { 6, 0, (SAVSIZEFN)FUN_02034D7C, (SAVINITFN)FUN_02034D98 }, - { 7, 0, (SAVSIZEFN)FUN_02023D64, (SAVINITFN)FUN_02024378 }, - { 8, 0, (SAVSIZEFN)FUN_02023C40, (SAVINITFN)FUN_02023C48 }, + { 7, 0, (SAVSIZEFN)Sav2_Pokedex_sizeof, (SAVINITFN)Sav2_Pokedex_init }, + { 8, 0, (SAVSIZEFN)Sav2_DayCare_sizeof, (SAVINITFN)Sav2_DayCare_init }, { 9, 0, (SAVSIZEFN)FUN_020254B8, (SAVINITFN)FUN_020254CC }, { 10, 0, (SAVSIZEFN)FUN_02024E64, (SAVINITFN)FUN_02024E6C }, { 11, 0, (SAVSIZEFN)FUN_02034D80, (SAVINITFN)FUN_02034D88 }, diff --git a/arm9/src/use_item_on_mon.c b/arm9/src/use_item_on_mon.c new file mode 100644 index 00000000..9e11e4bf --- /dev/null +++ b/arm9/src/use_item_on_mon.c @@ -0,0 +1,719 @@ +#include "global.h" +#include "pokemon.h" +#include "heap.h" +#include "itemtool.h" +#include "move_data.h" +#include "party.h" +#include "use_item_on_mon.h" +#include "constants/moves.h" + +#pragma thumb on + +BOOL CanUseItemOnPokemon(struct Pokemon * pokemon, u16 itemId, s32 moveId, u32 heap_id) +{ + s32 atkEv; + s32 defEv; + s32 speedEv; + s32 spAtkEv; + s32 spDefEv; + s32 hpEv; + u32 hp; + struct ItemData * itemData; + u32 status; + + itemData = LoadItemDataOrGfx(itemId, ITEMDATA_DATA, heap_id); + + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PARTY_USE) != 1) + { + FreeToHeap(itemData); + return FALSE; + } + status = GetMonData(pokemon, MON_DATA_STATUS, NULL); + // slp + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_SLP_HEAL) && (status & MON_STATUS_SLP_MASK)) + { + FreeToHeap(itemData); + return TRUE; + } + // psn + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PSN_HEAL) && (status & (MON_STATUS_PSN_MASK | MON_STATUS_TOX_MASK))) + { + FreeToHeap(itemData); + return TRUE; + } + // brn + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_BRN_HEAL) && (status & MON_STATUS_BRN_MASK)) + { + FreeToHeap(itemData); + return TRUE; + } + // frz + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_FRZ_HEAL) && (status & MON_STATUS_FRZ_MASK)) + { + FreeToHeap(itemData); + return TRUE; + } + // prz + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PRZ_HEAL) && (status & MON_STATUS_PRZ_MASK)) + { + FreeToHeap(itemData); + return TRUE; + } + hp = GetMonData(pokemon, MON_DATA_HP, NULL); + if ((GetItemAttr_PreloadedItemData(itemData, ITEMATTR_REVIVE) || GetItemAttr_PreloadedItemData(itemData, ITEMATTR_REVIVE_ALL)) && !GetItemAttr_PreloadedItemData(itemData, ITEMATTR_LEVEL_UP)) + { + if (hp == 0) + { + FreeToHeap(itemData); + return TRUE; + } + } + else if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_HP_RESTORE) &&hp != 0 && hp < GetMonData(pokemon, MON_DATA_MAXHP, NULL)) + { + FreeToHeap(itemData); + return TRUE; + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_LEVEL_UP) && GetMonData(pokemon, MON_DATA_LEVEL, NULL) < MAX_LEVEL) + { + FreeToHeap(itemData); + return TRUE; + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_EVOLVE) && GetMonEvolution(NULL, pokemon, 3, itemId, NULL) != SPECIES_NONE) + { + FreeToHeap(itemData); + return TRUE; + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PP_UP) || GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PP_MAX)) + { + if (GetMonData(pokemon, MON_DATA_MOVE1PPUP + moveId, NULL) < 3 && WazaGetMaxPp((u16)GetMonData(pokemon, MON_DATA_MOVE1 + moveId, NULL), 0) >= 5) + { + FreeToHeap(itemData); + return TRUE; + } + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PP_RESTORE) && MonMoveCanRestorePP(pokemon, moveId) == TRUE) + { + FreeToHeap(itemData); + return TRUE; + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PP_RESTORE_ALL)) + { + for (int i = 0; i < MON_MOVES; i++) + { + if (MonMoveCanRestorePP(pokemon, i) == TRUE) + { + FreeToHeap(itemData); + return TRUE; + } + } + } + hpEv = (s32)GetMonData(pokemon, MON_DATA_HP_EV, NULL); + atkEv = (s32)GetMonData(pokemon, MON_DATA_ATK_EV, NULL); + defEv = (s32)GetMonData(pokemon, MON_DATA_DEF_EV, NULL); + speedEv = (s32)GetMonData(pokemon, MON_DATA_SPEED_EV, NULL); + spAtkEv = (s32)GetMonData(pokemon, MON_DATA_SPATK_EV, NULL); + spDefEv = (s32)GetMonData(pokemon, MON_DATA_SPDEF_EV, NULL); + if (GetMonData(pokemon, MON_DATA_SPECIES, NULL) != SPECIES_SHEDINJA && GetItemAttr_PreloadedItemData(itemData, ITEMATTR_HP_EV_UP)) + { + s32 dHpEv = (s32)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_HP_EV_UP_PARAM); + if (dHpEv > 0) + { + if (hpEv < MAX_EV && (hpEv + atkEv + defEv + speedEv + spAtkEv + spDefEv) < MAX_EV_SUM) + { + FreeToHeap(itemData); + return TRUE; + } + } + else if (dHpEv < 0) + { + if (hpEv > 0) + { + FreeToHeap(itemData); + return TRUE; + } + else if (CanItemModFriendship(pokemon, itemData) == TRUE) + { + FreeToHeap(itemData); + return TRUE; + } + } + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_ATK_EV_UP)) + { + s32 dAtkEv = (s32)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_ATK_EV_UP_PARAM); + if (dAtkEv > 0) + { + if (atkEv < MAX_EV && (hpEv + atkEv + defEv + speedEv + spAtkEv + spDefEv) < MAX_EV_SUM) + { + FreeToHeap(itemData); + return TRUE; + } + } + else if (dAtkEv < 0) + { + if (atkEv > 0) + { + FreeToHeap(itemData); + return TRUE; + } + else if (CanItemModFriendship(pokemon, itemData) == TRUE) + { + FreeToHeap(itemData); + return TRUE; + } + } + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_DEF_EV_UP)) + { + s32 dDefEv = (s32)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_DEF_EV_UP_PARAM); + if (dDefEv > 0) + { + if (defEv < MAX_EV && (hpEv + atkEv + defEv + speedEv + spAtkEv + spDefEv) < MAX_EV_SUM) + { + FreeToHeap(itemData); + return TRUE; + } + } + else if (dDefEv < 0) + { + if (defEv > 0) + { + FreeToHeap(itemData); + return TRUE; + } + else if (CanItemModFriendship(pokemon, itemData) == TRUE) + { + FreeToHeap(itemData); + return TRUE; + } + } + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_SPEED_EV_UP)) + { + s32 dSpeedEv = (s32)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_SPEED_EV_UP_PARAM); + if (dSpeedEv > 0) + { + if (speedEv < MAX_EV && (hpEv + atkEv + defEv + speedEv + spAtkEv + spDefEv) < MAX_EV_SUM) + { + FreeToHeap(itemData); + return TRUE; + } + } + else if (dSpeedEv < 0) + { + if (speedEv > 0) + { + FreeToHeap(itemData); + return TRUE; + } + else if (CanItemModFriendship(pokemon, itemData) == TRUE) + { + FreeToHeap(itemData); + return TRUE; + } + } + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_SPATK_EV_UP)) + { + s32 dSpAtkEv = (s32)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_SPATK_EV_UP_PARAM); + if (dSpAtkEv > 0) + { + if (spAtkEv < MAX_EV && (hpEv + atkEv + defEv + speedEv + spAtkEv + spDefEv) < MAX_EV_SUM) + { + FreeToHeap(itemData); + return TRUE; + } + } + else if (dSpAtkEv < 0) + { + if (spAtkEv > 0) + { + FreeToHeap(itemData); + return TRUE; + } + else if (CanItemModFriendship(pokemon, itemData) == TRUE) + { + FreeToHeap(itemData); + return TRUE; + } + } + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_SPDEF_EV_UP)) + { + + s32 dSpDefEv = (s32)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_SPDEF_EV_UP_PARAM); + if (dSpDefEv > 0) + { + if (spDefEv < MAX_EV && (hpEv + atkEv + defEv + speedEv + spAtkEv + spDefEv) < MAX_EV_SUM) + { + FreeToHeap(itemData); + return TRUE; + } + } + else if (dSpDefEv < 0) + { + if (spDefEv > 0) + { + FreeToHeap(itemData); + return TRUE; + } + else if (CanItemModFriendship(pokemon, itemData) == TRUE) + { + FreeToHeap(itemData); + return TRUE; + } + } + } + FreeToHeap(itemData); + return FALSE; +} + +BOOL CanUseItemOnMonInParty(struct PlayerParty * party, u16 itemId, s32 partyIdx, s32 moveIdx, u32 heap_id) +{ + struct Pokemon * pokemon = GetPartyMonByIndex(party, partyIdx); + return CanUseItemOnPokemon(pokemon, itemId, moveIdx, heap_id); +} + +BOOL UseItemOnPokemon(struct Pokemon * pokemon, u16 itemId, s32 moveIdx, u16 location, u32 heap_id) +{ + s32 stack_data[8]; +#define sp6C stack_data[7] +#define sp68 stack_data[6] +#define sp64 stack_data[5] +#define sp60 stack_data[4] +#define sp5C stack_data[3] +#define sp58 stack_data[2] +#define sp54 stack_data[1] +#define sp50 stack_data[0] + BOOL hadEffect; + BOOL effectFound; + + struct ItemData * itemData = LoadItemDataOrGfx(itemId, ITEMDATA_DATA, heap_id); + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PARTY_USE) != 1) + { + FreeToHeap(itemData); + return FALSE; + } + hadEffect = FALSE; + effectFound = FALSE; + { + sp54 = sp50 = (int)GetMonData(pokemon, MON_DATA_STATUS, NULL); + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_SLP_HEAL)) + { + sp54 &= ~MON_STATUS_SLP_MASK; + effectFound = TRUE; + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PSN_HEAL)) + { + sp54 &= ~(MON_STATUS_PSN_MASK | MON_STATUS_TOX_MASK | 0xF00); + effectFound = TRUE; + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_BRN_HEAL)) + { + sp54 &= ~MON_STATUS_BRN_MASK; + effectFound = TRUE; + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_FRZ_HEAL)) + { + sp54 &= ~MON_STATUS_FRZ_MASK; + effectFound = TRUE; + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PRZ_HEAL)) + { + sp54 &= ~MON_STATUS_PRZ_MASK; + effectFound = TRUE; + } + if (sp50 != sp54) + { + SetMonData(pokemon, MON_DATA_STATUS, &sp54); + hadEffect = TRUE; + } + } + { + sp50 = (int)GetMonData(pokemon, MON_DATA_HP, NULL); + sp54 = (int)GetMonData(pokemon, MON_DATA_MAXHP, NULL); + if ((GetItemAttr_PreloadedItemData(itemData, ITEMATTR_REVIVE) || GetItemAttr_PreloadedItemData(itemData, ITEMATTR_REVIVE_ALL)) && GetItemAttr_PreloadedItemData(itemData, ITEMATTR_LEVEL_UP)) + { + if (sp50 == 0) + { + RestoreMonHPBy(pokemon, (u32)sp50, (u32)sp54, GetItemAttr_PreloadedItemData(itemData, ITEMATTR_HP_RESTORE_PARAM)); + hadEffect = TRUE; + } + effectFound = TRUE; + } + else if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_HP_RESTORE)) + { + if (sp50 < sp54) + { + RestoreMonHPBy(pokemon, (u32)sp50, (u32)sp54, GetItemAttr_PreloadedItemData(itemData, ITEMATTR_HP_RESTORE_PARAM)); + hadEffect = TRUE; + } + effectFound = TRUE; + } + sp58 = (s32)GetMonData(pokemon, MON_DATA_LEVEL, NULL); + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_LEVEL_UP)) + { + if (sp58 < MAX_LEVEL) + { + AddMonData(pokemon, MON_DATA_EXPERIENCE, (int)CalcMonExpToNextLevel(pokemon)); + CalcMonLevelAndStats(pokemon); + if (sp50 == 0) + { + sp5C = (s32)GetMonData(pokemon, MON_DATA_MAXHP, NULL); + RestoreMonHPBy(pokemon, (u32)sp50, (u32)sp5C, (u32)(sp5C - sp54)); + } + hadEffect = TRUE; + } + effectFound = TRUE; + } + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_EVOLVE)) + effectFound = TRUE; + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PP_UP)) + { + if (BoostMonMovePpUpBy(pokemon, moveIdx, 1) == TRUE) + hadEffect = TRUE; + effectFound = TRUE; + } + else if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PP_MAX)) + { + if (BoostMonMovePpUpBy(pokemon, moveIdx, 3) == TRUE) + hadEffect = TRUE; + effectFound = TRUE; + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PP_RESTORE)) + { + if (MonMoveRestorePP(pokemon, moveIdx, (s32)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PP_RESTORE_PARAM)) == 1) + hadEffect = TRUE; + effectFound = TRUE; + } + else if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PP_RESTORE_ALL)) + { + sp50 = 0; + for (; sp50 < MON_MOVES; sp50++) + { + if (MonMoveRestorePP(pokemon, sp50, (s32)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PP_RESTORE_PARAM)) == 1) + hadEffect = TRUE; + } + effectFound = TRUE; + } + { + sp50 = (s32)GetMonData(pokemon, MON_DATA_HP_EV, NULL); + sp54 = (s32)GetMonData(pokemon, MON_DATA_ATK_EV, NULL); + sp58 = (s32)GetMonData(pokemon, MON_DATA_DEF_EV, NULL); + sp5C = (s32)GetMonData(pokemon, MON_DATA_SPEED_EV, NULL); + sp60 = (s32)GetMonData(pokemon, MON_DATA_SPATK_EV, NULL); + sp64 = (s32)GetMonData(pokemon, MON_DATA_SPDEF_EV, NULL); + if (GetMonData(pokemon, MON_DATA_SPECIES, NULL) != SPECIES_SHEDINJA &&GetItemAttr_PreloadedItemData(itemData, ITEMATTR_HP_EV_UP)) + { + sp6C = (int)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_HP_EV_UP_PARAM); + sp68 = TryModEV(sp50, sp54 + sp58 + sp5C + sp60 + sp64, sp6C); + if (sp68 != -1) + { + sp50 = sp68; + SetMonData(pokemon, MON_DATA_HP_EV, &sp50); + CalcMonLevelAndStats(pokemon); + hadEffect = TRUE; + } + if (sp6C > 0) + effectFound = TRUE; + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_ATK_EV_UP)) + { + sp6C = (int)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_ATK_EV_UP_PARAM); + sp68 = TryModEV(sp54, sp50 + sp58 + sp5C + sp60 + sp64, sp6C); + if (sp68 != -1) + { + sp54 = sp68; + SetMonData(pokemon, MON_DATA_ATK_EV, &sp54); + CalcMonLevelAndStats(pokemon); + hadEffect = TRUE; + } + if (sp6C > 0) + effectFound = TRUE; + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_DEF_EV_UP)) + { + sp6C = (int)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_DEF_EV_UP_PARAM); + sp68 = TryModEV(sp58, sp50 + sp54 + sp5C + sp60 + sp64, sp6C); + if (sp68 != -1) + { + sp58 = sp68; + SetMonData(pokemon, MON_DATA_DEF_EV, &sp58); + CalcMonLevelAndStats(pokemon); + hadEffect = TRUE; + } + if (sp6C > 0) + effectFound = TRUE; + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_SPEED_EV_UP)) + { + sp6C = (int)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_SPEED_EV_UP_PARAM); + sp68 = TryModEV(sp5C, sp50 + sp54 + sp58 + sp60 + sp64, sp6C); + if (sp68 != -1) + { + sp5C = sp68; + SetMonData(pokemon, MON_DATA_SPEED_EV, &sp5C); + CalcMonLevelAndStats(pokemon); + hadEffect = TRUE; + } + if (sp6C > 0) + effectFound = TRUE; + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_SPATK_EV_UP)) + { + sp6C = (int)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_SPATK_EV_UP_PARAM); + sp68 = TryModEV(sp60, sp50 + sp54 + sp58 + sp5C + sp64, sp6C); + if (sp68 != -1) + { + sp60 = sp68; + SetMonData(pokemon, MON_DATA_SPATK_EV, &sp60); + CalcMonLevelAndStats(pokemon); + hadEffect = TRUE; + } + if (sp6C > 0) + effectFound = TRUE; + } + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_SPDEF_EV_UP)) + { + sp6C = (int)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_SPDEF_EV_UP_PARAM); + sp68 = TryModEV(sp64, sp50 + sp54 + sp58 + sp5C + sp60, sp6C); + if (sp68 != -1) + { + sp64 = sp68; + SetMonData(pokemon, MON_DATA_SPDEF_EV, &sp64); + CalcMonLevelAndStats(pokemon); + hadEffect = TRUE; + } + if (sp6C > 0) + effectFound = TRUE; + } + } + if (hadEffect == FALSE && effectFound == TRUE) + { + FreeToHeap(itemData); + return FALSE; + } + { + sp50 = (s32)GetMonData(pokemon, MON_DATA_FRIENDSHIP, NULL); + if (sp50 < 100) + { + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_FRIENDSHIP_MOD_LO)) + { + DoItemFriendshipMod(pokemon, sp50, (s32)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_FRIENDSHIP_MOD_LO_PARAM), location, heap_id); + FreeToHeap(itemData); + return hadEffect; + } + } + else if (sp50 >= 100 && sp50 < 200) + { + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_FRIENDSHIP_MOD_MED)) + { + DoItemFriendshipMod(pokemon, sp50, (s32)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_FRIENDSHIP_MOD_MED_PARAM), location, heap_id); + FreeToHeap(itemData); + return hadEffect; + } + } + else if (sp50 >= 200 && sp50 <= 255) + { + if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_FRIENDSHIP_MOD_HI)) + { + DoItemFriendshipMod(pokemon, sp50, (s32)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_FRIENDSHIP_MOD_HI_PARAM), location, heap_id); + FreeToHeap(itemData); + return hadEffect; + } + } + } + FreeToHeap(itemData); + return hadEffect; +} +#undef sp6C +#undef sp68 +#undef sp64 +#undef sp60 +#undef sp5C +#undef sp58 +#undef sp54 +#undef sp50 + +BOOL UseItemOnMonInParty(struct PlayerParty * party, u16 itemId, s32 partyIdx, s32 moveIdx, u16 location, u32 heap_id) +{ + struct Pokemon * pokemon = GetPartyMonByIndex(party, partyIdx); + return UseItemOnPokemon(pokemon, itemId, moveIdx, location, heap_id); +} + +u8 MonMoveCanRestorePP(struct Pokemon * pokemon, s32 moveIdx) +{ + u16 move_id = (u16)GetMonData(pokemon, MON_DATA_MOVE1 + moveIdx, NULL); + if (move_id == MOVE_NONE) + return FALSE; + u8 pp = (u8)GetMonData(pokemon, MON_DATA_MOVE1PP + moveIdx, NULL); + u8 ppUp = (u8)GetMonData(pokemon, MON_DATA_MOVE1PPUP + moveIdx, NULL); + return (u8)(pp < WazaGetMaxPp(move_id, ppUp)); +} + +BOOL MonMoveRestorePP(struct Pokemon * pokemon, s32 moveIdx, s32 ppRestore) +{ + u16 move_id; + u8 pp; + u8 maxPp; + s32 ppAttr; + s32 ppUpAttr; + + move_id = (u16)GetMonData(pokemon, MON_DATA_MOVE1 + moveIdx, NULL); + if (move_id == MOVE_NONE) + return FALSE; + ppAttr = MON_DATA_MOVE1PP + moveIdx; + pp = (u8)GetMonData(pokemon, ppAttr, NULL); + ppUpAttr = MON_DATA_MOVE1PPUP + moveIdx; + maxPp = WazaGetMaxPp(move_id, (u8)GetMonData(pokemon, ppUpAttr, NULL)); + if (pp < maxPp) + { + if (ppRestore == PP_RESTORE_ALL) + pp = maxPp; + else + { + pp += ppRestore; + if (pp > maxPp) + pp = maxPp; + } + SetMonData(pokemon, ppAttr, &pp); + return TRUE; + } + return FALSE; +} + +BOOL BoostMonMovePpUpBy(struct Pokemon * pokemon, s32 moveIdx, u32 nPpUp) +{ + u16 move; + u8 pp, ppUp, maxPp, newMaxPp; + s32 ppUpAttr; + s32 ppAttr; + + ppUpAttr = MON_DATA_MOVE1PPUP + moveIdx; + ppUp = (u8)GetMonData(pokemon, ppUpAttr, NULL); + if (ppUp == 3) + return FALSE; + move = (u16)GetMonData(pokemon, MON_DATA_MOVE1 + moveIdx, NULL); + if (WazaGetMaxPp(move, 0) < 5) + return FALSE; + ppAttr = MON_DATA_MOVE1PP + moveIdx; + pp = (u8)GetMonData(pokemon, ppAttr, NULL); + maxPp = WazaGetMaxPp(move, ppUp); + if (ppUp + nPpUp > 3) + ppUp = 3; + else + ppUp = (u8)(ppUp + nPpUp); + newMaxPp = WazaGetMaxPp(move, ppUp); + pp = (u8)(pp + newMaxPp - maxPp); + SetMonData(pokemon, ppUpAttr, &ppUp); + SetMonData(pokemon, ppAttr, &pp); + return TRUE; +} + +void RestoreMonHPBy(struct Pokemon * pokemon, u32 hp, u32 maxHp, u32 restoration) +{ + if (maxHp == 1) + restoration = 1; + else if (restoration == HP_RESTORE_ALL) + restoration = maxHp; + else if (restoration == HP_RESTORE_HALF) + restoration = maxHp / 2; + else if (restoration == HP_RESTORE_QTR) + restoration = maxHp / 4; + if (hp + restoration > maxHp) + hp = maxHp; + else + hp = hp + restoration; + SetMonData(pokemon, MON_DATA_HP, &hp); +} + +s32 TryModEV(s32 ev, s32 evSum, s32 by) +{ + if (ev == 0 && by < 0) + return -1; + if (ev >= MAX_EV && by > 0) + return -1; + if (ev + evSum >= MAX_EV_SUM && by > 0) + return -1; + ev += by; + if (ev > MAX_EV) + ev = MAX_EV; + else if (ev < 0) + ev = 0; + if (ev + evSum > MAX_EV_SUM) + ev = MAX_EV_SUM - evSum; + return ev; +} + +BOOL CanItemModFriendship(struct Pokemon * pokemon, struct ItemData * itemData) +{ + s32 friendship = (s32)GetMonData(pokemon, MON_DATA_FRIENDSHIP, NULL); + if (friendship >= 255) + return FALSE; + if (friendship < 100) + { + return (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_FRIENDSHIP_MOD_LO) && (s32)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_FRIENDSHIP_MOD_LO_PARAM) > 0); + } + if (friendship >= 100 && friendship < 200) + { + return (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_FRIENDSHIP_MOD_MED) && (s32)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_FRIENDSHIP_MOD_MED_PARAM) > 0); + } + if (friendship >= 200 && friendship < 255) + { + return (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_FRIENDSHIP_MOD_HI) && (s32)GetItemAttr_PreloadedItemData(itemData, ITEMATTR_FRIENDSHIP_MOD_HI_PARAM) > 0); + } + return FALSE; +} + +BOOL DoItemFriendshipMod(struct Pokemon * pokemon, s32 friendship, s32 mod, u16 location, u32 heap_id) +{ + if (friendship == 255 && mod > 0) + return FALSE; + if (friendship == 0 && mod < 0) + return FALSE; + if (mod > 0) + { + if (GetItemAttr((u16)GetMonData(pokemon, MON_DATA_HELD_ITEM, NULL), ITEMATTR_HOLD_EFFECT, heap_id) == HOLD_EFFECT_FRIENDSHIP_UP) + mod = mod * 150 / 100; + if (GetMonData(pokemon, MON_DATA_POKEBALL, NULL) == ITEM_LUXURY_BALL) + mod++; + if (location == GetMonData(pokemon, MON_DATA_EGG_MET_LOCATION, NULL)) + mod++; + } + mod += friendship; + if (mod > 255) + mod = 255; + if (mod < 0) + mod = 0; + SetMonData(pokemon, MON_DATA_FRIENDSHIP, &mod); + return TRUE; +} + +void HealParty(struct PlayerParty * party) +{ + u32 sp8; + s32 nmons; + s32 i; + s32 j; + + nmons = GetPartyCount(party); + for (i = 0; i < nmons; i++) + { + struct Pokemon * pokemon = GetPartyMonByIndex(party, i); + if (GetMonData(pokemon, MON_DATA_SPECIES_EXISTS, NULL)) + { + sp8 = GetMonData(pokemon, MON_DATA_MAXHP, NULL); + SetMonData(pokemon, MON_DATA_HP, &sp8); + + sp8 = 0; + SetMonData(pokemon, MON_DATA_STATUS, &sp8); + + for (j = 0; j < MON_MOVES; j++) + { + if (MonMoveCanRestorePP(pokemon, j) == 1) + MonMoveRestorePP(pokemon, j, PP_RESTORE_ALL); + } + } + } +} |