From c7d3ab03b0790bf5f76e6cbbedae3ae53de0b239 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 27 May 2023 09:19:08 -0700 Subject: [PATCH] more decomp, move of some data, and code cleanup --- asm/friend_list_menu.s | 2185 -------------------------------------- data/data_80D47B8.s | 3 - data/friend_area.inc | 176 --- data/text/party_menu.inc | 109 -- include/moves.h | 4 + include/pokemon.h | 2 +- ld_script.txt | 5 +- src/friend_list_menu.c | 1090 +++++++++++-------- src/friend_list_menu_1.c | 297 ------ src/items.c | 12 +- src/party_list_menu.c | 1081 +++++++++++++++++++ src/pokemon_mid.c | 6 +- 12 files changed, 1772 insertions(+), 3198 deletions(-) delete mode 100644 data/friend_area.inc delete mode 100644 data/text/party_menu.inc delete mode 100644 src/friend_list_menu_1.c create mode 100644 src/party_list_menu.c diff --git a/asm/friend_list_menu.s b/asm/friend_list_menu.s index 42a90fa43..31a39996f 100644 --- a/asm/friend_list_menu.s +++ b/asm/friend_list_menu.s @@ -5,2189 +5,4 @@ .text - - thumb_func_start sub_8025728 -sub_8025728: - push {r4-r7,lr} - ldr r3, _080257CC - ldr r5, _080257D0 - ldr r0, [r5] - movs r1, 0xE - ldrsh r2, [r0, r1] - movs r1, 0x58 - muls r2, r1 - ldr r1, [r3] - adds r7, r1, r2 - movs r2, 0x84 - lsls r2, 1 - adds r0, r2 - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r4, [r5] - ldr r0, [r4] - cmp r0, 0 - bne _080257E0 - adds r1, r4, 0 - adds r1, 0xC8 - ldr r0, _080257D4 - str r0, [r1] - adds r1, 0x4 - movs r0, 0xA - str r0, [r1] - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - bne _08025774 - ldr r0, [r5] - movs r4, 0x84 - lsls r4, 1 - adds r0, r4 - movs r1, 0x1 - strh r1, [r0] -_08025774: - movs r6, 0x1 - ldr r1, [r5] - adds r2, r1, 0 - adds r2, 0xD0 - ldr r0, _080257D8 - str r0, [r2] - adds r1, 0xD4 - movs r0, 0xB - str r0, [r1] - bl GetNumberOfFilledInventorySlots - cmp r0, 0x13 - bgt _08025796 - ldr r0, [r5] - ldrb r0, [r0, 0x18] - cmp r0, 0 - bne _080257A0 -_08025796: - ldr r0, [r5] - movs r1, 0x85 - lsls r1, 1 - adds r0, r1 - strh r6, [r0] -_080257A0: - adds r6, 0x1 - adds r0, r7, 0 - bl sub_8025EC4 - lsls r0, 24 - cmp r0, 0 - beq _08025810 - ldr r0, _080257D0 - ldr r2, [r0] - lsls r3, r6, 3 - adds r0, r2, 0 - adds r0, 0xC8 - adds r0, r3 - ldr r1, _080257DC - str r1, [r0] - adds r2, 0xCC - adds r2, r3 - movs r0, 0x9 - str r0, [r2] - adds r6, 0x1 - b _08025810 - .align 2, 0 -_080257CC: .4byte gRecruitedPokemonRef -_080257D0: .4byte gUnknown_203B2B4 -_080257D4: .4byte gUnknown_80DD2B0 -_080257D8: .4byte gUnknown_80DD2B8 -_080257DC: .4byte gUnknown_80DD2C0 -_080257E0: - adds r1, r4, 0 - adds r1, 0xC8 - ldr r0, _080258D4 - str r0, [r1] - adds r1, 0x4 - movs r0, 0x7 - str r0, [r1] - ldr r0, [r4, 0x1C] - movs r2, 0x8 - ldrsh r0, [r0, r2] - bl GetFriendArea - ldrb r1, [r4, 0xC] - lsls r0, 24 - lsrs r0, 24 - cmp r1, r0 - bne _0802580E - ldr r0, [r5] - movs r4, 0x84 - lsls r4, 1 - adds r0, r4 - movs r1, 0x1 - strh r1, [r0] -_0802580E: - movs r6, 0x1 -_08025810: - movs r0, 0x8 - ldrsh r1, [r7, r0] - ldr r0, _080258D8 - cmp r1, r0 - bne _08025840 - adds r0, r7, 0 - bl IsPokemonRenamed - lsls r0, 24 - cmp r0, 0 - beq _08025840 - ldr r0, _080258DC - ldr r2, [r0] - lsls r3, r6, 3 - adds r0, r2, 0 - adds r0, 0xC8 - adds r0, r3 - ldr r1, _080258E0 - str r1, [r0] - adds r2, 0xCC - adds r2, r3 - movs r0, 0x8 - str r0, [r2] - adds r6, 0x1 -_08025840: - ldr r4, _080258DC - ldr r5, [r4] - lsls r1, r6, 3 - adds r3, r5, 0 - adds r3, 0xC8 - adds r2, r3, r1 - ldr r0, _080258E4 - str r0, [r2] - adds r7, r5, 0 - adds r7, 0xCC - adds r1, r7, r1 - movs r0, 0x4 - str r0, [r1] - adds r6, 0x1 - lsls r1, r6, 3 - adds r2, r3, r1 - ldr r0, _080258E8 - str r0, [r2] - adds r1, r7, r1 - movs r0, 0x6 - str r0, [r1] - adds r6, 0x1 - lsls r1, r6, 3 - adds r2, r3, r1 - ldr r0, _080258EC - str r0, [r2] - adds r1, r7, r1 - movs r0, 0x5 - str r0, [r1] - adds r6, 0x1 - lsls r1, r6, 3 - adds r3, r1 - movs r0, 0 - str r0, [r3] - adds r1, r7, r1 - movs r0, 0x1 - str r0, [r1] - movs r3, 0 - mov r12, r4 - cmp r3, r6 - bge _080258B2 - movs r1, 0x84 - lsls r1, 1 - adds r4, r5, r1 - adds r2, r7, 0 -_0802589A: - ldrh r0, [r4] - cmp r0, 0 - bne _080258A8 - ldr r1, [r2] - ldr r0, [r5, 0x70] - cmp r1, r0 - beq _08025916 -_080258A8: - adds r4, 0x2 - adds r2, 0x8 - adds r3, 0x1 - cmp r3, r6 - blt _0802589A -_080258B2: - movs r3, 0 - cmp r3, r6 - bge _08025916 - mov r2, r12 - ldr r1, [r2] - movs r4, 0x84 - lsls r4, 1 - adds r0, r1, r4 - ldrh r0, [r0] - cmp r0, 0 - bne _080258F0 - adds r0, r1, 0 - adds r0, 0xCC - ldr r0, [r0] - str r0, [r1, 0x70] - b _08025916 - .align 2, 0 -_080258D4: .4byte gUnknown_80DD2CC -_080258D8: .4byte 0x0000013d -_080258DC: .4byte gUnknown_203B2B4 -_080258E0: .4byte gUnknown_80DD2D4 -_080258E4: .4byte gUnknown_80DD2DC -_080258E8: .4byte gUnknown_80DD2E4 -_080258EC: .4byte gUnknown_80DD2EC -_080258F0: - adds r3, 0x1 - cmp r3, r6 - bge _08025916 - mov r0, r12 - ldr r2, [r0] - lsls r0, r3, 1 - movs r4, 0x84 - lsls r4, 1 - adds r1, r2, r4 - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _080258F0 - lsls r0, r3, 3 - adds r1, r2, 0 - adds r1, 0xCC - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x70] -_08025916: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8025728 - - thumb_func_start sub_802591C -sub_802591C: - push {r4-r7,lr} - ldr r5, _080259B8 - ldr r0, [r5] - movs r7, 0x84 - lsls r7, 1 - adds r0, r7 - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r1, [r5] - adds r2, r1, 0 - adds r2, 0xC8 - ldr r0, _080259BC - str r0, [r2] - adds r1, 0xCC - movs r0, 0xA - str r0, [r1] - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - bne _08025952 - ldr r0, [r5] - adds r1, r7, 0 - adds r0, r1 - movs r1, 0x1 - strh r1, [r0] -_08025952: - ldr r4, [r5] - movs r2, 0x1 - adds r1, r4, 0 - adds r1, 0xD0 - ldr r0, _080259C0 - ldr r0, [r0] - str r0, [r1] - adds r1, 0x4 - movs r0, 0x4 - str r0, [r1] - movs r6, 0x2 - adds r1, 0x4 - movs r0, 0 - str r0, [r1] - adds r0, r4, 0 - adds r0, 0xDC - str r2, [r0] - movs r3, 0 - mov r12, r4 - adds r4, r7 - mov r2, r12 - adds r2, 0xCC -_0802597E: - ldrh r0, [r4] - cmp r0, 0 - bne _0802598E - ldr r1, [r2] - mov r7, r12 - ldr r0, [r7, 0x74] - cmp r1, r0 - beq _080259E8 -_0802598E: - adds r4, 0x2 - adds r2, 0x8 - adds r3, 0x1 - cmp r3, r6 - blt _0802597E - movs r3, 0 - cmp r3, r6 - bge _080259E8 - ldr r1, [r5] - movs r2, 0x84 - lsls r2, 1 - adds r0, r1, r2 - ldrh r0, [r0] - cmp r0, 0 - bne _080259C4 - adds r0, r1, 0 - adds r0, 0xCC - ldr r0, [r0] - str r0, [r1, 0x74] - b _080259E8 - .align 2, 0 -_080259B8: .4byte gUnknown_203B2B4 -_080259BC: .4byte gUnknown_80DD2B0 -_080259C0: .4byte gUnknown_80D4970 -_080259C4: - adds r3, 0x1 - cmp r3, r6 - bge _080259E8 - ldr r2, [r5] - lsls r0, r3, 1 - movs r4, 0x84 - lsls r4, 1 - adds r1, r2, r4 - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _080259C4 - lsls r0, r3, 3 - adds r1, r2, 0 - adds r1, 0xCC - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x74] -_080259E8: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_802591C - - thumb_func_start sub_80259F0 -sub_80259F0: - push {lr} - movs r0, 0x1 - bl sub_8023A94 - cmp r0, 0x3 - beq _08025A0C - cmp r0, 0x3 - bhi _08025A06 - cmp r0, 0x2 - beq _08025A74 - b _08025A7E -_08025A06: - cmp r0, 0x4 - beq _08025A40 - b _08025A7E -_08025A0C: - bl sub_8023B44 - ldr r1, _08025A38 - ldr r1, [r1] - strh r0, [r1, 0xE] - ldr r3, _08025A3C - movs r0, 0xE - ldrsh r2, [r1, r0] - movs r0, 0x58 - muls r2, r0 - ldr r0, [r3] - adds r0, r2 - str r0, [r1, 0x1C] - movs r2, 0xE - ldrsh r0, [r1, r2] - adds r1, 0x18 - bl PeekPokemonItem - movs r0, 0x3 - bl sub_8025434 - b _08025A7E - .align 2, 0 -_08025A38: .4byte gUnknown_203B2B4 -_08025A3C: .4byte gRecruitedPokemonRef -_08025A40: - bl sub_8023B44 - ldr r1, _08025A6C - ldr r1, [r1] - strh r0, [r1, 0xE] - ldr r3, _08025A70 - movs r0, 0xE - ldrsh r2, [r1, r0] - movs r0, 0x58 - muls r2, r0 - ldr r0, [r3] - adds r0, r2 - str r0, [r1, 0x1C] - movs r2, 0xE - ldrsh r0, [r1, r2] - adds r1, 0x18 - bl PeekPokemonItem - movs r0, 0x4 - bl sub_8025434 - b _08025A7E - .align 2, 0 -_08025A6C: .4byte gUnknown_203B2B4 -_08025A70: .4byte gRecruitedPokemonRef -_08025A74: - bl sub_8023C60 - movs r0, 0x13 - bl sub_8025434 -_08025A7E: - pop {r0} - bx r0 - thumb_func_end sub_80259F0 - - thumb_func_start sub_8025A84 -sub_8025A84: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_8023A94 - ldr r4, _08025AC8 - ldr r0, [r4] - adds r0, 0x78 - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _08025AB4 - ldr r0, [r4] - adds r0, 0x78 - mov r1, sp - bl sub_8013114 - ldr r1, [sp] - cmp r1, 0x1 - beq _08025AB4 - ldr r0, [r4] - str r1, [r0, 0x70] -_08025AB4: - ldr r0, [sp] - subs r0, 0x1 - cmp r0, 0xA - bls _08025ABE - b _08025BC2 -_08025ABE: - lsls r0, 2 - ldr r1, _08025ACC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08025AC8: .4byte gUnknown_203B2B4 -_08025ACC: .4byte _08025AD0 - .align 2, 0 -_08025AD0: - .4byte _08025BBC - .4byte _08025BC2 - .4byte _08025BC2 - .4byte _08025BAC - .4byte _08025BB4 - .4byte _08025B9C - .4byte _08025AFC - .4byte _08025BA4 - .4byte _08025B70 - .4byte _08025B20 - .4byte _08025B28 -_08025AFC: - ldr r4, _08025B1C - ldr r0, [r4] - ldr r0, [r0, 0x1C] - movs r1, 0x8 - ldrsh r0, [r0, r1] - bl GetFriendArea - ldr r1, [r4] - strb r0, [r1, 0xD] - bl sub_8023C60 - movs r0, 0x13 - bl sub_8025434 - b _08025BC2 - .align 2, 0 -_08025B1C: .4byte gUnknown_203B2B4 -_08025B20: - movs r0, 0xB - bl sub_8025434 - b _08025BC2 -_08025B28: - ldr r0, _08025B68 - bl PlaySound - ldr r4, _08025B6C - ldr r1, [r4] - ldrb r0, [r1, 0x18] - cmp r0, 0 - beq _08025B40 - adds r0, r1, 0 - adds r0, 0x18 - bl AddHeldItemToInventory -_08025B40: - bl FillInventoryGaps - ldr r0, [r4] - movs r1, 0 - strb r1, [r0, 0x18] - ldr r0, [r4] - strb r1, [r0, 0x19] - ldr r1, [r4] - movs r2, 0xE - ldrsh r0, [r1, r2] - adds r1, 0x18 - bl GivePokemonItem - bl nullsub_104 - movs r0, 0xA - bl sub_8025434 - b _08025BC2 - .align 2, 0 -_08025B68: .4byte 0x0000014d -_08025B6C: .4byte gUnknown_203B2B4 -_08025B70: - ldr r0, _08025B94 - ldr r0, [r0] - ldr r2, [r0, 0x1C] - ldrh r1, [r2] - ldr r0, _08025B98 - ands r0, r1 - strh r0, [r2] - bl nullsub_104 - bl sub_808ED00 - bl sub_8023C60 - movs r0, 0x7 - bl sub_8025434 - b _08025BC2 - .align 2, 0 -_08025B94: .4byte gUnknown_203B2B4 -_08025B98: .4byte 0x0000fffd -_08025B9C: - movs r0, 0xF - bl sub_8025434 - b _08025BC2 -_08025BA4: - movs r0, 0x12 - bl sub_8025434 - b _08025BC2 -_08025BAC: - movs r0, 0x4 - bl sub_8025434 - b _08025BC2 -_08025BB4: - movs r0, 0x5 - bl sub_8025434 - b _08025BC2 -_08025BBC: - movs r0, 0x2 - bl sub_8025434 -_08025BC2: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8025A84 - - thumb_func_start sub_8025BCC -sub_8025BCC: - push {lr} - bl sub_80244E4 - cmp r0, 0x1 - bls _08025BE4 - cmp r0, 0x3 - bhi _08025BE4 - bl sub_802453C - movs r0, 0x2 - bl sub_8025434 -_08025BE4: - pop {r0} - bx r0 - thumb_func_end sub_8025BCC - - thumb_func_start sub_8025BE8 -sub_8025BE8: - push {lr} - bl sub_801BF48 - cmp r0, 0x1 - bls _08025C00 - cmp r0, 0x3 - bhi _08025C00 - bl sub_801BF98 - movs r0, 0x2 - bl sub_8025434 -_08025C00: - pop {r0} - bx r0 - thumb_func_end sub_8025BE8 - - thumb_func_start sub_8025C04 -sub_8025C04: - push {r4,lr} - movs r0, 0x1 - bl sub_801A6E8 - cmp r0, 0x4 - bhi _08025CAE - lsls r0, 2 - ldr r1, _08025C1C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08025C1C: .4byte _08025C20 - .align 2, 0 -_08025C20: - .4byte _08025CAE - .4byte _08025CAE - .4byte _08025CA4 - .4byte _08025C34 - .4byte _08025C68 -_08025C34: - bl sub_801A8AC - ldr r4, _08025C60 - ldr r2, [r4] - str r0, [r2, 0x10] - ldr r3, _08025C64 - ldr r1, [r3] - lsls r0, 2 - adds r1, r0 - ldrb r0, [r1, 0x2] - strb r0, [r2, 0x14] - ldr r2, [r4] - ldr r1, [r3] - ldr r0, [r2, 0x10] - lsls r0, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - strb r0, [r2, 0x15] - movs r0, 0xD - bl sub_8025434 - b _08025CAE - .align 2, 0 -_08025C60: .4byte gUnknown_203B2B4 -_08025C64: .4byte gTeamInventory_203B460 -_08025C68: - bl sub_801A8AC - ldr r4, _08025C9C - ldr r2, [r4] - str r0, [r2, 0x10] - ldr r3, _08025CA0 - ldr r1, [r3] - lsls r0, 2 - adds r1, r0 - ldrb r0, [r1, 0x2] - strb r0, [r2, 0x14] - ldr r2, [r4] - ldr r1, [r3] - ldr r0, [r2, 0x10] - lsls r0, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - strb r0, [r2, 0x15] - movs r0, 0 - bl sub_8099690 - movs r0, 0xE - bl sub_8025434 - b _08025CAE - .align 2, 0 -_08025C9C: .4byte gUnknown_203B2B4 -_08025CA0: .4byte gTeamInventory_203B460 -_08025CA4: - bl sub_801A928 - movs r0, 0x2 - bl sub_8025434 -_08025CAE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8025C04 - - thumb_func_start sub_8025CB4 -sub_8025CB4: - push {r4-r6,lr} - sub sp, 0x14 - movs r0, 0 - str r0, [sp, 0xC] - bl sub_801A6E8 - ldr r4, _08025CF4 - ldr r0, [r4] - adds r0, 0x78 - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _08025CE4 - ldr r0, [r4] - adds r0, 0x78 - add r1, sp, 0xC - bl sub_8013114 - ldr r1, [sp, 0xC] - cmp r1, 0x1 - beq _08025CE4 - ldr r0, [r4] - str r1, [r0, 0x74] -_08025CE4: - ldr r0, [sp, 0xC] - cmp r0, 0x4 - beq _08025D74 - cmp r0, 0x4 - bgt _08025CF8 - cmp r0, 0x1 - beq _08025D82 - b _08025D88 - .align 2, 0 -_08025CF4: .4byte gUnknown_203B2B4 -_08025CF8: - cmp r0, 0xA - bne _08025D88 - movs r6, 0x8 - ldr r0, _08025D68 - bl PlaySound - ldr r5, _08025D6C - ldr r0, [r5] - ldr r0, [r0, 0x10] - bl ShiftItemsDownFrom - bl FillInventoryGaps - ldr r1, [r5] - ldrb r0, [r1, 0x18] - cmp r0, 0 - beq _08025D24 - adds r0, r1, 0 - adds r0, 0x18 - bl AddHeldItemToInventory - movs r6, 0x9 -_08025D24: - add r4, sp, 0x10 - ldr r1, [r5] - adds r1, 0x14 - adds r0, r4, 0 - bl HeldItemToSlot - movs r1, 0 - str r1, [sp] - mov r0, sp - strb r1, [r0, 0x4] - mov r1, sp - movs r0, 0x1 - strb r0, [r1, 0x8] - strb r0, [r4] - ldr r0, _08025D70 - adds r1, r4, 0 - mov r2, sp - bl sub_8090E14 - ldr r1, [r5] - movs r2, 0xE - ldrsh r0, [r1, r2] - adds r1, 0x14 - bl GivePokemonItem - bl sub_801A928 - bl nullsub_104 - adds r0, r6, 0 - bl sub_8025434 - b _08025D88 - .align 2, 0 -_08025D68: .4byte 0x0000014d -_08025D6C: .4byte gUnknown_203B2B4 -_08025D70: .4byte gUnknown_202DEA8 -_08025D74: - movs r0, 0 - bl sub_8099690 - movs r0, 0xE - bl sub_8025434 - b _08025D88 -_08025D82: - movs r0, 0xC - bl sub_8025434 -_08025D88: - add sp, 0x14 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8025CB4 - - thumb_func_start sub_8025D90 -sub_8025D90: - push {lr} - bl sub_801B410 - cmp r0, 0x1 - bls _08025DA8 - cmp r0, 0x3 - bhi _08025DA8 - bl sub_801B450 - movs r0, 0xC - bl sub_8025434 -_08025DA8: - pop {r0} - bx r0 - thumb_func_end sub_8025D90 - - thumb_func_start sub_8025DAC -sub_8025DAC: - push {lr} - movs r0, 0x1 - bl sub_801EF38 - cmp r0, 0x3 - beq _08025DC6 - cmp r0, 0x3 - bhi _08025DC2 - cmp r0, 0x2 - beq _08025DE4 - b _08025DFE -_08025DC2: - cmp r0, 0x4 - bne _08025DFE -_08025DC6: - bl sub_801F194 - ldr r1, _08025DE0 - ldr r1, [r1] - str r0, [r1, 0x20] - lsls r0, 3 - adds r0, r1, r0 - ldrh r0, [r0, 0x2A] - strh r0, [r1, 0x24] - movs r0, 0x11 - bl sub_8025434 - b _08025DFE - .align 2, 0 -_08025DE0: .4byte gUnknown_203B2B4 -_08025DE4: - bl sub_801F214 - ldr r0, _08025E04 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x28 - ldr r1, [r1, 0x1C] - adds r1, 0x2C - bl sub_8094060 - movs r0, 0x2 - bl sub_8025434 -_08025DFE: - pop {r0} - bx r0 - .align 2, 0 -_08025E04: .4byte gUnknown_203B2B4 - thumb_func_end sub_8025DAC - - thumb_func_start sub_8025E08 -sub_8025E08: - push {lr} - bl sub_801F890 - cmp r0, 0x1 - bls _08025E20 - cmp r0, 0x3 - bhi _08025E20 - bl sub_801F8D0 - movs r0, 0x10 - bl sub_8025434 -_08025E20: - pop {r0} - bx r0 - thumb_func_end sub_8025E08 - - thumb_func_start sub_8025E24 -sub_8025E24: - push {lr} - bl sub_8016080 - cmp r0, 0x3 - bhi _08025E40 - cmp r0, 0x2 - bcc _08025E40 - bl sub_80160D8 - bl nullsub_104 - movs r0, 0x2 - bl sub_8025434 -_08025E40: - pop {r0} - bx r0 - thumb_func_end sub_8025E24 - - thumb_func_start sub_8025E44 -sub_8025E44: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _08025E5C - ldr r0, _08025E64 - ldr r0, [r0] - ldr r0, [r0, 0x8] - bl sub_8025434 -_08025E5C: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_08025E64: .4byte gUnknown_203B2B4 - thumb_func_end sub_8025E44 - - thumb_func_start sub_8025E68 -sub_8025E68: - push {r4-r6,lr} - sub sp, 0x14 - adds r6, r0, 0 - adds r5, r1, 0 - bl sub_8008C54 - adds r0, r6, 0 - bl sub_80073B8 - add r4, sp, 0x10 - adds r0, r4, 0 - adds r1, r5, 0 - bl HeldItemToSlot - movs r5, 0 - str r5, [sp, 0x4] - add r0, sp, 0x4 - strb r5, [r0, 0x4] - adds r1, r0, 0 - movs r0, 0x1 - strb r0, [r1, 0x8] - strb r0, [r4] - ldr r0, _08025EBC - adds r1, r4, 0 - add r2, sp, 0x4 - bl sub_8090E14 - ldr r2, _08025EC0 - str r5, [sp] - movs r0, 0x4 - movs r1, 0x3 - adds r3, r6, 0 - bl xxx_format_and_draw - adds r0, r6, 0 - bl sub_80073E0 - add sp, 0x14 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08025EBC: .4byte gUnknown_202DE58 -_08025EC0: .4byte gUnknown_80DD2F8 - thumb_func_end sub_8025E68 - - thumb_func_start sub_8025EC4 -sub_8025EC4: - push {lr} - adds r1, r0, 0 - ldrb r0, [r1, 0x2] - cmp r0, 0 - bne _08025EE8 - movs r2, 0 - ldrb r0, [r1, 0x4] - cmp r0, 0x41 - bne _08025ED8 - movs r2, 0x1 -_08025ED8: - cmp r2, 0 - beq _08025EEC - movs r0, 0x8 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - bne _08025EEC -_08025EE8: - movs r0, 0 - b _08025EEE -_08025EEC: - movs r0, 0x1 -_08025EEE: - pop {r1} - bx r1 - thumb_func_end sub_8025EC4 - - thumb_func_start sub_8025EF4 -sub_8025EF4: - push {r4-r6,lr} - adds r4, r0, 0 - ldr r6, _08025F1C - movs r0, 0xA0 - lsls r0, 2 - movs r1, 0x8 - bl MemoryAlloc - adds r1, r0, 0 - str r1, [r6] - str r4, [r1, 0x18] - movs r5, 0 - ldr r0, _08025F20 - ldr r0, [r0] - cmp r4, r0 - bne _08025F24 - strh r5, [r1, 0xA] - adds r4, r6, 0 - b _08025F48 - .align 2, 0 -_08025F1C: .4byte gUnknown_203B2B8 -_08025F20: .4byte gRecruitedPokemonRef -_08025F24: - adds r5, 0x1 - movs r0, 0xCE - lsls r0, 1 - ldr r4, _08025F60 - cmp r5, r0 - bgt _08025F48 - ldr r3, [r4] - ldr r2, _08025F64 - lsls r0, r5, 16 - asrs r0, 16 - movs r1, 0x58 - muls r1, r0 - ldr r0, [r2] - adds r0, r1 - ldr r1, [r3, 0x18] - cmp r1, r0 - bne _08025F24 - strh r5, [r3, 0xA] -_08025F48: - ldr r1, [r4] - movs r0, 0 - str r0, [r1, 0x70] - str r0, [r1, 0x74] - str r0, [r1, 0x78] - strb r0, [r1, 0x8] - bl sub_8026074 - movs r0, 0x1 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08025F60: .4byte gUnknown_203B2B8 -_08025F64: .4byte gRecruitedPokemonRef - thumb_func_end sub_8025EF4 - - thumb_func_start sub_8025F68 -sub_8025F68: - push {lr} - ldr r0, _08025F80 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0x19 - bhi _0802603A - lsls r0, 2 - ldr r1, _08025F84 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08025F80: .4byte gUnknown_203B2B8 -_08025F84: .4byte _08025F88 - .align 2, 0 -_08025F88: - .4byte _08025FF0 - .4byte _08025FF8 - .4byte _08025FF8 - .4byte _08025FFE - .4byte _08026004 - .4byte _0802603A - .4byte _0802603A - .4byte _0802603A - .4byte _0802603A - .4byte _0802603A - .4byte _0802603A - .4byte _0802603A - .4byte _0802600A - .4byte _08026010 - .4byte _08026016 - .4byte _0802603A - .4byte _0802603A - .4byte _0802603A - .4byte _0802601C - .4byte _0802601C - .4byte _08026022 - .4byte _08026028 - .4byte _0802602E - .4byte _0802602E - .4byte _08026034 - .4byte _08026040 -_08025FF0: - movs r0, 0x1 - bl sub_8026074 - b _08026044 -_08025FF8: - bl sub_80268CC - b _08026044 -_08025FFE: - bl sub_8026A78 - b _08026044 -_08026004: - bl sub_8026A94 - b _08026044 -_0802600A: - bl sub_8026AB0 - b _08026044 -_08026010: - bl sub_8026B10 - b _08026044 -_08026016: - bl sub_8026B48 - b _08026044 -_0802601C: - bl sub_8026B64 - b _08026044 -_08026022: - bl sub_8026C14 - b _08026044 -_08026028: - bl sub_8026CF0 - b _08026044 -_0802602E: - bl sub_8026D0C - b _08026044 -_08026034: - bl sub_8026D6C - b _08026044 -_0802603A: - bl sub_8026D88 - b _08026044 -_08026040: - movs r0, 0x3 - b _08026046 -_08026044: - movs r0, 0 -_08026046: - pop {r1} - bx r1 - thumb_func_end sub_8025F68 - - thumb_func_start sub_802604C -sub_802604C: - ldr r0, _08026054 - ldr r0, [r0] - ldrb r0, [r0, 0x8] - bx lr - .align 2, 0 -_08026054: .4byte gUnknown_203B2B8 - thumb_func_end sub_802604C - - thumb_func_start sub_8026058 -sub_8026058: - push {r4,lr} - ldr r4, _08026070 - ldr r0, [r4] - cmp r0, 0 - beq _0802606A - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0802606A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08026070: .4byte gUnknown_203B2B8 - thumb_func_end sub_8026058 - - thumb_func_start sub_8026074 -sub_8026074: - push {lr} - ldr r1, _08026088 - ldr r1, [r1] - str r0, [r1] - bl sub_802608C - bl sub_80261D0 - pop {r0} - bx r0 - .align 2, 0 -_08026088: .4byte gUnknown_203B2B8 - thumb_func_end sub_8026074 - - thumb_func_start sub_802608C -sub_802608C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r4, _080260B8 - ldr r0, [r4] - movs r5, 0x88 - lsls r5, 2 - adds r0, r5 - bl sub_8006518 - ldr r0, [r4] - ldr r0, [r0] - cmp r0, 0x1 - blt _08026178 - cmp r0, 0x2 - ble _080260BC - cmp r0, 0x14 - beq _0802614C - b _08026178 - .align 2, 0 -_080260B8: .4byte gUnknown_203B2B8 -_080260BC: - ldr r0, _0802613C - mov r12, r0 - ldr r1, _08026140 - mov r8, r1 - mov r9, r4 - mov r10, r5 - movs r3, 0 - movs r2, 0x3 -_080260CC: - mov r5, r9 - ldr r1, [r5] - adds r1, r3 - add r1, r10 - ldr r0, _08026144 - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - adds r3, 0x18 - subs r2, 0x1 - cmp r2, 0 - bge _080260CC - ldr r1, [r4] - movs r6, 0x88 - lsls r6, 2 - adds r1, r6 - mov r0, r12 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldr r1, [r4] - movs r0, 0x9A - lsls r0, 2 - adds r1, r0 - mov r0, r8 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r6,r7} - stm r1!, {r2,r6,r7} - bl sub_80264CC - ldr r2, [r4] - movs r0, 0x94 - lsls r0, 2 - adds r2, r0 - ldr r1, _08026148 - ldm r1!, {r3,r5,r6} - stm r2!, {r3,r5,r6} - ldm r1!, {r3,r5,r7} - stm r2!, {r3,r5,r7} - ldr r1, [r4] - adds r0, r1, r0 - movs r6, 0xB6 - lsls r6, 1 - adds r1, r6 - bl sub_8012CAC - ldr r0, [r4] - movs r7, 0x97 - lsls r7, 2 - adds r0, r7 - movs r1, 0x9 - strh r1, [r0] - b _080261A2 - .align 2, 0 -_0802613C: .4byte gUnknown_80DD358 -_08026140: .4byte gUnknown_80DD370 -_08026144: .4byte gUnknown_80DD310 -_08026148: .4byte gUnknown_80DD328 -_0802614C: - bl sub_802678C - ldr r2, [r4] - movs r0, 0x94 - lsls r0, 2 - adds r2, r0 - ldr r1, _08026174 - ldm r1!, {r3,r5,r6} - stm r2!, {r3,r5,r6} - ldm r1!, {r3,r5,r7} - stm r2!, {r3,r5,r7} - ldr r1, [r4] - adds r0, r1, r0 - movs r6, 0xB6 - lsls r6, 1 - adds r1, r6 - bl sub_8012CAC - b _080261A2 - .align 2, 0 -_08026174: .4byte gUnknown_80DD340 -_08026178: - ldr r7, _080261C8 - mov r8, r7 - movs r0, 0x88 - lsls r0, 2 - mov r9, r0 - ldr r4, _080261CC - movs r3, 0 - movs r2, 0x3 -_08026188: - mov r5, r8 - ldr r1, [r5] - adds r1, r3 - add r1, r9 - adds r0, r4, 0 - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - adds r3, 0x18 - subs r2, 0x1 - cmp r2, 0 - bge _08026188 -_080261A2: - bl ResetUnusedInputStruct - ldr r0, _080261C8 - ldr r0, [r0] - movs r6, 0x88 - lsls r6, 2 - adds r0, r6 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080261C8: .4byte gUnknown_203B2B8 -_080261CC: .4byte gUnknown_80DD310 - thumb_func_end sub_802608C - - thumb_func_start sub_80261D0 -sub_80261D0: - push {r4,r5,lr} - sub sp, 0x18 - ldr r1, _080261EC - ldr r0, [r1] - ldr r0, [r0] - adds r4, r1, 0 - cmp r0, 0x19 - bls _080261E2 - b _080264BA -_080261E2: - lsls r0, 2 - ldr r1, _080261F0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080261EC: .4byte gUnknown_203B2B8 -_080261F0: .4byte _080261F4 - .align 2, 0 -_080261F4: - .4byte _080264BA - .4byte _0802625C - .4byte _080262A8 - .4byte _080262EC - .4byte _080262FA - .4byte _080263F8 - .4byte _0802640C - .4byte _08026420 - .4byte _08026434 - .4byte _08026448 - .4byte _0802648A - .4byte _080264A8 - .4byte _08026392 - .4byte _080263AC - .4byte _08026306 - .4byte _08026464 - .4byte _08026474 - .4byte _08026484 - .4byte _08026310 - .4byte _0802631E - .4byte _08026326 - .4byte _08026350 - .4byte _08026362 - .4byte _08026388 - .4byte _080263E0 - .4byte _080264BA -_0802625C: - movs r0, 0x3 - bl sub_8026E08 - ldr r5, _080262A0 - ldr r1, [r5] - adds r1, 0x14 - movs r0, 0 - bl sub_8026DAC - ldr r4, _080262A4 - ldr r0, [r5] - ldr r1, [r0, 0x18] - adds r0, r4, 0 - movs r2, 0x7 - bl PrintColoredPokeNameToBuffer - adds r4, 0x50 - ldr r0, [r5] - ldr r1, [r0, 0x18] - adds r0, r4, 0 - movs r2, 0x6 - bl PrintColoredPokeNameToBuffer - ldr r2, [r5] - adds r0, r2, 0 - adds r0, 0x7C - movs r3, 0xB6 - lsls r3, 1 - adds r1, r2, r3 - movs r4, 0x83 - lsls r4, 2 - adds r3, r2, r4 - ldr r2, [r2, 0x70] - b _0802633E - .align 2, 0 -_080262A0: .4byte gUnknown_203B2B8 -_080262A4: .4byte gAvailablePokemonNames -_080262A8: - movs r0, 0x3 - bl sub_8026E08 - ldr r5, _080262E4 - ldr r1, [r5] - adds r1, 0x14 - movs r0, 0 - bl sub_8026DAC - ldr r4, _080262E8 - ldr r0, [r5] - ldr r1, [r0, 0x18] - adds r0, r4, 0 - movs r2, 0x7 - bl PrintColoredPokeNameToBuffer - adds r4, 0x50 - ldr r0, [r5] - ldr r1, [r0, 0x18] - adds r0, r4, 0 - movs r2, 0x6 - bl PrintColoredPokeNameToBuffer - ldr r0, [r5] - adds r0, 0x7C - movs r1, 0x1 - bl sub_8012EA4 - b _080264BA - .align 2, 0 -_080262E4: .4byte gUnknown_203B2B8 -_080262E8: .4byte gAvailablePokemonNames -_080262EC: - ldr r0, [r4] - movs r1, 0xA - ldrsh r0, [r0, r1] - movs r1, 0x2 - bl sub_8024458 - b _080264BA -_080262FA: - ldr r0, [r4] - movs r3, 0xA - ldrsh r0, [r0, r3] - bl sub_801BEEC - b _080264BA -_08026306: - ldr r0, [r4] - ldr r0, [r0, 0x18] - bl sub_80227B8 - b _080264BA -_08026310: - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0xA - bl sub_801A5D8 - b _080264BA -_0802631E: - movs r0, 0x1 - bl sub_801A8D0 - b _080264BA -_08026326: - bl sub_801A9E0 - ldr r0, _0802634C - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0xCC - movs r4, 0xB6 - lsls r4, 1 - adds r1, r2, r4 - adds r4, 0xA0 - adds r3, r2, r4 - ldr r2, [r2, 0x74] -_0802633E: - str r2, [sp] - movs r2, 0x2 - str r2, [sp, 0x4] - movs r2, 0 - bl sub_8012D60 - b _080264BA - .align 2, 0 -_0802634C: .4byte gUnknown_203B2B8 -_08026350: - ldr r1, [r4] - adds r1, 0x10 - add r0, sp, 0x14 - bl HeldItemToSlot - add r0, sp, 0x14 - bl sub_801B3C0 - b _080264BA -_08026362: - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x28 - ldr r1, [r1, 0x18] - adds r1, 0x2C - bl unk_CopyMoves4To8 - ldr r2, [r4] - movs r0, 0xA - ldrsh r1, [r2, r0] - adds r2, 0x28 - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x3 - movs r3, 0 - bl sub_801EE10 - b _080264BA -_08026388: - movs r0, 0x1 - movs r1, 0 - bl sub_801F1B0 - b _080264BA -_08026392: - bl sub_8026878 - ldr r0, _080263A4 - ldr r1, _080263A8 - ldr r3, [r1] - movs r1, 0xDE - lsls r1, 1 - adds r3, r1 - b _080263BC - .align 2, 0 -_080263A4: .4byte gUnknown_80DD388 -_080263A8: .4byte gUnknown_203B2B8 -_080263AC: - bl sub_8026878 - ldr r0, _080263D8 - ldr r1, _080263DC - ldr r3, [r1] - movs r4, 0xDE - lsls r4, 1 - adds r3, r4 -_080263BC: - movs r2, 0 - str r2, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - str r2, [sp, 0x8] - str r2, [sp, 0xC] - adds r1, 0xFD - str r1, [sp, 0x10] - movs r1, 0 - movs r2, 0x3 - bl sub_8014248 - b _080264BA - .align 2, 0 -_080263D8: .4byte gUnknown_80DD420 -_080263DC: .4byte gUnknown_203B2B8 -_080263E0: - ldr r2, [r4] - ldr r0, [r2, 0x20] - adds r1, r2, 0 - adds r1, 0x28 - adds r2, 0x68 - bl GetLinkedSequence - ldr r0, [r4] - adds r0, 0x68 - bl sub_801F808 - b _080264BA -_080263F8: - ldr r1, [r4] - movs r0, 0x19 - str r0, [r1, 0x4] - movs r0, 0xCF - bl PlaySound - ldr r0, _08026408 - b _08026492 - .align 2, 0 -_08026408: .4byte gUnknown_80DD4C4 -_0802640C: - ldr r1, [r4] - movs r0, 0x19 - str r0, [r1, 0x4] - movs r0, 0xCF - bl PlaySound - ldr r0, _0802641C - b _08026492 - .align 2, 0 -_0802641C: .4byte gUnknown_80DD4F4 -_08026420: - ldr r1, [r4] - movs r0, 0x19 - str r0, [r1, 0x4] - movs r0, 0xCC - bl PlaySound - ldr r0, _08026430 - b _08026492 - .align 2, 0 -_08026430: .4byte gUnknown_80DD534 -_08026434: - ldr r1, [r4] - movs r0, 0x9 - str r0, [r1, 0x4] - movs r0, 0xCA - bl PlaySound - ldr r0, _08026444 - b _08026492 - .align 2, 0 -_08026444: .4byte gUnknown_80DD564 -_08026448: - bl sub_8026FA4 - ldr r4, _08026460 - ldr r0, [r4] - ldr r0, [r0, 0x18] - bl sub_808D31C - ldr r1, [r4] - movs r0, 0x1 - strb r0, [r1, 0x8] - b _080264BA - .align 2, 0 -_08026460: .4byte gUnknown_203B2B8 -_08026464: - ldr r1, [r4] - movs r0, 0x2 - str r0, [r1, 0x4] - ldr r0, _08026470 - b _08026492 - .align 2, 0 -_08026470: .4byte gUnknown_80DD594 -_08026474: - ldr r1, [r4] - movs r0, 0x2 - str r0, [r1, 0x4] - ldr r0, _08026480 - b _08026492 - .align 2, 0 -_08026480: .4byte gUnknown_80DD5B8 -_08026484: - ldr r1, [r4] - movs r0, 0x2 - b _0802648E -_0802648A: - ldr r1, [r4] - movs r0, 0x19 -_0802648E: - str r0, [r1, 0x4] - ldr r0, _080264A0 -_08026492: - ldr r3, _080264A4 - movs r1, 0 - movs r2, 0 - bl sub_80141B4 - b _080264BA - .align 2, 0 -_080264A0: .4byte gUnknown_80DD60C -_080264A4: .4byte 0x00000101 -_080264A8: - ldr r1, [r4] - movs r0, 0x19 - str r0, [r1, 0x4] - ldr r0, _080264C4 - ldr r3, _080264C8 - movs r1, 0 - movs r2, 0 - bl sub_80141B4 -_080264BA: - add sp, 0x18 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080264C4: .4byte gUnknown_80DD63C -_080264C8: .4byte 0x00000101 - thumb_func_end sub_80261D0 - - thumb_func_start sub_80264CC -sub_80264CC: - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r3, _08026574 - ldr r4, _08026578 - ldr r0, [r4] - movs r1, 0xA - ldrsh r2, [r0, r1] - movs r1, 0x58 - muls r2, r1 - ldr r1, [r3] - adds r1, r2 - mov r8, r1 - movs r2, 0x83 - lsls r2, 2 - adds r0, r2 - movs r1, 0 - movs r2, 0x14 - bl MemoryFill16 - ldr r1, [r4] - ldr r0, [r1, 0x18] - ldrb r0, [r0, 0x2] - strb r0, [r1, 0x1C] - ldr r1, [r4] - movs r3, 0xA - ldrsh r0, [r1, r3] - adds r1, 0x14 - bl PeekPokemonItem - mov r1, r8 - ldrh r0, [r1] - lsrs r0, 1 - movs r5, 0x1 - ands r0, r5 - cmp r0, 0 - beq _08026584 - ldr r2, [r4] - movs r3, 0xB6 - lsls r3, 1 - adds r1, r2, r3 - ldr r0, _0802657C - str r0, [r1] - movs r0, 0xB8 - lsls r0, 1 - adds r1, r2, r0 - movs r0, 0x7 - str r0, [r1] - mov r0, r8 - bl sub_8026E88 - lsls r0, 24 - cmp r0, 0 - bne _08026542 - ldr r0, [r4] - movs r1, 0x83 - lsls r1, 2 - adds r0, r1 - strh r5, [r0] -_08026542: - movs r6, 0x1 - movs r0, 0x8 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - beq _080265B4 - mov r2, r8 - ldrb r0, [r2, 0x2] - cmp r0, 0 - bne _080265B4 - ldr r3, [r4] - movs r2, 0x8 - movs r4, 0xBA - lsls r4, 1 - adds r1, r3, r4 - ldr r0, _08026580 - str r0, [r1] - movs r1, 0xBC - lsls r1, 1 - adds r0, r3, r1 - str r2, [r0] - movs r6, 0x2 - b _080265B4 - .align 2, 0 -_08026574: .4byte gRecruitedPokemonRef -_08026578: .4byte gUnknown_203B2B8 -_0802657C: .4byte gPartyMenuStandBy -_08026580: .4byte gPartyMenuMakeLeader -_08026584: - ldr r2, [r4] - movs r3, 0xB6 - lsls r3, 1 - adds r1, r2, r3 - ldr r0, _08026734 - str r0, [r1] - movs r0, 0xB8 - lsls r0, 1 - adds r1, r2, r0 - movs r0, 0x6 - str r0, [r1] - movs r1, 0xA - ldrsh r0, [r2, r1] - bl sub_808D750 - lsls r0, 24 - cmp r0, 0 - bne _080265B2 - ldr r0, [r4] - movs r2, 0x83 - lsls r2, 2 - adds r0, r2 - strh r5, [r0] -_080265B2: - movs r6, 0x1 -_080265B4: - ldr r4, _08026738 - ldr r2, [r4] - lsls r3, r6, 3 - movs r7, 0xB6 - lsls r7, 1 - adds r0, r2, r7 - adds r0, r3 - ldr r1, _0802673C - str r1, [r0] - movs r5, 0xB8 - lsls r5, 1 - adds r2, r5 - adds r2, r3 - movs r0, 0xA - str r0, [r2] - bl HasGummiItem - lsls r0, 24 - cmp r0, 0 - bne _080265EC - ldr r0, [r4] - lsls r1, r6, 1 - movs r3, 0x83 - lsls r3, 2 - adds r0, r3 - adds r0, r1 - movs r1, 0x1 - strh r1, [r0] -_080265EC: - adds r6, 0x1 - ldr r2, [r4] - lsls r3, r6, 3 - adds r0, r2, r7 - adds r0, r3 - ldr r1, _08026740 - str r1, [r0] - adds r2, r5 - adds r2, r3 - movs r0, 0xB - str r0, [r2] - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - bne _0802661A - ldr r0, [r4] - lsls r1, r6, 1 - movs r2, 0x83 - lsls r2, 2 - adds r0, r2 - adds r0, r1 - movs r1, 0x1 - strh r1, [r0] -_0802661A: - adds r6, 0x1 - ldr r2, [r4] - lsls r3, r6, 3 - adds r0, r2, r7 - adds r0, r3 - ldr r1, _08026744 - str r1, [r0] - adds r2, r5 - adds r2, r3 - movs r0, 0xC - str r0, [r2] - bl GetNumberOfFilledInventorySlots - cmp r0, 0x13 - bgt _08026640 - ldr r0, [r4] - ldrb r0, [r0, 0x14] - cmp r0, 0 - bne _08026650 -_08026640: - ldr r0, [r4] - lsls r1, r6, 1 - movs r3, 0x83 - lsls r3, 2 - adds r0, r3 - adds r0, r1 - movs r1, 0x1 - strh r1, [r0] -_08026650: - adds r6, 0x1 - mov r4, r8 - ldrh r0, [r4] - lsrs r0, 1 - movs r5, 0x1 - ands r0, r5 - cmp r0, 0 - bne _0802669A - ldr r4, _08026738 - ldr r3, [r4] - lsls r2, r6, 3 - movs r1, 0xB6 - lsls r1, 1 - adds r0, r3, r1 - adds r0, r2 - ldr r1, _08026748 - str r1, [r0] - movs r1, 0xB8 - lsls r1, 1 - adds r0, r3, r1 - adds r0, r2 - movs r1, 0x9 - str r1, [r0] - mov r0, r8 - bl sub_8026EB8 - lsls r0, 24 - cmp r0, 0 - bne _08026698 - ldr r0, [r4] - lsls r1, r6, 1 - movs r2, 0x83 - lsls r2, 2 - adds r0, r2 - adds r0, r1 - strh r5, [r0] -_08026698: - adds r6, 0x1 -_0802669A: - ldr r4, _08026738 - ldr r5, [r4] - lsls r1, r6, 3 - movs r0, 0xB6 - lsls r0, 1 - adds r3, r5, r0 - adds r2, r3, r1 - ldr r0, _0802674C - str r0, [r2] - movs r2, 0xB8 - lsls r2, 1 - adds r7, r5, r2 - adds r1, r7, r1 - movs r0, 0x4 - str r0, [r1] - adds r6, 0x1 - lsls r1, r6, 3 - adds r2, r3, r1 - ldr r0, _08026750 - str r0, [r2] - adds r1, r7, r1 - movs r0, 0xD - str r0, [r1] - adds r6, 0x1 - lsls r1, r6, 3 - adds r2, r3, r1 - ldr r0, _08026754 - str r0, [r2] - adds r1, r7, r1 - movs r0, 0x5 - str r0, [r1] - adds r6, 0x1 - lsls r1, r6, 3 - adds r3, r1 - movs r0, 0 - str r0, [r3] - adds r1, r7, r1 - movs r0, 0x1 - str r0, [r1] - movs r3, 0 - mov r12, r4 - cmp r3, r6 - bge _08026710 - adds r4, r7, 0 - movs r0, 0x83 - lsls r0, 2 - adds r2, r5, r0 -_080266F8: - ldrh r0, [r2] - cmp r0, 0 - bne _08026706 - ldr r1, [r4] - ldr r0, [r5, 0x70] - cmp r1, r0 - beq _08026780 -_08026706: - adds r4, 0x8 - adds r2, 0x2 - adds r3, 0x1 - cmp r3, r6 - blt _080266F8 -_08026710: - movs r3, 0 - cmp r3, r6 - bge _08026780 - mov r2, r12 - ldr r1, [r2] - movs r4, 0x83 - lsls r4, 2 - adds r0, r1, r4 - ldrh r0, [r0] - cmp r0, 0 - bne _08026758 - movs r2, 0xB8 - lsls r2, 1 - adds r0, r1, r2 - ldr r0, [r0] - str r0, [r1, 0x70] - b _08026780 - .align 2, 0 -_08026734: .4byte gPartyMenuJoinTeam -_08026738: .4byte gUnknown_203B2B8 -_0802673C: .4byte gPartyMenuGiveGummi -_08026740: .4byte gPartyMenuGive -_08026744: .4byte gPartyMenuTake -_08026748: .4byte gPartyMenuSayFarewell -_0802674C: .4byte gPartyMenuSummary -_08026750: .4byte gPartyMenuMoves -_08026754: .4byte gPartyMenuCheckIQ -_08026758: - adds r3, 0x1 - cmp r3, r6 - bge _08026780 - mov r4, r12 - ldr r2, [r4] - lsls r0, r3, 1 - movs r4, 0x83 - lsls r4, 2 - adds r1, r2, r4 - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _08026758 - lsls r0, r3, 3 - movs r3, 0xB8 - lsls r3, 1 - adds r1, r2, r3 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x70] -_08026780: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80264CC - - thumb_func_start sub_802678C -sub_802678C: - push {r4-r7,lr} - ldr r5, _08026840 - ldr r0, [r5] - movs r7, 0x83 - lsls r7, 2 - adds r0, r7 - movs r1, 0 - movs r2, 0x14 - bl MemoryFill16 - ldr r2, [r5] - movs r0, 0xB6 - lsls r0, 1 - adds r1, r2, r0 - ldr r0, _08026844 - str r0, [r1] - movs r3, 0xB8 - lsls r3, 1 - adds r1, r2, r3 - movs r0, 0xB - str r0, [r1] - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - bne _080267C8 - ldr r0, [r5] - adds r4, r7, 0 - adds r0, r4 - movs r1, 0x1 - strh r1, [r0] -_080267C8: - ldr r4, [r5] - movs r2, 0x1 - movs r0, 0xBA - lsls r0, 1 - adds r1, r4, r0 - ldr r0, _08026848 - ldr r0, [r0] - str r0, [r1] - movs r3, 0xBC - lsls r3, 1 - adds r1, r4, r3 - movs r0, 0x4 - str r0, [r1] - movs r6, 0x2 - movs r0, 0xBE - lsls r0, 1 - adds r1, r4, r0 - movs r0, 0 - str r0, [r1] - movs r1, 0xC0 - lsls r1, 1 - adds r0, r4, r1 - str r2, [r0] - movs r3, 0 - mov r12, r4 - movs r4, 0xB8 - lsls r4, 1 - add r4, r12 - mov r0, r12 - adds r2, r0, r7 -_08026804: - ldrh r0, [r2] - cmp r0, 0 - bne _08026814 - ldr r1, [r4] - mov r7, r12 - ldr r0, [r7, 0x74] - cmp r1, r0 - beq _08026872 -_08026814: - adds r4, 0x8 - adds r2, 0x2 - adds r3, 0x1 - cmp r3, r6 - blt _08026804 - movs r3, 0 - cmp r3, r6 - bge _08026872 - ldr r1, [r5] - movs r2, 0x83 - lsls r2, 2 - adds r0, r1, r2 - ldrh r0, [r0] - cmp r0, 0 - bne _0802684C - movs r3, 0xB8 - lsls r3, 1 - adds r0, r1, r3 - ldr r0, [r0] - str r0, [r1, 0x74] - b _08026872 - .align 2, 0 -_08026840: .4byte gUnknown_203B2B8 -_08026844: .4byte gPartyMenuGive -_08026848: .4byte gUnknown_80D4970 -_0802684C: - adds r3, 0x1 - cmp r3, r6 - bge _08026872 - ldr r2, [r5] - lsls r0, r3, 1 - movs r4, 0x83 - lsls r4, 2 - adds r1, r2, r4 - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _0802684C - lsls r0, r3, 3 - movs r7, 0xB8 - lsls r7, 1 - adds r1, r2, r7 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x74] -_08026872: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_802678C - - thumb_func_start sub_8026878 -sub_8026878: - ldr r0, _080268C0 - ldr r0, [r0] - mov r12, r0 - movs r3, 0 - movs r1, 0xDE - lsls r1, 1 - add r1, r12 - ldr r0, _080268C4 - ldr r0, [r0] - str r0, [r1] - movs r1, 0xE0 - lsls r1, 1 - add r1, r12 - movs r0, 0x2 - str r0, [r1] - movs r2, 0x1 - movs r1, 0xE2 - lsls r1, 1 - add r1, r12 - ldr r0, _080268C8 - ldr r0, [r0] - str r0, [r1] - movs r1, 0xE4 - lsls r1, 1 - add r1, r12 - movs r0, 0x3 - str r0, [r1] - movs r0, 0xE6 - lsls r0, 1 - add r0, r12 - str r3, [r0] - movs r0, 0xE8 - lsls r0, 1 - add r0, r12 - str r2, [r0] - bx lr - .align 2, 0 -_080268C0: .4byte gUnknown_203B2B8 -_080268C4: .4byte gUnknown_80D4920 -_080268C8: .4byte gUnknown_80D4928 - thumb_func_end sub_8026878 - .align 2,0 diff --git a/data/data_80D47B8.s b/data/data_80D47B8.s index 800485966..0af023088 100644 --- a/data/data_80D47B8.s +++ b/data/data_80D47B8.s @@ -4614,6 +4614,3 @@ gUnknown_80DCA2C: @ 80DCA2C #include "text/luminous_cave.inc" - #include "friend_area.inc" - - #include "text/party_menu.inc" diff --git a/data/friend_area.inc b/data/friend_area.inc deleted file mode 100644 index 6464510b1..000000000 --- a/data/friend_area.inc +++ /dev/null @@ -1,176 +0,0 @@ - .global gUnknown_80DD148 -gUnknown_80DD148: @ 80DD148 (default friend area warp script) - .byte 0x00, 0x00, 0x00, 0x00 - - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80DD160 -gUnknown_80DD160: @ 80DD160 (Another friend area warp script) - .byte 0x00, 0x00, 0x00, 0x00 - - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x13, 0x00, 0x04, 0x00 - .byte 0x08, 0x00, 0x03, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80DD178 -gUnknown_80DD178: @ 80DD178 (Another friend area warp script) - .byte 0x00, 0x00, 0x00, 0x00 - - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x14, 0x00, 0x04, 0x00 - .byte 0x06, 0x00, 0x03, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80DD190 -gUnknown_80DD190: @ 80DD190 (seems to be Friend Area Warp Script) - .byte 0x00, 0x00, 0x00, 0x00 - - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x11, 0x00 - .byte 0x1A, 0x00, 0x02, 0x00 - .byte 0x02, 0x00, 0x00, 0x00 - - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80DD1A8 -gUnknown_80DD1A8: @ 80DD1A8 - .string "Whom would you like to visit?\0" - .align 2,0 - - .global gUnknown_80DD1C8 -gUnknown_80DD1C8: @ 80DD1C8 - .string "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_1}{END_COLOR_TEXT_1} was\n" - .string "{CENTER_ALIGN}handed over. \0" - .align 2,0 - - .global gUnknown_80DD1EC -gUnknown_80DD1EC: @ 80DD1EC - .string "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_1}{END_COLOR_TEXT_1} was\n" - .string "{CENTER_ALIGN}handed over.{EXTRA_MSG}" - .string "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was\n" - .string "{CENTER_ALIGN}returned to the Toolbox.\0" - .align 2,0 - - .global gUnknown_80DD240 -gUnknown_80DD240: @ 80DD240 - .string "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was\n" - .string "{CENTER_ALIGN}returned to the Toolbox.\0" - .align 2,0 - - .global gUnknown_80DD270 -gUnknown_80DD270: @ 80DD270 - .string "{CENTER_ALIGN}{ARG_POKEMON_1} left the team to remain\n" - .string "{CENTER_ALIGN}on standby in the Friend Area.\0" - .align 2,0 - - .global gUnknown_80DD2B0 -gUnknown_80DD2B0: @ 80DD2B0 - .string "Give\0" - .align 2,0 - - .global gUnknown_80DD2B8 -gUnknown_80DD2B8: @ 80DD2B8 - .string "Take\0" - .align 2,0 - - .global gUnknown_80DD2C0 -gUnknown_80DD2C0: @ 80DD2C0 - .string "Stand By\0" - .align 2,0 - - .global gUnknown_80DD2CC -gUnknown_80DD2CC: @ 80DD2CC - .string "Visit\0" - .align 2,0 - - .global gUnknown_80DD2D4 -gUnknown_80DD2D4: @ 80DD2D4 - .string "Name\0" - .align 2,0 - - .global gUnknown_80DD2DC -gUnknown_80DD2DC: @ 80DD2DC - .string "Summary\0" - .align 2,0 - - .global gUnknown_80DD2E4 -gUnknown_80DD2E4: @ 80DD2E4 - .string "Moves\0" - .align 2,0 - - .global gUnknown_80DD2EC -gUnknown_80DD2EC: @ 80DD2EC - .string "Check IQ\0" - .align 2,0 - - .global gUnknown_80DD2F8 -gUnknown_80DD2F8: @ 80DD2F8 - .string "Item: {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} \0" - .align 2,0 - .string "pksdir0\0" - .align 2,0 - - .global gUnknown_80DD310 -gUnknown_80DD310: @ 80DD310 (default friend area script) - .byte 0x00, 0x00, 0x00, 0x00 - - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80DD328 -gUnknown_80DD328: @ 80DD328 (another friend area warp script) - .byte 0x00, 0x00, 0x00, 0x00 - - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x13, 0x00, 0x03, 0x00 - .byte 0x08, 0x00, 0x03, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80DD340 -gUnknown_80DD340: @ 80DD340 - .byte 0x00, 0x00, 0x00, 0x00 - - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x14, 0x00, 0x04, 0x00 - .byte 0x06, 0x00, 0x03, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80DD358 -gUnknown_80DD358: @ 80DD358 - .byte 0x00, 0x00, 0x00, 0x00 - - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x11, 0x00 - .byte 0x1A, 0x00, 0x02, 0x00 - .byte 0x02, 0x00, 0x00, 0x00 - - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80DD370 -gUnknown_80DD370: @ 80DD370 - .byte 0x00, 0x00, 0x00, 0x00 - - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x03, 0x00 - .byte 0x0F, 0x00, 0x02, 0x00 - .byte 0x02, 0x00, 0x00, 0x00 - - .byte 0x00, 0x00, 0x00, 0x00 diff --git a/data/text/party_menu.inc b/data/text/party_menu.inc deleted file mode 100644 index 1afaaae72..000000000 --- a/data/text/party_menu.inc +++ /dev/null @@ -1,109 +0,0 @@ -gUnknown_80DD388:: @ 80DD388 - .string "You have chosen to say farewell\n" - .string "to this Pokémon.{EXTRA_MSG}" - .string "The Pokémon will leave its Friend Area.\n" - .string "It will no longer be available for\n" - .string "adventures. Is that OK?\0" - .align 2, 0 - -gUnknown_80DD420:: @ 80DD420 - .string "If you say farewell to this\n" - .string "Pokémon{COMMA} it will be gone forever.{EXTRA_MSG}" - .string "You will never be able to get another one\n" - .string "like it to join your team.\n" - .string "Will you release it anyway?\0" - .align 2, 0 - -gUnknown_80DD4C4:: @ 80DD4C4 - .string "{CENTER_ALIGN}{ARG_POKEMON_1} joined the\n" - .string "{CENTER_ALIGN}rescue team for adventures!\0" - .align 2, 0 - -gUnknown_80DD4F4:: @ 80DD4F4 - .string "{CENTER_ALIGN}{ARG_POKEMON_1} left the team to remain\n" - .string "{CENTER_ALIGN}on standby in the Friend Area.\0" - .align 2, 0 - -gUnknown_80DD534:: @ 80DD534 - .string "{CENTER_ALIGN}{ARG_POKEMON_1} became the leader\n" - .string "{CENTER_ALIGN}of the rescue team.\0" - .align 2, 0 - -gUnknown_80DD564:: @ 80DD564 - .string "{CENTER_ALIGN}{ARG_POKEMON_1} left\n" - .string "{CENTER_ALIGN}the Friend Area.\n" - .string "{CENTER_ALIGN}Bye-bye{COMMA} {ARG_POKEMON_1}!\0" - .align 2,0 - -gUnknown_80DD594:: @ 80DD594 - .string "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_1}{END_COLOR_TEXT_1} was\n" - .string "{CENTER_ALIGN}handed over. \0" - .align 2, 0 - -gUnknown_80DD5B8:: @ 80DD5B8 - .string "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_1}{END_COLOR_TEXT_1} was\n" - .string "{CENTER_ALIGN}handed over.{EXTRA_MSG}" - .string "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was\n" - .string "{CENTER_ALIGN}returned to the Toolbox.\0" - .align 2, 0 - -gUnknown_80DD60C:: @ 80DD60C - .string "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was\n" - .string "{CENTER_ALIGN}returned to the Toolbox.\0" - .align 2, 0 - -gUnknown_80DD63C:: @ 80DD63C - .string "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was\n" - .string "{CENTER_ALIGN}sent to storage.\0" - .align 2, 0 - -gPartyMenuStandBy:: @ 80DD664 - .string "Stand By\0" - .align 2, 0 - -gPartyMenuMakeLeader:: @ 80DD670 - .string "Make Leader\0" - .align 2,0 - -gPartyMenuJoinTeam:: @ 80DD67C - .string "Join Team\0" - .align 2, 0 - -gPartyMenuGiveGummi:: @ 80DD688 - .string "Give Gummi\0" - .align 2, 0 - -gPartyMenuGive:: @ 80DD694 - .string "Give\0" - .align 2, 0 - -gPartyMenuTake:: @ 80DD69C - .string "Take\0" - .align 2, 0 - -gPartyMenuSayFarewell:: @ 80DD6A4 - .string "Say Farewell\0" - .align 2, 0 - -gPartyMenuSummary:: @ 80DD6B4 - .string "Summary\0" - .align 2, 0 - -gPartyMenuMoves:: @ 80DD6BC - .string "Moves\0" - .align 2, 0 - -gPartyMenuCheckIQ:: @ 80DD6C4 - .string "Check IQ\0" - .align 2, 0 - -gPartyMenuItemPlaceholder:: @ 80DD6D0 - .string "Item: {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} \0" - .align 2, 0 - -gUnknown_80DD6E0:: @ 80DD6E0 - .string "%s\0" - .align 2, 0 - - .string "pksdir0\0" - .align 2, 0 diff --git a/include/moves.h b/include/moves.h index ddd4e4c5f..da602015f 100644 --- a/include/moves.h +++ b/include/moves.h @@ -31,6 +31,10 @@ bool8 FailsWhileMuzzled(u16 moveID); bool8 IsSoundMove(struct Move *move); bool8 DoesMoveCharge(u16 move); +int GetLinkedSequence(int index, struct Move* moves, u16* sequenceMoveIDs); +void unk_CopyMoves4To8(struct Move* destMoves, struct Move* srcMoves); +void sub_8094060(struct Move* srcMoves, struct Move* destMoves); + void unk_FixLinkedMovesSetEnabled8_v2(struct Move* move); void sub_8092D54(u8 *buffer, struct Move *move); diff --git a/include/pokemon.h b/include/pokemon.h index 3da0e2439..5385c9b77 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -30,7 +30,7 @@ struct PokemonStruct { // size: 0x58 /* 0x0 */ u16 unk0; // recruited?? - /* 0x1 */ bool8 isTeamLeader; + /* 0x2 */ bool8 isTeamLeader; /* 0x3 */ u8 unkHasNextStage; // set to a random value? /* 0x4 */ struct DungeonLocation dungeonLocation; /* 0x8 */ s16 speciesNum; // species # diff --git a/ld_script.txt b/ld_script.txt index 4c667feb0..1b0c61049 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -122,9 +122,8 @@ SECTIONS { asm/code_801EE10_1.o(.text); src/code_801EE10_1.o(.text); src/luminous_cave.o(.text); - src/friend_list_menu_1.o(.text); - asm/friend_list_menu.o(.text); src/friend_list_menu.o(.text); + src/party_list_menu.o(.text); src/friend_area_action_menu.o(.text); asm/friend_area_action_menu.o(.text); src/friend_area_action_menu_1.o(.text); @@ -415,6 +414,8 @@ SECTIONS { src/save.o(.rodata); src/menu_input.o(.rodata); data/data_80D47B8.o(.rodata); + src/friend_list_menu.o(.rodata); + src/party_list_menu.o(.rodata); src/friend_area_action_menu.o(.rodata); src/friend_area_action_menu_1.o(.rodata); src/wonder_mail.o(.rodata); diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c index 557157982..b8ade7ed0 100644 --- a/src/friend_list_menu.c +++ b/src/friend_list_menu.c @@ -1,181 +1,592 @@ #include "global.h" -#include "constants/dungeon.h" -#include "item.h" -#include "menu.h" -#include "pokemon.h" +#include "memory.h" #include "text.h" -#include "team_inventory.h" -#include "constants/move.h" -#include "code_800D090.h" +#include "input.h" +#include "menu.h" +#include "item.h" +#include "pokemon.h" +#include "moves.h" #include "menu_input.h" +#include "team_inventory.h" -struct unkStruct_203B2B8 + +// there might be more overlap with unkStruct_203B2BC +// I was working on the moves and put the data that seemed to correspond to that +// into a separate struct +struct unkStruct_203B2B4 { - // size: 0x280 - u32 state; + // size: 0x178 + s32 unk0; + s32 state; u32 fallbackState; - u8 unk8; - /* 0xA */ s16 pokeSpecies; - u32 id; - /* 0x10 */ struct BulkItem item1; - /* 0x14 */ struct BulkItem item2; - struct PokemonStruct *unk18; - bool8 isTeamLeader; - u32 moveIndex; - /* 0x24 */ u16 moveID; + u8 unkC; + u8 unkD; + s16 species; + u32 itemIndex; + struct BulkItem item1; + struct BulkItem item2; + /* 0x1C */ struct PokemonStruct *pokeStruct; + u32 moveIndex; // some sort of move index + u16 moveID; struct Move moves[8]; u16 moveIDs[4]; // some list of move IDs u32 menuAction1; - u32 menuAction2; - u32 unk78; - struct MenuStruct unk7C; - struct MenuStruct unkCC; + s32 menuAction2; + struct MenuStruct unk78; + struct MenuItem unkC8[8]; + u16 unk108[8]; + struct UnkTextStruct2 unk118[4]; }; -extern struct unkStruct_203B2B8 *gUnknown_203B2B8; -extern u8 gAvailablePokemonNames[0x58]; -extern u8 gUnknown_202DEA8[0x58]; -extern u8 gUnknown_202DE58[0x58]; -extern u8 gUnknown_80DD6E0[]; -extern u8 gPartyMenuItemPlaceholder[]; -extern struct UnkTextStruct2 gUnknown_80DD370; +extern struct unkStruct_203B2B4 *gUnknown_203B2B4; -extern u32 sub_8026F04(struct PokemonStruct *); -extern void sub_8026074(u32); -extern void PlaySound(u32); -bool8 CanTakePokemonHeldItem(struct PokemonStruct *r0); -extern bool8 sub_80023E4(u8); -extern struct PokemonStruct *sub_808D3F8(void); -extern struct PokemonStruct *sub_808D3BC(void); -extern void sub_801F214(void); -extern u32 sub_801F194(void); -extern u32 sub_801EF38(u32); +const struct UnkTextStruct2 gUnknown_80DD148 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; +const struct UnkTextStruct2 gUnknown_80DD160 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x13, 0x00, 0x04, 0x00, + 0x08, 0x03, + 0x03, 0x00, + NULL +}; + +const struct UnkTextStruct2 gUnknown_80DD178 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x14, 0x00, 0x04, 0x00, + 0x06, 0x03, + 0x03, 0x00, + NULL +}; + +const struct UnkTextStruct2 gUnknown_80DD190 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x02, 0x00, 0x11, 0x00, + 0x1A, 0x02, + 0x02, 0x00, + NULL +}; + +extern u8 gAvailablePokemonNames[]; +extern u8 gUnknown_202DEA8[]; +extern u8 *gUnknown_80D4970[]; +extern u8 gUnknown_202DE58[]; + +ALIGNED(4) const u8 gUnknown_80DD1A8[] = "Whom would you like to visit?"; + +ALIGNED(4) const u8 gUnknown_80DD1C8[] = _( + "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_1}{END_COLOR_TEXT_1} was\n" + "{CENTER_ALIGN}handed over. "); + +ALIGNED(4) const u8 gUnknown_80DD1EC[] = _( + "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_1}{END_COLOR_TEXT_1} was\n" + "{CENTER_ALIGN}handed over.{EXTRA_MSG}" + "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was\n" + "{CENTER_ALIGN}returned to the Toolbox."); + +ALIGNED(4) const u8 gUnknown_80DD240[] = _( + "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was\n" + "{CENTER_ALIGN}returned to the Toolbox."); + +ALIGNED(4) const u8 gUnknown_80DD270[] = _( + "{CENTER_ALIGN}{ARG_POKEMON_1} left the team to remain\n" + "{CENTER_ALIGN}on standby in the Friend Area."); + +ALIGNED(4) const u8 gUnknown_80DD2B0[] = "Give"; +ALIGNED(4) const u8 gUnknown_80DD2B8[] = "Take"; +ALIGNED(4) const u8 gUnknown_80DD2C0[] = "Stand By"; +ALIGNED(4) const u8 gUnknown_80DD2CC[] = "Visit"; +ALIGNED(4) const u8 gUnknown_80DD2D4[] = "Name"; +ALIGNED(4) const u8 gUnknown_80DD2DC[] = "Summary"; +ALIGNED(4) const u8 gUnknown_80DD2E4[] = "Moves"; +ALIGNED(4) const u8 gUnknown_80DD2EC[] = "Check IQ"; +ALIGNED(4) const u8 gUnknown_80DD2F8[] = _("Item: {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} "); +ALIGNED(4) static const u8 fill0[] = "pksdir0"; extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern void sub_80922B4(u8 *, const u8 *, u32); -extern void sub_808D930(u8 *, s16); -extern s32 sub_8008ED0(u8 *); -extern void xxx_call_draw_string(s32 x, s32 y, u8 *, u32, u32); -extern void xxx_format_and_draw(s32, s32, u8 *, ...); -extern s32 sub_80144A4(s32 *); - -extern u32 sub_801F890(void); -extern void sub_801F8D0(void); -extern u32 sub_801B410(void); -extern void sub_801B450(void); - +extern void xxx_format_and_draw(s32, s32, const u8 *, ...); +bool8 sub_8025EC4(struct PokemonStruct *); +extern u32 sub_8023A94(u32); +extern s16 sub_8023B44(void); +extern void sub_8023C60(void); +extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); +extern s16 sub_80A5728(void); +extern u8 sub_8002658(s16); +extern bool8 sub_8024108(u32); +extern void sub_8025434(s32); +extern void sub_80259F0(void); +extern void sub_8025A84(void); +extern void sub_8025BCC(void); +extern void sub_8025BE8(void); +extern void sub_8025C04(void); +extern void sub_8025CB4(void); +extern void sub_8025D90(void); +extern void sub_8025DAC(void); +extern void sub_8025E08(void); +extern void sub_8025E24(void); +extern void sub_8025E44(void); +extern void sub_802544C(void); +extern void sub_8025518(void); +extern void sub_8025728(void); +extern void sub_802591C(void); +extern u32 sub_801B3C0(struct Item *param_1); +extern void sub_8023868(u32, u32, u32, u32); +extern void sub_801F1B0(u32, u32); +extern void sub_801A5D8(u32,u32, u32, u32); +extern void sub_801A8D0(u32); +extern void sub_801A9E0(void); +extern void PlaySound(u32); +extern void sub_8024458(s16, u32); +extern void sub_801BEEC(s16); +extern void sub_8023B7C(u32); +extern void sub_8023DA4(void); extern void nullsub_104(void); -extern void sub_801A928(void); -extern void sub_8099690(u32); -extern u32 sub_801A6E8(u32); - -extern u32 sub_801A8AC(void); -extern u32 sub_8022860(void); -extern void sub_8022908(void); - -extern void sub_801BF98(void); -extern u32 sub_801BF48(void); -extern void sub_802453C(void); -extern u32 sub_80244E4(void); -extern bool8 sub_808D750(s16 index_); extern void sub_808ED00(void); -extern struct PokemonStruct *GetPlayerPokemonStruct(void); +extern u32 sub_80244E4(void); +extern void sub_802453C(void); +extern u32 sub_801BF48(void); +extern void sub_801BF98(void); +extern void sub_801B450(void); +extern u32 sub_801B410(void); -void sub_80268CC(void) +extern u32 sub_801EF38(u32); +extern u32 sub_801F194(void); +extern void sub_801F214(void); +extern void sub_801EE10(u32, s16, struct Move *, u32, u32, u32); +extern void sub_801F808(u16 *); +u32 sub_801602C(u32 r0, u8 *name); +void sub_8025E68(u32 , struct BulkItem *); +extern u32 sub_801A6E8(u32); +extern u32 sub_801A8AC(void); +extern void sub_8099690(u32); +extern void sub_801A928(void); +extern void sub_801F8D0(void); +extern u32 sub_801F890(void); +extern void sub_80160D8(void); +extern u32 sub_8016080(void); +extern s32 sub_80144A4(s32 *); +extern bool8 sub_80023E4(u32); + +bool8 sub_80252F0(s32 param_1) { - struct PokemonStruct *playerPokemon; - struct PokemonStruct *pokeStruct; - struct PokemonStruct *pokeStruct2; - s32 choice; - choice = 0; - if ((sub_8012FD8(&gUnknown_203B2B8->unk7C) == 0) && (sub_8013114(&gUnknown_203B2B8->unk7C,&choice), choice != 1)) { - gUnknown_203B2B8->menuAction1 = choice; + if ((param_1 == 2) && (sub_8024108(4) != '\0')) { + return FALSE; } - switch(choice) { - case 6: - if (sub_808D750(gUnknown_203B2B8->pokeSpecies)) { - -#ifdef NONMATCHING - pokeStruct = &gUnknown_203B2B8->pokeSpecies[gRecruitedPokemonRef->pokemon]; -#else - register size_t offset asm("r1") = offsetof(struct unkStruct_203B45C, pokemon[gUnknown_203B2B8->pokeSpecies]); - struct PokemonStruct* p = gRecruitedPokemonRef->pokemon; - size_t addr = offset + (size_t)p; - pokeStruct = (struct PokemonStruct*)addr; -#endif - - pokeStruct->unk0 |= 2; - nullsub_104(); - } - sub_808ED00(); - sub_8026074(5); - break; - case 7: - gUnknown_203B2B8->unk18->unk0 &= 0xfffd; - nullsub_104(); - sub_808ED00(); - sub_8026074(6); - break; - case 8: - pokeStruct2 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2B8->pokeSpecies]; - playerPokemon = GetPlayerPokemonStruct(); - - if (!pokeStruct2->isTeamLeader) { - playerPokemon->isTeamLeader = FALSE; - pokeStruct2->isTeamLeader = TRUE; - nullsub_104(); - } - sub_808ED00(); - sub_8026074(7); - break; - case 9: - sub_8026074(0xc); - break; - case 0xd: - sub_8026074(0x16); - break; - case 10: - sub_8026074(0xe); - break; - case 0xb: - sub_8026074(0x12); - break; - case 0xc: - PlaySound(0x14d); - if (gUnknown_203B2B8->item2.id != ITEM_NOTHING) { - AddHeldItemToInventory(&gUnknown_203B2B8->item2); - } - FillInventoryGaps(); - gUnknown_203B2B8->item2.id = ITEM_NOTHING; - gUnknown_203B2B8->item2.quantity = 0; - GivePokemonItem(gUnknown_203B2B8->pokeSpecies,&gUnknown_203B2B8->item2); - nullsub_104(); - sub_8026074(0x11); - break; - case 4: - sub_8026074(3); - break; - case 5: - sub_8026074(4); - break; - case 1: - sub_8026074(0x19); - break; - + else { + gUnknown_203B2B4 = MemoryAlloc(sizeof(struct unkStruct_203B2B4),8); + gUnknown_203B2B4->menuAction1 = 0; + gUnknown_203B2B4->unk0 = param_1; + gUnknown_203B2B4->unkC = sub_8002658(sub_80A5728()); + gUnknown_203B2B4->unkD = 0; + if (gUnknown_203B2B4->unk0 == 2) { + sub_8025434(0); + } + else { + sub_8025434(1); + } + return TRUE; } } -void sub_8026A78(void) +u32 sub_8025354(void) +{ + switch(gUnknown_203B2B4->state) { + case 0x13: + return 3; + case 1: + case 2: + sub_80259F0(); + break; + case 3: + sub_8025A84(); + break; + case 4: + sub_8025BCC(); + break; + case 5: + sub_8025BE8(); + break; + case 0xb: + case 0xc: + sub_8025C04(); + break; + case 0xd: + sub_8025CB4(); + break; + case 0xe: + sub_8025D90(); + break; + case 0xf: + case 0x10: + sub_8025DAC(); + break; + case 0x11: + sub_8025E08(); + break; + case 0x12: + sub_8025E24(); + break; + default: + sub_8025E44(); + break; + } + return 0; +} + +u8 sub_802540C(void) +{ + return gUnknown_203B2B4->unkD; +} + +void sub_8025418(void) +{ + if(gUnknown_203B2B4 != NULL) + { + MemoryFree(gUnknown_203B2B4); + gUnknown_203B2B4 = NULL; + } +} + +void sub_8025434(s32 newState) +{ + gUnknown_203B2B4->state = newState; + sub_802544C(); + sub_8025518(); +} + +void sub_802544C(void) +{ + s32 index; + + sub_8006518(gUnknown_203B2B4->unk118); + + switch(gUnknown_203B2B4->state) + { + case 3: + if (gUnknown_203B2B4->unk0 == 0) { + gUnknown_203B2B4->unk118[3] = gUnknown_80DD190; + } + sub_8025728(); + gUnknown_203B2B4->unk118[2] = gUnknown_80DD160; + sub_8012CAC(&gUnknown_203B2B4->unk118[2],gUnknown_203B2B4->unkC8); + break; + case 0xD: + sub_802591C(); + gUnknown_203B2B4->unk118[2] = gUnknown_80DD178; + sub_8012CAC(&gUnknown_203B2B4->unk118[2],gUnknown_203B2B4->unkC8); + break; + default: + for(index = 0; index < 4; index++) + { + gUnknown_203B2B4->unk118[index] = gUnknown_80DD148; + } + break; + + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2B4->unk118,1,1); +} + +void sub_8025518(void) +{ + u32 uVar3; + struct Item item; + + switch(gUnknown_203B2B4->state) + { + case 0: + gUnknown_203B2B4->fallbackState = 1; + sub_80141B4(gUnknown_80DD1A8,0,0,0x301); + break; + case 1: + uVar3 = 4; + if (gUnknown_203B2B4->unk0 == 0) { + uVar3 = 2; + } + sub_8023868(uVar3,0,0,10); + break; + case 2: + sub_8023B7C(1); + break; + case 3: + if (gUnknown_203B2B4->unk0 == 0) { + sub_8025E68(3,&gUnknown_203B2B4->item2); + } + sub_8023DA4(); + PrintColoredPokeNameToBuffer(gAvailablePokemonNames,gUnknown_203B2B4->pokeStruct,7); + PrintColoredPokeNameToBuffer(gAvailablePokemonNames + 0x50,gUnknown_203B2B4->pokeStruct,6); + sub_8012D60(&gUnknown_203B2B4->unk78,gUnknown_203B2B4->unkC8,0,gUnknown_203B2B4->unk108,gUnknown_203B2B4->menuAction1,2); + break; + case 4: + sub_8024458(gUnknown_203B2B4->species,2); + break; + case 5: + sub_801BEEC(gUnknown_203B2B4->species); + break; + case 0xb: + sub_801A5D8(1,0,0,10); + break; + case 0xc: + sub_801A8D0(1); + break; + case 0xd: + sub_801A9E0(); + sub_8012D60(&gUnknown_203B2B4->unk78,gUnknown_203B2B4->unkC8,0,gUnknown_203B2B4->unk108,gUnknown_203B2B4->menuAction2,2); + break; + case 0xe: + HeldItemToSlot(&item, &gUnknown_203B2B4->item1); + sub_801B3C0(&item); + break; + case 8: + gUnknown_203B2B4->fallbackState = 2; + sub_80141B4(gUnknown_80DD1C8,0,0,0x101); + break; + case 9: + gUnknown_203B2B4->fallbackState = 2; + sub_80141B4(gUnknown_80DD1EC,0,0,0x101); + break; + case 10: + gUnknown_203B2B4->fallbackState = 2; + sub_80141B4(gUnknown_80DD240,0,0,0x101); + break; + case 7: + gUnknown_203B2B4->fallbackState = 1; + PlaySound(0xcf); + sub_80141B4(gUnknown_80DD270,0,0,0x101); + break; + case 0xf: + unk_CopyMoves4To8(gUnknown_203B2B4->moves,gUnknown_203B2B4->pokeStruct->moves); + sub_801EE10(3,gUnknown_203B2B4->species,gUnknown_203B2B4->moves,0,0,0); + break; + case 0x10: + sub_801F1B0(1,0); + break; + case 0x11: + GetLinkedSequence(gUnknown_203B2B4->moveIndex,gUnknown_203B2B4->moves, gUnknown_203B2B4->moveIDs); + sub_801F808(gUnknown_203B2B4->moveIDs); + break; + case 0x12: + sub_801602C(2,gUnknown_203B2B4->pokeStruct->name); + break; + case 0x13: + break; + } +} + +void sub_8025728(void) +{ + int index; + struct PokemonStruct *pokeStruct; + s32 loopMax = 0; + + pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2B4->species]; + MemoryFill16(gUnknown_203B2B4->unk108,0,sizeof(gUnknown_203B2B4->unk108)); + if (gUnknown_203B2B4->unk0 == 0) { + gUnknown_203B2B4->unkC8[loopMax].text = gUnknown_80DD2B0; + gUnknown_203B2B4->unkC8[loopMax].menuAction = 10; + if (GetNumberOfFilledInventorySlots() == 0) { + gUnknown_203B2B4->unk108[loopMax] = 1; + } + loopMax += 1; + + gUnknown_203B2B4->unkC8[loopMax].text = gUnknown_80DD2B8; + gUnknown_203B2B4->unkC8[loopMax].menuAction = 0xb; + if ((INVENTORY_SIZE <= GetNumberOfFilledInventorySlots()) || (gUnknown_203B2B4->item2.id == ITEM_NOTHING)) { + gUnknown_203B2B4->unk108[loopMax] = 1; + } + loopMax += 1; + + if (sub_8025EC4(pokeStruct)) { + gUnknown_203B2B4->unkC8[loopMax].text = gUnknown_80DD2C0; + gUnknown_203B2B4->unkC8[loopMax].menuAction = 9; + loopMax += 1; + } + } + else { + gUnknown_203B2B4->unkC8[loopMax].text = gUnknown_80DD2CC; + gUnknown_203B2B4->unkC8[loopMax].menuAction = 7; + if (gUnknown_203B2B4->unkC == GetFriendArea(gUnknown_203B2B4->pokeStruct->speciesNum)) { + gUnknown_203B2B4->unk108[loopMax] = 1; + } + loopMax += 1; + } + if ((pokeStruct->speciesNum == 0x13d) && + (IsPokemonRenamed(pokeStruct))) { + gUnknown_203B2B4->unkC8[loopMax].text = gUnknown_80DD2D4; + gUnknown_203B2B4->unkC8[loopMax].menuAction = 8; + loopMax += 1; + } + gUnknown_203B2B4->unkC8[loopMax].text = gUnknown_80DD2DC; + gUnknown_203B2B4->unkC8[loopMax].menuAction = 4; + loopMax += 1; + gUnknown_203B2B4->unkC8[loopMax].text = gUnknown_80DD2E4; + gUnknown_203B2B4->unkC8[loopMax].menuAction = 6; + loopMax += 1; + gUnknown_203B2B4->unkC8[loopMax].text = gUnknown_80DD2EC; + gUnknown_203B2B4->unkC8[loopMax].menuAction = 5; + loopMax += 1; + gUnknown_203B2B4->unkC8[loopMax].text = NULL; + gUnknown_203B2B4->unkC8[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2B4->unk108[index] == 0) + { + if (gUnknown_203B2B4->unkC8[index].menuAction == gUnknown_203B2B4->menuAction1) + return; + } + } + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2B4->unk108[index] == 0) + { + gUnknown_203B2B4->menuAction1 = gUnknown_203B2B4->unkC8[index].menuAction; + break; + } + } +} + +void sub_802591C(void) +{ + int index; + s32 loopMax = 0; + + + MemoryFill16(gUnknown_203B2B4->unk108,0, sizeof(gUnknown_203B2B4->unk108)); + + gUnknown_203B2B4->unkC8[loopMax].text = gUnknown_80DD2B0; + gUnknown_203B2B4->unkC8[loopMax].menuAction = 10; + if (GetNumberOfFilledInventorySlots() == 0) { + gUnknown_203B2B4->unk108[loopMax] = 1; + } + loopMax += 1; + gUnknown_203B2B4->unkC8[loopMax].text = *gUnknown_80D4970; + gUnknown_203B2B4->unkC8[loopMax].menuAction = 4; + loopMax += 1; + gUnknown_203B2B4->unkC8[loopMax].text = NULL; + gUnknown_203B2B4->unkC8[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2B4->unk108[index] == 0) + { + if (gUnknown_203B2B4->unkC8[index].menuAction == gUnknown_203B2B4->menuAction2) + return; + } + } + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2B4->unk108[index] == 0) + { + gUnknown_203B2B4->menuAction2 = gUnknown_203B2B4->unkC8[index].menuAction; + break; + } + } +} + +void sub_80259F0(void) +{ + switch(sub_8023A94(1)) + { + case 3: + gUnknown_203B2B4->species = sub_8023B44(); + gUnknown_203B2B4->pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2B4->species]; + PeekPokemonItem(gUnknown_203B2B4->species, &gUnknown_203B2B4->item2); + sub_8025434(3); + break; + case 4: + gUnknown_203B2B4->species = sub_8023B44(); + gUnknown_203B2B4->pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2B4->species]; + PeekPokemonItem(gUnknown_203B2B4->species, &gUnknown_203B2B4->item2); + sub_8025434(4); + break; + case 2: + sub_8023C60(); + sub_8025434(0x13); + break; + } +} + +void sub_8025A84(void) +{ + s32 menuAction = 0; + + sub_8023A94(0); + if(!sub_8012FD8(&gUnknown_203B2B4->unk78)) + { + sub_8013114(&gUnknown_203B2B4->unk78, &menuAction); + if(menuAction != 1) gUnknown_203B2B4->menuAction1 = menuAction; + } + switch(menuAction) + { + case 7: + gUnknown_203B2B4->unkD = GetFriendArea(gUnknown_203B2B4->pokeStruct->speciesNum); + sub_8023C60(); + sub_8025434(0x13); + break; + case 10: + sub_8025434(0xB); + break; + case 11: + PlaySound(0x14d); + if(gUnknown_203B2B4->item2.id != ITEM_NOTHING) + { + AddHeldItemToInventory(&gUnknown_203B2B4->item2); + } + FillInventoryGaps(); + gUnknown_203B2B4->item2.id = ITEM_NOTHING; + gUnknown_203B2B4->item2.quantity = 0; + GivePokemonItem(gUnknown_203B2B4->species, &gUnknown_203B2B4->item2); + nullsub_104(); + sub_8025434(0xA); + break; + case 9: + gUnknown_203B2B4->pokeStruct->unk0 &= 0xfffd; + nullsub_104(); + sub_808ED00(); + sub_8023C60(); + sub_8025434(0x7); + break; + case 6: + sub_8025434(0xF); + break; + case 8: + sub_8025434(0x12); + break; + case 4: + sub_8025434(0x4); + break; + case 5: + sub_8025434(0x5); + break; + case 1: + sub_8025434(0x2); + break; + case 2: + case 3: + break; + } +} + +void sub_8025BCC(void) { switch(sub_80244E4()) { case 2: case 3: sub_802453C(); - sub_8026074(2); + sub_8025434(2); break; case 0: case 1: @@ -183,14 +594,14 @@ void sub_8026A78(void) } } -void sub_8026A94(void) +void sub_8025BE8(void) { switch(sub_801BF48()) { case 2: case 3: sub_801BF98(); - sub_8026074(2); + sub_8025434(2); break; case 0: case 1: @@ -198,90 +609,26 @@ void sub_8026A94(void) } } - -static inline bool8 sub_8026AB0_sub(void) { - if (gUnknown_203B2B8->unk18->dungeonLocation.id == 0x44 || gUnknown_203B2B8->unk18->dungeonLocation.id == 0x45) - return TRUE; - else - return FALSE; -} - -void sub_8026AB0(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - switch(temp) - { - case 1: - case 3: - sub_8026074(2); - break; - case 2: - if (sub_8026AB0_sub()) - sub_8026074(0xD); - else - sub_8026074(8); - break; - } - } -} - -void sub_8026B10(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - switch(temp) - { - case 1: - case 3: - sub_8026074(2); - break; - case 2: - sub_8026074(8); - break; - } - } -} - - -void sub_8026B48(void) -{ - switch(sub_8022860()) - { - case 2: - case 3: - sub_8022908(); - sub_8026074(2); - break; - case 0: - case 1: - break; - } -} - - -void sub_8026B64(void) +void sub_8025C04(void) { switch(sub_801A6E8(1)) { case 3: - gUnknown_203B2B8->id = sub_801A8AC(); - gUnknown_203B2B8->item1.id = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->id].id; - gUnknown_203B2B8->item1.quantity = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->id].quantity; - sub_8026074(0x14); + gUnknown_203B2B4->itemIndex = sub_801A8AC(); + gUnknown_203B2B4->item1.id = gTeamInventory_203B460->teamItems[gUnknown_203B2B4->itemIndex].id; + gUnknown_203B2B4->item1.quantity = gTeamInventory_203B460->teamItems[gUnknown_203B2B4->itemIndex].quantity; + sub_8025434(0xD); break; case 4: - gUnknown_203B2B8->id = sub_801A8AC(); - gUnknown_203B2B8->item1.id = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->id].id; - gUnknown_203B2B8->item1.quantity = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->id].quantity; + gUnknown_203B2B4->itemIndex = sub_801A8AC(); + gUnknown_203B2B4->item1.id = gTeamInventory_203B460->teamItems[gUnknown_203B2B4->itemIndex].id; + gUnknown_203B2B4->item1.quantity = gTeamInventory_203B460->teamItems[gUnknown_203B2B4->itemIndex].quantity; sub_8099690(0); - sub_8026074(0x15); + sub_8025434(0xE); break; case 2: sub_801A928(); - sub_8026074(2); + sub_8025434(2); break; case 0: case 1: @@ -289,244 +636,155 @@ void sub_8026B64(void) } } -void sub_8026C14(void) +void sub_8025CB4(void) { - u32 nextState; - struct unkStruct_8090F58 temp; - int menuAction; - struct Item slot; - + u32 uVar2; + s32 menuAction; + struct unkStruct_8090F58 a3; + struct Item item; + menuAction = 0; sub_801A6E8(0); - if ((sub_8012FD8(&gUnknown_203B2B8->unkCC) == '\0') && (sub_8013114(&gUnknown_203B2B8->unkCC,&menuAction), menuAction != 1)) { - gUnknown_203B2B8->menuAction2 = menuAction; - } - switch(menuAction) - { - case 0xb: - nextState = 0xF; - PlaySound(0x14d); - ShiftItemsDownFrom(gUnknown_203B2B8->id); - FillInventoryGaps(); - if (gUnknown_203B2B8->item2.id != ITEM_NOTHING) { - AddHeldItemToInventory(&gUnknown_203B2B8->item2); - nextState = 0x10; - } - HeldItemToSlot(&slot,&gUnknown_203B2B8->item1); - temp.unk0 = 0; - temp.unk4 = 0; - temp.unk8 = 1; - slot.flags = ITEM_FLAG_EXISTS; - sub_8090E14(gUnknown_202DEA8,&slot,&temp); - GivePokemonItem(gUnknown_203B2B8->pokeSpecies,&gUnknown_203B2B8->item1); - sub_801A928(); - nullsub_104(); - sub_8026074(nextState); - break; - case 4: - sub_8099690(0); - sub_8026074(0x15); - break; - case 1: - sub_8026074(0x13); - break; + if ((!sub_8012FD8(&gUnknown_203B2B4->unk78)) && (sub_8013114(&gUnknown_203B2B4->unk78,&menuAction), menuAction != 1)) { + gUnknown_203B2B4->menuAction2 = menuAction; } + + switch(menuAction) + { + case 10: + uVar2 = 8; + PlaySound(0x14d); + ShiftItemsDownFrom(gUnknown_203B2B4->itemIndex); + FillInventoryGaps(); + if ((gUnknown_203B2B4->item2).id != 0) { + AddHeldItemToInventory(&gUnknown_203B2B4->item2); + uVar2 = 9; + } + HeldItemToSlot(&item,&gUnknown_203B2B4->item1); + a3.unk0 = 0; + a3.unk4 = 0; + a3.unk8 = 1; + item.flags = ITEM_FLAG_EXISTS; + sub_8090E14(gUnknown_202DEA8,&item,&a3); + GivePokemonItem((int)gUnknown_203B2B4->species,&gUnknown_203B2B4->item1); + sub_801A928(); + nullsub_104(); + sub_8025434(uVar2); + break; + case 4: + sub_8099690(0); + sub_8025434(0xe); + break; + case 1: + sub_8025434(0xc); + break; + } } -void sub_8026CF0(void) +void sub_8025D90(void) { switch(sub_801B410()) { case 2: case 3: sub_801B450(); - sub_8026074(0x13); - break; + sub_8025434(0xC); case 0: case 1: break; } } - -void sub_8026D0C(void) +void sub_8025DAC(void) { switch(sub_801EF38(1)) { - case 0: - case 1: - break; case 3: + gUnknown_203B2B4->moveIndex = sub_801F194(); + gUnknown_203B2B4->moveID = gUnknown_203B2B4->moves[gUnknown_203B2B4->moveIndex].id; + sub_8025434(0x11); + break; case 4: - gUnknown_203B2B8->moveIndex = sub_801F194(); - gUnknown_203B2B8->moveID = gUnknown_203B2B8->moves[gUnknown_203B2B8->moveIndex].id; - sub_8026074(0x18); + gUnknown_203B2B4->moveIndex = sub_801F194(); + gUnknown_203B2B4->moveID = gUnknown_203B2B4->moves[gUnknown_203B2B4->moveIndex].id; + sub_8025434(0x11); break; case 2: sub_801F214(); - sub_8026074(2); + sub_8094060(gUnknown_203B2B4->moves,gUnknown_203B2B4->pokeStruct->moves); + sub_8025434(0x2); break; } } -void sub_8026D6C(void) +void sub_8025E08(void) { switch(sub_801F890()) { case 2: case 3: sub_801F8D0(); - sub_8026074(0x17); - break; + sub_8025434(0x10); case 0: case 1: break; } } -void sub_8026D88(void) +void sub_8025E24(void) { - s32 temp; - if(sub_80144A4(&temp) == 0) + switch(sub_8016080()) { - sub_8026074(gUnknown_203B2B8->fallbackState); - } -} - -void sub_8026DAC(u32 r0, struct BulkItem *item) -{ - struct Item slot; - struct unkStruct_8090F58 temp; - - sub_8008C54(r0); - sub_80073B8(r0); - HeldItemToSlot(&slot, item); - temp.unk0 = 0; - temp.unk4 = 0; - temp.unk8 = 1; - slot.flags = ITEM_FLAG_EXISTS; - sub_8090E14(gUnknown_202DE58, &slot, &temp); - xxx_format_and_draw(4, 3, gPartyMenuItemPlaceholder, r0, 0); - sub_80073E0(r0); -} - -void sub_8026E08(u32 r0) -{ - u8 buffer1[40]; - u8 buffer[20]; - s32 x; - - sub_8008C54(r0); - sub_80073B8(r0); - sub_80922B4(gAvailablePokemonNames, gUnknown_203B2B8->unk18->name, POKEMON_NAME_LENGTH); - sub_808D930(buffer, gUnknown_203B2B8->unk18->speciesNum); - sprintfStatic(buffer1, gUnknown_80DD6E0, gAvailablePokemonNames); - x = sub_8008ED0(buffer1); - xxx_call_draw_string(((gUnknown_80DD370.unkC << 3) - x) / 2, 3, buffer1, r0, 0); - sub_80073E0(r0); -} - -u32 sub_8026E88(struct PokemonStruct *r0) -{ - bool8 flag; - if(!r0->isTeamLeader) - { - flag = (r0->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER); - if(flag) - if(!sub_80023E4(0x8)) - return FALSE; - } - else - return FALSE; - return TRUE; -} - -bool8 sub_8026EB8(struct PokemonStruct *r0) -{ - bool8 flag; - if(sub_808D3BC() != r0) - if(sub_808D3F8() != r0) - if(!r0->isTeamLeader) - { - flag = (r0->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER); - if(flag) - { - if(sub_80023E4(0x8)) - goto check; - } - else - check: - if(sub_8026F04(r0) != 3) - return TRUE; - } - return FALSE; -} - - -u32 sub_8026F04(struct PokemonStruct *r0) -{ - if(r0->heldItem.id == 0) - return 0; - else if(GetNumberOfFilledInventorySlots() < INVENTORY_SIZE) - return 1; - else if(CanTakePokemonHeldItem(r0)) - return 2; - else - return 3; -} - -bool8 CanTakePokemonHeldItem(struct PokemonStruct *r0) -{ - if(IsNotMoneyOrUsedTMItem(r0->heldItem.id)) - { - if(IsThrowableItem(r0->heldItem.id)) - { - if((gTeamInventory_203B460->teamStorage[r0->heldItem.id] + r0->heldItem.quantity) > 999) - return FALSE; - } - else - { - if(gTeamInventory_203B460->teamStorage[r0->heldItem.id] > 998) - return FALSE; - } - } - else - return FALSE; - return TRUE; -} - -void sub_8026FA4(void) -{ - switch(sub_8026F04(gUnknown_203B2B8->unk18)) - { - case 1: - PlaySound(0x14d); - AddHeldItemToInventory(&gUnknown_203B2B8->item2); - FillInventoryGaps(); - gUnknown_203B2B8->item2.id = 0; - gUnknown_203B2B8->item2.quantity = 0; - GivePokemonItem(gUnknown_203B2B8->pokeSpecies, &gUnknown_203B2B8->item2); - sub_8026074(0xA); - break; case 2: - PlaySound(0x14d); - if(IsThrowableItem(gUnknown_203B2B8->item2.id)) - { - gTeamInventory_203B460->teamStorage[gUnknown_203B2B8->item2.id] += gUnknown_203B2B8->item2.quantity; - } - else - { - gTeamInventory_203B460->teamStorage[gUnknown_203B2B8->item2.id] += 1; - } - - gUnknown_203B2B8->item2.id = 0; - gUnknown_203B2B8->item2.quantity = 0; - GivePokemonItem(gUnknown_203B2B8->pokeSpecies, &gUnknown_203B2B8->item2); - sub_8026074(0xB); - break; - case 0: - default: - sub_8026074(0x19); + case 3: + sub_80160D8(); + nullsub_104(); + sub_8025434(0x2); break; } } + +void sub_8025E44(void) +{ + s32 local; + if(sub_80144A4(&local) == 0) + { + sub_8025434(gUnknown_203B2B4->fallbackState); + } +} + +void sub_8025E68(u32 r0, struct BulkItem *heldItem) +{ + struct Item item; + struct unkStruct_8090F58 a3; + + sub_8008C54(r0); + sub_80073B8(r0); + HeldItemToSlot(&item, heldItem); + a3.unk0 = 0; + a3.unk4 = 0; + a3.unk8 = 1; + item.flags = ITEM_FLAG_EXISTS; + sub_8090E14(gUnknown_202DE58, &item, &a3); + xxx_format_and_draw(4, 3, gUnknown_80DD2F8, r0, 0); + sub_80073E0(r0); +} + +bool8 sub_8025EC4(struct PokemonStruct *param_1) +{ + bool32 flag; + if (param_1->isTeamLeader) + { + return FALSE; + } + else + { + flag = FALSE; + if(param_1->dungeonLocation.id == 0x41) + flag = TRUE; + if(flag && !sub_80023E4(8)) + return FALSE; + else + return TRUE; + } +} diff --git a/src/friend_list_menu_1.c b/src/friend_list_menu_1.c deleted file mode 100644 index e0ccc137b..000000000 --- a/src/friend_list_menu_1.c +++ /dev/null @@ -1,297 +0,0 @@ -#include "global.h" -#include "memory.h" -#include "text.h" -#include "input.h" -#include "menu.h" -#include "item.h" -#include "pokemon.h" -#include "moves.h" -#include "menu_input.h" - - -// there might be more overlap with unkStruct_203B2BC -// I was working on the moves and put the data that seemed to correspond to that -// into a separate struct -struct unkStruct_203B2B4 -{ - // size: 0x178 - s32 unk0; - s32 state; - u32 fallbackState; - u8 unkC; - u8 unkD; - s16 species; - u32 unk10; - struct BulkItem item1; - struct BulkItem item2; - /* 0x1C */ struct PokemonStruct *pokeStruct; - u32 moveIndex; // some sort of move index - u16 moveID; - struct Move moves[8]; - u16 moveIDs[4]; // some list of move IDs - u32 menuAction1; - s32 menuAction2; - struct MenuStruct unk78; - struct MenuItem unkC8[8]; - u16 unk108[8]; - struct UnkTextStruct2 unk118[4]; -}; -extern struct unkStruct_203B2B4 *gUnknown_203B2B4; - -extern struct UnkTextStruct2 gUnknown_80DD190; -extern struct UnkTextStruct2 gUnknown_80DD160; -extern struct UnkTextStruct2 gUnknown_80DD148; -extern struct UnkTextStruct2 gUnknown_80DD178; - -extern u8 gAvailablePokemonNames[]; -extern u8 gUnknown_80DD1A8[]; -extern u8 gUnknown_80DD270[]; -extern u8 gUnknown_80DD1C8[]; -extern u8 gUnknown_80DD1EC[]; -extern u8 gUnknown_80DD240[]; - -extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); -extern s16 sub_80A5728(void); -extern u8 sub_8002658(s16); -extern bool8 sub_8024108(u32); -extern void sub_8025434(s32); -extern void sub_80259F0(void); -extern void sub_8025A84(void); -extern void sub_8025BCC(void); -extern void sub_8025BE8(void); -extern void sub_8025C04(void); -extern void sub_8025CB4(void); -extern void sub_8025D90(void); -extern void sub_8025DAC(void); -extern void sub_8025E08(void); -extern void sub_8025E24(void); -extern void sub_8025E44(void); -extern void sub_802544C(void); -extern void sub_8025518(void); -extern void sub_8025728(void); -extern void sub_802591C(void); -extern u32 sub_801B3C0(struct Item *param_1); -extern void sub_8023868(u32, u32, u32, u32); -extern void sub_801F1B0(u32, u32); -extern void sub_801A5D8(u32,u32, u32, u32); -extern void sub_801A8D0(u32); -extern void sub_801A9E0(void); -extern void PlaySound(u32); -extern void sub_8024458(s16, u32); -extern void sub_801BEEC(s16); -extern void sub_8023B7C(u32); -extern void sub_8023DA4(void); - -extern void unk_CopyMoves4To8(struct Move *, struct Move *); -extern void sub_801EE10(u32, s16, struct Move *, u32, u32, u32); -extern void GetLinkedSequence(u32, struct Move *, u16*); -extern void sub_801F808(u16 *); -u32 sub_801602C(u32 r0, u8 *name); -extern void sub_8025E68(u32 , struct BulkItem *); - -bool8 sub_80252F0(s32 param_1) -{ - - if ((param_1 == 2) && (sub_8024108(4) != '\0')) { - return FALSE; - } - else { - gUnknown_203B2B4 = MemoryAlloc(sizeof(struct unkStruct_203B2B4),8); - gUnknown_203B2B4->menuAction1 = 0; - gUnknown_203B2B4->unk0 = param_1; - gUnknown_203B2B4->unkC = sub_8002658(sub_80A5728()); - gUnknown_203B2B4->unkD = 0; - if (gUnknown_203B2B4->unk0 == 2) { - sub_8025434(0); - } - else { - sub_8025434(1); - } - return TRUE; - } -} - -u32 sub_8025354(void) -{ - switch(gUnknown_203B2B4->state) { - case 0x13: - return 3; - case 1: - case 2: - sub_80259F0(); - break; - case 3: - sub_8025A84(); - break; - case 4: - sub_8025BCC(); - break; - case 5: - sub_8025BE8(); - break; - case 0xb: - case 0xc: - sub_8025C04(); - break; - case 0xd: - sub_8025CB4(); - break; - case 0xe: - sub_8025D90(); - break; - case 0xf: - case 0x10: - sub_8025DAC(); - break; - case 0x11: - sub_8025E08(); - break; - case 0x12: - sub_8025E24(); - break; - default: - sub_8025E44(); - break; - } - return 0; -} - -u8 sub_802540C(void) -{ - return gUnknown_203B2B4->unkD; -} - -void sub_8025418(void) -{ - if(gUnknown_203B2B4 != NULL) - { - MemoryFree(gUnknown_203B2B4); - gUnknown_203B2B4 = NULL; - } -} - -void sub_8025434(s32 newState) -{ - gUnknown_203B2B4->state = newState; - sub_802544C(); - sub_8025518(); -} - -void sub_802544C(void) -{ - s32 index; - - sub_8006518(gUnknown_203B2B4->unk118); - - switch(gUnknown_203B2B4->state) - { - case 3: - if (gUnknown_203B2B4->unk0 == 0) { - gUnknown_203B2B4->unk118[3] = gUnknown_80DD190; - } - sub_8025728(); - gUnknown_203B2B4->unk118[2] = gUnknown_80DD160; - sub_8012CAC(&gUnknown_203B2B4->unk118[2],gUnknown_203B2B4->unkC8); - break; - case 0xD: - sub_802591C(); - gUnknown_203B2B4->unk118[2] = gUnknown_80DD178; - sub_8012CAC(&gUnknown_203B2B4->unk118[2],gUnknown_203B2B4->unkC8); - break; - default: - for(index = 0; index < 4; index++) - { - gUnknown_203B2B4->unk118[index] = gUnknown_80DD148; - } - break; - - } - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2B4->unk118,1,1); -} - -void sub_8025518(void) -{ - u32 uVar3; - struct Item item; - - switch(gUnknown_203B2B4->state) - { - case 0: - gUnknown_203B2B4->fallbackState = 1; - sub_80141B4(gUnknown_80DD1A8,0,0,0x301); - break; - case 1: - uVar3 = 4; - if (gUnknown_203B2B4->unk0 == 0) { - uVar3 = 2; - } - sub_8023868(uVar3,0,0,10); - break; - case 2: - sub_8023B7C(1); - break; - case 3: - if (gUnknown_203B2B4->unk0 == 0) { - sub_8025E68(3,&gUnknown_203B2B4->item2); - } - sub_8023DA4(); - PrintColoredPokeNameToBuffer(gAvailablePokemonNames,gUnknown_203B2B4->pokeStruct,7); - PrintColoredPokeNameToBuffer(gAvailablePokemonNames + 0x50,gUnknown_203B2B4->pokeStruct,6); - sub_8012D60(&gUnknown_203B2B4->unk78,gUnknown_203B2B4->unkC8,0,gUnknown_203B2B4->unk108,gUnknown_203B2B4->menuAction1,2); - break; - case 4: - sub_8024458(gUnknown_203B2B4->species,2); - break; - case 5: - sub_801BEEC(gUnknown_203B2B4->species); - break; - case 0xb: - sub_801A5D8(1,0,0,10); - break; - case 0xc: - sub_801A8D0(1); - break; - case 0xd: - sub_801A9E0(); - sub_8012D60(&gUnknown_203B2B4->unk78,gUnknown_203B2B4->unkC8,0,gUnknown_203B2B4->unk108,gUnknown_203B2B4->menuAction2,2); - break; - case 0xe: - HeldItemToSlot(&item, &gUnknown_203B2B4->item1); - sub_801B3C0(&item); - break; - case 8: - gUnknown_203B2B4->fallbackState = 2; - sub_80141B4(gUnknown_80DD1C8,0,0,0x101); - break; - case 9: - gUnknown_203B2B4->fallbackState = 2; - sub_80141B4(gUnknown_80DD1EC,0,0,0x101); - break; - case 10: - gUnknown_203B2B4->fallbackState = 2; - sub_80141B4(gUnknown_80DD240,0,0,0x101); - break; - case 7: - gUnknown_203B2B4->fallbackState = 1; - PlaySound(0xcf); - sub_80141B4(gUnknown_80DD270,0,0,0x101); - break; - case 0xf: - unk_CopyMoves4To8(gUnknown_203B2B4->moves,gUnknown_203B2B4->pokeStruct->moves); - sub_801EE10(3,gUnknown_203B2B4->species,gUnknown_203B2B4->moves,0,0,0); - break; - case 0x10: - sub_801F1B0(1,0); - break; - case 0x11: - GetLinkedSequence(gUnknown_203B2B4->moveIndex,gUnknown_203B2B4->moves, gUnknown_203B2B4->moveIDs); - sub_801F808(gUnknown_203B2B4->moveIDs); - break; - case 0x12: - sub_801602C(2,gUnknown_203B2B4->pokeStruct->name); - break; - case 0x13: - break; - } -} diff --git a/src/items.c b/src/items.c index 83ccac068..5b3c956e9 100644 --- a/src/items.c +++ b/src/items.c @@ -151,7 +151,7 @@ void xxx_init_helditem_8090B08(struct BulkItem *held, u8 id) held->quantity = 0; } else { - held->id = 0; + held->id = ITEM_NOTHING; held->quantity = 0; } } @@ -494,7 +494,7 @@ void FillInventoryGaps() _slot += (size_t)gTeamInventory_203B460->teamItems; slot = (struct Item*)_slot; // &gTeamInventory_203B460->teamItems[end]; #endif - slot->id = 0; + slot->id = ITEM_NOTHING; slot->quantity = 0; slot->flags = 0; } @@ -567,7 +567,7 @@ void ShiftItemsDownFrom(s32 start) for (i = start, j = start + 1; i < INVENTORY_SIZE - 1; i++, j++) { gTeamInventory_203B460->teamItems[i] = gTeamInventory_203B460->teamItems[j]; } - gTeamInventory_203B460->teamItems[INVENTORY_SIZE - 1].id = 0; + gTeamInventory_203B460->teamItems[INVENTORY_SIZE - 1].id = ITEM_NOTHING; gTeamInventory_203B460->teamItems[INVENTORY_SIZE - 1].flags = 0; } @@ -621,7 +621,7 @@ void ConvertMoneyItemToMoney() result = GetMoneyValue(current_slot); AddToTeamMoney(result); - current_slot->id = 0; + current_slot->id = ITEM_NOTHING; current_slot->quantity = 0; current_slot->flags = 0; } @@ -1471,7 +1471,7 @@ void ClearAllItems_8091FB4() { slot->flags &= 0xf7; if (slot->id == ITEM_POKE) { AddToTeamMoney(GetMoneyValue(slot)); - slot->id = 0; + slot->id = ITEM_NOTHING; slot->quantity = 0; slot->flags = 0; } @@ -1493,7 +1493,7 @@ void ClearAllItems_8091FB4() { if (pokemon->heldItem.id) { if (pokemon->heldItem.id == ITEM_POKE) { AddToTeamMoney(GetMoneyValueHeld(&pokemon->heldItem)); - pokemon->heldItem.id = 0; + pokemon->heldItem.id = ITEM_NOTHING; } } } diff --git a/src/party_list_menu.c b/src/party_list_menu.c new file mode 100644 index 000000000..dc80288cd --- /dev/null +++ b/src/party_list_menu.c @@ -0,0 +1,1081 @@ +#include "global.h" +#include "constants/dungeon.h" +#include "item.h" +#include "input.h" +#include "menu.h" +#include "memory.h" +#include "pokemon.h" +#include "text.h" +#include "team_inventory.h" +#include "constants/move.h" +#include "code_800D090.h" +#include "menu_input.h" +#include "moves.h" + +struct unkStruct_203B2B8 +{ + // size: 0x280 + s32 state; + s32 fallbackState; + bool8 unk8; + /* 0xA */ s16 pokeSpecies; + u32 id; + /* 0x10 */ struct BulkItem item1; + /* 0x14 */ struct BulkItem item2; + struct PokemonStruct *pokeStruct; + bool8 isTeamLeader; + u32 moveIndex; + /* 0x24 */ u16 moveID; + struct Move moves[8]; + u16 moveIDs[4]; // some list of move IDs + u32 menuAction1; + u32 menuAction2; + u32 menuAction3; // unused + struct MenuStruct unk7C; + struct MenuStruct unkCC; + struct MenuStruct unk11C; // unused + struct MenuItem unk16C[10]; + struct MenuItem unk1BC[10]; + u16 unk20C[10]; + struct UnkTextStruct2 unk220[4]; +}; +extern struct unkStruct_203B2B8 *gUnknown_203B2B8; + +const struct UnkTextStruct2 gUnknown_80DD310 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +const struct UnkTextStruct2 gUnknown_80DD328 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x13, 0x00, 0x03, 0x00, + 0x08, 0x03, + 0x03, 0x00, + NULL +}; + +const struct UnkTextStruct2 gUnknown_80DD340 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x14, 0x00, 0x04, 0x00, + 0x06, 0x03, + 0x03, 0x00, + NULL +}; + +const struct UnkTextStruct2 gUnknown_80DD358 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x02, 0x00, 0x11, 0x00, + 0x1A, 0x02, + 0x02, 0x00, + NULL +}; + +const struct UnkTextStruct2 gUnknown_80DD370 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x02, 0x00, 0x03, 0x00, + 0x0F, 0x02, + 0x02, 0x00, + NULL +}; + +extern u8 gAvailablePokemonNames[0x58]; +extern u8 gUnknown_202DEA8[0x58]; +extern u8 gUnknown_202DE58[0x58]; + +extern u8 *gUnknown_80D4920[]; +extern u8 *gUnknown_80D4928[]; +extern u8 *gUnknown_80D4970[]; +extern u8 *gUnknown_80D4970[]; + +ALIGNED(4) const u8 gUnknown_80DD388[] = _( + "You have chosen to say farewell\n" + "to this Pokémon.{EXTRA_MSG}" + "The Pokémon will leave its Friend Area.\n" + "It will no longer be available for\n" + "adventures. Is that OK?"); + +ALIGNED(4) const u8 gUnknown_80DD420[] = _( + "If you say farewell to this\n" + "Pokémon{COMMA} it will be gone forever.{EXTRA_MSG}" + "You will never be able to get another one\n" + "like it to join your team.\n" + "Will you release it anyway?"); + +ALIGNED(4) const u8 gUnknown_80DD4C4[] = _( + "{CENTER_ALIGN}{ARG_POKEMON_1} joined the\n" + "{CENTER_ALIGN}rescue team for adventures!"); + +ALIGNED(4) const u8 gUnknown_80DD4F4[] = _( + "{CENTER_ALIGN}{ARG_POKEMON_1} left the team to remain\n" + "{CENTER_ALIGN}on standby in the Friend Area."); + +ALIGNED(4) const u8 gBecameLeader[] = _( + "{CENTER_ALIGN}{ARG_POKEMON_1} became the leader\n" + "{CENTER_ALIGN}of the rescue team."); + +ALIGNED(4) const u8 gUnknown_80DD564[] = _( + "{CENTER_ALIGN}{ARG_POKEMON_1} left\n" + "{CENTER_ALIGN}the Friend Area.\n" + "{CENTER_ALIGN}Bye-bye{COMMA} {ARG_POKEMON_1}!"); + +ALIGNED(4) const u8 gUnknown_80DD594[] = _( + "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_1}{END_COLOR_TEXT_1} was\n" + "{CENTER_ALIGN}handed over. "); + +ALIGNED(4) const u8 gUnknown_80DD5B8[] = _( + "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_1}{END_COLOR_TEXT_1} was\n" + "{CENTER_ALIGN}handed over.{EXTRA_MSG}" + "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was\n" + "{CENTER_ALIGN}returned to the Toolbox."); + +ALIGNED(4) const u8 gUnknown_80DD60C[] = _( + "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was\n" + "{CENTER_ALIGN}returned to the Toolbox."); + +ALIGNED(4) const u8 gUnknown_80DD63C[] = _( + "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was\n" + "{CENTER_ALIGN}sent to storage."); + +ALIGNED(4) const u8 gPartyMenuStandBy[] = "Stand By"; +ALIGNED(4) const u8 gPartyMenuMakeLeader[] = "Make Leader"; +ALIGNED(4) const u8 gPartyMenuJoinTeam[] = "Join Team"; +ALIGNED(4) const u8 gPartyMenuGiveGummi[] = "Give Gummi"; +ALIGNED(4) const u8 gPartyMenuGive[] = "Give"; +ALIGNED(4) const u8 gPartyMenuTake[] = "Take"; +ALIGNED(4) const u8 gPartyMenuSayFarewell[] = "Say Farewell"; +ALIGNED(4) const u8 gPartyMenuSummary[] = "Summary"; +ALIGNED(4) const u8 gPartyMenuMoves[] = "Moves"; +ALIGNED(4) const u8 gPartyMenuCheckIQ[] = "Check IQ"; +ALIGNED(4) const u8 gPartyMenuItemPlaceholder[] = _("Item: {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} "); +ALIGNED(4) const u8 gUnknown_80DD6E0[] = "%s"; +ALIGNED(4) static const u8 fill0[] = "pksdir0"; + +extern u32 sub_8026F04(struct PokemonStruct *); +extern void sub_8026074(s32); +extern void PlaySound(u32); +bool8 CanTakePokemonHeldItem(struct PokemonStruct *r0); +extern bool8 sub_80023E4(u8); +extern struct PokemonStruct *sub_808D3F8(void); +extern struct PokemonStruct *sub_808D3BC(void); +extern void sub_801F214(void); +extern u32 sub_801F194(void); +extern u32 sub_801EF38(u32); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); +extern void sub_80922B4(u8 *, const u8 *, u32); +extern void sub_808D930(u8 *, s16); +extern s32 sub_8008ED0(u8 *); +extern void xxx_call_draw_string(s32 x, s32 y, u8 *, u32, u32); +extern void xxx_format_and_draw(s32, s32, const u8 *, ...); +extern s32 sub_80144A4(s32 *); +extern u32 sub_801F890(void); +extern void sub_801F8D0(void); +extern u32 sub_801B410(void); +extern void sub_801B450(void); +extern void nullsub_104(void); +extern void sub_801A928(void); +extern void sub_8099690(u32); +extern u32 sub_801A6E8(u32); +extern u32 sub_801A8AC(void); +extern u32 sub_8022860(void); +extern void sub_8022908(void); +extern void sub_801BF98(void); +extern u32 sub_801BF48(void); +extern void sub_802453C(void); +extern u32 sub_80244E4(void); +extern bool8 sub_808D750(s16 index_); +extern void sub_808ED00(void); +extern struct PokemonStruct *GetPlayerPokemonStruct(void); +bool8 sub_8026E88(struct PokemonStruct *r0); +bool8 HasGummiItem(); +bool8 sub_8026EB8(struct PokemonStruct *r0); +extern void sub_801BB20(void); +extern void sub_801A8D0(u32); +extern void sub_801A9E0(void); +extern void sub_801BC24(void); +extern void sub_801A5D8(u32, u32, u32, u32); +extern void sub_8024458(s16, u32); +void sub_8026E08(u32 r0); +void sub_8026DAC(u32 r0, struct BulkItem *item); +bool8 sub_801BEEC(s16 species); +void sub_8026FA4(void); +void sub_8026878(void); +extern void sub_801F808(u16*); +extern void sub_80227B8(struct PokemonStruct *); +extern void sub_801B3C0(struct Item *); +extern void sub_801EE10(u32, s16, struct Move *, u32, u32, u32); +extern void sub_801F1B0(u32, u32); +extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, void *r5, u32); +extern void sub_80141B4(const u8 *, u32, u32 *, u32); +extern void sub_808D31C(struct PokemonStruct *); + +void sub_802678C(void); +void sub_80264CC(void); +void sub_802608C(void); +void sub_80261D0(void); + +void sub_80268CC(void); +void sub_8026A78(void); +void sub_8026A94(void); +void sub_8026AB0(void); +void sub_8026B10(void); +void sub_8026B48(void); +void sub_8026B64(void); +void sub_8026C14(void); +void sub_8026CF0(void); +void sub_8026D0C(void); +void sub_8026D6C(void); +void sub_8026D88(void); + +u32 sub_8025EF4(struct PokemonStruct *pokeStruct) +{ + s32 index; + gUnknown_203B2B8 = MemoryAlloc(sizeof(struct unkStruct_203B2B8), 0x8); + gUnknown_203B2B8->pokeStruct = pokeStruct; + + for(index = 0; index < NUM_MONSTERS; index++) + { + if(gUnknown_203B2B8->pokeStruct == &gRecruitedPokemonRef->pokemon[(s16)index]) + { + gUnknown_203B2B8->pokeSpecies = index; + break; + } + } + + gUnknown_203B2B8->menuAction1 = 0; + gUnknown_203B2B8->menuAction2 = 0; + gUnknown_203B2B8->menuAction3 = 0; + gUnknown_203B2B8->unk8 = FALSE; + sub_8026074(0); + return 1; +} + +u32 sub_8025F68(void) +{ + switch(gUnknown_203B2B8->state) + { + case 0: + sub_8026074(1); + break; + case 1: + case 2: + sub_80268CC(); + break; + case 3: + sub_8026A78(); + break; + case 4: + sub_8026A94(); + break; + case 0xc: + sub_8026AB0(); + break; + case 0xd: + sub_8026B10(); + break; + case 0xe: + sub_8026B48(); + break; + case 0x12: + case 0x13: + sub_8026B64(); + break; + case 0x14: + sub_8026C14(); + break; + case 0x15: + sub_8026CF0(); + break; + case 0x16: + case 0x17: + sub_8026D0C(); + break; + case 0x18: + sub_8026D6C(); + break; + default: + sub_8026D88(); + break; + case 0x19: + return 3; + } + return 0; +} + +bool8 sub_802604C(void) +{ + return gUnknown_203B2B8->unk8; +} + +void sub_8026058(void) +{ + if(gUnknown_203B2B8) + { + MemoryFree(gUnknown_203B2B8); + gUnknown_203B2B8 = NULL; + } +} + +void sub_8026074(s32 newState) +{ + gUnknown_203B2B8->state = newState; + sub_802608C(); + sub_80261D0(); +} + +void sub_802608C(void) +{ + s32 index; + sub_8006518(gUnknown_203B2B8->unk220); + switch(gUnknown_203B2B8->state) + { + case 1: + case 2: + for(index = 0; index < 4; index++) + { + gUnknown_203B2B8->unk220[index] = gUnknown_80DD310; + } + gUnknown_203B2B8->unk220[0] = gUnknown_80DD358; + gUnknown_203B2B8->unk220[3] = gUnknown_80DD370; + sub_80264CC(); + gUnknown_203B2B8->unk220[2] = gUnknown_80DD328; + sub_8012CAC(&gUnknown_203B2B8->unk220[2], gUnknown_203B2B8->unk16C); + gUnknown_203B2B8->unk220[2].unkC = 9; + break; + case 0x14: + sub_802678C(); + gUnknown_203B2B8->unk220[2] = gUnknown_80DD340; + sub_8012CAC(&gUnknown_203B2B8->unk220[2], gUnknown_203B2B8->unk16C); + break; + default: + for(index = 0; index < 4; index++) + { + gUnknown_203B2B8->unk220[index] = gUnknown_80DD310; + } + break; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2B8->unk220, 1, 1); +} + +void sub_80261D0(void) +{ + struct Item item; + + switch(gUnknown_203B2B8->state) { + case 1: + sub_8026E08(3); + sub_8026DAC(0,&gUnknown_203B2B8->item2); + PrintColoredPokeNameToBuffer(gAvailablePokemonNames,gUnknown_203B2B8->pokeStruct,7); + PrintColoredPokeNameToBuffer(gAvailablePokemonNames + 0x50,gUnknown_203B2B8->pokeStruct,6); + sub_8012D60(&gUnknown_203B2B8->unk7C,gUnknown_203B2B8->unk16C,0,gUnknown_203B2B8->unk20C,gUnknown_203B2B8->menuAction1,2); + break; + case 2: + sub_8026E08(3); + sub_8026DAC(0,&gUnknown_203B2B8->item2); + PrintColoredPokeNameToBuffer(gAvailablePokemonNames,gUnknown_203B2B8->pokeStruct,7); + PrintColoredPokeNameToBuffer(gAvailablePokemonNames + 0x50,gUnknown_203B2B8->pokeStruct,6); + sub_8012EA4(&gUnknown_203B2B8->unk7C,1); + break; + case 3: + sub_8024458(gUnknown_203B2B8->pokeSpecies,2); + break; + case 4: + sub_801BEEC(gUnknown_203B2B8->pokeSpecies); + break; + case 0xe: + sub_80227B8(gUnknown_203B2B8->pokeStruct); + break; + case 0x12: + sub_801A5D8(1,0,0,10); + break; + case 0x13: + sub_801A8D0(1); + break; + case 0x14: + sub_801A9E0(); + sub_8012D60(&gUnknown_203B2B8->unkCC,gUnknown_203B2B8->unk16C,0,gUnknown_203B2B8->unk20C,gUnknown_203B2B8->menuAction2,2); + break; + case 0x15: + HeldItemToSlot(&item,&gUnknown_203B2B8->item1); + sub_801B3C0(&item); + break; + case 0x16: + unk_CopyMoves4To8(gUnknown_203B2B8->moves,gUnknown_203B2B8->pokeStruct->moves); + sub_801EE10(3,gUnknown_203B2B8->pokeSpecies,gUnknown_203B2B8->moves,0,0,0); + break; + case 0x17: + sub_801F1B0(1,0); + break; + case 0xc: + sub_8026878(); + sub_8014248(gUnknown_80DD388,0,3,gUnknown_203B2B8->unk1BC,0,4,0,0,0x101); + break; + case 0xd: + sub_8026878(); + sub_8014248(gUnknown_80DD420,0,3,gUnknown_203B2B8->unk1BC,0,4,0,0,0x101); + break; + case 0x18: + GetLinkedSequence(gUnknown_203B2B8->moveIndex, gUnknown_203B2B8->moves,gUnknown_203B2B8->moveIDs); + sub_801F808(gUnknown_203B2B8->moveIDs); + break; + case 5: + gUnknown_203B2B8->fallbackState = 0x19; + PlaySound(0xcf); + sub_80141B4(gUnknown_80DD4C4,0,0,0x101); + break; + case 6: + gUnknown_203B2B8->fallbackState = 0x19; + PlaySound(0xcf); + sub_80141B4(gUnknown_80DD4F4,0,0,0x101); + break; + case 7: + gUnknown_203B2B8->fallbackState = 0x19; + PlaySound(0xcc); + sub_80141B4(gBecameLeader,0,0,0x101); + break; + case 8: + gUnknown_203B2B8->fallbackState = 9; + PlaySound(0xca); + sub_80141B4(gUnknown_80DD564,0,0,0x101); + break; + case 9: + sub_8026FA4(); + sub_808D31C(gUnknown_203B2B8->pokeStruct); + gUnknown_203B2B8->unk8 = TRUE; + break; + case 0xf: + gUnknown_203B2B8->fallbackState = 2; + sub_80141B4(gUnknown_80DD594,0,0,0x101); + break; + case 0x10: + gUnknown_203B2B8->fallbackState = 2; + sub_80141B4(gUnknown_80DD5B8,0,0,0x101); + break; + case 0x11: + gUnknown_203B2B8->fallbackState = 2; + sub_80141B4(gUnknown_80DD60C,0,0,0x101); + break; + case 10: + gUnknown_203B2B8->fallbackState = 0x19; + sub_80141B4(gUnknown_80DD60C,0,0,0x101); + break; + case 0xb: + gUnknown_203B2B8->fallbackState = 0x19; + sub_80141B4(gUnknown_80DD63C,0,0,0x101); + break; + case 0: + case 0x19: + break; + } +} + +void sub_80264CC(void) { + struct PokemonStruct *pokeStruct; + s32 index; + s32 one; + u16 temp; + s32 loopMax = 0; + pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2B8->pokeSpecies]; + MemoryFill16(gUnknown_203B2B8->unk20C, 0, sizeof(gUnknown_203B2B8->unk20C)); + gUnknown_203B2B8->isTeamLeader = gUnknown_203B2B8->pokeStruct->isTeamLeader; + + PeekPokemonItem(gUnknown_203B2B8->pokeSpecies, &gUnknown_203B2B8->item2); + + if(temp = pokeStruct->unk0 >> 1, one = 1, temp & one) + { + gUnknown_203B2B8->unk16C[loopMax].text = gPartyMenuStandBy; + gUnknown_203B2B8->unk16C[loopMax].menuAction = 7; + if(!sub_8026E88(pokeStruct)) + { + gUnknown_203B2B8->unk20C[loopMax] = 1; + } + loopMax += 1; + + if(sub_80023E4(8) && !pokeStruct->isTeamLeader) + { + gUnknown_203B2B8->unk16C[loopMax].text = gPartyMenuMakeLeader; + gUnknown_203B2B8->unk16C[loopMax].menuAction = 8; + loopMax += 1; + } + } + else + { + gUnknown_203B2B8->unk16C[loopMax].text = gPartyMenuJoinTeam; + gUnknown_203B2B8->unk16C[loopMax].menuAction = 6; + if(!sub_808D750(gUnknown_203B2B8->pokeSpecies)) + { + gUnknown_203B2B8->unk20C[loopMax] = 1; + } + loopMax += 1; + } + + gUnknown_203B2B8->unk16C[loopMax].text = gPartyMenuGiveGummi; + gUnknown_203B2B8->unk16C[loopMax].menuAction = 10; + if(!HasGummiItem()) + { + gUnknown_203B2B8->unk20C[loopMax] = 1; + } + loopMax += 1; + + gUnknown_203B2B8->unk16C[loopMax].text = gPartyMenuGive; + gUnknown_203B2B8->unk16C[loopMax].menuAction = 0xB; + if(GetNumberOfFilledInventorySlots() == 0) + { + gUnknown_203B2B8->unk20C[loopMax] = 1; + } + loopMax += 1; + + gUnknown_203B2B8->unk16C[loopMax].text = gPartyMenuTake; + gUnknown_203B2B8->unk16C[loopMax].menuAction = 0xC; + if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE || gUnknown_203B2B8->item2.id == ITEM_NOTHING) + { + gUnknown_203B2B8->unk20C[loopMax] = 1; + } + loopMax += 1; + + if((temp = pokeStruct->unk0 >> 1, one = 1, temp & one) == 0) + { + gUnknown_203B2B8->unk16C[loopMax].text = gPartyMenuSayFarewell; + gUnknown_203B2B8->unk16C[loopMax].menuAction = 9; + if(!sub_8026EB8(pokeStruct)) + { + gUnknown_203B2B8->unk20C[loopMax] = 1; + } + loopMax += 1; + } + + gUnknown_203B2B8->unk16C[loopMax].text = gPartyMenuSummary; + gUnknown_203B2B8->unk16C[loopMax].menuAction = 4; + loopMax += 1; + gUnknown_203B2B8->unk16C[loopMax].text = gPartyMenuMoves; + gUnknown_203B2B8->unk16C[loopMax].menuAction = 0xD; + loopMax += 1; + gUnknown_203B2B8->unk16C[loopMax].text = gPartyMenuCheckIQ; + gUnknown_203B2B8->unk16C[loopMax].menuAction = 5; + loopMax += 1; + gUnknown_203B2B8->unk16C[loopMax].text = NULL; + gUnknown_203B2B8->unk16C[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2B8->unk20C[index] == 0) + { + if(gUnknown_203B2B8->unk16C[index].menuAction == gUnknown_203B2B8->menuAction1) + return; + } + } + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2B8->unk20C[index] == 0) + { + gUnknown_203B2B8->menuAction1 = gUnknown_203B2B8->unk16C[index].menuAction; + break; + } + } +} + +void sub_802678C(void) +{ + s32 index; + s32 loopMax = 0; + MemoryFill16(gUnknown_203B2B8->unk20C, 0, sizeof(gUnknown_203B2B8->unk20C)); + gUnknown_203B2B8->unk16C[loopMax].text = gPartyMenuGive; + gUnknown_203B2B8->unk16C[loopMax].menuAction = 0xB; + if(GetNumberOfFilledInventorySlots() == 0) + { + gUnknown_203B2B8->unk20C[0] = 1; + } + loopMax += 1; + gUnknown_203B2B8->unk16C[loopMax].text = *gUnknown_80D4970; + gUnknown_203B2B8->unk16C[loopMax].menuAction = 4; + loopMax += 1; + gUnknown_203B2B8->unk16C[loopMax].text = NULL; + gUnknown_203B2B8->unk16C[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2B8->unk20C[index] == 0) + { + if(gUnknown_203B2B8->unk16C[index].menuAction == gUnknown_203B2B8->menuAction2) + return; + } + } + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2B8->unk20C[index] == 0) + { + gUnknown_203B2B8->menuAction2 = gUnknown_203B2B8->unk16C[index].menuAction; + break; + } + } +} + +void sub_8026878(void) { + s32 loopMax = 0; + gUnknown_203B2B8->unk1BC[loopMax].text = *gUnknown_80D4920; + gUnknown_203B2B8->unk1BC[loopMax].menuAction = 2; + loopMax += 1; + gUnknown_203B2B8->unk1BC[loopMax].text = *gUnknown_80D4928; + gUnknown_203B2B8->unk1BC[loopMax].menuAction = 3; + loopMax += 1; + gUnknown_203B2B8->unk1BC[loopMax].text = NULL; + gUnknown_203B2B8->unk1BC[loopMax].menuAction = 1; +} + +void sub_80268CC(void) +{ + struct PokemonStruct *playerPokemon; + struct PokemonStruct *pokeStruct; + struct PokemonStruct *pokeStruct2; + s32 choice; + + choice = 0; + if ((sub_8012FD8(&gUnknown_203B2B8->unk7C) == 0) && (sub_8013114(&gUnknown_203B2B8->unk7C,&choice), choice != 1)) { + gUnknown_203B2B8->menuAction1 = choice; + } + switch(choice) { + case 6: + if (sub_808D750(gUnknown_203B2B8->pokeSpecies)) { + +#ifdef NONMATCHING + pokeStruct = &gUnknown_203B2B8->pokeSpecies[gRecruitedPokemonRef->pokemon]; +#else + register size_t offset asm("r1") = offsetof(struct unkStruct_203B45C, pokemon[gUnknown_203B2B8->pokeSpecies]); + struct PokemonStruct* p = gRecruitedPokemonRef->pokemon; + size_t addr = offset + (size_t)p; + pokeStruct = (struct PokemonStruct*)addr; +#endif + + pokeStruct->unk0 |= 2; + nullsub_104(); + } + sub_808ED00(); + sub_8026074(5); + break; + case 7: + gUnknown_203B2B8->pokeStruct->unk0 &= 0xfffd; + nullsub_104(); + sub_808ED00(); + sub_8026074(6); + break; + case 8: + pokeStruct2 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2B8->pokeSpecies]; + playerPokemon = GetPlayerPokemonStruct(); + + if (!pokeStruct2->isTeamLeader) { + playerPokemon->isTeamLeader = FALSE; + pokeStruct2->isTeamLeader = TRUE; + nullsub_104(); + } + sub_808ED00(); + sub_8026074(7); + break; + case 9: + sub_8026074(0xc); + break; + case 0xd: + sub_8026074(0x16); + break; + case 10: + sub_8026074(0xe); + break; + case 0xb: + sub_8026074(0x12); + break; + case 0xc: + PlaySound(0x14d); + if (gUnknown_203B2B8->item2.id != ITEM_NOTHING) { + AddHeldItemToInventory(&gUnknown_203B2B8->item2); + } + FillInventoryGaps(); + gUnknown_203B2B8->item2.id = ITEM_NOTHING; + gUnknown_203B2B8->item2.quantity = 0; + GivePokemonItem(gUnknown_203B2B8->pokeSpecies,&gUnknown_203B2B8->item2); + nullsub_104(); + sub_8026074(0x11); + break; + case 4: + sub_8026074(3); + break; + case 5: + sub_8026074(4); + break; + case 1: + sub_8026074(0x19); + break; + + } +} + +void sub_8026A78(void) +{ + switch(sub_80244E4()) + { + case 2: + case 3: + sub_802453C(); + sub_8026074(2); + break; + case 0: + case 1: + break; + } +} + +void sub_8026A94(void) +{ + switch(sub_801BF48()) + { + case 2: + case 3: + sub_801BF98(); + sub_8026074(2); + break; + case 0: + case 1: + break; + } +} + + +static inline bool8 sub_8026AB0_sub(void) { + if (gUnknown_203B2B8->pokeStruct->dungeonLocation.id == 0x44 || gUnknown_203B2B8->pokeStruct->dungeonLocation.id == 0x45) + return TRUE; + else + return FALSE; +} + +void sub_8026AB0(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 1: + case 3: + sub_8026074(2); + break; + case 2: + if (sub_8026AB0_sub()) + sub_8026074(0xD); + else + sub_8026074(8); + break; + } + } +} + +void sub_8026B10(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 1: + case 3: + sub_8026074(2); + break; + case 2: + sub_8026074(8); + break; + } + } +} + + +void sub_8026B48(void) +{ + switch(sub_8022860()) + { + case 2: + case 3: + sub_8022908(); + sub_8026074(2); + break; + case 0: + case 1: + break; + } +} + + +void sub_8026B64(void) +{ + switch(sub_801A6E8(1)) + { + case 3: + gUnknown_203B2B8->id = sub_801A8AC(); + gUnknown_203B2B8->item1.id = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->id].id; + gUnknown_203B2B8->item1.quantity = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->id].quantity; + sub_8026074(0x14); + break; + case 4: + gUnknown_203B2B8->id = sub_801A8AC(); + gUnknown_203B2B8->item1.id = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->id].id; + gUnknown_203B2B8->item1.quantity = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->id].quantity; + sub_8099690(0); + sub_8026074(0x15); + break; + case 2: + sub_801A928(); + sub_8026074(2); + break; + case 0: + case 1: + break; + } +} + +void sub_8026C14(void) +{ + u32 nextState; + struct unkStruct_8090F58 temp; + int menuAction; + struct Item slot; + + menuAction = 0; + sub_801A6E8(0); + if ((sub_8012FD8(&gUnknown_203B2B8->unkCC) == '\0') && (sub_8013114(&gUnknown_203B2B8->unkCC,&menuAction), menuAction != 1)) { + gUnknown_203B2B8->menuAction2 = menuAction; + } + switch(menuAction) + { + case 0xb: + nextState = 0xF; + PlaySound(0x14d); + ShiftItemsDownFrom(gUnknown_203B2B8->id); + FillInventoryGaps(); + if (gUnknown_203B2B8->item2.id != ITEM_NOTHING) { + AddHeldItemToInventory(&gUnknown_203B2B8->item2); + nextState = 0x10; + } + HeldItemToSlot(&slot,&gUnknown_203B2B8->item1); + temp.unk0 = 0; + temp.unk4 = 0; + temp.unk8 = 1; + slot.flags = ITEM_FLAG_EXISTS; + sub_8090E14(gUnknown_202DEA8,&slot,&temp); + GivePokemonItem(gUnknown_203B2B8->pokeSpecies,&gUnknown_203B2B8->item1); + sub_801A928(); + nullsub_104(); + sub_8026074(nextState); + break; + case 4: + sub_8099690(0); + sub_8026074(0x15); + break; + case 1: + sub_8026074(0x13); + break; + } +} + +void sub_8026CF0(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + sub_8026074(0x13); + break; + case 0: + case 1: + break; + } +} + + +void sub_8026D0C(void) +{ + switch(sub_801EF38(1)) + { + case 0: + case 1: + break; + case 3: + case 4: + gUnknown_203B2B8->moveIndex = sub_801F194(); + gUnknown_203B2B8->moveID = gUnknown_203B2B8->moves[gUnknown_203B2B8->moveIndex].id; + sub_8026074(0x18); + break; + case 2: + sub_801F214(); + sub_8026074(2); + break; + } +} + +void sub_8026D6C(void) +{ + switch(sub_801F890()) + { + case 2: + case 3: + sub_801F8D0(); + sub_8026074(0x17); + break; + case 0: + case 1: + break; + } +} + +void sub_8026D88(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + sub_8026074(gUnknown_203B2B8->fallbackState); + } +} + +void sub_8026DAC(u32 r0, struct BulkItem *item) +{ + struct Item slot; + struct unkStruct_8090F58 temp; + + sub_8008C54(r0); + sub_80073B8(r0); + HeldItemToSlot(&slot, item); + temp.unk0 = 0; + temp.unk4 = 0; + temp.unk8 = 1; + slot.flags = ITEM_FLAG_EXISTS; + sub_8090E14(gUnknown_202DE58, &slot, &temp); + xxx_format_and_draw(4, 3, gPartyMenuItemPlaceholder, r0, 0); + sub_80073E0(r0); +} + +void sub_8026E08(u32 r0) +{ + u8 buffer1[40]; + u8 buffer[20]; + s32 x; + + sub_8008C54(r0); + sub_80073B8(r0); + sub_80922B4(gAvailablePokemonNames, gUnknown_203B2B8->pokeStruct->name, POKEMON_NAME_LENGTH); + sub_808D930(buffer, gUnknown_203B2B8->pokeStruct->speciesNum); + sprintfStatic(buffer1, gUnknown_80DD6E0, gAvailablePokemonNames); + x = sub_8008ED0(buffer1); + xxx_call_draw_string(((gUnknown_80DD370.unkC << 3) - x) / 2, 3, buffer1, r0, 0); + sub_80073E0(r0); +} + +bool8 sub_8026E88(struct PokemonStruct *r0) +{ + bool8 flag; + if(!r0->isTeamLeader) + { + flag = (r0->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER); + if(flag) + if(!sub_80023E4(0x8)) + return FALSE; + } + else + return FALSE; + return TRUE; +} + +bool8 sub_8026EB8(struct PokemonStruct *r0) +{ + bool8 flag; + if(sub_808D3BC() != r0) + if(sub_808D3F8() != r0) + if(!r0->isTeamLeader) + { + flag = (r0->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER); + if(flag) + { + if(sub_80023E4(0x8)) + goto check; + } + else + check: + if(sub_8026F04(r0) != 3) + return TRUE; + } + return FALSE; +} + + +u32 sub_8026F04(struct PokemonStruct *r0) +{ + if(r0->heldItem.id == ITEM_NOTHING) + return 0; + else if(GetNumberOfFilledInventorySlots() < INVENTORY_SIZE) + return 1; + else if(CanTakePokemonHeldItem(r0)) + return 2; + else + return 3; +} + +bool8 CanTakePokemonHeldItem(struct PokemonStruct *r0) +{ + if(IsNotMoneyOrUsedTMItem(r0->heldItem.id)) + { + if(IsThrowableItem(r0->heldItem.id)) + { + if((gTeamInventory_203B460->teamStorage[r0->heldItem.id] + r0->heldItem.quantity) > 999) + return FALSE; + } + else + { + if(gTeamInventory_203B460->teamStorage[r0->heldItem.id] > 998) + return FALSE; + } + } + else + return FALSE; + return TRUE; +} + +void sub_8026FA4(void) +{ + switch(sub_8026F04(gUnknown_203B2B8->pokeStruct)) + { + case 1: + PlaySound(0x14d); + AddHeldItemToInventory(&gUnknown_203B2B8->item2); + FillInventoryGaps(); + gUnknown_203B2B8->item2.id = ITEM_NOTHING; + gUnknown_203B2B8->item2.quantity = 0; + GivePokemonItem(gUnknown_203B2B8->pokeSpecies, &gUnknown_203B2B8->item2); + sub_8026074(0xA); + break; + case 2: + PlaySound(0x14d); + if(IsThrowableItem(gUnknown_203B2B8->item2.id)) + { + gTeamInventory_203B460->teamStorage[gUnknown_203B2B8->item2.id] += gUnknown_203B2B8->item2.quantity; + } + else + { + gTeamInventory_203B460->teamStorage[gUnknown_203B2B8->item2.id] += 1; + } + + gUnknown_203B2B8->item2.id = ITEM_NOTHING; + gUnknown_203B2B8->item2.quantity = 0; + GivePokemonItem(gUnknown_203B2B8->pokeSpecies, &gUnknown_203B2B8->item2); + sub_8026074(0xB); + break; + case 0: + default: + sub_8026074(0x19); + break; + } +} diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c index 644d44ea9..bc56660ac 100644 --- a/src/pokemon_mid.c +++ b/src/pokemon_mid.c @@ -553,7 +553,7 @@ void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2 * a1, struct Po HeldItemToSlot(slot, held); } else { - slot->id = 0; + slot->id = ITEM_NOTHING; slot->quantity = 0; slot->flags = 0; } @@ -601,7 +601,7 @@ void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct SlotToHeldItem(&pokemon->heldItem, &a2->itemSlot); } else { - pokemon->heldItem.id = 0; + pokemon->heldItem.id = ITEM_NOTHING; } } @@ -613,7 +613,7 @@ void sub_808DFDC(s32 a1, struct PokemonStruct2* a2) SlotToHeldItem(&pokemon->heldItem, &a2->itemSlot); } else { - pokemon->heldItem.id = 0; + pokemon->heldItem.id = ITEM_NOTHING; } }