From d57a3d4d3eed63b7a1665dec6cca69ef37975af4 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 3 Mar 2023 15:19:40 -0800 Subject: [PATCH] more decomp --- asm/code_801B3C0.s | 1240 -------------------------------------------- src/code_801B3C0.c | 21 +- src/code_801C620.c | 721 +++++++++++++++++++++++++- 3 files changed, 718 insertions(+), 1264 deletions(-) diff --git a/asm/code_801B3C0.s b/asm/code_801B3C0.s index 9b840723e..9aeef9e0b 100644 --- a/asm/code_801B3C0.s +++ b/asm/code_801B3C0.s @@ -109,1244 +109,4 @@ _0801BC1C: bx r0 thumb_func_end sub_801BB5C - thumb_func_start sub_801BC24 -sub_801BC24: - ldr r0, _0801BC58 - ldr r0, [r0] - mov r12, r0 - movs r3, 0 - mov r1, r12 - adds r1, 0xCC - ldr r0, _0801BC5C - ldr r0, [r0] - str r0, [r1] - adds r1, 0x4 - movs r0, 0x2 - str r0, [r1] - movs r2, 0x1 - adds r1, 0x4 - ldr r0, _0801BC60 - ldr r0, [r0] - str r0, [r1] - adds r1, 0x4 - movs r0, 0x3 - str r0, [r1] - mov r0, r12 - adds r0, 0xDC - str r3, [r0] - adds r0, 0x4 - str r2, [r0] - bx lr - .align 2, 0 -_0801BC58: .4byte gUnknown_203B234 -_0801BC5C: .4byte gUnknown_80D4920 -_0801BC60: .4byte gUnknown_80D4928 - thumb_func_end sub_801BC24 - - thumb_func_start sub_801BC64 -sub_801BC64: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _0801BC8C - ldr r0, [sp] - cmp r0, 0x4 - beq _0801BC7E - cmp r0, 0x5 - beq _0801BC86 - b _0801BC8C -_0801BC7E: - movs r0, 0x8 - bl sub_801B748 - b _0801BC8C -_0801BC86: - movs r0, 0x7 - bl sub_801B748 -_0801BC8C: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_801BC64 - - thumb_func_start sub_801BC94 -sub_801BC94: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _0801BCC6 - ldr r0, [sp] - cmp r0, 0x2 - beq _0801BCB8 - cmp r0, 0x2 - bgt _0801BCB2 - cmp r0, 0x1 - beq _0801BCC0 - b _0801BCC6 -_0801BCB2: - cmp r0, 0x3 - beq _0801BCC0 - b _0801BCC6 -_0801BCB8: - movs r0, 0xD - bl sub_801B748 - b _0801BCC6 -_0801BCC0: - movs r0, 0x6 - bl sub_801B748 -_0801BCC6: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_801BC94 - - thumb_func_start sub_801BCCC -sub_801BCCC: - push {lr} - movs r0, 0x1 - bl sub_801A6E8 - cmp r0, 0x4 - bhi _0801BD7A - lsls r0, 2 - ldr r1, _0801BCE4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801BCE4: .4byte _0801BCE8 - .align 2, 0 -_0801BCE8: - .4byte _0801BD7A - .4byte _0801BD7A - .4byte _0801BD70 - .4byte _0801BCFC - .4byte _0801BD34 -_0801BCFC: - bl sub_801A8AC - ldr r1, _0801BD28 - ldr r2, [r1] - str r0, [r2, 0x24] - ldr r1, _0801BD2C - ldr r1, [r1] - lsls r0, 2 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x20] - ldr r0, _0801BD30 - adds r1, r2, 0 - adds r1, 0x20 - adds r2, 0x14 - bl sub_8090E14 - movs r0, 0xA - bl sub_801B748 - b _0801BD7A - .align 2, 0 -_0801BD28: .4byte gUnknown_203B234 -_0801BD2C: .4byte gTeamInventory_203B460 -_0801BD30: .4byte gUnknown_202DEA8 -_0801BD34: - bl sub_801A8AC - ldr r1, _0801BD64 - ldr r2, [r1] - str r0, [r2, 0x24] - ldr r1, _0801BD68 - ldr r1, [r1] - lsls r0, 2 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x20] - ldr r0, _0801BD6C - adds r1, r2, 0 - adds r1, 0x20 - adds r2, 0x14 - bl sub_8090E14 - movs r0, 0 - bl sub_8099690 - movs r0, 0xB - bl sub_801B748 - b _0801BD7A - .align 2, 0 -_0801BD64: .4byte gUnknown_203B234 -_0801BD68: .4byte gTeamInventory_203B460 -_0801BD6C: .4byte gUnknown_202DEA8 -_0801BD70: - bl sub_801A928 - movs r0, 0x6 - bl sub_801B748 -_0801BD7A: - pop {r0} - bx r0 - thumb_func_end sub_801BCCC - - thumb_func_start sub_801BD80 -sub_801BD80: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_801A6E8 - ldr r4, _0801BDC4 - ldr r0, [r4] - adds r0, 0x28 - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _0801BDB2 - ldr r0, [r4] - adds r0, 0x28 - mov r1, sp - bl sub_8013114 - ldr r1, [sp] - cmp r1, 0x1 - beq _0801BDB2 - ldr r0, [r4] - adds r0, 0xC8 - str r1, [r0] -_0801BDB2: - ldr r0, [sp] - cmp r0, 0x6 - beq _0801BDD2 - cmp r0, 0x6 - bgt _0801BDC8 - cmp r0, 0x1 - beq _0801BE22 - b _0801BE28 - .align 2, 0 -_0801BDC4: .4byte gUnknown_203B234 -_0801BDC8: - cmp r0, 0x7 - beq _0801BE0C - cmp r0, 0x8 - beq _0801BE14 - b _0801BE28 -_0801BDD2: - ldr r4, _0801BE08 - ldr r0, [r4] - adds r0, 0x20 - bl MoveToStorage - ldr r0, [r4] - ldr r0, [r0, 0x24] - bl ShiftItemsDownFrom - ldr r0, [r4] - adds r0, 0x10 - bl AddItemToInventory - bl FillInventoryGaps - movs r0, 0xCB - bl PlaySound - movs r0, 0 - bl sub_8099690 - bl sub_801A928 - movs r0, 0xE - bl sub_801B748 - b _0801BE28 - .align 2, 0 -_0801BE08: .4byte gUnknown_203B234 -_0801BE0C: - movs r0, 0xC - bl sub_801B748 - b _0801BE28 -_0801BE14: - movs r0, 0 - bl sub_8099690 - movs r0, 0xB - bl sub_801B748 - b _0801BE28 -_0801BE22: - movs r0, 0x9 - bl sub_801B748 -_0801BE28: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_801BD80 - - thumb_func_start sub_801BE30 -sub_801BE30: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_801A6E8 - ldr r4, _0801BE70 - ldr r0, [r4] - adds r0, 0x28 - bl sub_8012FD8 - ldr r0, [r4] - adds r0, 0x78 - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _0801BE5E - ldr r0, [r4] - adds r0, 0x78 - mov r1, sp - bl sub_8013114 -_0801BE5E: - ldr r0, [sp] - cmp r0, 0x2 - beq _0801BE80 - cmp r0, 0x2 - bgt _0801BE74 - cmp r0, 0x1 - beq _0801BE78 - b _0801BEA4 - .align 2, 0 -_0801BE70: .4byte gUnknown_203B234 -_0801BE74: - cmp r0, 0x3 - bne _0801BEA4 -_0801BE78: - movs r0, 0x9 - bl sub_801B748 - b _0801BEA4 -_0801BE80: - ldr r0, [r4] - ldr r0, [r0, 0x24] - bl ShiftItemsDownFrom - ldr r0, [r4] - adds r0, 0x10 - bl AddItemToInventory - bl FillInventoryGaps - movs r0, 0xCB - bl PlaySound - bl sub_801A928 - movs r0, 0xF - bl sub_801B748 -_0801BEA4: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_801BE30 - - thumb_func_start sub_801BEAC -sub_801BEAC: - push {lr} - bl sub_801B410 - cmp r0, 0x1 - bls _0801BEC4 - cmp r0, 0x3 - bhi _0801BEC4 - bl sub_801B450 - movs r0, 0x9 - bl sub_801B748 -_0801BEC4: - pop {r0} - bx r0 - thumb_func_end sub_801BEAC - - thumb_func_start sub_801BEC8 -sub_801BEC8: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _0801BEE0 - ldr r0, _0801BEE8 - ldr r0, [r0] - ldr r0, [r0, 0x8] - bl sub_801B748 -_0801BEE0: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0801BEE8: .4byte gUnknown_203B234 - thumb_func_end sub_801BEC8 - - thumb_func_start sub_801BEEC -sub_801BEEC: - push {r4-r6,lr} - lsls r0, 16 - asrs r5, r0, 16 - adds r0, r5, 0 - bl HasNoAvailIQSkills - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0 - bne _0801BF40 - ldr r4, _0801BF38 - movs r0, 0x92 - lsls r0, 1 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r4] - str r6, [r0, 0x30] - strh r5, [r0, 0x4] - ldr r3, _0801BF3C - movs r1, 0x58 - adds r2, r5, 0 - muls r2, r1 - ldr r1, [r3] - adds r1, r2 - str r1, [r0, 0x8] - adds r0, 0xC - movs r2, 0x14 - ldrsh r1, [r1, r2] - bl GetNumAvailableIQSkills - ldr r1, [r4] - str r0, [r1, 0x2C] - movs r0, 0 - bl sub_801BFB4 - movs r0, 0x1 - b _0801BF42 - .align 2, 0 -_0801BF38: .4byte gUnknown_203B238 -_0801BF3C: .4byte gRecruitedPokemonRef -_0801BF40: - movs r0, 0 -_0801BF42: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_801BEEC - - thumb_func_start sub_801BF48 -sub_801BF48: - push {lr} - ldr r0, _0801BF60 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0x4 - bhi _0801BF90 - lsls r0, 2 - ldr r1, _0801BF64 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801BF60: .4byte gUnknown_203B238 -_0801BF64: .4byte _0801BF68 - .align 2, 0 -_0801BF68: - .4byte _0801BF80 - .4byte _0801BF80 - .4byte _0801BF86 - .4byte _0801BF8C - .4byte _0801BF7C -_0801BF7C: - movs r0, 0x3 - b _0801BF92 -_0801BF80: - bl sub_801C118 - b _0801BF90 -_0801BF86: - bl sub_801C1A0 - b _0801BF90 -_0801BF8C: - bl sub_801C228 -_0801BF90: - movs r0, 0 -_0801BF92: - pop {r1} - bx r1 - thumb_func_end sub_801BF48 - - thumb_func_start sub_801BF98 -sub_801BF98: - push {r4,lr} - ldr r4, _0801BFB0 - ldr r0, [r4] - cmp r0, 0 - beq _0801BFAA - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0801BFAA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801BFB0: .4byte gUnknown_203B238 - thumb_func_end sub_801BF98 - - thumb_func_start sub_801BFB4 -sub_801BFB4: - push {lr} - ldr r1, _0801BFC8 - ldr r1, [r1] - str r0, [r1] - bl sub_801BFCC - bl sub_801C03C - pop {r0} - bx r0 - .align 2, 0 -_0801BFC8: .4byte gUnknown_203B238 - thumb_func_end sub_801BFB4 - - thumb_func_start sub_801BFCC -sub_801BFCC: - push {r4-r7,lr} - ldr r4, _0801BFF0 - ldr r0, [r4] - adds r0, 0xC4 - bl sub_8006518 - ldr r1, [r4] - ldr r0, [r1] - cmp r0, 0x2 - bne _0801BFF8 - adds r1, 0xF4 - ldr r0, _0801BFF4 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - b _0801C01A - .align 2, 0 -_0801BFF0: .4byte gUnknown_203B238 -_0801BFF4: .4byte gUnknown_80DBDB0 -_0801BFF8: - mov r12, r4 - ldr r4, _0801C034 - movs r3, 0 - movs r2, 0x3 -_0801C000: - mov r0, r12 - ldr r1, [r0] - adds r1, r3 - adds r1, 0xC4 - 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 _0801C000 -_0801C01A: - bl ResetUnusedInputStruct - ldr r0, _0801C038 - ldr r0, [r0] - adds r0, 0xC4 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801C034: .4byte gUnknown_80DBD98 -_0801C038: .4byte gUnknown_203B238 - thumb_func_end sub_801BFCC - - thumb_func_start sub_801C03C -sub_801C03C: - push {lr} - sub sp, 0x8 - ldr r1, _0801C058 - ldr r0, [r1] - ldr r0, [r0] - adds r2, r1, 0 - cmp r0, 0x4 - bhi _0801C0C2 - lsls r0, 2 - ldr r1, _0801C05C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801C058: .4byte gUnknown_203B238 -_0801C05C: .4byte _0801C060 - .align 2, 0 -_0801C060: - .4byte _0801C074 - .4byte _0801C084 - .4byte _0801C08C - .4byte _0801C0B8 - .4byte _0801C0C2 -_0801C074: - ldr r0, [r2] - movs r1, 0x4 - ldrsh r0, [r0, r1] - movs r1, 0 - movs r2, 0x8 - bl sub_801C244 - b _0801C0C2 -_0801C084: - movs r0, 0x1 - bl sub_801C3B0 - b _0801C0C2 -_0801C08C: - bl sub_801C4C8 - bl sub_801C0C8 - ldr r0, _0801C0B4 - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x74 - adds r1, r2, 0 - adds r1, 0x34 - ldr r2, [r2, 0x30] - str r2, [sp] - movs r2, 0x2 - str r2, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_8012D60 - b _0801C0C2 - .align 2, 0 -_0801C0B4: .4byte gUnknown_203B238 -_0801C0B8: - ldr r0, [r2] - adds r0, 0x28 - ldrb r0, [r0] - bl sub_801C620 -_0801C0C2: - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_801C03C - - thumb_func_start sub_801C0C8 -sub_801C0C8: - push {r4,r5,lr} - ldr r3, _0801C10C - ldr r1, [r3] - movs r4, 0 - ldr r0, _0801C110 - str r0, [r1, 0x34] - movs r0, 0x2 - str r0, [r1, 0x38] - movs r2, 0x1 - ldr r0, _0801C114 - ldr r0, [r0] - str r0, [r1, 0x3C] - movs r0, 0x3 - str r0, [r1, 0x40] - movs r5, 0x2 - str r4, [r1, 0x44] - str r2, [r1, 0x48] - movs r2, 0 - ldr r4, [r1, 0x30] - adds r1, 0x38 -_0801C0F0: - ldr r0, [r1] - cmp r0, r4 - beq _0801C104 - adds r1, 0x8 - adds r2, 0x1 - cmp r2, r5 - blt _0801C0F0 - ldr r1, [r3] - movs r0, 0x2 - str r0, [r1, 0x30] -_0801C104: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801C10C: .4byte gUnknown_203B238 -_0801C110: .4byte gUnknown_80DBDC8 -_0801C114: .4byte gUnknown_80D4970 - thumb_func_end sub_801C0C8 - - thumb_func_start sub_801C118 -sub_801C118: - push {lr} - movs r0, 0x1 - bl sub_801C308 - cmp r0, 0x4 - bhi _0801C19A - lsls r0, 2 - ldr r1, _0801C130 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801C130: .4byte _0801C134 - .align 2, 0 -_0801C134: - .4byte _0801C19A - .4byte _0801C19A - .4byte _0801C190 - .4byte _0801C148 - .4byte _0801C16C -_0801C148: - bl sub_801C390 - ldr r1, _0801C168 - ldr r2, [r1] - str r0, [r2, 0x24] - adds r1, r2, 0 - adds r1, 0xC - adds r1, r0 - ldrb r0, [r1] - adds r2, 0x28 - strb r0, [r2] - movs r0, 0x2 - bl sub_801BFB4 - b _0801C19A - .align 2, 0 -_0801C168: .4byte gUnknown_203B238 -_0801C16C: - bl sub_801C390 - ldr r1, _0801C18C - ldr r2, [r1] - str r0, [r2, 0x24] - adds r1, r2, 0 - adds r1, 0xC - adds r1, r0 - ldrb r0, [r1] - adds r2, 0x28 - strb r0, [r2] - movs r0, 0x3 - bl sub_801BFB4 - b _0801C19A - .align 2, 0 -_0801C18C: .4byte gUnknown_203B238 -_0801C190: - bl sub_801C3F8 - movs r0, 0x4 - bl sub_801BFB4 -_0801C19A: - pop {r0} - bx r0 - thumb_func_end sub_801C118 - - thumb_func_start sub_801C1A0 -sub_801C1A0: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_801C308 - ldr r4, _0801C1E0 - ldr r0, [r4] - adds r0, 0x74 - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _0801C1D0 - ldr r0, [r4] - adds r0, 0x74 - mov r1, sp - bl sub_8013114 - ldr r1, [sp] - cmp r1, 0x1 - beq _0801C1D0 - ldr r0, [r4] - str r1, [r0, 0x30] -_0801C1D0: - ldr r0, [sp] - cmp r0, 0x2 - beq _0801C1EA - cmp r0, 0x2 - bgt _0801C1E4 - cmp r0, 0x1 - beq _0801C218 - b _0801C21E - .align 2, 0 -_0801C1E0: .4byte gUnknown_203B238 -_0801C1E4: - cmp r0, 0x3 - beq _0801C210 - b _0801C21E -_0801C1EA: - ldr r0, _0801C208 - bl PlaySound - ldr r0, _0801C20C - ldr r1, [r0] - ldr r0, [r1, 0x8] - adds r0, 0x20 - adds r1, 0x28 - ldrb r1, [r1] - bl ToggleIQSkill - movs r0, 0x1 - bl sub_801BFB4 - b _0801C21E - .align 2, 0 -_0801C208: .4byte 0x00000133 -_0801C20C: .4byte gUnknown_203B238 -_0801C210: - movs r0, 0x3 - bl sub_801BFB4 - b _0801C21E -_0801C218: - movs r0, 0x1 - bl sub_801BFB4 -_0801C21E: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_801C1A0 - - thumb_func_start sub_801C228 -sub_801C228: - push {lr} - bl sub_801C674 - cmp r0, 0x1 - bls _0801C240 - cmp r0, 0x3 - bhi _0801C240 - bl sub_801C6B4 - movs r0, 0x1 - bl sub_801BFB4 -_0801C240: - pop {r0} - bx r0 - thumb_func_end sub_801C228 - - thumb_func_start sub_801C244 -sub_801C244: - push {r4-r7,lr} - adds r6, r1, 0 - adds r7, r2, 0 - lsls r0, 16 - asrs r0, 16 - adds r4, r0, 0 - bl HasNoAvailIQSkills - lsls r0, 24 - cmp r0, 0 - beq _0801C25E - movs r0, 0 - b _0801C2F6 -_0801C25E: - ldr r5, _0801C2FC - ldr r0, [r5] - cmp r0, 0 - bne _0801C270 - movs r0, 0xC4 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r5] -_0801C270: - ldr r0, [r5] - strh r4, [r0] - ldr r3, _0801C300 - movs r1, 0x58 - adds r2, r4, 0 - muls r2, r1 - ldr r1, [r3] - adds r1, r2 - str r1, [r0, 0x4] - adds r0, 0x8 - movs r2, 0x14 - ldrsh r1, [r1, r2] - bl GetNumAvailableIQSkills - adds r1, r0, 0 - ldr r0, [r5] - str r1, [r0, 0x20] - str r6, [r0, 0x58] - lsls r1, r6, 1 - adds r1, r6 - lsls r1, 3 - adds r1, 0x60 - adds r1, r0, r1 - str r1, [r0, 0x5C] - adds r0, 0x60 - bl sub_8006518 - ldr r1, [r5] - ldr r2, [r1, 0x58] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r1, 0x60 - ldr r0, _0801C304 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldr r1, [r5] - ldr r0, [r1, 0x5C] - adds r1, 0xC0 - str r1, [r0, 0x14] - adds r1, r7, 0 - bl sub_8012D08 - bl ResetUnusedInputStruct - ldr r0, [r5] - adds r0, 0x60 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x24 - ldr r1, [r1, 0x20] - adds r2, r7, 0 - adds r3, r6, 0 - bl sub_8013818 - bl sub_801C440 - bl sub_801C4C8 - movs r0, 0x1 -_0801C2F6: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0801C2FC: .4byte gUnknown_203B23C -_0801C300: .4byte gRecruitedPokemonRef -_0801C304: .4byte gUnknown_80DBDF0 - thumb_func_end sub_801C244 - - thumb_func_start sub_801C308 -sub_801C308: - push {lr} - lsls r0, 24 - cmp r0, 0 - bne _0801C324 - ldr r0, _0801C320 - ldr r0, [r0] - adds r0, 0x24 - bl sub_8013660 - movs r0, 0 - b _0801C38A - .align 2, 0 -_0801C320: .4byte gUnknown_203B23C -_0801C324: - ldr r0, _0801C33C - ldr r0, [r0] - adds r0, 0x24 - bl GetKeyPress - cmp r0, 0x2 - beq _0801C346 - cmp r0, 0x2 - bgt _0801C340 - cmp r0, 0x1 - beq _0801C350 - b _0801C364 - .align 2, 0 -_0801C33C: .4byte gUnknown_203B23C -_0801C340: - cmp r0, 0x4 - beq _0801C35A - b _0801C364 -_0801C346: - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - b _0801C38A -_0801C350: - movs r0, 0 - bl PlayMenuSoundEffect - movs r0, 0x3 - b _0801C38A -_0801C35A: - movs r0, 0x4 - bl PlayMenuSoundEffect - movs r0, 0x4 - b _0801C38A -_0801C364: - ldr r0, _0801C37C - ldr r0, [r0] - adds r0, 0x24 - movs r1, 0x1 - bl sub_80138B8 - lsls r0, 24 - cmp r0, 0 - bne _0801C380 - movs r0, 0 - b _0801C38A - .align 2, 0 -_0801C37C: .4byte gUnknown_203B23C -_0801C380: - bl sub_801C440 - bl sub_801C4C8 - movs r0, 0x1 -_0801C38A: - pop {r1} - bx r1 - thumb_func_end sub_801C308 - - thumb_func_start sub_801C390 -sub_801C390: - ldr r0, _0801C3AC - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x42 - movs r3, 0 - ldrsh r1, [r0, r3] - subs r0, 0x2 - movs r3, 0 - ldrsh r0, [r0, r3] - muls r0, r1 - movs r3, 0x3C - ldrsh r1, [r2, r3] - adds r0, r1 - bx lr - .align 2, 0 -_0801C3AC: .4byte gUnknown_203B23C - thumb_func_end sub_801C390 - - thumb_func_start sub_801C3B0 -sub_801C3B0: - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl ResetUnusedInputStruct - ldr r5, _0801C3F4 - ldr r0, [r5] - adds r0, 0x60 - movs r1, 0 - movs r2, 0 - bl sub_800641C - ldr r0, [r5] - ldr r1, [r0, 0x20] - adds r2, r0, 0 - adds r2, 0x46 - strh r1, [r2] - adds r0, 0x24 - bl sub_8013984 - bl sub_801C440 - bl sub_801C4C8 - cmp r4, 0 - beq _0801C3EE - ldr r0, [r5] - adds r0, 0x24 - bl AddMenuCursorSprite -_0801C3EE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801C3F4: .4byte gUnknown_203B23C - thumb_func_end sub_801C3B0 - - thumb_func_start sub_801C3F8 -sub_801C3F8: - push {r4,r5,lr} - ldr r4, _0801C438 - ldr r2, [r4] - cmp r2, 0 - beq _0801C432 - ldr r0, [r2, 0x58] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x60 - ldr r0, _0801C43C - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x60 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0801C432: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801C438: .4byte gUnknown_203B23C -_0801C43C: .4byte gUnknown_80DBDD8 - thumb_func_end sub_801C3F8 - - thumb_func_start sub_801C440 -sub_801C440: - push {r4,lr} - ldr r4, _0801C4C4 - ldr r0, [r4] - adds r1, r0, 0 - adds r1, 0x44 - ldrh r1, [r1] - adds r0, 0xC0 - movs r2, 0 - strb r1, [r0] - ldr r0, [r4] - adds r1, r0, 0 - adds r1, 0x42 - ldrh r1, [r1] - adds r0, 0xC1 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xC2 - movs r1, 0xA - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xC3 - strb r2, [r0] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x60 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - movs r1, 0x3E - ldrsh r0, [r0, r1] - movs r1, 0xC - bl sub_80095E4 - adds r0, 0x2 - ldr r2, [r4] - ldr r3, [r2, 0x58] - lsls r1, r3, 1 - adds r1, r3 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x6E - lsls r0, 16 - lsrs r0, 16 - strh r0, [r1] - ldr r3, [r2, 0x58] - lsls r1, r3, 1 - adds r1, r3 - lsls r1, 3 - adds r2, r1 - adds r2, 0x70 - strh r0, [r2] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x60 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801C4C4: .4byte gUnknown_203B23C - thumb_func_end sub_801C440 - - thumb_func_start sub_801C4C8 -sub_801C4C8: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - ldr r6, _0801C594 - ldr r0, [r6] - ldr r0, [r0, 0x58] - bl sub_8008C54 - ldr r0, [r6] - ldr r0, [r0, 0x58] - bl sub_80073B8 - ldr r0, [r6] - adds r1, r0, 0 - adds r1, 0x42 - movs r2, 0 - ldrsh r4, [r1, r2] - lsls r4, 3 - adds r5, r4, 0 - adds r5, 0xA - ldr r2, _0801C598 - ldr r3, [r0, 0x58] - movs r0, 0 - str r0, [sp] - adds r0, r5, 0 - movs r1, 0 - bl xxx_call_draw_string - adds r4, 0x4 - ldr r1, [r6] - adds r0, r1, 0 - adds r0, 0xC2 - ldrb r0, [r0] - lsls r0, 3 - adds r5, r4, r0 - adds r0, r1, 0 - adds r0, 0x42 - movs r3, 0 - ldrsh r2, [r0, r3] - adds r2, 0x1 - movs r0, 0x7 - str r0, [sp] - ldr r0, [r1, 0x58] - str r0, [sp, 0x4] - adds r0, r5, 0 - movs r1, 0 - movs r3, 0x1 - bl sub_8012BC4 - movs r5, 0 - ldr r0, [r6] - movs r1, 0x3E - ldrsh r0, [r0, r1] - cmp r5, r0 - bge _0801C5CC - ldr r2, _0801C59C - mov r8, r2 -_0801C53C: - ldr r2, [r6] - adds r0, r2, 0 - adds r0, 0x42 - movs r3, 0 - ldrsh r1, [r0, r3] - subs r0, 0x2 - movs r3, 0 - ldrsh r0, [r0, r3] - muls r1, r0 - adds r1, r5 - adds r0, r2, 0 - adds r0, 0x8 - adds r0, r1 - ldrb r4, [r0] - adds r0, r2, 0 - adds r0, 0x24 - adds r1, r5, 0 - bl sub_8013800 - adds r7, r0, 0 - adds r0, r4, 0 - bl GetIQSkillName - adds r1, r0, 0 - mov r0, r8 - movs r2, 0x50 - bl strncpy - ldr r0, [r6] - ldr r0, [r0, 0x4] - adds r0, 0x20 - movs r1, 0x1 - lsls r1, r4 - bl IsIQSkillSet - lsls r0, 24 - cmp r0, 0 - beq _0801C5A4 - mov r0, r8 - subs r0, 0x50 - ldr r1, _0801C5A0 - bl strcpy - b _0801C5AE - .align 2, 0 -_0801C594: .4byte gUnknown_203B23C -_0801C598: .4byte gUnknown_80DBE08 -_0801C59C: .4byte gUnknown_202DEA8 -_0801C5A0: .4byte gUnknown_80DBE14 -_0801C5A4: - mov r0, r8 - subs r0, 0x50 - ldr r1, _0801C5E4 - bl strcpy -_0801C5AE: - ldr r0, [r6] - ldr r3, [r0, 0x58] - movs r0, 0 - str r0, [sp] - movs r0, 0xC - adds r1, r7, 0 - ldr r2, _0801C5E8 - bl xxx_format_and_draw - adds r5, 0x1 - ldr r0, [r6] - movs r1, 0x3E - ldrsh r0, [r0, r1] - cmp r5, r0 - blt _0801C53C -_0801C5CC: - ldr r0, _0801C5EC - ldr r0, [r0] - ldr r0, [r0, 0x58] - bl sub_80073E0 - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801C5E4: .4byte gUnknown_80DBE18 -_0801C5E8: .4byte gUnknown_80DBE1C -_0801C5EC: .4byte gUnknown_203B23C - thumb_func_end sub_801C4C8 - .align 2,0 diff --git a/src/code_801B3C0.c b/src/code_801B3C0.c index 6b7f3952e..e13caa43b 100644 --- a/src/code_801B3C0.c +++ b/src/code_801B3C0.c @@ -39,9 +39,8 @@ struct unkStruct_203B234 // size: 0x154 u32 unk0; u32 state; - u32 unk8; + u32 fallbackState; u8 unkC; - u8 fillD[0x10 - 0xD]; struct Item unk10; struct unkStruct_8090F58 unk14; struct Item unk20; @@ -371,7 +370,7 @@ void sub_801B874(void) { case 0: if (gUnknown_203B234->unk10.id == ITEM_WEAVILE_FIG) { - gUnknown_203B234->unk8 = 0x10; + gUnknown_203B234->fallbackState = 0x10; if(sub_8001784(0,0x47,1) != 0) { AddToTeamMoney(1000); @@ -385,7 +384,7 @@ void sub_801B874(void) } else if (gUnknown_203B234->unk10.id == ITEM_MIME_JR_FIG) { - gUnknown_203B234->unk8 = 0x10; + gUnknown_203B234->fallbackState = 0x10; if(sub_8001784(0, 0x47, 0) != 0) { AddToTeamMoney(1000); @@ -406,13 +405,13 @@ void sub_801B874(void) if((gTeamInventory_203B460->teamStorage[gUnknown_203B234->unk10.id] + gUnknown_203B234->unkC) > 0x3e7) { store: - gUnknown_203B234->unk8 = 6; + gUnknown_203B234->fallbackState = 6; } else { gTeamInventory_203B460->teamStorage[gUnknown_203B234->unk10.id] += gUnknown_203B234->unkC; PlaySound(0xCB); - gUnknown_203B234->unk8 = 5; + gUnknown_203B234->fallbackState = 5; } } else @@ -425,7 +424,7 @@ void sub_801B874(void) AddItemToInventory(&gUnknown_203B234->unk10); FillInventoryGaps(); PlaySound(0xCB); - gUnknown_203B234->unk8 = 0x10; + gUnknown_203B234->fallbackState = 0x10; } if(gUnknown_203B234->unk0 == 1) sub_801B748(2); @@ -452,7 +451,7 @@ void sub_801B874(void) sub_80141B4(gUnknown_80DBB9C,0,0,0x101); break; case 5: - gUnknown_203B234->unk8 = 0x10; + gUnknown_203B234->fallbackState = 0x10; sub_80141B4(gUnknown_80DBC28,0,0,0x101); break; case 6: @@ -484,15 +483,15 @@ void sub_801B874(void) sub_8012D60(&gUnknown_203B234->unk78,gUnknown_203B234->unkCC,0,0,3,1); break; case 0xd: - gUnknown_203B234->unk8 = 0x10; + gUnknown_203B234->fallbackState = 0x10; sub_80141B4(gUnknown_80DBCC4,0,0,0x101); break; case 0xe: - gUnknown_203B234->unk8 = 0x10; + gUnknown_203B234->fallbackState = 0x10; sub_80141B4(gUnknown_80DBCE8,0,0,0x101); break; case 0xf: - gUnknown_203B234->unk8 = 0x10; + gUnknown_203B234->fallbackState = 0x10; sub_80141B4(gUnknown_80DBD24,0,0,0x101); break; case 0x10: diff --git a/src/code_801C620.c b/src/code_801C620.c index 1e02c268c..eff453107 100644 --- a/src/code_801C620.c +++ b/src/code_801C620.c @@ -3,15 +3,81 @@ #include "input.h" #include "memory.h" #include "pokemon.h" +#include "pokemon_3.h" +#include "team_inventory.h" #include "text.h" #include "subStruct_203B240.h" +#include "menu_input.h" + +struct unkStruct_203B234 +{ + // size: 0x154 + u32 unk0; + u32 state; + u32 fallbackState; + u8 unkC; + struct Item unk10; + struct unkStruct_8090F58 unk14; + struct Item unk20; + u32 unk24; + struct MenuStruct unk28; + struct MenuStruct unk78; + u32 unkC8; + struct MenuItem unkCC[5]; + struct UnkTextStruct2 unkF4[4]; +}; + +extern struct unkStruct_203B234 *gUnknown_203B234; + + +struct unkStruct_203B238 +{ + // size: 0x124 + u32 state; + s16 species; + struct PokemonStruct *pokeStruct; + u8 iqSkills[NUM_IQ_SKILLS]; + u32 unk24; + u8 iqSkillIndex; + u32 numIQSkills; + s32 unk30; + struct MenuItem unk34[8]; + struct MenuStruct unk74; + struct UnkTextStruct2 unkC4[4]; +}; + +struct unkStruct_203B23C +{ + // size: 0xC4 + /* 0x0 */ s16 species; + /* 0x4 */ struct PokemonStruct *pokeStruct; + /* 0x8 */ u8 iqSkills[NUM_IQ_SKILLS]; + /* 0x20 */ s32 numIQSkills; + /* 0x24 */ u32 unk24; + u8 fill28[0x3C - 0x28]; + s16 unk3C; + s16 unk3E; + s16 unk40; + s16 unk42; + s16 unk44; + s16 unk46; + u8 fill48[0x52 - 0x48]; + u8 unk52; + u8 fill52[0x58 - 0x53]; + u32 unk58; + /* 0x5C */ struct UnkTextStruct2 *unk5C; + /* 0x60 */ struct UnkTextStruct2 unk60[4]; + u8 unkC0; + u8 unkC1; + u8 unkC2; + u8 unkC3; +}; struct unkStruct_203B240 { // size: 0x94 s32 state; u8 chosenIQSkill; - u8 fill5[3]; s32 unk8; s32 unkC; struct subStruct_203B240 *unk10[2]; @@ -43,51 +109,680 @@ struct unkStruct_203B244 }; 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 unkStruct_203B244 *gUnknown_203B244; +extern struct unkStruct_203B238 *gUnknown_203B238; +extern struct unkStruct_203B23C *gUnknown_203B23C; extern struct unkStruct_203B240 *gUnknown_203B240; +extern struct unkStruct_203B244 *gUnknown_203B244; + extern u32 gUnknown_203B248; extern u16 gUnknown_203B24C; extern u16 gUnknown_203B24E; - -extern char gUnknown_80DBE2C[]; // {ARG_MOVE_ITEM_0} -extern char gUnknown_80DBE30[]; // {ARG_POKEMON_0} extern u8 gUnknown_202DE58[0x58]; extern u8 gAvailablePokemonNames[0x58]; +extern u8 gUnknown_80DBE18[]; +extern u8 gUnknown_80DBE14[]; +extern u8 gUnknown_202DEA8[]; +extern u8 gUnknown_202DE58[]; +extern u8 gUnknown_80DBE08[]; +extern u8 gUnknown_80DBE1C[]; +extern char gUnknown_80DBE2C[]; // {ARG_MOVE_ITEM_0} +extern char gUnknown_80DBE30[]; // {ARG_POKEMON_0} +extern u8 gUnknown_80DBDC8[]; +extern u8 *gUnknown_80D4970[]; + + extern bool8 sub_801CF14(u32); -extern void sub_8012D08(struct UnkTextStruct2 *, u32); extern void sub_8013818(u32 *, u32, u32, u32); extern u32 sub_801CE58(void); extern void sub_8013984(void *); extern void sub_801CC38(void); extern void sub_801CCD8(void); extern void sub_801CF94(void); - - extern void ResetSprites(u32); extern void sub_801317C(u32 *); extern void sub_80140B4(struct UnkTextStruct2 *); - - -extern void xxx_format_and_draw(u32, u32, char *, u32, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); -extern void xxx_call_draw_string(u32, u32, char *, u32, u32); extern void sub_80073E0(u32); extern u32 sub_8097DF0(char *, struct subStruct_203B240 **); extern u32 sub_8012A64(u32 *, u32); extern void sub_8013F84(); extern void PlayMenuSoundEffect(u32); -extern char * GetIQSkillName(u8 r0); extern char * GetIQSkillDescription(u8 r0); extern s32 GetNumAvailableIQSkills(u8 *param_1, s32 pokeIQ); +extern void sub_8013C68(u32 *); +extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); +extern char * GetIQSkillName(u8 r0); +extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); +extern s32 sub_8013800(u32 *, s32); +extern u32 sub_80095E4(s16, u32); +extern void sub_801C440(void); +extern void sub_801C4C8(void); +extern void AddMenuCursorSprite(u32 *); +extern u8 sub_80138B8(u32 *, u32); +extern void sub_8013660(u32 *); +extern s32 GetKeyPress(u32 *); +extern bool8 HasNoAvailIQSkills(s16 species); +extern u32 sub_801C674(void); +extern void sub_801C6B4(void); +void sub_801BFB4(s32); void sub_801C6D0(s32); void sub_801C7D4(); void sub_801C6E4(); void sub_801C848(); +u32 sub_801C308(u8); +extern void PlaySound(u32); +void ToggleIQSkill(u8 *param_1, u32 skillIndex); +s32 sub_801C390(void); +void sub_801C3F8(void); + +bool8 sub_801C244(s16 species, u32 index, u32 param_3); +void sub_801C0C8(void); +u32 sub_801C620(u8 iqSkill); +void sub_801C3B0(u8); +void sub_801BFCC(void); +void sub_801C03C(void); + +void sub_801C118(); +void sub_801C1A0(); +void sub_801C228(); + +void sub_801B748(u32); + + +extern s32 sub_80144A4(s32 *); +extern u32 sub_801B410(void); +extern void sub_801B450(void); +extern u32 sub_801A6E8(u32); +extern void sub_801A928(void); +extern void sub_8099690(u32); +extern u32 sub_801A8AC(); + +extern u8 *gUnknown_80D4920[]; +extern u8 *gUnknown_80D4928[]; + +void sub_801BC24(void) +{ + struct unkStruct_203B234 *puVar1; + u8 *nullText; + u32 menuAction; + + puVar1 = gUnknown_203B234; + nullText = NULL; + puVar1->unkCC[0].text = *gUnknown_80D4920; + gUnknown_203B234->unkCC[0].menuAction = 2; + menuAction = 1; + gUnknown_203B234->unkCC[1].text = *gUnknown_80D4928; + gUnknown_203B234->unkCC[1].menuAction = 3; + gUnknown_203B234->unkCC[2].text = nullText; + gUnknown_203B234->unkCC[2].menuAction = menuAction; +} + +void sub_801BC64(void) +{ + s32 temp; + if(sub_80144A4(&temp)== 0) + { + switch(temp) + { + case 4: + sub_801B748(0x8); + break; + case 5: + sub_801B748(0x7); + break; + } + } +} + +void sub_801BC94(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 2: + sub_801B748(0xD); + break; + case 1: + case 3: + sub_801B748(0x6); + break; + } + } +} + +void sub_801BCCC(void) +{ + switch(sub_801A6E8(1)) + { + case 0: + case 1: + break; + case 3: + gUnknown_203B234->unk24 = sub_801A8AC(); + gUnknown_203B234->unk20 = gTeamInventory_203B460->teamItems[gUnknown_203B234->unk24]; + sub_8090E14(gUnknown_202DEA8, &gUnknown_203B234->unk20, &gUnknown_203B234->unk14); + sub_801B748(0xA); + break; + case 4: + gUnknown_203B234->unk24 = sub_801A8AC(); + gUnknown_203B234->unk20 = gTeamInventory_203B460->teamItems[gUnknown_203B234->unk24]; + sub_8090E14(gUnknown_202DEA8, &gUnknown_203B234->unk20, &gUnknown_203B234->unk14); + sub_8099690(0); + sub_801B748(0xB); + break; + case 2: + sub_801A928(); + sub_801B748(6); + break; + } +} + +void sub_801BD80(void) +{ + s32 menuAction; + + menuAction = 0; + sub_801A6E8(0); + if (sub_8012FD8(&gUnknown_203B234->unk28) == '\0') { + sub_8013114(&gUnknown_203B234->unk28,&menuAction); + if (menuAction != 1) gUnknown_203B234->unkC8 = menuAction; + } + switch(menuAction) + { + case 6: + MoveToStorage(&gUnknown_203B234->unk20); + ShiftItemsDownFrom(gUnknown_203B234->unk24); + AddItemToInventory(&gUnknown_203B234->unk10); + FillInventoryGaps(); + PlaySound(0xcb); + sub_8099690(0); + sub_801A928(); + sub_801B748(0xE); + break; + case 7: + sub_801B748(0xC); + break; + case 8: + sub_8099690(0); + sub_801B748(0xB); + break; + case 1: + sub_801B748(0x9); + break; + } +} + +void sub_801BE30(void) +{ + s32 menuAction; + + menuAction = 0; + sub_801A6E8(0); + sub_8012FD8(&gUnknown_203B234->unk28); + if (sub_8012FD8(&gUnknown_203B234->unk78) == '\0') { + sub_8013114(&gUnknown_203B234->unk78,&menuAction); + } + switch(menuAction) + { + case 1: + case 3: + sub_801B748(9); + break; + case 2: + ShiftItemsDownFrom(gUnknown_203B234->unk24); + AddItemToInventory(&gUnknown_203B234->unk10); + FillInventoryGaps(); + PlaySound(0xcb); + sub_801A928(); + sub_801B748(0xf); + break; + } +} + +void sub_801BEAC(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + sub_801B748(9); + case 0: + case 1: + break; + } +} + +void sub_801BEC8(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + sub_801B748(gUnknown_203B234->fallbackState); + } +} + +bool8 sub_801BEEC(s16 species) +{ + s32 species_s32 = species; + if (HasNoAvailIQSkills(species_s32)) { + return FALSE; + } + else { + gUnknown_203B238 = MemoryAlloc(sizeof(struct unkStruct_203B238),8); + gUnknown_203B238->unk30 = 0; + gUnknown_203B238->species = species_s32; + gUnknown_203B238->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32]; + gUnknown_203B238->numIQSkills = GetNumAvailableIQSkills(gUnknown_203B238->iqSkills,gUnknown_203B238->pokeStruct->IQ); + sub_801BFB4(0); + return TRUE; + } +} + +u32 sub_801BF48(void) +{ + switch(gUnknown_203B238->state) + { + case 4: + return 3; + case 0: + case 1: + sub_801C118(); + break; + case 2: + sub_801C1A0(); + break; + case 3: + sub_801C228(); + break; + } + return 0; +} + +void sub_801BF98(void) +{ + if(gUnknown_203B238 != NULL) + { + MemoryFree(gUnknown_203B238); + gUnknown_203B238 = NULL; + } +} + +void sub_801BFB4(s32 newState) +{ + gUnknown_203B238->state = newState; + sub_801BFCC(); + sub_801C03C(); +} + +void sub_801BFCC(void) +{ + s32 index; + + sub_8006518(gUnknown_203B238->unkC4); + if(gUnknown_203B238->state == 2) + { + gUnknown_203B238->unkC4[2] = gUnknown_80DBDB0; + } + else + { + for(index = 0; index < 4; index++) + { + gUnknown_203B238->unkC4[index] = gUnknown_80DBD98; + } + + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B238->unkC4, 1, 1); +} + +void sub_801C03C(void) +{ + switch(gUnknown_203B238->state) { + case 0: + sub_801C244(gUnknown_203B238->species,0,8); + break; + case 1: + sub_801C3B0(1); + break; + case 2: + sub_801C4C8(); + sub_801C0C8(); + sub_8012D60(&gUnknown_203B238->unk74,gUnknown_203B238->unk34,0,0,gUnknown_203B238->unk30,2); + break; + case 3: + sub_801C620(gUnknown_203B238->iqSkillIndex); + break; + case 4: + break; + } +} + +void sub_801C0C8(void) +{ + struct unkStruct_203B238 *puVar1; + int index; + u8 *nullText; + u32 menuAction; + s32 max; + + puVar1 = gUnknown_203B238; + nullText = NULL; + gUnknown_203B238->unk34[0].text = gUnknown_80DBDC8; + puVar1->unk34[0].menuAction = 2; + menuAction = 1; + puVar1->unk34[1].text = *gUnknown_80D4970; + puVar1->unk34[1].menuAction = 3; + + max = 2; + puVar1->unk34[2].text = nullText; + puVar1->unk34[2].menuAction = menuAction; + + for(index = 0; index < max; index++) + { + if(gUnknown_203B238->unk34[index].menuAction == gUnknown_203B238->unk30) + return; + } + gUnknown_203B238->unk30 = 2; +} + +void sub_801C118(void) +{ + switch(sub_801C308(1)) { + case 3: + gUnknown_203B238->unk24 = sub_801C390(); + gUnknown_203B238->iqSkillIndex = gUnknown_203B238->iqSkills[gUnknown_203B238->unk24]; + sub_801BFB4(2); + break; + case 4: + gUnknown_203B238->unk24 = sub_801C390(); + gUnknown_203B238->iqSkillIndex = gUnknown_203B238->iqSkills[gUnknown_203B238->unk24]; + sub_801BFB4(3); + break; + case 2: + sub_801C3F8(); + sub_801BFB4(4); + break; + case 0: + case 1: + break; + } +} + +void sub_801C1A0(void) +{ + s32 menuAction; + + menuAction = 0; + sub_801C308(0); + if (!(sub_8012FD8(&gUnknown_203B238->unk74)) && (sub_8013114(&gUnknown_203B238->unk74,&menuAction), menuAction != 1)) { + gUnknown_203B238->unk30 = menuAction; + } + + switch(menuAction) + { + case 2: + PlaySound(0x133); + ToggleIQSkill((u8 *)&gUnknown_203B238->pokeStruct->IQSkills,gUnknown_203B238->iqSkillIndex); + sub_801BFB4(1); + break; + case 3: + sub_801BFB4(3); + break; + case 1: + sub_801BFB4(1); + break; + } +} + +void sub_801C228(void) +{ + switch(sub_801C674()) + { + case 2: + case 3: + sub_801C6B4(); + sub_801BFB4(1); + case 0: + case 1: + break; + } +} + +bool8 sub_801C244(s16 species, u32 index, u32 param_3) +{ +#ifndef NONMATCHING + register s32 species_s32 asm("r4"); +#else + s32 species_s32; +#endif + + species_s32 = species; + + if (HasNoAvailIQSkills(species)) { + return FALSE; + } + else + { + if (gUnknown_203B23C == NULL) { + gUnknown_203B23C = MemoryAlloc(sizeof(struct unkStruct_203B23C),8); + } + gUnknown_203B23C->species = species_s32; + gUnknown_203B23C->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32]; + gUnknown_203B23C->numIQSkills = GetNumAvailableIQSkills(gUnknown_203B23C->iqSkills,gUnknown_203B23C->pokeStruct->IQ); + gUnknown_203B23C->unk58 = index; + gUnknown_203B23C->unk5C = &gUnknown_203B23C->unk60[index]; + sub_8006518(gUnknown_203B23C->unk60); + gUnknown_203B23C->unk60[gUnknown_203B23C->unk58] = gUnknown_80DBDF0; + gUnknown_203B23C->unk5C->unk14 = &gUnknown_203B23C->unkC0; + sub_8012D08(gUnknown_203B23C->unk5C,param_3); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B23C->unk60,1,1); + sub_8013818(&gUnknown_203B23C->unk24,gUnknown_203B23C->numIQSkills,param_3,index); + sub_801C440(); + sub_801C4C8(); + return TRUE; + } +} + +u32 sub_801C308(u8 r0) +{ + if(r0 == 0) + { + sub_8013660(&gUnknown_203B23C->unk24); + return 0; + } + switch(GetKeyPress(&gUnknown_203B23C->unk24)) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + PlayMenuSoundEffect(0); + return 3; + case 4: + PlayMenuSoundEffect(4); + return 4; + default: + if(sub_80138B8(&gUnknown_203B23C->unk24, 1) != 0) + { + sub_801C440(); + sub_801C4C8(); + return 1; + } + else + return 0; + } +} + +s32 sub_801C390(void) +{ + return (gUnknown_203B23C->unk42 * gUnknown_203B23C->unk40) + gUnknown_203B23C->unk3C; +} + +void sub_801C3B0(u8 r0) +{ + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B23C->unk60, 0, 0); + gUnknown_203B23C->unk46 = gUnknown_203B23C->numIQSkills; + sub_8013984(&gUnknown_203B23C->unk24); + sub_801C440(); + sub_801C4C8(); + if(r0) + AddMenuCursorSprite(&gUnknown_203B23C->unk24); +} + +void sub_801C3F8(void) +{ + if(gUnknown_203B23C != NULL) + { + gUnknown_203B23C->unk60[gUnknown_203B23C->unk58] = gUnknown_80DBDD8; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B23C->unk60, 1, 1); + MemoryFree(gUnknown_203B23C); + gUnknown_203B23C = NULL; + } +} + +#ifdef NONMATCHING +// https://decomp.me/scratch/NdDP3 (98.06% matching) - Seth +void sub_801C440(void) +{ + u16 sVar2; + + gUnknown_203B23C->unkC0 = gUnknown_203B23C->unk44; + gUnknown_203B23C->unkC1 = gUnknown_203B23C->unk42; + gUnknown_203B23C->unkC2 = 0xA; + gUnknown_203B23C->unkC3 = 0; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B23C->unk60, 1, 1); + sVar2 = sub_80095E4(gUnknown_203B23C->unk3E, 0xc) + 2; + gUnknown_203B23C->unk60[gUnknown_203B23C->unk58].unkE = sVar2; + gUnknown_203B23C->unk60[gUnknown_203B23C->unk58].unk10 = sVar2; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B23C->unk60, 1, 1); +} +#else +NAKED +void sub_801C440(void) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tldr r4, _0801C4C4\n" + "\tldr r0, [r4]\n" + "\tadds r1, r0, 0\n" + "\tadds r1, 0x44\n" + "\tldrh r1, [r1]\n" + "\tadds r0, 0xC0\n" + "\tmovs r2, 0\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r1, r0, 0\n" + "\tadds r1, 0x42\n" + "\tldrh r1, [r1]\n" + "\tadds r0, 0xC1\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xC2\n" + "\tmovs r1, 0xA\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xC3\n" + "\tstrb r2, [r0]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x60\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tldr r0, [r4]\n" + "\tmovs r1, 0x3E\n" + "\tldrsh r0, [r0, r1]\n" + "\tmovs r1, 0xC\n" + "\tbl sub_80095E4\n" + "\tadds r0, 0x2\n" + "\tldr r2, [r4]\n" + "\tldr r3, [r2, 0x58]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r1, r2, r1\n" + "\tadds r1, 0x6E\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r3, [r2, 0x58]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r2, r1\n" + "\tadds r2, 0x70\n" + "\tstrh r0, [r2]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x60\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_0801C4C4: .4byte gUnknown_203B23C" + ); +} +#endif + + +void sub_801C4C8(void) +{ + u32 y; + s32 x; + s32 x2; + u32 skillIndex; + s32 counter; + + sub_8008C54(gUnknown_203B23C->unk58); + sub_80073B8(gUnknown_203B23C->unk58); + x = gUnknown_203B23C->unk42 * 8; + x2 = x; + x2 += 10; + xxx_call_draw_string(x2,0,gUnknown_80DBE08,gUnknown_203B23C->unk58,0); + x += 4; + x2 = x + gUnknown_203B23C->unkC2 * 8; + sub_8012BC4(x2,0,gUnknown_203B23C->unk42 + 1,1,7, + gUnknown_203B23C->unk58); + counter = 0; + if (counter < gUnknown_203B23C->unk3E) { + do { + skillIndex = gUnknown_203B23C->iqSkills + [gUnknown_203B23C->unk42 * gUnknown_203B23C->unk40 + counter]; + y = sub_8013800(&gUnknown_203B23C->unk24,counter); + strncpy(gUnknown_202DEA8,GetIQSkillName(skillIndex),0x50); + if (IsIQSkillSet((u8 *)&gUnknown_203B23C->pokeStruct->IQSkills,1 << skillIndex)) { + strcpy(gUnknown_202DEA8 - 0x50,gUnknown_80DBE14); + } + else { + strcpy(gUnknown_202DEA8 - 0x50,gUnknown_80DBE18); + } + xxx_format_and_draw(0xc,y,gUnknown_80DBE1C,gUnknown_203B23C->unk58,0); + counter++; + } while (counter < gUnknown_203B23C->unk3E); + } + sub_80073E0(gUnknown_203B23C->unk58); +} + bool8 HasNoAvailIQSkills(s16 species) { s32 species_s32;