diff --git a/asm/code_801C620.s b/asm/code_801C620.s index 314708ced..3708b441b 100644 --- a/asm/code_801C620.s +++ b/asm/code_801C620.s @@ -5,1054 +5,6 @@ .text - thumb_func_start sub_801CA08 -sub_801CA08: - push {r4-r6,lr} - lsls r0, 24 - cmp r0, 0 - bne _0801CA28 - ldr r0, _0801CA20 - ldr r0, [r0] - ldr r1, _0801CA24 - adds r0, r1 - bl sub_8013660 - movs r0, 0 - b _0801CB1E - .align 2, 0 -_0801CA20: .4byte gUnknown_203B244 -_0801CA24: .4byte 0x000004b4 -_0801CA28: - ldr r0, _0801CA44 - ldr r0, [r0] - ldr r1, _0801CA48 - adds r0, r1 - bl GetKeyPress - subs r0, 0x1 - cmp r0, 0x5 - bhi _0801CAF2 - lsls r0, 2 - ldr r1, _0801CA4C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801CA44: .4byte gUnknown_203B244 -_0801CA48: .4byte 0x000004b4 -_0801CA4C: .4byte _0801CA50 - .align 2, 0 -_0801CA50: - .4byte _0801CA72 - .4byte _0801CA68 - .4byte _0801CAF2 - .4byte _0801CAE8 - .4byte _0801CA7C - .4byte _0801CA7C -_0801CA68: - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - b _0801CB1E -_0801CA72: - movs r0, 0 - bl PlayMenuSoundEffect - movs r0, 0x3 - b _0801CB1E -_0801CA7C: - ldr r0, _0801CAD8 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0x1 - bne _0801CAF2 - bl sub_801CB24 - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - bl sub_801CFE0 - movs r6, 0 - cmp r0, 0 - bne _0801CAB0 - bl GetNumberOfFilledInventorySlots - adds r4, r0, 0 - bl sub_801CFB8 - adds r4, r0 - cmp r4, 0x13 - bgt _0801CAAC - movs r6, 0x1 -_0801CAAC: - cmp r6, 0 - beq _0801CAE0 -_0801CAB0: - movs r0, 0x6 - bl PlayMenuSoundEffect - ldr r0, _0801CAD8 - ldr r0, [r0] - lsls r1, r5, 2 - adds r2, r0, 0 - adds r2, 0xF4 - adds r2, r1 - ldr r1, [r2] - movs r3, 0x1 - eors r1, r3 - str r1, [r2] - ldr r1, _0801CADC - adds r0, r1 - movs r1, 0 - bl sub_80138B8 - b _0801CB18 - .align 2, 0 -_0801CAD8: .4byte gUnknown_203B244 -_0801CADC: .4byte 0x000004b4 -_0801CAE0: - movs r0, 0x2 - bl PlayMenuSoundEffect - b _0801CAF2 -_0801CAE8: - movs r0, 0x4 - bl PlayMenuSoundEffect - movs r0, 0x4 - b _0801CB1E -_0801CAF2: - ldr r0, _0801CB0C - ldr r0, [r0] - ldr r1, _0801CB10 - adds r0, r1 - movs r1, 0x1 - bl sub_80138B8 - lsls r0, 24 - cmp r0, 0 - bne _0801CB14 - movs r0, 0 - b _0801CB1E - .align 2, 0 -_0801CB0C: .4byte gUnknown_203B244 -_0801CB10: .4byte 0x000004b4 -_0801CB14: - bl sub_801CC38 -_0801CB18: - bl sub_801CCD8 - movs r0, 0x1 -_0801CB1E: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_801CA08 - - thumb_func_start sub_801CB24 -sub_801CB24: - ldr r0, _0801CB50 - ldr r0, [r0] - ldr r2, _0801CB54 - adds r1, r0, r2 - movs r3, 0 - ldrsh r2, [r1, r3] - movs r3, 0x9A - lsls r3, 3 - adds r1, r0, r3 - movs r3, 0 - ldrsh r1, [r1, r3] - muls r2, r1 - ldr r3, _0801CB58 - adds r1, r0, r3 - movs r3, 0 - ldrsh r1, [r1, r3] - adds r2, r1 - adds r0, 0x4 - adds r0, r2 - ldrb r0, [r0] - bx lr - .align 2, 0 -_0801CB50: .4byte gUnknown_203B244 -_0801CB54: .4byte 0x000004d2 -_0801CB58: .4byte 0x000004cc - thumb_func_end sub_801CB24 - - thumb_func_start sub_801CB5C -sub_801CB5C: - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl ResetUnusedInputStruct - ldr r5, _0801CBAC - ldr r0, [r5] - movs r1, 0x9E - lsls r1, 3 - adds r0, r1 - movs r1, 0 - movs r2, 0 - bl sub_800641C - bl sub_801CE58 - adds r2, r0, 0 - ldr r0, [r5] - ldr r3, _0801CBB0 - adds r1, r0, r3 - strh r2, [r1] - ldr r1, _0801CBB4 - adds r0, r1 - bl sub_8013984 - bl sub_801CC38 - bl sub_801CCD8 - cmp r4, 0 - beq _0801CBA6 - ldr r0, [r5] - ldr r3, _0801CBB4 - adds r0, r3 - bl AddMenuCursorSprite -_0801CBA6: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801CBAC: .4byte gUnknown_203B244 -_0801CBB0: .4byte 0x000004d6 -_0801CBB4: .4byte 0x000004b4 - thumb_func_end sub_801CB5C - - thumb_func_start sub_801CBB8 -sub_801CBB8: - push {r4-r6,lr} - ldr r5, _0801CC1C - ldr r2, [r5] - cmp r2, 0 - beq _0801CC16 - ldr r1, _0801CC20 - ldr r0, [r2] - str r0, [r1] - ldr r1, _0801CC24 - ldr r3, _0801CC28 - adds r0, r2, r3 - ldrh r0, [r0] - strh r0, [r1] - ldr r1, _0801CC2C - ldr r6, _0801CC30 - adds r0, r2, r6 - ldrh r0, [r0] - strh r0, [r1] - movs r1, 0x9D - lsls r1, 3 - adds r0, r2, r1 - ldr r0, [r0] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - movs r4, 0x9E - lsls r4, 3 - adds r1, r4 - ldr r0, _0801CC34 - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - bl ResetUnusedInputStruct - ldr r0, [r5] - adds r0, r4 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r5] - bl MemoryFree - movs r0, 0 - str r0, [r5] -_0801CC16: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0801CC1C: .4byte gUnknown_203B244 -_0801CC20: .4byte gUnknown_203B248 -_0801CC24: .4byte gUnknown_203B24C -_0801CC28: .4byte 0x000004cc -_0801CC2C: .4byte gUnknown_203B24E -_0801CC30: .4byte 0x000004d2 -_0801CC34: .4byte gUnknown_80DBE3C - thumb_func_end sub_801CBB8 - - thumb_func_start sub_801CC38 -sub_801CC38: - push {r4,r5,lr} - ldr r4, _0801CCC4 - ldr r0, [r4] - movs r1, 0xAA - lsls r1, 3 - adds r0, r1 - movs r2, 0 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r4] - ldr r1, _0801CCC8 - adds r0, r1 - strb r2, [r0] - ldr r0, [r4] - adds r1, 0x1 - adds r0, r1 - movs r1, 0xC - strb r1, [r0] - ldr r0, [r4] - ldr r1, _0801CCCC - adds r0, r1 - strb r2, [r0] - ldr r0, [r4] - ldr r2, _0801CCD0 - adds r0, r2 - movs r1, 0 - ldrsh r0, [r0, r1] - movs r1, 0xC - bl sub_80095E4 - adds r0, 0x2 - lsls r0, 16 - ldr r3, [r4] - movs r2, 0x9D - lsls r2, 3 - adds r5, r3, r2 - ldr r2, [r5] - lsls r1, r2, 1 - adds r1, r2 - lsls r1, 3 - adds r1, r3, r1 - ldr r2, _0801CCD4 - adds r1, r2 - asrs r2, r0, 16 - lsrs r0, 16 - strh r0, [r1] - ldr r1, [r5] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r3, r0 - adds r2, 0x2 - movs r0, 0xA0 - lsls r0, 3 - adds r3, r0 - strh r2, [r3] - bl ResetUnusedInputStruct - ldr r0, [r4] - movs r1, 0x9E - lsls r1, 3 - adds r0, r1 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801CCC4: .4byte gUnknown_203B244 -_0801CCC8: .4byte 0x00000551 -_0801CCCC: .4byte 0x00000553 -_0801CCD0: .4byte 0x000004ce -_0801CCD4: .4byte 0x000004fe - thumb_func_end sub_801CC38 - - thumb_func_start sub_801CCD8 -sub_801CCD8: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x58 - ldr r4, _0801CE38 - ldr r0, [r4] - movs r5, 0x9D - lsls r5, 3 - adds r0, r5 - ldr r0, [r0] - bl sub_8008C54 - ldr r0, [r4] - adds r0, r5 - ldr r0, [r0] - bl sub_80073B8 - ldr r2, _0801CE3C - ldr r0, [r4] - adds r0, r5 - ldr r3, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0xA - movs r1, 0 - bl xxx_call_draw_string - ldr r3, [r4] - ldr r1, _0801CE40 - adds r0, r3, r1 - ldrb r0, [r0] - lsls r0, 3 - adds r0, 0x4 - ldr r2, _0801CE44 - adds r1, r3, r2 - movs r6, 0 - ldrsh r2, [r1, r6] - adds r2, 0x1 - movs r1, 0x7 - str r1, [sp] - adds r3, r5 - ldr r1, [r3] - str r1, [sp, 0x4] - movs r1, 0 - movs r3, 0x2 - bl sub_8012BC4 - movs r7, 0 - ldr r0, [r4] - ldr r1, _0801CE48 - adds r0, r1 - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r7, r0 - bge _0801CE1A - adds r6, r4, 0 - ldr r3, _0801CE4C - mov r9, r3 - mov r8, r5 -_0801CD50: - ldr r1, [r6] - ldr r4, _0801CE44 - adds r0, r1, r4 - movs r3, 0 - ldrsh r2, [r0, r3] - subs r4, 0x2 - adds r0, r1, r4 - movs r3, 0 - ldrsh r0, [r0, r3] - muls r0, r2 - adds r0, r7 - adds r1, 0x4 - adds r1, r0 - ldrb r5, [r1] - add r0, sp, 0x8 - adds r1, r5, 0 - movs r2, 0 - bl sub_8090DC4 - ldr r0, [r6] - add r0, r9 - adds r1, r7, 0 - bl sub_8013800 - adds r1, r0, 0 - ldr r0, [r6] - add r0, r8 - ldr r3, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - add r2, sp, 0x8 - bl xxx_call_draw_string - ldr r0, [r6] - add r0, r9 - adds r1, r7, 0 - bl sub_8013800 - adds r1, r0, 0 - ldr r4, [r6] - ldr r2, _0801CE50 - adds r0, r4, r2 - ldr r0, [r0] - movs r3, 0xC - ldrsh r0, [r0, r3] - lsls r0, 3 - subs r0, 0x2 - ldr r2, _0801CE54 - ldr r2, [r2] - lsls r3, r5, 1 - adds r2, 0x50 - adds r2, r3 - ldrh r2, [r2] - movs r3, 0x5 - str r3, [sp] - add r4, r8 - ldr r3, [r4] - str r3, [sp, 0x4] - movs r3, 0x3 - bl sub_8012BC4 - adds r0, r5, 0 - bl sub_801CFE0 - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _0801CE0A - ldr r0, [r6] - ldr r4, _0801CE4C - adds r0, r4 - adds r1, r7, 0 - bl sub_8013800 - adds r2, r0, 0 - ldr r1, [r6] - movs r3, 0x9D - lsls r3, 3 - adds r0, r1, r3 - ldr r0, [r0] - adds r4, 0x38 - adds r1, r4 - ldr r1, [r1] - movs r4, 0xC - ldrsh r3, [r1, r4] - subs r3, 0x1 - lsls r3, 3 - movs r1, 0xA - str r1, [sp] - movs r1, 0x8 - bl sub_8007B7C -_0801CE0A: - adds r7, 0x1 - ldr r0, [r6] - ldr r1, _0801CE48 - adds r0, r1 - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r7, r0 - blt _0801CD50 -_0801CE1A: - ldr r0, _0801CE38 - ldr r0, [r0] - movs r3, 0x9D - lsls r3, 3 - adds r0, r3 - ldr r0, [r0] - bl sub_80073E0 - add sp, 0x58 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801CE38: .4byte gUnknown_203B244 -_0801CE3C: .4byte gUnknown_80DBE6C -_0801CE40: .4byte 0x00000552 -_0801CE44: .4byte 0x000004d2 -_0801CE48: .4byte 0x000004ce -_0801CE4C: .4byte 0x000004b4 -_0801CE50: .4byte 0x000004ec -_0801CE54: .4byte gTeamInventory_203B460 - thumb_func_end sub_801CCD8 - - thumb_func_start sub_801CE58 -sub_801CE58: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - movs r3, 0 - movs r6, 0x1 - ldr r4, _0801CF0C -_0801CE68: - ldr r0, [r4] - ldr r0, [r0] - cmp r0, 0x2 - beq _0801CE92 - ldr r0, _0801CF10 - ldr r0, [r0] - lsls r1, r6, 1 - adds r0, 0x50 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0 - beq _0801CE9C - lsls r0, r6, 24 - lsrs r0, 24 - str r3, [sp] - bl IsNotMoneyOrUsedTMItem - lsls r0, 24 - ldr r3, [sp] - cmp r0, 0 - beq _0801CE9C -_0801CE92: - ldr r0, [r4] - adds r0, 0x4 - adds r0, r3 - strb r6, [r0] - adds r3, 0x1 -_0801CE9C: - adds r6, 0x1 - cmp r6, 0xEF - ble _0801CE68 - movs r6, 0 - subs r0, r3, 0x1 - mov r9, r0 - cmp r6, r9 - bge _0801CEFC -_0801CEAC: - adds r0, r6, 0x1 - mov r8, r0 - mov r5, r8 - cmp r8, r3 - bge _0801CEF6 - ldr r7, _0801CF0C -_0801CEB8: - ldr r0, [r7] - adds r0, 0x4 - adds r0, r6 - ldrb r0, [r0] - str r3, [sp] - bl GetItemOrder - adds r4, r0, 0 - ldr r0, [r7] - adds r0, 0x4 - adds r0, r5 - ldrb r0, [r0] - bl GetItemOrder - ldr r3, [sp] - cmp r4, r0 - ble _0801CEF0 - ldr r0, [r7] - adds r0, 0x4 - adds r1, r0, r6 - ldrb r2, [r1] - adds r0, r5 - ldrb r0, [r0] - strb r0, [r1] - ldr r0, [r7] - adds r0, 0x4 - adds r0, r5 - strb r2, [r0] -_0801CEF0: - adds r5, 0x1 - cmp r5, r3 - blt _0801CEB8 -_0801CEF6: - mov r6, r8 - cmp r6, r9 - blt _0801CEAC -_0801CEFC: - adds r0, r3, 0 - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0801CF0C: .4byte gUnknown_203B244 -_0801CF10: .4byte gTeamInventory_203B460 - thumb_func_end sub_801CE58 - - thumb_func_start sub_801CF14 -sub_801CF14: - push {r4,lr} - cmp r0, 0x2 - bne _0801CF1E -_0801CF1A: - movs r0, 0 - b _0801CF46 -_0801CF1E: - movs r4, 0x1 -_0801CF20: - ldr r0, _0801CF4C - ldr r0, [r0] - lsls r1, r4, 1 - adds r0, 0x50 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0 - beq _0801CF3E - lsls r0, r4, 24 - lsrs r0, 24 - bl IsNotMoneyOrUsedTMItem - lsls r0, 24 - cmp r0, 0 - bne _0801CF1A -_0801CF3E: - adds r4, 0x1 - cmp r4, 0xEF - ble _0801CF20 - movs r0, 0x1 -_0801CF46: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0801CF4C: .4byte gTeamInventory_203B460 - thumb_func_end sub_801CF14 - - thumb_func_start sub_801CF50 -sub_801CF50: - push {r4,r5,lr} - cmp r0, 0x2 - bne _0801CF5A -_0801CF56: - movs r0, 0 - b _0801CF84 -_0801CF5A: - movs r4, 0x1 - ldr r5, _0801CF8C -_0801CF5E: - lsls r0, r4, 24 - lsrs r0, 24 - bl IsNotMoneyOrUsedTMItem - lsls r0, 24 - cmp r0, 0 - beq _0801CF7C - ldr r0, _0801CF90 - ldr r0, [r0] - lsls r1, r4, 1 - adds r0, 0x50 - adds r0, r1 - ldrh r0, [r0] - cmp r0, r5 - bls _0801CF56 -_0801CF7C: - adds r4, 0x1 - cmp r4, 0xEF - ble _0801CF5E - movs r0, 0x1 -_0801CF84: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0801CF8C: .4byte 0x000003e6 -_0801CF90: .4byte gTeamInventory_203B460 - thumb_func_end sub_801CF50 - - thumb_func_start sub_801CF94 -sub_801CF94: - push {r4,lr} - movs r2, 0 - ldr r4, _0801CFB4 - movs r3, 0 -_0801CF9C: - ldr r0, [r4] - lsls r1, r2, 2 - adds r0, 0xF4 - adds r0, r1 - str r3, [r0] - adds r2, 0x1 - cmp r2, 0xEF - ble _0801CF9C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801CFB4: .4byte gUnknown_203B244 - thumb_func_end sub_801CF94 - - thumb_func_start sub_801CFB8 -sub_801CFB8: - push {lr} - movs r3, 0 - ldr r0, _0801CFDC - ldr r0, [r0] - adds r1, r0, 0 - adds r1, 0xF4 - movs r2, 0xEF -_0801CFC6: - ldr r0, [r1] - cmp r0, 0 - beq _0801CFCE - adds r3, 0x1 -_0801CFCE: - adds r1, 0x4 - subs r2, 0x1 - cmp r2, 0 - bge _0801CFC6 - adds r0, r3, 0 - pop {r1} - bx r1 - .align 2, 0 -_0801CFDC: .4byte gUnknown_203B244 - thumb_func_end sub_801CFB8 - - thumb_func_start sub_801CFE0 -sub_801CFE0: - lsls r0, 24 - ldr r1, _0801CFF0 - ldr r1, [r1] - lsrs r0, 22 - adds r1, 0xF4 - adds r1, r0 - ldr r0, [r1] - bx lr - .align 2, 0 -_0801CFF0: .4byte gUnknown_203B244 - thumb_func_end sub_801CFE0 - - thumb_func_start sub_801CFF4 -sub_801CFF4: - lsls r0, 24 - ldr r2, _0801D004 - ldr r2, [r2] - lsrs r0, 22 - adds r2, 0xF4 - adds r2, r0 - str r1, [r2] - bx lr - .align 2, 0 -_0801D004: .4byte gUnknown_203B244 - thumb_func_end sub_801CFF4 - - thumb_func_start sub_801D008 -sub_801D008: - ldr r0, _0801D010 - ldr r0, [r0] - bx lr - .align 2, 0 -_0801D010: .4byte gUnknown_203B244 - thumb_func_end sub_801D008 - - thumb_func_start sub_801D014 -sub_801D014: - push {r4,r5,lr} - adds r5, r0, 0 - bl ResetUnusedInputStruct - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r4, _0801D054 - movs r0, 0x8C - lsls r0, 1 - movs r1, 0x8 - bl MemoryAlloc - adds r2, r0, 0 - str r2, [r4] - ldr r0, _0801D058 - ldr r0, [r0] - str r0, [r2, 0x14] - str r5, [r2] - cmp r5, 0 - beq _0801D088 - movs r3, 0 - ldr r0, _0801D05C - ldr r1, [r0] - adds r4, r0, 0 - cmp r5, r1 - bne _0801D060 - strh r3, [r2, 0x4] - b _0801D08C - .align 2, 0 -_0801D054: .4byte gUnknown_203B250 -_0801D058: .4byte gUnknown_203B254 -_0801D05C: .4byte gRecruitedPokemonRef -_0801D060: - adds r3, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r3, r0 - bgt _0801D08C - ldr r0, _0801D084 - ldr r2, [r0] - lsls r0, r3, 16 - asrs r0, 16 - movs r1, 0x58 - muls r1, r0 - ldr r0, [r4] - adds r0, r1 - ldr r1, [r2] - cmp r1, r0 - bne _0801D060 - strh r3, [r2, 0x4] - b _0801D08C - .align 2, 0 -_0801D084: .4byte gUnknown_203B250 -_0801D088: - ldr r0, _0801D0C4 - strh r0, [r2, 0x4] -_0801D08C: - bl sub_80A5728 - lsls r0, 16 - asrs r0, 16 - bl sub_8002658 - ldr r4, _0801D0C8 - ldr r1, [r4] - movs r5, 0 - strb r0, [r1, 0x6] - ldr r0, [r4] - strb r5, [r0, 0x8] - ldr r0, [r4] - strb r5, [r0, 0x9] - bl GetPlayerPokemonStruct - ldr r1, [r4] - str r0, [r1, 0xC] - strb r5, [r1, 0x7] - ldr r0, [r4] - ldr r0, [r0] - cmp r0, 0 - beq _0801D0CC - movs r0, 0x5 - bl sub_801D208 - b _0801D0D2 - .align 2, 0 -_0801D0C4: .4byte 0x0000019d -_0801D0C8: .4byte gUnknown_203B250 -_0801D0CC: - movs r0, 0 - bl sub_801D208 -_0801D0D2: - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_801D014 - - thumb_func_start sub_801D0DC -sub_801D0DC: - push {lr} - ldr r0, _0801D0F4 - ldr r0, [r0] - ldr r0, [r0, 0x10] - cmp r0, 0xC - bhi _0801D16C - lsls r0, 2 - ldr r1, _0801D0F8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801D0F4: .4byte gUnknown_203B250 -_0801D0F8: .4byte _0801D0FC - .align 2, 0 -_0801D0FC: - .4byte _0801D130 - .4byte _0801D130 - .4byte _0801D16C - .4byte _0801D136 - .4byte _0801D13C - .4byte _0801D142 - .4byte _0801D148 - .4byte _0801D148 - .4byte _0801D14E - .4byte _0801D154 - .4byte _0801D15A - .4byte _0801D160 - .4byte _0801D166 -_0801D130: - bl sub_801D680 - b _0801D170 -_0801D136: - bl sub_801D760 - b _0801D170 -_0801D13C: - bl sub_801D77C - b _0801D170 -_0801D142: - bl sub_801D798 - b _0801D170 -_0801D148: - bl sub_801D7CC - b _0801D170 -_0801D14E: - bl sub_801D808 - b _0801D170 -_0801D154: - bl sub_801D824 - b _0801D170 -_0801D15A: - bl sub_801D840 - b _0801D170 -_0801D160: - bl sub_801D85C - b _0801D170 -_0801D166: - bl sub_801D878 - b _0801D170 -_0801D16C: - movs r0, 0x3 - b _0801D172 -_0801D170: - movs r0, 0 -_0801D172: - pop {r1} - bx r1 - thumb_func_end sub_801D0DC - - thumb_func_start sub_801D178 -sub_801D178: - push {r4,lr} - ldr r0, _0801D188 - ldr r4, [r0] - ldrb r0, [r4, 0x9] - cmp r0, 0 - beq _0801D18C - movs r0, 0x2 - b _0801D1CC - .align 2, 0 -_0801D188: .4byte gUnknown_203B250 -_0801D18C: - ldrb r0, [r4, 0x7] - cmp r0, 0 - beq _0801D196 - movs r0, 0x3 - b _0801D1CC -_0801D196: - ldrb r0, [r4, 0x8] - cmp r0, 0 - beq _0801D1A0 - movs r0, 0x1 - b _0801D1CC -_0801D1A0: - bl GetPlayerPokemonStruct - ldr r1, [r4, 0xC] - cmp r1, r0 - bne _0801D1C6 - movs r0, 0x7 - bl sub_80A7AE8 - lsls r0, 16 - cmp r0, 0 - blt _0801D1CA - bl sub_808D3F8 - ldrh r0, [r0] - lsrs r0, 1 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0801D1CA -_0801D1C6: - movs r0, 0x4 - b _0801D1CC -_0801D1CA: - movs r0, 0 -_0801D1CC: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_801D178 - - thumb_func_start sub_801D1D4 -sub_801D1D4: - ldr r0, _0801D1DC - ldr r0, [r0] - ldrb r0, [r0, 0x7] - bx lr - .align 2, 0 -_0801D1DC: .4byte gUnknown_203B250 - thumb_func_end sub_801D1D4 - - thumb_func_start sub_801D1E0 -sub_801D1E0: - push {r4,lr} - ldr r4, _0801D200 - ldr r2, [r4] - cmp r2, 0 - beq _0801D1FA - ldr r0, _0801D204 - ldr r1, [r2, 0x14] - str r1, [r0] - adds r0, r2, 0 - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0801D1FA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801D200: .4byte gUnknown_203B250 -_0801D204: .4byte gUnknown_203B254 - thumb_func_end sub_801D1E0 - - thumb_func_start sub_801D208 -sub_801D208: - push {lr} - ldr r1, _0801D21C - ldr r1, [r1] - str r0, [r1, 0x10] - bl sub_801D220 - bl sub_801D3A8 - pop {r0} - bx r0 - .align 2, 0 -_0801D21C: .4byte gUnknown_203B250 - thumb_func_end sub_801D208 - thumb_func_start sub_801D220 sub_801D220: push {r4-r7,lr} diff --git a/src/code_801C620.c b/src/code_801C620.c index ace627f5c..5a6c79adb 100644 --- a/src/code_801C620.c +++ b/src/code_801C620.c @@ -1,6 +1,8 @@ +#include "constants/item.h" #include "global.h" #include "constants/iq_skill.h" #include "input.h" +#include "item.h" #include "memory.h" #include "pokemon.h" #include "pokemon_3.h" @@ -94,25 +96,67 @@ struct unkStruct_203B244 { // size: 0x554 u32 unk0; - u8 fill4[0x4B4 - 0x4]; + u8 itemIDs[NUMBER_OF_ITEM_IDS]; + u32 unkF4[NUMBER_OF_ITEM_IDS]; u32 unk4B4; u8 fill4B8[0x4CC - 0x4B8]; - u16 unk4CC; - u16 unk4CE; - u16 unk4D0; - u16 unk4D2; - u8 fill4D4[0x4E8 - 0x4D4]; + s16 unk4CC; + s16 unk4CE; + s16 unk4D0; + s16 unk4D2; + s16 unk4D4; + s16 itemCount; + u8 fill4D8[0x4E8 - 0x4D8]; u32 unk4E8; struct UnkTextStruct2 * unk4EC; struct UnkTextStruct2 unk4F0[4]; u8 unk550[4]; }; +struct unk_203B250 +{ + struct PokemonStruct *unk0; + s16 index; + /* 0x6 */ u8 currFriendAreaLocation; // 0 when not in a friend area + u8 unk7; + u8 unk8; + u8 unk9; + u8 fillA[0xC - 0xA]; + struct PokemonStruct *unkC; + u32 state; + u32 menuAction; + struct MenuStruct unk18; + struct MenuItem unk68[8]; + u16 unkA8[8]; + struct UnkTextStruct2 unkB8[4]; +}; + +extern struct unk_203B250 *gUnknown_203B250; +extern u32 gUnknown_203B254; + +extern struct PokemonStruct *GetPlayerPokemonStruct(void); +extern u8 sub_8002658(s16); +extern s16 sub_80A5728(void); +extern void sub_801D208(u32); +extern void sub_801D680(void); +extern void sub_801D760(void); +extern void sub_801D77C(void); +extern void sub_801D798(void); +extern void sub_801D7CC(void); +extern void sub_801D808(void); +extern void sub_801D824(void); +extern void sub_801D840(void); +extern void sub_801D85C(void); +extern void sub_801D878(void); +s16 sub_80A7AE8(s32); +extern struct PokemonStruct *sub_808D3F8(void); + extern const struct UnkTextStruct2 gUnknown_80DBE54; extern struct UnkTextStruct2 gUnknown_80DBDD8; extern struct UnkTextStruct2 gUnknown_80DBDF0; extern struct UnkTextStruct2 gUnknown_80DBDB0; extern struct UnkTextStruct2 gUnknown_80DBD98; +extern struct UnkTextStruct2 gUnknown_80DBE3C; extern struct unkStruct_203B238 *gUnknown_203B238; extern struct unkStruct_203B23C *gUnknown_203B23C; @@ -125,6 +169,7 @@ extern u16 gUnknown_203B24E; extern u8 gUnknown_202DE58[0x58]; extern u8 gAvailablePokemonNames[0x58]; +extern u8 gUnknown_80DBE6C[]; extern u8 gUnknown_80DBE18[]; extern u8 gUnknown_80DBE14[]; extern u8 gUnknown_202DEA8[]; @@ -136,8 +181,8 @@ extern char gUnknown_80DBE30[]; // {ARG_POKEMON_0} extern u8 gUnknown_80DBDC8[]; extern u8 *gUnknown_80D4970[]; - -extern bool8 sub_801CF14(u32); +void sub_8007B7C(s32, s32, s32, s32, s32); +extern bool8 sub_801CF14(s32); extern void sub_8013818(u32 *, u32, u32, u32); extern u32 sub_801CE58(void); extern void sub_8013984(void *); @@ -205,6 +250,11 @@ extern u32 sub_801A6E8(u32); extern void sub_801A928(void); extern void sub_8099690(u32); extern u32 sub_801A8AC(); +extern u8 sub_801CB24(); +extern u32 sub_801CFE0(u8); +extern s32 sub_801CFB8(void); +extern void sub_801D220(); +extern void sub_801D3A8(); extern u8 *gUnknown_80D4920[]; extern u8 *gUnknown_80D4928[]; @@ -964,3 +1014,436 @@ bool8 sub_801C8C4(s32 param_1, s32 param_2, struct UnkTextStruct2_sub *param_3, return TRUE; } } + +bool8 sub_801CA08(u8 param_1) +{ + u32 index; + u32 temp; + u32 flag; + + if (param_1 == 0) { + sub_8013660(&gUnknown_203B244->unk4B4); + return 0; + } + switch(GetKeyPress(&(gUnknown_203B244->unk4B4))) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + PlayMenuSoundEffect(0); + return 3; + case 5: + case 6: + if (gUnknown_203B244->unk0 != 1) goto _0801CAF2; + index = sub_801CB24(); + if ((temp = sub_801CFE0(index), flag = FALSE, temp != 0) || (flag = (INVENTORY_SIZE > GetNumberOfFilledInventorySlots() + sub_801CFB8())) || flag != 0 ) { + PlayMenuSoundEffect(6); + gUnknown_203B244->unkF4[index] = gUnknown_203B244->unkF4[index] ^ 1; + sub_80138B8(&gUnknown_203B244->unk4B4,0); + sub_801CCD8(); + return 1; + } + else + { + PlayMenuSoundEffect(2); + goto _0801CAF2; + } + case 4: + PlayMenuSoundEffect(4); + return 4; + default: +_0801CAF2: + if (sub_80138B8(&gUnknown_203B244->unk4B4,1) != 0) { + sub_801CC38(); + sub_801CCD8(); + return 1; + } + else + { + return 0; + } + } +} + +u8 sub_801CB24(void) { + return gUnknown_203B244->itemIDs[(gUnknown_203B244->unk4D2 * gUnknown_203B244->unk4D0) + gUnknown_203B244->unk4CC]; +} + +void sub_801CB5C(u8 r0) { + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B244->unk4F0, 0, 0); + gUnknown_203B244->itemCount = sub_801CE58(); + sub_8013984(&gUnknown_203B244->unk4B4); + sub_801CC38(); + sub_801CCD8(); + if(r0) + { + AddMenuCursorSprite(&gUnknown_203B244->unk4B4); + } +} + +void sub_801CBB8(void) { + if(gUnknown_203B244 != NULL) + { + gUnknown_203B248 = gUnknown_203B244->unk0; + gUnknown_203B24C = gUnknown_203B244->unk4CC; + gUnknown_203B24E = gUnknown_203B244->unk4D2; + gUnknown_203B244->unk4F0[gUnknown_203B244->unk4E8] = gUnknown_80DBE3C; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B244->unk4F0, 1, 1); + MemoryFree(gUnknown_203B244); + gUnknown_203B244 = NULL; + } +} + +NAKED +void sub_801CC38(void) +{ + asm_unified( + "\tpush {r4,r5,lr}\n" + "\tldr r4, _0801CCC4\n" + "\tldr r0, [r4]\n" + "\tmovs r1, 0xAA\n" + "\tlsls r1, 3\n" + "\tadds r0, r1\n" + "\tmovs r2, 0\n" + "\tmovs r1, 0x1\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tldr r1, _0801CCC8\n" + "\tadds r0, r1\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r1, 0x1\n" + "\tadds r0, r1\n" + "\tmovs r1, 0xC\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tldr r1, _0801CCCC\n" + "\tadds r0, r1\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tldr r2, _0801CCD0\n" + "\tadds r0, r2\n" + "\tmovs r1, 0\n" + "\tldrsh r0, [r0, r1]\n" + "\tmovs r1, 0xC\n" + "\tbl sub_80095E4\n" + "\tadds r0, 0x2\n" + "\tlsls r0, 16\n" + "\tldr r3, [r4]\n" + "\tmovs r2, 0x9D\n" + "\tlsls r2, 3\n" + "\tadds r5, r3, r2\n" + "\tldr r2, [r5]\n" + "\tlsls r1, r2, 1\n" + "\tadds r1, r2\n" + "\tlsls r1, 3\n" + "\tadds r1, r3, r1\n" + "\tldr r2, _0801CCD4\n" + "\tadds r1, r2\n" + "\tasrs r2, r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r1, [r5]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tlsls r0, 3\n" + "\tadds r3, r0\n" + "\tadds r2, 0x2\n" + "\tmovs r0, 0xA0\n" + "\tlsls r0, 3\n" + "\tadds r3, r0\n" + "\tstrh r2, [r3]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tmovs r1, 0x9E\n" + "\tlsls r1, 3\n" + "\tadds r0, r1\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_0801CCC4: .4byte gUnknown_203B244\n" +"_0801CCC8: .4byte 0x00000551\n" +"_0801CCCC: .4byte 0x00000553\n" +"_0801CCD0: .4byte 0x000004ce\n" +"_0801CCD4: .4byte 0x000004fe"); +} + +void sub_801CCD8(void) +{ + u32 y; + u32 y2; + u32 uVar3; + int index; + u8 buffer [80]; + + sub_8008C54(gUnknown_203B244->unk4E8); + sub_80073B8(gUnknown_203B244->unk4E8); + xxx_call_draw_string(10,0,gUnknown_80DBE6C,gUnknown_203B244->unk4E8,0); + sub_8012BC4(gUnknown_203B244->unk550[2] * 8 + 4,0, + gUnknown_203B244->unk4D2 + 1,2,7,gUnknown_203B244->unk4E8); + for(index = 0; index < gUnknown_203B244->unk4CE; index++) { + uVar3 = gUnknown_203B244->itemIDs[(gUnknown_203B244->unk4D2 * gUnknown_203B244->unk4D0) + index]; + sub_8090DC4(buffer,uVar3,0); + y = sub_8013800(&gUnknown_203B244->unk4B4,index); + xxx_call_draw_string(8,y,buffer,gUnknown_203B244->unk4E8,0); + y2 = sub_8013800(&gUnknown_203B244->unk4B4,index); + sub_8012BC4((gUnknown_203B244->unk4EC->unkC << 3) - 2,y2, + gTeamInventory_203B460->teamStorage[uVar3],3,5,gUnknown_203B244->unk4E8); + if ((sub_801CFE0(uVar3) & 1) != 0) { + sub_8007B7C(gUnknown_203B244->unk4E8,0x8,sub_8013800(&gUnknown_203B244->unk4B4,index), (gUnknown_203B244->unk4EC->unkC + -1) * '\b',10); + } + } + sub_80073E0(gUnknown_203B244->unk4E8); +} + +u32 sub_801CE58(void) +{ + u8 uVar1; + int orderL; + int orderR; + int itemCount; + int itemR; + s32 itemIndex; // re-used variable to match + + itemCount = 0; + for(itemIndex = 1; itemIndex < NUMBER_OF_ITEM_IDS; itemIndex++) + { + if ((gUnknown_203B244->unk0 == 2) || + ((gTeamInventory_203B460->teamStorage[itemIndex] != 0) && (IsNotMoneyOrUsedTMItem(itemIndex)))) { + gUnknown_203B244->itemIDs[itemCount] = itemIndex; + itemCount++; + } + } + + for(itemIndex = 0; itemIndex < itemCount - 1; itemIndex++) { + for(itemR = itemIndex + 1; itemR < itemCount; itemR++) { + orderL = GetItemOrder(gUnknown_203B244->itemIDs[itemIndex]); + orderR = GetItemOrder(gUnknown_203B244->itemIDs[itemR]); + if (orderL > orderR) { + uVar1 = gUnknown_203B244->itemIDs[itemIndex]; + gUnknown_203B244->itemIDs[itemIndex] = gUnknown_203B244->itemIDs[itemR]; + gUnknown_203B244->itemIDs[itemR] = uVar1; + } + } + } + return itemCount; +} + +bool8 sub_801CF14(s32 param_1) { + s32 itemID; + if(param_1 == 2){ + return FALSE; + } + else { + for(itemID = ITEM_STICK; itemID < NUMBER_OF_ITEM_IDS; itemID++) + { + if ((gTeamInventory_203B460->teamStorage[itemID] != 0) && (IsNotMoneyOrUsedTMItem(itemID))) return FALSE; + } + return TRUE; + } +} + +bool8 sub_801CF50(s32 param_1) { + s32 itemID; + if(param_1 == 2){ + return FALSE; + } + else { + for(itemID = ITEM_STICK; itemID < NUMBER_OF_ITEM_IDS; itemID++) + { + if ((IsNotMoneyOrUsedTMItem(itemID)) && (gTeamInventory_203B460->teamStorage[itemID] < 999)) return FALSE; + } + return TRUE; + } +} + +void sub_801CF94(void) +{ + s32 itemID; + + for(itemID = ITEM_NOTHING; itemID < NUMBER_OF_ITEM_IDS; itemID++) + { + gUnknown_203B244->unkF4[itemID] = 0; + } +} + +s32 sub_801CFB8(void) +{ + s32 itemID; + s32 counter; + + counter = 0; + for(itemID = ITEM_NOTHING; itemID < NUMBER_OF_ITEM_IDS; itemID++) + { + if(gUnknown_203B244->unkF4[itemID] != 0) + { + counter++; + } + } + return counter; +} + +u32 sub_801CFE0(u8 index) +{ + return gUnknown_203B244->unkF4[index]; +} + +// Unused +void sub_801CFF4(u8 index, u32 value) +{ + gUnknown_203B244->unkF4[index] = value; +} + +struct unkStruct_203B244 *sub_801D008(void) +{ + return gUnknown_203B244; +} + +bool8 sub_801D014(struct PokemonStruct *param_1) +{ + s32 index; + struct PokemonStruct *pokemon; + struct unk_203B250 *preload; + + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + gUnknown_203B250 = MemoryAlloc(sizeof(struct unk_203B250), 8); + gUnknown_203B250->menuAction = gUnknown_203B254; + gUnknown_203B250->unk0 = param_1; + if (gUnknown_203B250->unk0 != NULL) { + for(index = 0; index < NUM_MONSTERS; index++) + { + preload = gUnknown_203B250; + pokemon = &gRecruitedPokemonRef->pokemon[(s16)index]; // cast is needed here + if(preload->unk0 == pokemon) + { + preload->index = index; + break; + } + } + } + else { + gUnknown_203B250->index = NUM_MONSTERS; + } + gUnknown_203B250->currFriendAreaLocation = sub_8002658(sub_80A5728()); + gUnknown_203B250->unk8 = 0; + gUnknown_203B250->unk9 = 0; + gUnknown_203B250->unkC = GetPlayerPokemonStruct(); + gUnknown_203B250->unk7 = 0; + if (gUnknown_203B250->unk0 != 0) { + sub_801D208(5); + } + else { + sub_801D208(0); + } + return 1; +} + +u32 sub_801D0DC(void) +{ + switch(gUnknown_203B250->state) + { + case 0: + case 1: + sub_801D680(); + break; + case 3: + sub_801D760(); + break; + case 4: + sub_801D77C(); + break; + case 5: + sub_801D798(); + break; + case 6: + case 7: + sub_801D7CC(); + break; + case 8: + sub_801D808(); + break; + case 9: + sub_801D824(); + break; + case 10: + sub_801D840(); + break; + case 0xb: + sub_801D85C(); + break; + case 0xc: + sub_801D878(); + break; + default: + return 3; + } + return 0; +} + + +u32 sub_801D178(void) +{ + struct unk_203B250 *preload; + struct PokemonStruct *pokeStruct; + + preload = gUnknown_203B250; + if (gUnknown_203B250->unk9 != 0) + { + return 2; + } + else if (gUnknown_203B250->unk7 != 0) + { + return 3; + } + else if (gUnknown_203B250->unk8 != 0) + { + return 1; + } + else if (preload->unkC != GetPlayerPokemonStruct()) + { + goto _ret4; + } + else if (sub_80A7AE8(7) < 0) + { + return 0; + } + else if((pokeStruct = sub_808D3F8(), (pokeStruct->unk0 >> 1 & 1) == 0)) + { +_ret4: + return 4; + } + else + { + return 0; + } +} + +u8 sub_801D1D4(void) +{ + return gUnknown_203B250->unk7; +} + +void sub_801D1E0(void) +{ + if(gUnknown_203B250 != NULL) + { + gUnknown_203B254 = gUnknown_203B250->menuAction; + MemoryFree(gUnknown_203B250); + gUnknown_203B250 = NULL; + } +} + +void sub_801D208(u32 newState) +{ + gUnknown_203B250->state = newState; + sub_801D220(); + sub_801D3A8(); +} diff --git a/src/code_801D760.c b/src/code_801D760.c index cd94d33e3..fd1da7a00 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -97,9 +97,14 @@ struct unk_203B250 u8 unk7; u8 unk8; u8 unk9; - u8 fillA[0x14 - 0xA]; - u32 unk14; + u8 fillA[0xC - 0xA]; + struct PokemonStruct *unkC; + u32 state; + u32 menuAction; struct MenuStruct unk18; + struct MenuItem unk68[8]; + u16 unkA8[8]; + struct UnkTextStruct2 unkB8[4]; }; struct unk_203B250 *gUnknown_203B250; @@ -111,7 +116,7 @@ void sub_801D680(void) menuAction = 0; if ((sub_8012FD8(&gUnknown_203B250->unk18) == '\0') && (sub_8013114(&gUnknown_203B250->unk18,&menuAction), menuAction != 1)) { - gUnknown_203B250->unk14 = menuAction; + gUnknown_203B250->menuAction = menuAction; } switch(menuAction) { case 2: