diff --git a/asm/code_801EE10_mid.s b/asm/code_801EE10_mid.s index 6de3e3bf2..3b4477597 100644 --- a/asm/code_801EE10_mid.s +++ b/asm/code_801EE10_mid.s @@ -5,3491 +5,6 @@ .text - thumb_func_start sub_801F808 -sub_801F808: - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x1 - bl ResetSprites - ldr r5, _0801F88C - movs r0, 0xD4 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r5] - movs r1, 0 - str r1, [r0, 0x5C] - adds r1, r0, 0 - adds r1, 0x64 - str r1, [r0, 0x60] - adds r0, r1, 0 - bl sub_80140B4 - bl ResetUnusedInputStruct - ldr r0, [r5] - adds r0, 0x64 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r5] - str r4, [r0, 0x4] - movs r2, 0x4 - ldrh r0, [r4, 0x6] - cmp r0, 0 - bne _0801F862 - adds r3, r5, 0 -_0801F84C: - subs r2, 0x1 - cmp r2, 0x1 - ble _0801F862 - ldr r0, [r3] - ldr r1, [r0, 0x4] - lsls r0, r2, 1 - adds r0, r1 - subs r0, 0x2 - ldrh r0, [r0] - cmp r0, 0 - beq _0801F84C -_0801F862: - ldr r4, _0801F88C - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x28 - ldr r3, [r1, 0x5C] - adds r1, r2, 0 - movs r2, 0x1 - bl sub_8013818 - ldr r0, [r4] - adds r0, 0xC8 - bl sub_801317C - movs r0, 0 - bl sub_801F918 - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0801F88C: .4byte gUnknown_203B278 - thumb_func_end sub_801F808 - - thumb_func_start sub_801F890 -sub_801F890: - push {lr} - ldr r0, _0801F8A8 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0x1 - beq _0801F8BC - cmp r0, 0x1 - bgt _0801F8AC - cmp r0, 0 - beq _0801F8B6 - b _0801F8C6 - .align 2, 0 -_0801F8A8: .4byte gUnknown_203B278 -_0801F8AC: - cmp r0, 0x2 - beq _0801F8C6 - cmp r0, 0x3 - beq _0801F8C2 - b _0801F8C6 -_0801F8B6: - bl sub_801FA58 - b _0801F8CA -_0801F8BC: - bl sub_801FAD4 - b _0801F8CA -_0801F8C2: - movs r0, 0x3 - b _0801F8CC -_0801F8C6: - movs r0, 0x2 - b _0801F8CC -_0801F8CA: - movs r0, 0 -_0801F8CC: - pop {r1} - bx r1 - thumb_func_end sub_801F890 - - thumb_func_start sub_801F8D0 -sub_801F8D0: - push {r4,r5,lr} - ldr r4, _0801F910 - ldr r2, [r4] - cmp r2, 0 - beq _0801F90A - ldr r0, [r2, 0x5C] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x64 - ldr r0, _0801F914 - 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, 0x64 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0801F90A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801F910: .4byte gUnknown_203B278 -_0801F914: .4byte gUnknown_80DC2F8 - thumb_func_end sub_801F8D0 - - thumb_func_start sub_801F918 -sub_801F918: - push {lr} - ldr r1, _0801F92C - ldr r1, [r1] - str r0, [r1] - bl sub_801F930 - bl sub_801F9A4 - pop {r0} - bx r0 - .align 2, 0 -_0801F92C: .4byte gUnknown_203B278 - thumb_func_end sub_801F918 - - thumb_func_start sub_801F930 -sub_801F930: - push {r4,lr} - ldr r4, _0801F94C - ldr r0, [r4] - adds r0, 0x64 - bl sub_80140B4 - ldr r2, [r4] - ldr r3, [r2] - cmp r3, 0 - beq _0801F950 - cmp r3, 0x1 - beq _0801F98C - b _0801F99C - .align 2, 0 -_0801F94C: .4byte gUnknown_203B278 -_0801F950: - ldr r0, [r2, 0x60] - adds r1, r2, 0 - adds r1, 0xC4 - str r1, [r0, 0x14] - adds r0, r2, 0 - adds r0, 0x48 - ldrh r0, [r0] - strb r0, [r1] - ldr r0, [r4] - adds r1, r0, 0 - adds r1, 0x46 - ldrh r1, [r1] - adds r0, 0xC5 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xC6 - movs r1, 0x10 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xC7 - strb r3, [r0] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x64 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - b _0801F99C -_0801F98C: - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x64 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C -_0801F99C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_801F930 - - thumb_func_start sub_801F9A4 -sub_801F9A4: - push {r4,r5,lr} - sub sp, 0x4 - ldr r5, _0801F9EC - ldr r0, [r5] - ldr r4, [r0] - cmp r4, 0x1 - beq _0801F9F0 - cmp r4, 0x1 - bgt _0801FA48 - cmp r4, 0 - bne _0801FA48 - ldr r0, [r0, 0x5C] - bl sub_8008C54 - ldr r3, [r5] - adds r2, r3, 0 - adds r2, 0x46 - movs r1, 0 - ldrsh r0, [r2, r1] - ldr r1, [r3, 0x4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r3, 0x8] - movs r1, 0 - ldrsh r0, [r2, r1] - ldrh r1, [r3, 0x8] - ldr r2, [r3, 0x5C] - adds r3, 0x14 - bl unk_MoveIDPrintMoveDescription - ldr r1, [r5] - str r0, [r1, 0x10] - str r4, [r1, 0x24] - b _0801FA48 - .align 2, 0 -_0801F9EC: .4byte gUnknown_203B278 -_0801F9F0: - ldr r0, [r0, 0x5C] - bl sub_8008C54 - ldr r0, [r5] - ldr r0, [r0, 0x5C] - bl sub_80073B8 - ldr r0, [r5] - ldr r1, [r0, 0xC] - lsls r1, 2 - adds r0, 0x14 - adds r0, r1 - ldr r1, [r0] - ldr r0, _0801FA50 - ldr r1, [r1] - bl strcpy - ldr r2, _0801FA54 - ldr r0, [r5] - ldr r3, [r0, 0x5C] - movs r4, 0 - str r4, [sp] - movs r0, 0x10 - movs r1, 0 - bl xxx_format_and_draw - ldr r3, [r5] - ldr r1, [r3, 0xC] - lsls r1, 2 - adds r0, r3, 0 - adds r0, 0x14 - adds r0, r1 - ldr r0, [r0] - ldr r2, [r0, 0x4] - ldr r3, [r3, 0x5C] - str r4, [sp] - movs r0, 0x4 - movs r1, 0x10 - bl xxx_format_and_draw - ldr r0, [r5] - ldr r0, [r0, 0x5C] - bl sub_80073E0 -_0801FA48: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801FA50: .4byte gAvailablePokemonNames -_0801FA54: .4byte gUnknown_80DC310 - thumb_func_end sub_801F9A4 - - thumb_func_start sub_801FA58 -sub_801FA58: - push {r4,lr} - ldr r0, _0801FAA4 - ldr r2, [r0] - ldr r1, [r2, 0x10] - adds r4, r0, 0 - cmp r1, 0 - beq _0801FA7C - ldr r0, [r2, 0x24] - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0801FA74 - bl sub_8013F84 -_0801FA74: - ldr r1, [r4] - ldr r0, [r1, 0x24] - adds r0, 0x1 - str r0, [r1, 0x24] -_0801FA7C: - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0xC8 - ldr r1, [r1, 0x5C] - bl sub_8012A64 - cmp r0, 0x1 - beq _0801FAA8 - cmp r0, 0x2 - beq _0801FAC2 - ldr r0, [r4] - adds r0, 0x28 - bl sub_8013938 - lsls r0, 24 - cmp r0, 0 - beq _0801FACE - movs r0, 0 - b _0801FACA - .align 2, 0 -_0801FAA4: .4byte gUnknown_203B278 -_0801FAA8: - movs r0, 0 - bl PlayMenuSoundEffect - ldr r1, [r4] - ldr r0, [r1, 0x10] - cmp r0, 0 - beq _0801FABE - movs r0, 0 - str r0, [r1, 0xC] - movs r0, 0x1 - b _0801FACA -_0801FABE: - movs r0, 0x3 - b _0801FACA -_0801FAC2: - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 -_0801FACA: - bl sub_801F918 -_0801FACE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_801FA58 - - thumb_func_start sub_801FAD4 -sub_801FAD4: - push {r4,lr} - ldr r0, _0801FB14 - ldr r3, [r0] - ldr r1, [r3, 0x10] - subs r1, 0x1 - ldr r2, [r3, 0xC] - adds r4, r0, 0 - cmp r2, r1 - bge _0801FAFC - ldr r0, [r3, 0x24] - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0801FAF4 - bl sub_8013F84 -_0801FAF4: - ldr r1, [r4] - ldr r0, [r1, 0x24] - adds r0, 0x1 - str r0, [r1, 0x24] -_0801FAFC: - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0xC8 - ldr r1, [r1, 0x5C] - bl sub_8012A64 - cmp r0, 0x1 - beq _0801FB18 - cmp r0, 0x2 - beq _0801FB3C - b _0801FB48 - .align 2, 0 -_0801FB14: .4byte gUnknown_203B278 -_0801FB18: - movs r0, 0 - bl PlayMenuSoundEffect - ldr r0, [r4] - ldr r1, [r0, 0xC] - adds r1, 0x1 - str r1, [r0, 0xC] - ldr r0, [r0, 0x10] - cmp r1, r0 - bge _0801FB34 - movs r0, 0x1 - bl sub_801F918 - b _0801FB48 -_0801FB34: - movs r0, 0 - bl sub_801F918 - b _0801FB48 -_0801FB3C: - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - bl sub_801F918 -_0801FB48: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_801FAD4 - - thumb_func_start sub_801FB50 -sub_801FB50: - push {r4-r7,lr} - adds r4, r0, 0 - bl ResetUnusedInputStruct - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r6, _0801FBC0 - movs r0, 0xF0 - lsls r0, 1 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r6] - movs r7, 0 - str r7, [r0, 0x70] - str r7, [r0, 0x74] - str r7, [r0, 0x78] - str r4, [r0] - strb r7, [r0, 0x15] - ldr r0, _0801FBC4 - ldr r4, _0801FBC8 - adds r1, r4, 0 - bl CopyYellowMonsterNametoBuffer - ldr r5, _0801FBCC - adds r0, r5, 0 - adds r1, r4, 0 - bl CopyYellowMonsterNametoBuffer - adds r0, r4, 0 - bl GetMonSpecies - adds r1, r0, 0 - adds r0, r5, 0 - subs r0, 0x50 - bl strcpy - subs r5, 0xF0 - bl GetPlayerPokemonStruct - adds r1, r0, 0 - adds r0, r5, 0 - bl PrintPokeNameToBuffer - ldr r2, [r6] - ldr r0, [r2] - cmp r0, 0x1 - bne _0801FBD0 - movs r1, 0xBE - lsls r1, 1 - adds r0, r2, r1 - str r7, [r0] - b _0801FBDE - .align 2, 0 -_0801FBC0: .4byte gUnknown_203B27C -_0801FBC4: .4byte gUnknown_202E5D8 -_0801FBC8: .4byte 0x00000155 -_0801FBCC: .4byte gUnknown_202E1C8 -_0801FBD0: - movs r3, 0xBE - lsls r3, 1 - adds r1, r2, r3 - movs r4, 0xB6 - lsls r4, 1 - adds r0, r2, r4 - str r0, [r1] -_0801FBDE: - ldr r0, _0801FC34 - bl GetDialogueSpriteDataPtr - ldr r2, _0801FC38 - ldr r3, [r2] - movs r4, 0xB6 - lsls r4, 1 - adds r1, r3, r4 - str r0, [r1] - adds r4, 0x4 - adds r1, r3, r4 - ldr r0, [r0, 0x4] - str r0, [r1] - movs r1, 0xBC - lsls r1, 1 - adds r0, r3, r1 - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - ldr r3, _0801FC3C - adds r0, r3 - strb r1, [r0] - ldr r0, [r2] - adds r4, 0xA - adds r0, r4 - strb r1, [r0] - ldr r2, [r2] - movs r0, 0xBA - lsls r0, 1 - adds r1, r2, r0 - movs r0, 0x2 - strh r0, [r1] - subs r3, 0x3 - adds r1, r2, r3 - movs r0, 0x8 - strh r0, [r1] - movs r0, 0 - bl sub_801FDA8 - movs r0, 0x1 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0801FC34: .4byte 0x00000155 -_0801FC38: .4byte gUnknown_203B27C -_0801FC3C: .4byte 0x00000179 - thumb_func_end sub_801FB50 - - thumb_func_start sub_801FC40 -sub_801FC40: - push {lr} - ldr r1, _0801FC5C - ldr r0, [r1] - ldr r0, [r0, 0x4] - adds r2, r1, 0 - cmp r0, 0x22 - bls _0801FC50 - b _0801FD70 -_0801FC50: - lsls r0, 2 - ldr r1, _0801FC60 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801FC5C: .4byte gUnknown_203B27C -_0801FC60: .4byte _0801FC64 - .align 2, 0 -_0801FC64: - .4byte _0801FCF0 - .4byte _0801FCF0 - .4byte _0801FCF6 - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FCFC - .4byte _0801FD02 - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FD50 - .4byte _0801FD70 - .4byte _0801FD08 - .4byte _0801FD08 - .4byte _0801FD0E - .4byte _0801FD14 - .4byte _0801FD1A - .4byte _0801FD70 - .4byte _0801FD20 - .4byte _0801FD20 - .4byte _0801FD26 - .4byte _0801FD2C - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FD32 - .4byte _0801FD38 - .4byte _0801FD38 - .4byte _0801FD3E - .4byte _0801FD44 - .4byte _0801FD4A -_0801FCF0: - bl sub_8021154 - b _0801FD74 -_0801FCF6: - bl sub_80209AC - b _0801FD74 -_0801FCFC: - bl sub_80209FC - b _0801FD74 -_0801FD02: - bl sub_8020A34 - b _0801FD74 -_0801FD08: - bl sub_8020A80 - b _0801FD74 -_0801FD0E: - bl sub_8020B38 - b _0801FD74 -_0801FD14: - bl sub_8020C2C - b _0801FD74 -_0801FD1A: - bl sub_8020C48 - b _0801FD74 -_0801FD20: - bl sub_8020C64 - b _0801FD74 -_0801FD26: - bl sub_8020CC0 - b _0801FD74 -_0801FD2C: - bl sub_8020D74 - b _0801FD74 -_0801FD32: - bl sub_8020D90 - b _0801FD74 -_0801FD38: - bl sub_8020DCC - b _0801FD74 -_0801FD3E: - bl sub_8020EB4 - b _0801FD74 -_0801FD44: - bl sub_80210C8 - b _0801FD74 -_0801FD4A: - bl sub_80210E4 - b _0801FD74 -_0801FD50: - ldr r0, [r2] - ldrb r0, [r0, 0x15] - cmp r0, 0x1 - bne _0801FD68 - ldr r0, _0801FD6C - ldr r1, [r0] - movs r0, 0x98 - lsls r0, 2 - adds r1, r0 - ldr r0, [r1] - subs r0, 0x96 - str r0, [r1] -_0801FD68: - movs r0, 0x3 - b _0801FD76 - .align 2, 0 -_0801FD6C: .4byte gTeamInventory_203B460 -_0801FD70: - bl sub_8021130 -_0801FD74: - movs r0, 0 -_0801FD76: - pop {r1} - bx r1 - thumb_func_end sub_801FC40 - - thumb_func_start sub_801FD7C -sub_801FD7C: - push {r4,lr} - ldr r4, _0801FDA4 - ldr r0, [r4] - cmp r0, 0 - beq _0801FD9C - movs r1, 0xB6 - lsls r1, 1 - adds r0, r1 - ldr r0, [r0] - bl CloseFile - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0801FD9C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801FDA4: .4byte gUnknown_203B27C - thumb_func_end sub_801FD7C - - thumb_func_start sub_801FDA8 -sub_801FDA8: - push {lr} - ldr r1, _0801FDBC - ldr r1, [r1] - str r0, [r1, 0x4] - bl sub_801FDC0 - bl sub_801FF28 - pop {r0} - bx r0 - .align 2, 0 -_0801FDBC: .4byte gUnknown_203B27C - thumb_func_end sub_801FDA8 - - thumb_func_start sub_801FDC0 -sub_801FDC0: - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r4, _0801FDE8 - ldr r0, [r4] - movs r5, 0xC0 - lsls r5, 1 - adds r0, r5 - bl sub_8006518 - ldr r0, [r4] - ldr r1, [r0, 0x4] - cmp r1, 0x11 - beq _0801FE38 - cmp r1, 0x11 - bgt _0801FDEC - cmp r1, 0x2 - beq _0801FDF6 - b _0801FED4 - .align 2, 0 -_0801FDE8: .4byte gUnknown_203B27C -_0801FDEC: - cmp r1, 0x17 - beq _0801FE6C - cmp r1, 0x20 - beq _0801FE88 - b _0801FED4 -_0801FDF6: - adds r0, r5 - movs r1, 0x80 - strb r1, [r0] - ldr r0, [r4] - movs r2, 0xCC - lsls r2, 1 - adds r0, r2 - strb r1, [r0] - ldr r0, [r4] - movs r3, 0xD8 - lsls r3, 1 - adds r0, r3 - strb r1, [r0] - ldr r1, [r4] - movs r6, 0xE4 - lsls r6, 1 - adds r1, r6 - ldr r0, _0801FE34 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r6,r7} - stm r1!, {r2,r6,r7} - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, r5 - movs r1, 0x1 - movs r2, 0 - bl sub_800641C - b _0801FF14 - .align 2, 0 -_0801FE34: .4byte gUnknown_80DC37C -_0801FE38: - bl sub_80205D0 - ldr r2, [r4] - movs r0, 0xD8 - lsls r0, 1 - adds r2, r0 - ldr r1, _0801FE68 - 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 - adds r1, 0x7C - bl sub_8012CAC - bl ResetUnusedInputStruct - ldr r0, [r4] - movs r6, 0xC0 - lsls r6, 1 - adds r0, r6 - b _0801FEC2 - .align 2, 0 -_0801FE68: .4byte gUnknown_80DC334 -_0801FE6C: - bl sub_802069C - ldr r2, [r4] - movs r0, 0xD8 - lsls r0, 1 - adds r2, r0 - ldr r1, _0801FE84 - ldm r1!, {r3,r6,r7} - stm r2!, {r3,r6,r7} - ldm r1!, {r3,r6,r7} - stm r2!, {r3,r6,r7} - b _0801FEB0 - .align 2, 0 -_0801FE84: .4byte gUnknown_80DC334 -_0801FE88: - bl CreateGulpinLinkMenu - ldr r1, [r4] - movs r7, 0xCC - lsls r7, 1 - adds r1, r7 - ldr r0, _0801FECC - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldr r2, [r4] - movs r0, 0xD8 - lsls r0, 1 - adds r2, r0 - ldr r1, _0801FED0 - ldm r1!, {r3,r6,r7} - stm r2!, {r3,r6,r7} - ldm r1!, {r3,r6,r7} - stm r2!, {r3,r6,r7} -_0801FEB0: - ldr r1, [r4] - adds r0, r1, r0 - adds r1, 0x7C - bl sub_8012CAC - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, r5 -_0801FEC2: - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - b _0801FF14 - .align 2, 0 -_0801FECC: .4byte gUnknown_80DC31C -_0801FED0: .4byte gUnknown_80DC34C -_0801FED4: - ldr r5, _0801FF20 - mov r12, r5 - movs r6, 0xC0 - lsls r6, 1 - mov r8, r6 - ldr r4, _0801FF24 - movs r3, 0 - movs r2, 0x3 -_0801FEE4: - mov r7, r12 - ldr r1, [r7] - adds r1, r3 - add r1, r8 - 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 _0801FEE4 - bl ResetUnusedInputStruct - ldr r0, _0801FF20 - ldr r0, [r0] - movs r1, 0xC0 - lsls r1, 1 - adds r0, r1 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C -_0801FF14: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801FF20: .4byte gUnknown_203B27C -_0801FF24: .4byte gUnknown_80DC31C - thumb_func_end sub_801FDC0 - - thumb_func_start sub_801FF28 -sub_801FF28: - push {r4,r5,lr} - sub sp, 0x14 - ldr r1, _0801FF44 - ldr r0, [r1] - ldr r0, [r0, 0x4] - adds r5, r1, 0 - cmp r0, 0x23 - bls _0801FF3A - b _08020562 -_0801FF3A: - lsls r0, 2 - ldr r1, _0801FF48 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801FF44: .4byte gUnknown_203B27C -_0801FF48: .4byte _0801FF4C - .align 2, 0 -_0801FF4C: - .4byte _0801FFDC - .4byte _08020018 - .4byte _08020064 - .4byte _0802006C - .4byte _08020090 - .4byte _080200B4 - .4byte _080200D8 - .4byte _080200FC - .4byte _08020144 - .4byte _0802018C - .4byte _080201B0 - .4byte _080201D4 - .4byte _080201F8 - .4byte _08020562 - .4byte _0802021C - .4byte _08020240 - .4byte _0802024E - .4byte _08020256 - .4byte _08020274 - .4byte _08020282 - .4byte _0802028E - .4byte _080202B0 - .4byte _080202BE - .4byte _080202C6 - .4byte _080202E4 - .4byte _08020304 - .4byte _08020344 - .4byte _080203B0 - .4byte _080203D4 - .4byte _0802038C - .4byte _080203F8 - .4byte _08020428 - .4byte _08020434 - .4byte _08020460 - .4byte _08020478 - .4byte _08020500 -_0801FFDC: - ldr r0, [r5] - movs r4, 0x2 - str r4, [r0, 0x6C] - bl CreateGulpinShopMenu - ldr r5, [r5] - str r4, [r5, 0x8] - ldr r2, _08020014 - ldr r1, [r5] - movs r0, 0x64 - muls r0, r1 - adds r0, r2 - ldr r0, [r0] - ldr r2, [r5, 0x6C] - adds r3, r5, 0 - adds r3, 0x7C - adds r1, r5, 0 - adds r1, 0xBC - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r4, 0xBE - lsls r4, 1 - adds r1, r5, r4 - b _0802004C - .align 2, 0 -_08020014: .4byte gGulpinDialogue -_08020018: - bl CreateGulpinShopMenu - ldr r0, _0802005C - ldr r4, [r0] - movs r0, 0x2 - str r0, [r4, 0x8] - ldr r1, _08020060 - ldr r2, [r4] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x4 - adds r0, r1 - ldr r0, [r0] - ldr r2, [r4, 0x6C] - adds r3, r4, 0 - adds r3, 0x7C - adds r1, r4, 0 - adds r1, 0xBC - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r5, 0xBE - lsls r5, 1 - adds r1, r4, r5 -_0802004C: - ldr r1, [r1] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - bl sub_8014248 - b _08020562 - .align 2, 0 -_0802005C: .4byte gUnknown_203B27C -_08020060: .4byte gGulpinDialogue -_08020064: - movs r0, 0x3 - bl DrawTeamMoneyBox - b _08020562 -_0802006C: - ldr r2, [r5] - movs r0, 0x1F - str r0, [r2, 0x8] - ldr r1, _0802008C - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x8 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xBE - lsls r1, 1 - adds r2, r1 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_0802008C: .4byte gGulpinDialogue -_08020090: - ldr r2, [r5] - movs r0, 0x1F - str r0, [r2, 0x8] - ldr r1, _080200B0 - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0xC - adds r0, r1 - ldr r0, [r0] - movs r4, 0xBE - lsls r4, 1 - adds r2, r4 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080200B0: .4byte gGulpinDialogue -_080200B4: - ldr r2, [r5] - movs r0, 0x1F - str r0, [r2, 0x8] - ldr r1, _080200D4 - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x10 - adds r0, r1 - ldr r0, [r0] - movs r5, 0xBE - lsls r5, 1 - adds r2, r5 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080200D4: .4byte gGulpinDialogue -_080200D8: - ldr r2, [r5] - movs r0, 0x1F - str r0, [r2, 0x8] - ldr r1, _080200F8 - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x14 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xBE - lsls r1, 1 - adds r2, r1 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080200F8: .4byte gGulpinDialogue -_080200FC: - bl sub_8020900 - ldr r1, _0802013C - ldr r0, _08020140 - ldr r4, [r0] - ldr r2, [r4] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x18 - adds r0, r1 - ldr r0, [r0] - adds r3, r4, 0 - adds r3, 0x7C - adds r1, r4, 0 - adds r1, 0xBC - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r2, 0xBE - lsls r2, 1 - adds r1, r4, r2 - ldr r1, [r1] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - movs r2, 0x10 - bl sub_8014248 - b _08020562 - .align 2, 0 -_0802013C: .4byte gGulpinDialogue -_08020140: .4byte gUnknown_203B27C -_08020144: - bl sub_8020950 - ldr r1, _08020184 - ldr r0, _08020188 - ldr r4, [r0] - ldr r2, [r4] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x54 - adds r0, r1 - ldr r0, [r0] - adds r3, r4, 0 - adds r3, 0x7C - adds r1, r4, 0 - adds r1, 0xBC - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r5, 0xBE - lsls r5, 1 - adds r1, r4, r5 - ldr r1, [r1] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - movs r2, 0xD - bl sub_8014248 - b _08020562 - .align 2, 0 -_08020184: .4byte gGulpinDialogue -_08020188: .4byte gUnknown_203B27C -_0802018C: - ldr r2, [r5] - movs r0, 0x1 - str r0, [r2, 0x8] - ldr r1, _080201AC - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x58 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xBE - lsls r1, 1 - adds r2, r1 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080201AC: .4byte gGulpinDialogue -_080201B0: - ldr r2, [r5] - movs r0, 0x1 - str r0, [r2, 0x8] - ldr r1, _080201D0 - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x5C - adds r0, r1 - ldr r0, [r0] - movs r4, 0xBE - lsls r4, 1 - adds r2, r4 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080201D0: .4byte gGulpinDialogue -_080201D4: - ldr r2, [r5] - movs r0, 0x1 - str r0, [r2, 0x8] - ldr r1, _080201F4 - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x60 - adds r0, r1 - ldr r0, [r0] - movs r5, 0xBE - lsls r5, 1 - adds r2, r5 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080201F4: .4byte gGulpinDialogue -_080201F8: - ldr r2, [r5] - movs r0, 0xD - str r0, [r2, 0x8] - ldr r1, _08020218 - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x1C - adds r0, r1 - ldr r0, [r0] - movs r1, 0xBE - lsls r1, 1 - adds r2, r1 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_08020218: .4byte gGulpinDialogue -_0802021C: - ldr r2, [r5] - movs r0, 0xF - str r0, [r2, 0x8] - ldr r1, _0802023C - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x20 - adds r0, r1 - ldr r0, [r0] - movs r4, 0xBE - lsls r4, 1 - adds r2, r4 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_0802023C: .4byte gGulpinDialogue -_08020240: - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - movs r3, 0xA - bl sub_8023868 - b _08020562 -_0802024E: - movs r0, 0x1 - bl sub_8023B7C - b _08020562 -_08020256: - bl sub_8023DA4 - ldr r0, _08020270 - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0xCC - adds r1, r2, 0 - adds r1, 0x7C - adds r3, r2, 0 - adds r3, 0xBC - ldr r2, [r2, 0x70] - b _0802044C - .align 2, 0 -_08020270: .4byte gUnknown_203B27C -_08020274: - ldr r0, [r5] - movs r5, 0xC - ldrsh r0, [r0, r5] - movs r1, 0x2 - bl sub_8024458 - b _08020562 -_08020282: - ldr r0, [r5] - movs r1, 0xC - ldrsh r0, [r0, r1] - bl sub_801BEEC - b _08020562 -_0802028E: - ldr r2, [r5] - movs r0, 0x15 - str r0, [r2, 0x8] - ldr r1, _080202AC - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x24 - adds r0, r1 - ldr r0, [r0] - movs r4, 0xBE - lsls r4, 1 - adds r2, r4 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080202AC: .4byte gGulpinDialogue -_080202B0: - ldr r0, [r5] - movs r5, 0xC - ldrsh r0, [r0, r5] - movs r1, 0 - bl sub_801F428 - b _08020562 -_080202BE: - movs r0, 0x1 - bl sub_801F5F0 - b _08020562 -_080202C6: - bl sub_801F700 - ldr r0, _080202E0 - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0xCC - adds r1, r2, 0 - adds r1, 0x7C - adds r3, r2, 0 - adds r3, 0xBC - ldr r2, [r2, 0x74] - b _0802044C - .align 2, 0 -_080202E0: .4byte gUnknown_203B27C -_080202E4: - ldr r0, [r5] - ldrh r1, [r0, 0x1C] - adds r0, 0x64 - strh r1, [r0] - movs r2, 0x1 - adds r4, r5, 0 - movs r3, 0 -_080202F2: - ldr r0, [r4] - lsls r1, r2, 1 - adds r0, 0x64 - adds r0, r1 - strh r3, [r0] - adds r2, 0x1 - cmp r2, 0x3 - ble _080202F2 - b _0802046E -_08020304: - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x24 - ldr r1, [r1, 0x10] - adds r1, 0x2C - bl sub_8094060 - ldr r1, [r5] - movs r0, 0x10 - str r0, [r1, 0x8] - ldr r0, _0802033C - ldrh r1, [r1, 0x1E] - bl sub_8092C84 - ldr r1, _08020340 - ldr r2, [r5] - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x28 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xBE - lsls r1, 1 - adds r2, r1 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_0802033C: .4byte gAvailablePokemonNames -_08020340: .4byte gGulpinDialogue -_08020344: - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x24 - ldr r1, [r1, 0x10] - adds r1, 0x2C - bl sub_8094060 - ldr r3, [r5] - movs r0, 0x10 - str r0, [r3, 0x8] - ldrb r0, [r3, 0x14] - cmp r0, 0 - beq _08020370 - ldr r1, _0802036C - ldr r2, [r3] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x38 - b _08020520 - .align 2, 0 -_0802036C: .4byte gGulpinDialogue -_08020370: - ldr r1, _08020388 - ldr r2, [r3] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x34 - adds r0, r1 - ldr r0, [r0] - movs r4, 0xBE - lsls r4, 1 - adds r1, r3, r4 - b _0802052A - .align 2, 0 -_08020388: .4byte gGulpinDialogue -_0802038C: - ldr r2, [r5] - ldr r0, [r2] - cmp r0, 0 - bne _080203A2 - movs r5, 0xC - ldrsh r1, [r2, r5] - adds r2, 0x24 - movs r0, 0 - bl CreateGulpinShop - b _08020562 -_080203A2: - movs r0, 0xC - ldrsh r1, [r2, r0] - adds r2, 0x24 - movs r0, 0x1 - bl CreateGulpinShop - b _08020562 -_080203B0: - ldr r2, [r5] - movs r0, 0x10 - str r0, [r2, 0x8] - ldr r1, _080203D0 - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x3C - adds r0, r1 - ldr r0, [r0] - movs r1, 0xBE - lsls r1, 1 - adds r2, r1 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080203D0: .4byte gGulpinDialogue -_080203D4: - ldr r2, [r5] - movs r0, 0x10 - str r0, [r2, 0x8] - ldr r1, _080203F4 - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x40 - adds r0, r1 - ldr r0, [r0] - movs r4, 0xBE - lsls r4, 1 - adds r2, r4 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080203F4: .4byte gGulpinDialogue -_080203F8: - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x24 - ldr r1, [r1, 0x10] - adds r1, 0x2C - bl unk_CopyMoves4To8 - ldr r0, [r5] - movs r5, 0xC - ldrsh r1, [r0, r5] - adds r2, r0, 0 - adds r2, 0x24 - ldrb r3, [r0, 0x15] - ldr r0, _08020424 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - movs r0, 0x1 - bl sub_801EE10 - b _08020562 - .align 2, 0 -_08020424: .4byte gUnknown_80DC394 -_08020428: - ldr r0, [r5] - ldrb r1, [r0, 0x15] - movs r0, 0x1 - bl sub_801F1B0 - b _08020562 -_08020434: - movs r0, 0 - bl sub_801F280 - ldr r0, _0802045C - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0xCC - adds r1, r2, 0 - adds r1, 0x7C - adds r3, r2, 0 - adds r3, 0xBC - ldr r2, [r2, 0x78] -_0802044C: - str r2, [sp] - movs r2, 0x2 - str r2, [sp, 0x4] - movs r2, 0 - bl sub_8012D60 - b _08020562 - .align 2, 0 -_0802045C: .4byte gUnknown_203B27C -_08020460: - ldr r2, [r5] - ldr r0, [r2, 0x18] - adds r1, r2, 0 - adds r1, 0x24 - adds r2, 0x64 - bl GetLinkedSequence -_0802046E: - ldr r0, [r5] - adds r0, 0x64 - bl sub_801F808 - b _08020562 -_08020478: - bl sub_80208B0 - ldr r0, _080204B8 - ldr r4, _080204BC - ldr r1, [r4] - ldrh r1, [r1, 0x20] - bl sub_8092C84 - ldr r4, [r4] - ldrb r5, [r4, 0x14] - cmp r5, 0 - beq _080204C4 - ldr r1, _080204C0 - ldr r2, [r4] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x48 - adds r0, r1 - ldr r0, [r0] - adds r3, r4, 0 - adds r3, 0x7C - adds r1, r4, 0 - adds r1, 0xBC - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r2, 0xBE - lsls r2, 1 - adds r1, r4, r2 - b _080204E8 - .align 2, 0 -_080204B8: .4byte gUnknown_202DFE8 -_080204BC: .4byte gUnknown_203B27C -_080204C0: .4byte gGulpinDialogue -_080204C4: - ldr r1, _080204FC - ldr r2, [r4] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x44 - adds r0, r1 - ldr r0, [r0] - adds r3, r4, 0 - adds r3, 0x7C - adds r1, r4, 0 - adds r1, 0xBC - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - str r5, [sp, 0x8] - movs r5, 0xBE - lsls r5, 1 - adds r1, r4, r5 -_080204E8: - ldr r1, [r1] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - movs r2, 0x11 - bl sub_8014248 - b _08020562 - .align 2, 0 -_080204FC: .4byte gGulpinDialogue -_08020500: - ldr r1, [r5] - movs r0, 0x1F - str r0, [r1, 0x8] - ldr r0, _08020538 - ldrh r1, [r1, 0x20] - bl sub_8092C84 - ldr r3, [r5] - ldrb r0, [r3, 0x14] - cmp r0, 0 - beq _08020544 - ldr r1, _0802053C - ldr r2, [r3] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x50 -_08020520: - adds r0, r1 - ldr r0, [r0] - movs r2, 0xBE - lsls r2, 1 - adds r1, r3, r2 -_0802052A: - ldr r2, [r1] -_0802052C: - ldr r3, _08020540 - movs r1, 0 - bl sub_80141B4 - b _08020562 - .align 2, 0 -_08020538: .4byte gUnknown_202DFE8 -_0802053C: .4byte gGulpinDialogue -_08020540: .4byte 0x0000010d -_08020544: - ldr r1, _0802056C - ldr r2, [r3] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x4C - adds r0, r1 - ldr r0, [r0] - movs r4, 0xBE - lsls r4, 1 - adds r1, r3, r4 - ldr r2, [r1] - ldr r3, _08020570 - movs r1, 0 - bl sub_80141B4 -_08020562: - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802056C: .4byte gGulpinDialogue -_08020570: .4byte 0x0000010d - thumb_func_end sub_801FF28 - - thumb_func_start CreateGulpinShopMenu -CreateGulpinShopMenu: - push {r4,lr} - ldr r4, _080205C0 - ldr r0, [r4] - adds r0, 0xBC - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r4, [r4] - movs r3, 0 - ldr r0, _080205C4 - str r0, [r4, 0x7C] - adds r1, r4, 0 - adds r1, 0x80 - movs r0, 0x2 - str r0, [r1] - movs r2, 0x1 - adds r1, 0x4 - ldr r0, _080205C8 - str r0, [r1] - adds r1, 0x4 - movs r0, 0xB - str r0, [r1] - adds r1, 0x4 - ldr r0, _080205CC - ldr r0, [r0] - str r0, [r1] - adds r0, r4, 0 - adds r0, 0x90 - str r2, [r0] - adds r0, 0x4 - str r3, [r0] - adds r0, 0x4 - str r2, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080205C0: .4byte gUnknown_203B27C -_080205C4: .4byte gGulpinProceed -_080205C8: .4byte gGulpinInfo -_080205CC: .4byte gUnknown_80D4934 - thumb_func_end CreateGulpinShopMenu - - thumb_func_start sub_80205D0 -sub_80205D0: - push {r4-r7,lr} - ldr r4, _08020660 - ldr r0, [r4] - adds r0, 0xBC - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r0, [r4] - mov r12, r0 - movs r5, 0 - ldr r0, _08020664 - mov r1, r12 - str r0, [r1, 0x7C] - mov r2, r12 - adds r2, 0x80 - movs r0, 0x4 - str r0, [r2] - movs r3, 0x1 - adds r1, 0x84 - ldr r0, _08020668 - str r0, [r1] - adds r1, 0x4 - movs r0, 0xB - str r0, [r1] - adds r1, 0x4 - ldr r0, _0802066C - str r0, [r1] - adds r1, 0x4 - movs r0, 0xC - str r0, [r1] - movs r6, 0x3 - adds r1, 0x4 - ldr r0, _08020670 - str r0, [r1] - mov r0, r12 - adds r0, 0x98 - str r6, [r0] - movs r6, 0x4 - adds r0, 0x4 - str r5, [r0] - adds r0, 0x4 - str r3, [r0] - mov r3, r12 - adds r3, 0xBC -_0802062A: - ldrh r0, [r3] - cmp r0, 0 - bne _0802063A - ldr r1, [r2] - mov r7, r12 - ldr r0, [r7, 0x70] - cmp r1, r0 - beq _08020696 -_0802063A: - adds r2, 0x8 - adds r3, 0x2 - adds r5, 0x1 - cmp r5, r6 - blt _0802062A - movs r5, 0 - cmp r5, r6 - bge _08020696 - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0xBC - ldrh r0, [r0] - cmp r0, 0 - bne _08020674 - adds r0, r1, 0 - adds r0, 0x80 - ldr r0, [r0] - str r0, [r1, 0x70] - b _08020696 - .align 2, 0 -_08020660: .4byte gUnknown_203B27C -_08020664: .4byte gUnknown_80DC3D8 -_08020668: .4byte gUnknown_80DC3E0 -_0802066C: .4byte gUnknown_80DC3E8 -_08020670: .4byte gUnknown_80DC3F4 -_08020674: - adds r5, 0x1 - cmp r5, r6 - bge _08020696 - ldr r2, [r4] - lsls r0, r5, 1 - adds r1, r2, 0 - adds r1, 0xBC - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _08020674 - lsls r0, r5, 3 - adds r1, r2, 0 - adds r1, 0x80 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x70] -_08020696: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80205D0 - - thumb_func_start sub_802069C -sub_802069C: - push {r4-r7,lr} - ldr r4, _08020718 - ldr r0, [r4] - adds r0, 0xBC - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r0, [r4] - mov r12, r0 - movs r5, 0 - ldr r0, _0802071C - mov r1, r12 - str r0, [r1, 0x7C] - mov r3, r12 - adds r3, 0x80 - movs r0, 0x3 - str r0, [r3] - movs r2, 0x1 - adds r1, 0x84 - ldr r0, _08020720 - ldr r0, [r0] - str r0, [r1] - adds r1, 0x4 - movs r0, 0xB - str r0, [r1] - movs r6, 0x2 - mov r0, r12 - adds r0, 0x8C - str r5, [r0] - adds r0, 0x4 - str r2, [r0] - mov r2, r12 - adds r2, 0xBC -_080206E0: - ldrh r0, [r2] - cmp r0, 0 - bne _080206F0 - ldr r1, [r3] - mov r7, r12 - ldr r0, [r7, 0x74] - cmp r1, r0 - beq _08020746 -_080206F0: - adds r3, 0x8 - adds r2, 0x2 - adds r5, 0x1 - cmp r5, r6 - blt _080206E0 - movs r5, 0 - cmp r5, r6 - bge _08020746 - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0xBC - ldrh r0, [r0] - cmp r0, 0 - bne _08020724 - adds r0, r1, 0 - adds r0, 0x80 - ldr r0, [r0] - str r0, [r1, 0x74] - b _08020746 - .align 2, 0 -_08020718: .4byte gUnknown_203B27C -_0802071C: .4byte gUnknown_80DC3F4 -_08020720: .4byte gUnknown_80D4970 -_08020724: - adds r5, 0x1 - cmp r5, r6 - bge _08020746 - ldr r2, [r4] - lsls r0, r5, 1 - adds r1, r2, 0 - adds r1, 0xBC - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _08020724 - lsls r0, r5, 3 - adds r1, r2, 0 - adds r1, 0x80 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x74] -_08020746: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_802069C - - thumb_func_start CreateGulpinLinkMenu -CreateGulpinLinkMenu: - push {r4-r7,lr} - movs r7, 0 - ldr r4, _08020780 - ldr r0, [r4] - adds r0, 0xBC - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r1, [r4] - ldrb r0, [r1, 0x16] - cmp r0, 0 - beq _0802079C - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl IsMoveSet - lsls r0, 24 - cmp r0, 0 - beq _08020788 - ldr r0, [r4] - ldr r1, _08020784 - str r1, [r0, 0x7C] - adds r0, 0x80 - movs r1, 0x6 - b _08020792 - .align 2, 0 -_08020780: .4byte gUnknown_203B27C -_08020784: .4byte gGulpinDeselect -_08020788: - ldr r0, [r4] - ldr r1, _08020798 - str r1, [r0, 0x7C] - adds r0, 0x80 - movs r1, 0x5 -_08020792: - str r1, [r0] - mov r12, r4 - b _080207CA - .align 2, 0 -_08020798: .4byte gGulpinSet -_0802079C: - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl IsMoveEnabled - lsls r0, 24 - cmp r0, 0 - beq _080207B4 - ldr r1, [r4] - ldr r0, _080207B0 - b _080207B8 - .align 2, 0 -_080207B0: .4byte gGulpinDeselect -_080207B4: - ldr r1, [r4] - ldr r0, _0802086C -_080207B8: - str r0, [r1, 0x7C] - ldr r2, _08020870 - ldr r0, [r2] - lsls r1, r7, 3 - adds r0, 0x80 - adds r0, r1 - movs r1, 0x7 - str r1, [r0] - mov r12, r2 -_080207CA: - adds r7, 0x1 - mov r0, r12 - ldr r4, [r0] - lsls r1, r7, 3 - adds r3, r4, 0 - adds r3, 0x7C - adds r2, r3, r1 - ldr r0, _08020874 - str r0, [r2] - adds r6, r4, 0 - adds r6, 0x80 - adds r1, r6, r1 - movs r0, 0x8 - str r0, [r1] - adds r7, 0x1 - lsls r1, r7, 3 - adds r2, r3, r1 - ldr r0, _08020878 - str r0, [r2] - adds r1, r6, r1 - movs r0, 0x9 - str r0, [r1] - adds r7, 0x1 - lsls r1, r7, 3 - adds r2, r3, r1 - ldr r0, _0802087C - str r0, [r2] - adds r1, r6, r1 - movs r0, 0xA - str r0, [r1] - adds r7, 0x1 - lsls r1, r7, 3 - adds r2, r3, r1 - ldr r0, _08020880 - ldr r0, [r0] - str r0, [r2] - adds r1, r6, r1 - movs r0, 0xB - str r0, [r1] - adds r7, 0x1 - lsls r1, r7, 3 - adds r3, r1 - movs r0, 0 - str r0, [r3] - adds r1, r6, r1 - movs r0, 0x1 - str r0, [r1] - movs r3, 0 - cmp r3, r7 - bge _0802084C - adds r5, r4, 0 - adds r4, 0xBC - adds r2, r6, 0 -_08020834: - ldrh r0, [r4] - cmp r0, 0 - bne _08020842 - ldr r1, [r2] - ldr r0, [r5, 0x78] - cmp r1, r0 - beq _080208A8 -_08020842: - adds r4, 0x2 - adds r2, 0x8 - adds r3, 0x1 - cmp r3, r7 - blt _08020834 -_0802084C: - movs r3, 0 - cmp r3, r7 - bge _080208A8 - mov r0, r12 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0xBC - ldrh r0, [r0] - cmp r0, 0 - bne _08020884 - adds r0, r1, 0 - adds r0, 0x80 - ldr r0, [r0] - str r0, [r1, 0x78] - b _080208A8 - .align 2, 0 -_0802086C: .4byte gGulpinSet -_08020870: .4byte gUnknown_203B27C -_08020874: .4byte gGulpinLink -_08020878: .4byte gGulpinDelink -_0802087C: .4byte gGulpinForget -_08020880: .4byte gUnknown_80D4970 -_08020884: - adds r3, 0x1 - cmp r3, r7 - bge _080208A8 - mov r0, r12 - ldr r2, [r0] - lsls r0, r3, 1 - adds r1, r2, 0 - adds r1, 0xBC - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _08020884 - lsls r0, r3, 3 - adds r1, r2, 0 - adds r1, 0x80 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x78] -_080208A8: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end CreateGulpinLinkMenu - - thumb_func_start sub_80208B0 -sub_80208B0: - push {r4,lr} - ldr r4, _080208F4 - ldr r0, [r4] - adds r0, 0xBC - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r4, [r4] - movs r3, 0 - ldr r0, _080208F8 - ldr r0, [r0] - str r0, [r4, 0x7C] - adds r1, r4, 0 - adds r1, 0x80 - movs r0, 0x10 - str r0, [r1] - movs r2, 0x1 - adds r1, 0x4 - ldr r0, _080208FC - ldr r0, [r0] - str r0, [r1] - adds r1, 0x4 - movs r0, 0x11 - str r0, [r1] - adds r0, r4, 0 - adds r0, 0x8C - str r3, [r0] - adds r0, 0x4 - str r2, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080208F4: .4byte gUnknown_203B27C -_080208F8: .4byte gUnknown_80D4920 -_080208FC: .4byte gUnknown_80D4928 - thumb_func_end sub_80208B0 - - thumb_func_start sub_8020900 -sub_8020900: - push {r4,lr} - ldr r4, _08020944 - ldr r0, [r4] - adds r0, 0xBC - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r3, [r4] - movs r2, 0 - ldr r0, _08020948 - ldr r0, [r0] - str r0, [r3, 0x7C] - adds r1, r3, 0 - adds r1, 0x80 - movs r0, 0x10 - str r0, [r1] - adds r1, 0x4 - ldr r0, _0802094C - ldr r0, [r0] - str r0, [r1] - adds r1, 0x4 - movs r0, 0x11 - str r0, [r1] - adds r0, r3, 0 - adds r0, 0x8C - str r2, [r0] - adds r1, 0x8 - movs r0, 0x1 - negs r0, r0 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08020944: .4byte gUnknown_203B27C -_08020948: .4byte gUnknown_80D4920 -_0802094C: .4byte gUnknown_80D4928 - thumb_func_end sub_8020900 - - thumb_func_start sub_8020950 -sub_8020950: - push {r4,lr} - ldr r4, _0802099C - ldr r0, [r4] - adds r0, 0xBC - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r4, [r4] - movs r3, 0 - ldr r0, _080209A0 - str r0, [r4, 0x7C] - adds r1, r4, 0 - adds r1, 0x80 - movs r0, 0xD - str r0, [r1] - movs r2, 0x1 - adds r1, 0x4 - ldr r0, _080209A4 - str r0, [r1] - adds r1, 0x4 - movs r0, 0xE - str r0, [r1] - adds r1, 0x4 - ldr r0, _080209A8 - str r0, [r1] - adds r1, 0x4 - movs r0, 0xF - str r0, [r1] - adds r0, r4, 0 - adds r0, 0x94 - str r3, [r0] - adds r0, 0x4 - str r2, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802099C: .4byte gUnknown_203B27C -_080209A0: .4byte gUnknown_80DC428 -_080209A4: .4byte gUnknown_80DC438 -_080209A8: .4byte gUnknown_80DC448 - thumb_func_end sub_8020950 - - thumb_func_start sub_80209AC -sub_80209AC: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _080209F4 - ldr r0, _080209D4 - ldr r1, [r0] - ldr r0, [sp] - str r0, [r1, 0x6C] - ldr r0, [sp] - cmp r0, 0x2 - beq _080209DE - cmp r0, 0x2 - bgt _080209D8 - cmp r0, 0x1 - beq _080209EE - b _080209F4 - .align 2, 0 -_080209D4: .4byte gUnknown_203B27C -_080209D8: - cmp r0, 0xB - beq _080209E6 - b _080209F4 -_080209DE: - movs r0, 0xE - bl sub_801FDA8 - b _080209F4 -_080209E6: - movs r0, 0x8 - bl sub_801FDA8 - b _080209F4 -_080209EE: - movs r0, 0xC - bl sub_801FDA8 -_080209F4: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_80209AC - - thumb_func_start sub_80209FC -sub_80209FC: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _08020A2E - ldr r0, [sp] - cmp r0, 0x10 - beq _08020A20 - cmp r0, 0x10 - bgt _08020A1A - cmp r0, 0x1 - beq _08020A28 - b _08020A2E -_08020A1A: - cmp r0, 0x11 - beq _08020A28 - b _08020A2E -_08020A20: - movs r0, 0xE - bl sub_801FDA8 - b _08020A2E -_08020A28: - movs r0, 0xC - bl sub_801FDA8 -_08020A2E: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_80209FC - - thumb_func_start sub_8020A34 -sub_8020A34: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _08020A7A - ldr r0, [sp] - cmp r0, 0xD - beq _08020A5C - cmp r0, 0xD - bgt _08020A52 - cmp r0, 0x1 - beq _08020A74 - b _08020A7A -_08020A52: - cmp r0, 0xE - beq _08020A64 - cmp r0, 0xF - beq _08020A6C - b _08020A7A -_08020A5C: - movs r0, 0x9 - bl sub_801FDA8 - b _08020A7A -_08020A64: - movs r0, 0xA - bl sub_801FDA8 - b _08020A7A -_08020A6C: - movs r0, 0xB - bl sub_801FDA8 - b _08020A7A -_08020A74: - movs r0, 0x1 - bl sub_801FDA8 -_08020A7A: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_8020A34 - - thumb_func_start sub_8020A80 -sub_8020A80: - push {r4,lr} - movs r0, 0x1 - bl sub_8023A94 - cmp r0, 0x4 - bhi _08020B32 - lsls r0, 2 - ldr r1, _08020A98 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08020A98: .4byte _08020A9C - .align 2, 0 -_08020A9C: - .4byte _08020B32 - .4byte _08020B32 - .4byte _08020B28 - .4byte _08020AB0 - .4byte _08020AEC -_08020AB0: - bl sub_8023B44 - ldr r4, _08020AE0 - ldr r1, [r4] - strh r0, [r1, 0xC] - ldr r3, _08020AE4 - movs r0, 0xC - ldrsh r2, [r1, r0] - movs r0, 0x58 - muls r2, r0 - ldr r0, [r3] - adds r0, r2 - str r0, [r1, 0x10] - ldrb r0, [r0, 0x2] - strb r0, [r1, 0x16] - ldr r0, _08020AE8 - ldr r1, [r4] - ldr r1, [r1, 0x10] - bl PrintPokeNameToBuffer - movs r0, 0x11 - bl sub_801FDA8 - b _08020B32 - .align 2, 0 -_08020AE0: .4byte gUnknown_203B27C -_08020AE4: .4byte gRecruitedPokemonRef -_08020AE8: .4byte gUnknown_202E128 -_08020AEC: - bl sub_8023B44 - ldr r4, _08020B1C - ldr r1, [r4] - strh r0, [r1, 0xC] - ldr r3, _08020B20 - movs r0, 0xC - ldrsh r2, [r1, r0] - movs r0, 0x58 - muls r2, r0 - ldr r0, [r3] - adds r0, r2 - str r0, [r1, 0x10] - ldrb r0, [r0, 0x2] - strb r0, [r1, 0x16] - ldr r0, _08020B24 - ldr r1, [r4] - ldr r1, [r1, 0x10] - bl PrintPokeNameToBuffer - movs r0, 0x12 - bl sub_801FDA8 - b _08020B32 - .align 2, 0 -_08020B1C: .4byte gUnknown_203B27C -_08020B20: .4byte gRecruitedPokemonRef -_08020B24: .4byte gUnknown_202E128 -_08020B28: - bl sub_8023C60 - movs r0, 0x7 - bl sub_801FDA8 -_08020B32: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8020A80 - - thumb_func_start sub_8020B38 -sub_8020B38: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_8023A94 - ldr r4, _08020B7C - ldr r0, [r4] - adds r0, 0xCC - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _08020B68 - ldr r0, [r4] - adds r0, 0xCC - mov r1, sp - bl sub_8013114 - ldr r1, [sp] - cmp r1, 0x1 - beq _08020B68 - ldr r0, [r4] - str r1, [r0, 0x70] -_08020B68: - ldr r0, [sp] - subs r0, 0x1 - cmp r0, 0x10 - bhi _08020C24 - lsls r0, 2 - ldr r1, _08020B80 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08020B7C: .4byte gUnknown_203B27C -_08020B80: .4byte _08020B84 - .align 2, 0 -_08020B84: - .4byte _08020BC8 - .4byte _08020C24 - .4byte _08020BD0 - .4byte _08020C0E - .4byte _08020C24 - .4byte _08020C24 - .4byte _08020C24 - .4byte _08020C24 - .4byte _08020C24 - .4byte _08020C24 - .4byte _08020C16 - .4byte _08020C1E - .4byte _08020C24 - .4byte _08020C24 - .4byte _08020C24 - .4byte _08020C24 - .4byte _08020BC8 -_08020BC8: - movs r0, 0x10 - bl sub_801FDA8 - b _08020C24 -_08020BD0: - ldr r0, _08020BF0 - ldr r0, [r0] - ldr r0, [r0, 0x10] - movs r1, 0x8 - ldrsh r0, [r0, r1] - bl GetBaseSpeciesNoUnown - lsls r0, 16 - movs r1, 0xCF - lsls r1, 17 - cmp r0, r1 - bne _08020BF4 - movs r0, 0x1C - bl sub_801FDA8 - b _08020C24 - .align 2, 0 -_08020BF0: .4byte gUnknown_203B27C -_08020BF4: - bl sub_8021178 - lsls r0, 24 - cmp r0, 0 - beq _08020C06 - movs r0, 0x1B - bl sub_801FDA8 - b _08020C24 -_08020C06: - movs r0, 0x14 - bl sub_801FDA8 - b _08020C24 -_08020C0E: - movs r0, 0x1E - bl sub_801FDA8 - b _08020C24 -_08020C16: - movs r0, 0x12 - bl sub_801FDA8 - b _08020C24 -_08020C1E: - movs r0, 0x13 - bl sub_801FDA8 -_08020C24: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8020B38 - - thumb_func_start sub_8020C2C -sub_8020C2C: - push {lr} - bl sub_80244E4 - cmp r0, 0x1 - bls _08020C44 - cmp r0, 0x3 - bhi _08020C44 - bl sub_802453C - movs r0, 0x10 - bl sub_801FDA8 -_08020C44: - pop {r0} - bx r0 - thumb_func_end sub_8020C2C - - thumb_func_start sub_8020C48 -sub_8020C48: - push {lr} - bl sub_801BF48 - cmp r0, 0x1 - bls _08020C60 - cmp r0, 0x3 - bhi _08020C60 - bl sub_801BF98 - movs r0, 0x10 - bl sub_801FDA8 -_08020C60: - pop {r0} - bx r0 - thumb_func_end sub_8020C48 - - thumb_func_start sub_8020C64 -sub_8020C64: - push {lr} - movs r0, 0x1 - bl sub_801F520 - cmp r0, 0x3 - beq _08020C80 - cmp r0, 0x3 - bhi _08020C7A - cmp r0, 0x2 - beq _08020CB0 - b _08020CBA -_08020C7A: - cmp r0, 0x4 - beq _08020C98 - b _08020CBA -_08020C80: - bl sub_801F5B4 - ldr r1, _08020C94 - ldr r1, [r1] - strh r0, [r1, 0x1C] - strh r0, [r1, 0x1E] - movs r0, 0x17 - bl sub_801FDA8 - b _08020CBA - .align 2, 0 -_08020C94: .4byte gUnknown_203B27C -_08020C98: - bl sub_801F5B4 - ldr r1, _08020CAC - ldr r1, [r1] - strh r0, [r1, 0x1C] - strh r0, [r1, 0x1E] - movs r0, 0x18 - bl sub_801FDA8 - b _08020CBA - .align 2, 0 -_08020CAC: .4byte gUnknown_203B27C -_08020CB0: - bl sub_801F63C - movs r0, 0x10 - bl sub_801FDA8 -_08020CBA: - pop {r0} - bx r0 - thumb_func_end sub_8020C64 - - thumb_func_start sub_8020CC0 -sub_8020CC0: - push {r4-r6,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_801F520 - ldr r4, _08020D00 - ldr r0, [r4] - adds r0, 0xCC - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _08020CF0 - ldr r0, [r4] - adds r0, 0xCC - mov r1, sp - bl sub_8013114 - ldr r1, [sp] - cmp r1, 0x1 - beq _08020CF0 - ldr r0, [r4] - str r1, [r0, 0x74] -_08020CF0: - ldr r0, [sp] - cmp r0, 0x3 - beq _08020D14 - cmp r0, 0x3 - bgt _08020D04 - cmp r0, 0x1 - beq _08020D0C - b _08020D6C - .align 2, 0 -_08020D00: .4byte gUnknown_203B27C -_08020D04: - cmp r0, 0xB - beq _08020D66 - cmp r0, 0x11 - bne _08020D6C -_08020D0C: - movs r0, 0x16 - bl sub_801FDA8 - b _08020D6C -_08020D14: - bl sub_801F63C - ldr r4, _08020D30 - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x24 - ldr r1, [r1, 0x10] - adds r1, 0x2C - bl unk_CopyMoves4To8 - movs r5, 0 - adds r6, r4, 0 - movs r4, 0x24 - b _08020D38 - .align 2, 0 -_08020D30: .4byte gUnknown_203B27C -_08020D34: - adds r4, 0x8 - adds r5, 0x1 -_08020D38: - cmp r5, 0x7 - bgt _08020D52 - ldr r3, [r6] - adds r2, r3, r4 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08020D34 - ldrh r1, [r3, 0x1E] - adds r0, r2, 0 - bl InitZeroedPPPokemonMove -_08020D52: - cmp r5, 0x3 - ble _08020D5E - movs r0, 0x1D - bl sub_801FDA8 - b _08020D6C -_08020D5E: - movs r0, 0x19 - bl sub_801FDA8 - b _08020D6C -_08020D66: - movs r0, 0x18 - bl sub_801FDA8 -_08020D6C: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8020CC0 - - thumb_func_start sub_8020D74 -sub_8020D74: - push {lr} - bl sub_801F890 - cmp r0, 0x1 - bls _08020D8C - cmp r0, 0x3 - bhi _08020D8C - bl sub_801F8D0 - movs r0, 0x16 - bl sub_801FDA8 -_08020D8C: - pop {r0} - bx r0 - thumb_func_end sub_8020D74 - - thumb_func_start sub_8020D90 -sub_8020D90: - push {lr} - bl sub_801E8C0 - cmp r0, 0x2 - beq _08020DBC - cmp r0, 0x2 - bcc _08020DC6 - cmp r0, 0x3 - bne _08020DC6 - bl GulpinIsNextMoveLinked - ldr r1, _08020DB8 - ldr r1, [r1] - strb r0, [r1, 0x14] - bl DestroyGulpinShop - movs r0, 0x1A - bl sub_801FDA8 - b _08020DC6 - .align 2, 0 -_08020DB8: .4byte gUnknown_203B27C -_08020DBC: - bl DestroyGulpinShop - movs r0, 0x10 - bl sub_801FDA8 -_08020DC6: - pop {r0} - bx r0 - thumb_func_end sub_8020D90 - - thumb_func_start sub_8020DCC -sub_8020DCC: - push {lr} - movs r0, 0x1 - bl sub_801EF38 - cmp r0, 0x4 - bhi _08020EAA - lsls r0, 2 - ldr r1, _08020DE4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08020DE4: .4byte _08020DE8 - .align 2, 0 -_08020DE8: - .4byte _08020EAA - .4byte _08020E98 - .4byte _08020E64 - .4byte _08020DFC - .4byte _08020E30 -_08020DFC: - bl sub_801F1A4 - lsls r0, 24 - cmp r0, 0 - beq _08020E0E - ldr r0, _08020E2C - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x15] -_08020E0E: - bl sub_801F194 - ldr r1, _08020E2C - ldr r2, [r1] - str r0, [r2, 0x18] - lsls r0, 3 - adds r0, r2, r0 - ldrh r1, [r0, 0x26] - strh r1, [r2, 0x1C] - ldrh r0, [r0, 0x26] - strh r0, [r2, 0x20] - movs r0, 0x20 - bl sub_801FDA8 - b _08020EAA - .align 2, 0 -_08020E2C: .4byte gUnknown_203B27C -_08020E30: - bl sub_801F1A4 - lsls r0, 24 - cmp r0, 0 - beq _08020E42 - ldr r0, _08020E60 - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x15] -_08020E42: - bl sub_801F194 - ldr r1, _08020E60 - ldr r2, [r1] - str r0, [r2, 0x18] - lsls r0, 3 - adds r0, r2, r0 - ldrh r1, [r0, 0x26] - strh r1, [r2, 0x1C] - ldrh r0, [r0, 0x26] - strh r0, [r2, 0x20] - movs r0, 0x21 - bl sub_801FDA8 - b _08020EAA - .align 2, 0 -_08020E60: .4byte gUnknown_203B27C -_08020E64: - bl sub_801F1A4 - lsls r0, 24 - cmp r0, 0 - beq _08020E76 - ldr r0, _08020E94 - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x15] -_08020E76: - bl sub_801F214 - ldr r0, _08020E94 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x24 - ldr r1, [r1, 0x10] - adds r1, 0x2C - bl sub_8094060 - movs r0, 0x10 - bl sub_801FDA8 - b _08020EAA - .align 2, 0 -_08020E94: .4byte gUnknown_203B27C -_08020E98: - bl sub_801F1A4 - lsls r0, 24 - cmp r0, 0 - beq _08020EAA - ldr r0, _08020EB0 - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x15] -_08020EAA: - pop {r0} - bx r0 - .align 2, 0 -_08020EB0: .4byte gUnknown_203B27C - thumb_func_end sub_8020DCC - - thumb_func_start sub_8020EB4 -sub_8020EB4: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_801EF38 - ldr r4, _08020EF8 - ldr r0, [r4] - adds r0, 0xCC - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _08020EE4 - ldr r0, [r4] - adds r0, 0xCC - mov r1, sp - bl sub_8013114 - ldr r1, [sp] - cmp r1, 0x1 - beq _08020EE4 - ldr r0, [r4] - str r1, [r0, 0x78] -_08020EE4: - ldr r0, [sp] - subs r0, 0x1 - cmp r0, 0x10 - bls _08020EEE - b _080210BE -_08020EEE: - lsls r0, 2 - ldr r1, _08020EFC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08020EF8: .4byte gUnknown_203B27C -_08020EFC: .4byte _08020F00 - .align 2, 0 -_08020F00: - .4byte _08021068 - .4byte _080210BE - .4byte _080210BE - .4byte _080210BE - .4byte _08020F44 - .4byte _08020F70 - .4byte _08020F8C - .4byte _08020FB8 - .4byte _08021034 - .4byte _08021074 - .4byte _080210B8 - .4byte _080210BE - .4byte _080210BE - .4byte _080210BE - .4byte _080210BE - .4byte _080210BE - .4byte _08021068 -_08020F44: - ldr r0, _08020F60 - ldr r1, [r0] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl ToggleSetMove - lsls r0, 24 - cmp r0, 0 - beq _08020F68 - ldr r0, _08020F64 - bl PlaySound - b _08021068 - .align 2, 0 -_08020F60: .4byte gUnknown_203B27C -_08020F64: .4byte 0x00000133 -_08020F68: - movs r0, 0x2 - bl PlayMenuSoundEffect - b _08021068 -_08020F70: - ldr r0, _08020F84 - bl PlaySound - ldr r0, _08020F88 - ldr r1, [r0] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl UnSetMove - b _08021068 - .align 2, 0 -_08020F84: .4byte 0x00000133 -_08020F88: .4byte gUnknown_203B27C -_08020F8C: - ldr r0, _08020FA8 - ldr r1, [r0] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl ToggleMoveEnabled - lsls r0, 24 - cmp r0, 0 - beq _08020FB0 - ldr r0, _08020FAC - bl PlaySound - b _08021068 - .align 2, 0 -_08020FA8: .4byte gUnknown_203B27C -_08020FAC: .4byte 0x00000133 -_08020FB0: - movs r0, 0x2 - bl PlayMenuSoundEffect - b _08021068 -_08020FB8: - ldr r0, _08020FD8 - ldr r0, [r0] - movs r1, 0x98 - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0x95 - bgt _08020FDC - movs r0, 0x2 - bl PlayMenuSoundEffect - movs r0, 0x3 - bl sub_801FDA8 - b _080210BE - .align 2, 0 -_08020FD8: .4byte gTeamInventory_203B460 -_08020FDC: - ldr r4, _08020FFC - ldr r1, [r4] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl sub_8093318 - lsls r0, 24 - cmp r0, 0 - bne _08021000 - movs r0, 0x2 - bl PlayMenuSoundEffect - movs r0, 0x4 - bl sub_801FDA8 - b _080210BE - .align 2, 0 -_08020FFC: .4byte gUnknown_203B27C -_08021000: - ldr r1, [r4] - ldrb r0, [r1, 0x15] - cmp r0, 0 - bne _08021016 - movs r0, 0x1 - strb r0, [r1, 0x15] - movs r0, 0xA6 - lsls r0, 1 - bl PlaySound - b _0802101C -_08021016: - ldr r0, _0802102C - bl PlaySound -_0802101C: - ldr r0, _08021030 - ldr r1, [r0] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl TryLinkMovesAfter - b _08021068 - .align 2, 0 -_0802102C: .4byte 0x00000133 -_08021030: .4byte gUnknown_203B27C -_08021034: - ldr r4, _08021054 - ldr r1, [r4] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl sub_809333C - lsls r0, 24 - cmp r0, 0 - bne _08021058 - movs r0, 0x2 - bl PlayMenuSoundEffect - movs r0, 0x5 - bl sub_801FDA8 - b _080210BE - .align 2, 0 -_08021054: .4byte gUnknown_203B27C -_08021058: - ldr r0, _08021070 - bl PlaySound - ldr r1, [r4] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl UnlinkMovesAfter -_08021068: - movs r0, 0x1F - bl sub_801FDA8 - b _080210BE - .align 2, 0 -_08021070: .4byte 0x00000133 -_08021074: - ldr r4, _08021094 - ldr r1, [r4] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl IsAnyMoveLinked - lsls r0, 24 - cmp r0, 0 - bne _08021098 - movs r0, 0x2 - bl PlayMenuSoundEffect - movs r0, 0x6 - bl sub_801FDA8 - b _080210BE - .align 2, 0 -_08021094: .4byte gUnknown_203B27C -_08021098: - ldr r0, _080210B4 - bl PlaySound - ldr r1, [r4] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl IsNextMoveLinked - ldr r1, [r4] - strb r0, [r1, 0x14] - movs r0, 0x22 - bl sub_801FDA8 - b _080210BE - .align 2, 0 -_080210B4: .4byte 0x00000133 -_080210B8: - movs r0, 0x21 - bl sub_801FDA8 -_080210BE: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8020EB4 - - thumb_func_start sub_80210C8 -sub_80210C8: - push {lr} - bl sub_801F890 - cmp r0, 0x1 - bls _080210E0 - cmp r0, 0x3 - bhi _080210E0 - bl sub_801F8D0 - movs r0, 0x1F - bl sub_801FDA8 -_080210E0: - pop {r0} - bx r0 - thumb_func_end sub_80210C8 - - thumb_func_start sub_80210E4 -sub_80210E4: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _0802112A - ldr r0, [sp] - cmp r0, 0x10 - beq _08021108 - cmp r0, 0x10 - bgt _08021102 - cmp r0, 0x1 - beq _08021124 - b _0802112A -_08021102: - cmp r0, 0x11 - beq _08021124 - b _0802112A -_08021108: - ldr r0, _08021120 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x24 - ldr r1, [r1, 0x18] - bl RemoveLinkSequenceFromMoves8 - movs r0, 0x23 - bl sub_801FDA8 - b _0802112A - .align 2, 0 -_08021120: .4byte gUnknown_203B27C -_08021124: - movs r0, 0x1F - bl sub_801FDA8 -_0802112A: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_80210E4 - - thumb_func_start sub_8021130 -sub_8021130: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _08021148 - ldr r0, _08021150 - ldr r0, [r0] - ldr r0, [r0, 0x8] - bl sub_801FDA8 -_08021148: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_08021150: .4byte gUnknown_203B27C - thumb_func_end sub_8021130 - - thumb_func_start sub_8021154 -sub_8021154: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0x4 - bne _0802116C - ldr r0, _08021174 - ldr r0, [r0] - ldr r0, [r0, 0x8] - bl sub_801FDA8 -_0802116C: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_08021174: .4byte gUnknown_203B27C - thumb_func_end sub_8021154 - - thumb_func_start sub_8021178 -sub_8021178: - push {lr} - mov r12, r4 - ldr r4, _08021198 - add sp, r4 - mov r4, r12 - ldr r0, _0802119C - ldr r0, [r0] - ldr r1, [r0, 0x10] - mov r0, sp - bl sub_808E218 - cmp r0, 0 - beq _080211A0 - movs r0, 0 - b _080211A2 - .align 2, 0 -_08021198: .4byte 0xfffffcc0 -_0802119C: .4byte gUnknown_203B27C -_080211A0: - movs r0, 0x1 -_080211A2: - movs r3, 0xD0 - lsls r3, 2 - add sp, r3 - pop {r1} - bx r1 - thumb_func_end sub_8021178 - - thumb_func_start sub_80211AC -sub_80211AC: - push {r4-r6,lr} - adds r4, r0, 0 - adds r6, r1, 0 - bl sub_8021700 - lsls r0, 24 - cmp r0, 0 - beq _080211C0 - movs r0, 0 - b _08021258 -_080211C0: - ldr r5, _08021260 - movs r0, 0xE0 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r5] - str r4, [r0, 0x3C] - str r6, [r0, 0x74] - lsls r1, r6, 1 - adds r1, r6 - lsls r1, 3 - adds r1, 0x7C - adds r1, r0, r1 - str r1, [r0, 0x78] - adds r0, 0x7C - bl sub_8006518 - ldr r1, [r5] - ldr r2, [r1, 0x74] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r1, 0x7C - ldr r0, _08021264 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldr r0, [r5] - ldr r1, [r0, 0x78] - adds r0, 0xDC - str r0, [r1, 0x14] - bl ResetUnusedInputStruct - ldr r0, [r5] - adds r0, 0x7C - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r4, [r5] - adds r4, 0x40 - bl sub_8021664 - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0xA - adds r3, r6, 0 - bl sub_8013818 - ldr r0, _08021268 - ldr r2, [r5] - ldr r1, [r0] - ldr r0, [r2, 0x3C] - cmp r1, r0 - bne _0802124E - ldr r0, _0802126C - ldrh r1, [r0] - adds r0, r2, 0 - adds r0, 0x58 - strh r1, [r0] - ldr r0, _08021270 - ldrh r0, [r0] - adds r1, r2, 0 - adds r1, 0x5E - strh r0, [r1] - adds r0, r2, 0 - adds r0, 0x40 - bl sub_8013984 -_0802124E: - bl sub_8021410 - bl sub_8021494 - movs r0, 0x1 -_08021258: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08021260: .4byte gUnknown_203B280 -_08021264: .4byte gUnknown_80DC47C -_08021268: .4byte gUnknown_203B284 -_0802126C: .4byte gUnknown_203B288 -_08021270: .4byte gUnknown_203B28A - thumb_func_end sub_80211AC - - thumb_func_start sub_8021274 -sub_8021274: - push {r4,lr} - lsls r0, 24 - cmp r0, 0 - bne _08021290 - ldr r0, _0802128C - ldr r0, [r0] - adds r0, 0x40 - bl sub_8013660 - movs r0, 0 - b _08021326 - .align 2, 0 -_0802128C: .4byte gUnknown_203B280 -_08021290: - ldr r4, _080212A8 - ldr r0, [r4] - adds r0, 0x40 - bl GetKeyPress - cmp r0, 0x2 - beq _080212B2 - cmp r0, 0x2 - bgt _080212AC - cmp r0, 0x1 - beq _080212BC - b _08021300 - .align 2, 0 -_080212A8: .4byte gUnknown_203B280 -_080212AC: - cmp r0, 0x4 - beq _080212F6 - b _08021300 -_080212B2: - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - b _08021326 -_080212BC: - ldr r0, [r4] - ldr r0, [r0, 0x3C] - cmp r0, 0x2 - bne _080212EC - bl sub_802132C - lsls r0, 24 - lsrs r0, 24 - bl GetFriendAreaPrice - ldr r1, _080212E8 - ldr r1, [r1] - movs r2, 0x98 - lsls r2, 2 - adds r1, r2 - ldr r1, [r1] - cmp r0, r1 - ble _080212EC - movs r0, 0x2 - bl PlayMenuSoundEffect - b _080212F2 - .align 2, 0 -_080212E8: .4byte gTeamInventory_203B460 -_080212EC: - movs r0, 0 - bl PlayMenuSoundEffect -_080212F2: - movs r0, 0x3 - b _08021326 -_080212F6: - movs r0, 0x4 - bl PlayMenuSoundEffect - movs r0, 0x4 - b _08021326 -_08021300: - ldr r0, _08021318 - ldr r0, [r0] - adds r0, 0x40 - movs r1, 0x1 - bl sub_80138B8 - lsls r0, 24 - cmp r0, 0 - bne _0802131C - movs r0, 0 - b _08021326 - .align 2, 0 -_08021318: .4byte gUnknown_203B280 -_0802131C: - bl sub_8021410 - bl sub_8021494 - movs r0, 0x1 -_08021326: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8021274 - - thumb_func_start sub_802132C -sub_802132C: - ldr r0, _08021350 - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x5E - movs r3, 0 - ldrsh r1, [r0, r3] - subs r0, 0x2 - movs r3, 0 - ldrsh r0, [r0, r3] - muls r0, r1 - adds r1, r2, 0 - adds r1, 0x58 - movs r3, 0 - ldrsh r1, [r1, r3] - adds r0, r1 - adds r0, r2, r0 - ldrb r0, [r0] - bx lr - .align 2, 0 -_08021350: .4byte gUnknown_203B280 - thumb_func_end sub_802132C - - thumb_func_start sub_8021354 -sub_8021354: - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl ResetUnusedInputStruct - ldr r5, _0802139C - ldr r0, [r5] - adds r0, 0x7C - movs r1, 0 - movs r2, 0 - bl sub_800641C - bl sub_8021664 - adds r1, r0, 0 - ldr r0, [r5] - adds r2, r0, 0 - adds r2, 0x62 - strh r1, [r2] - adds r0, 0x40 - bl sub_8013984 - bl sub_8021410 - bl sub_8021494 - cmp r4, 0 - beq _08021396 - ldr r0, [r5] - adds r0, 0x40 - bl AddMenuCursorSprite -_08021396: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802139C: .4byte gUnknown_203B280 - thumb_func_end sub_8021354 - - thumb_func_start sub_80213A0 -sub_80213A0: - push {r4,r5,lr} - ldr r4, _080213FC - ldr r2, [r4] - cmp r2, 0 - beq _080213F4 - ldr r1, _08021400 - ldr r0, [r2, 0x3C] - str r0, [r1] - ldr r1, _08021404 - adds r0, r2, 0 - adds r0, 0x58 - ldrh r0, [r0] - strh r0, [r1] - ldr r1, _08021408 - adds r0, r2, 0 - adds r0, 0x5E - ldrh r0, [r0] - strh r0, [r1] - ldr r0, [r2, 0x74] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x7C - ldr r0, _0802140C - 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, 0x7C - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_080213F4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080213FC: .4byte gUnknown_203B280 -_08021400: .4byte gUnknown_203B284 -_08021404: .4byte gUnknown_203B288 -_08021408: .4byte gUnknown_203B28A -_0802140C: .4byte gUnknown_80DC464 - thumb_func_end sub_80213A0 - thumb_func_start sub_8021410 sub_8021410: push {r4,lr} @@ -3774,2868 +289,4 @@ _08021646: _08021660: .4byte gUnknown_203B280 thumb_func_end sub_8021494 - thumb_func_start sub_8021664 -sub_8021664: - push {r4-r6,lr} - movs r5, 0 - ldr r1, _0802167C - ldr r0, [r1] - ldr r0, [r0, 0x3C] - cmp r0, 0x1 - beq _08021692 - cmp r0, 0x1 - bcc _08021680 - cmp r0, 0x2 - beq _080216B4 - b _080216F2 - .align 2, 0 -_0802167C: .4byte gUnknown_203B280 -_08021680: - movs r4, 0x1 -_08021682: - ldr r0, [r1] - adds r0, r5 - strb r4, [r0] - adds r5, 0x1 - adds r4, 0x1 - cmp r4, 0x39 - ble _08021682 - b _080216F2 -_08021692: - movs r4, 0x1 - ldr r2, _080216B0 -_08021696: - ldr r0, [r2] - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - beq _080216A8 - ldr r0, [r1] - adds r0, r5 - strb r4, [r0] - adds r5, 0x1 -_080216A8: - adds r4, 0x1 - cmp r4, 0x39 - ble _08021696 - b _080216F2 - .align 2, 0 -_080216B0: .4byte gFriendAreas -_080216B4: - movs r4, 0x1 - adds r6, r1, 0 -_080216B8: - ldr r0, _080216FC - ldr r0, [r0] - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _080216EC - lsls r0, r4, 24 - lsrs r0, 24 - bl GetFriendAreaUnlockCondition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _080216E4 - cmp r0, 0x1 - bne _080216EC - movs r0, 0x6 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - beq _080216EC -_080216E4: - ldr r0, [r6] - adds r0, r5 - strb r4, [r0] - adds r5, 0x1 -_080216EC: - adds r4, 0x1 - cmp r4, 0x39 - ble _080216B8 -_080216F2: - adds r0, r5, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080216FC: .4byte gFriendAreas - thumb_func_end sub_8021664 - - thumb_func_start sub_8021700 -sub_8021700: - push {r4,lr} - cmp r0, 0x1 - beq _08021710 - cmp r0, 0x1 - bcc _08021754 - cmp r0, 0x2 - beq _0802172C - b _0802176A -_08021710: - movs r4, 0x1 - ldr r0, _08021728 - ldr r1, [r0] -_08021716: - adds r0, r1, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _08021754 - adds r4, 0x1 - cmp r4, 0x39 - ble _08021716 - b _0802176A - .align 2, 0 -_08021728: .4byte gFriendAreas -_0802172C: - movs r4, 0x1 -_0802172E: - ldr r0, _08021750 - ldr r0, [r0] - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _08021764 - lsls r0, r4, 24 - lsrs r0, 24 - bl GetFriendAreaUnlockCondition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _08021754 - cmp r0, 0x1 - beq _08021758 - b _08021764 - .align 2, 0 -_08021750: .4byte gFriendAreas -_08021754: - movs r0, 0 - b _0802176C -_08021758: - movs r0, 0x6 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - bne _08021754 -_08021764: - adds r4, 0x1 - cmp r4, 0x39 - ble _0802172E -_0802176A: - movs r0, 0x1 -_0802176C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8021700 - - thumb_func_start sub_8021774 -sub_8021774: - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r4, r0, 0 - adds r5, r1, 0 - mov r8, r2 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - ldr r6, _080217E4 - movs r0, 0xE0 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r6] - strb r4, [r0, 0xC] - ldr r0, [r6] - strb r5, [r0, 0xD] - ldr r0, [r6] - bl sub_801317C - bl sub_8021A60 - ldr r0, [r6] - mov r1, r8 - str r1, [r0, 0x74] - lsls r1, 1 - add r1, r8 - lsls r1, 3 - adds r1, 0x7C - adds r1, r0, r1 - str r1, [r0, 0x78] - adds r0, 0x7C - bl sub_8006518 - ldr r1, [r6] - ldr r2, [r1, 0x74] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r1, 0x7C - ldr r0, _080217E8 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - bl sub_8021820 - movs r0, 0x1 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080217E4: .4byte gUnknown_203B28C -_080217E8: .4byte gUnknown_80DC4D8 - thumb_func_end sub_8021774 - - thumb_func_start sub_80217EC -sub_80217EC: - push {lr} - ldr r0, _0802180C - ldr r0, [r0] - ldr r1, [r0, 0x74] - bl sub_8012A64 - cmp r0, 0x1 - beq _08021810 - cmp r0, 0x2 - bne _0802181A - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - b _0802181C - .align 2, 0 -_0802180C: .4byte gUnknown_203B28C -_08021810: - movs r0, 0 - bl PlayMenuSoundEffect - movs r0, 0x3 - b _0802181C -_0802181A: - movs r0, 0 -_0802181C: - pop {r1} - bx r1 - thumb_func_end sub_80217EC - - thumb_func_start sub_8021820 -sub_8021820: - push {lr} - bl sub_8021878 - bl sub_8021894 - pop {r0} - bx r0 - thumb_func_end sub_8021820 - - thumb_func_start sub_8021830 -sub_8021830: - push {r4,r5,lr} - ldr r4, _08021870 - ldr r2, [r4] - cmp r2, 0 - beq _0802186A - ldr r0, [r2, 0x74] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x7C - ldr r0, _08021874 - 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, 0x7C - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0802186A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08021870: .4byte gUnknown_203B28C -_08021874: .4byte gUnknown_80DC4BC - thumb_func_end sub_8021830 - - thumb_func_start sub_8021878 -sub_8021878: - push {lr} - bl ResetUnusedInputStruct - ldr r0, _08021890 - ldr r0, [r0] - adds r0, 0x7C - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r0} - bx r0 - .align 2, 0 -_08021890: .4byte gUnknown_203B28C - thumb_func_end sub_8021878 - - thumb_func_start sub_8021894 -sub_8021894: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x168 - ldr r4, _080218F8 - ldr r0, [r4] - ldr r0, [r0, 0x74] - bl sub_80073B8 - ldr r0, [r4] - ldrb r1, [r0, 0xC] - add r0, sp, 0x4 - movs r2, 0 - bl sub_8092578 - ldr r0, [r4] - ldr r3, [r0, 0x74] - movs r5, 0 - str r5, [sp] - movs r0, 0x14 - movs r1, 0 - add r2, sp, 0x4 - bl xxx_call_draw_string - ldr r0, [r4] - ldrb r0, [r0, 0xC] - bl GetFriendAreaDescription - adds r2, r0, 0 - ldr r0, [r4] - ldr r3, [r0, 0x74] - str r5, [sp] - movs r0, 0xA - movs r1, 0x14 - bl xxx_call_draw_string - ldr r4, [r4] - ldrb r0, [r4, 0xD] - cmp r0, 0 - beq _08021900 - ldr r2, _080218FC - ldr r3, [r4, 0x74] - str r5, [sp] - movs r0, 0x20 - movs r1, 0x3C - bl xxx_call_draw_string - b _0802190E - .align 2, 0 -_080218F8: .4byte gUnknown_203B28C -_080218FC: .4byte gUnknown_80DC4F0 -_08021900: - ldr r2, _0802193C - ldr r3, [r4, 0x74] - str r0, [sp] - movs r0, 0x20 - movs r1, 0x3C - bl xxx_call_draw_string -_0802190E: - ldr r4, _08021940 - ldr r0, [r4] - ldr r0, [r0, 0x74] - movs r5, 0x4 - str r5, [sp] - movs r1, 0x4 - movs r2, 0x40 - movs r3, 0x14 - bl sub_800792C - ldr r4, [r4] - ldrb r0, [r4, 0xD] - cmp r0, 0 - beq _08021944 - ldr r0, [r4, 0x74] - str r5, [sp] - movs r1, 0xB8 - movs r2, 0x40 - movs r3, 0x14 - bl sub_800792C - b _08021952 - .align 2, 0 -_0802193C: .4byte gUnknown_80DC518 -_08021940: .4byte gUnknown_203B28C -_08021944: - ldr r0, [r4, 0x74] - str r5, [sp] - movs r1, 0x5E - movs r2, 0x40 - movs r3, 0x6E - bl sub_800792C -_08021952: - ldr r5, _080219E8 - ldr r0, [r5] - ldr r0, [r0, 0x74] - movs r4, 0x4 - str r4, [sp] - movs r1, 0x4 - movs r2, 0x82 - movs r3, 0xC8 - bl sub_800792C - ldr r0, [r5] - ldr r0, [r0, 0x74] - str r4, [sp] - movs r1, 0x3 - movs r2, 0x40 - movs r3, 0x43 - bl sub_8007A78 - ldr r0, [r5] - ldr r0, [r0, 0x74] - str r4, [sp] - movs r1, 0xCC - movs r2, 0x40 - movs r3, 0x43 - bl sub_8007A78 - movs r6, 0 - ldr r0, [r5] - ldr r0, [r0, 0x70] - cmp r6, r0 - bge _08021A40 - add r7, sp, 0x104 - mov r8, r5 - mov r9, r6 -_08021996: - adds r0, r6, 0 - movs r1, 0x3 - bl __modsi3 - lsls r1, r0, 6 - subs r1, r0 - adds r5, r1, 0x7 - adds r0, r6, 0 - movs r1, 0x3 - bl __divsi3 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r4, r1, 0 - adds r4, 0x47 - mov r1, r8 - ldr r0, [r1] - lsls r1, r6, 1 - adds r0, 0xE - adds r0, r1 - movs r2, 0 - ldrsh r1, [r0, r2] - adds r0, r7, 0 - bl sub_808D930 - mov r0, r8 - ldr r3, [r0] - lsls r1, r6, 2 - adds r0, r3, 0 - adds r0, 0x30 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0x1 - beq _08021A04 - cmp r0, 0x1 - bcc _080219EC - cmp r0, 0x2 - beq _08021A16 - b _08021A34 - .align 2, 0 -_080219E8: .4byte gUnknown_203B28C -_080219EC: - ldr r0, _08021A00 - ldr r2, [r0] - ldr r3, [r3, 0x74] - mov r1, r9 - str r1, [sp] - adds r0, r5, 0 - adds r1, r4, 0 - bl xxx_call_draw_string - b _08021A34 - .align 2, 0 -_08021A00: .4byte gUnknown_80D49BC -_08021A04: - ldr r3, [r3, 0x74] - mov r2, r9 - str r2, [sp] - adds r0, r5, 0 - adds r1, r4, 0 - adds r2, r7, 0 - bl xxx_call_draw_string - b _08021A34 -_08021A16: - add r0, sp, 0x4 - ldr r1, _08021A58 - adds r2, r7, 0 - bl sprintfStatic - mov r1, r8 - ldr r0, [r1] - ldr r3, [r0, 0x74] - mov r2, r9 - str r2, [sp] - adds r0, r5, 0 - adds r1, r4, 0 - add r2, sp, 0x4 - bl xxx_call_draw_string -_08021A34: - adds r6, 0x1 - mov r1, r8 - ldr r0, [r1] - ldr r0, [r0, 0x70] - cmp r6, r0 - blt _08021996 -_08021A40: - ldr r0, _08021A5C - ldr r0, [r0] - ldr r0, [r0, 0x74] - bl sub_80073E0 - add sp, 0x168 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08021A58: .4byte gUnknown_80DC524 -_08021A5C: .4byte gUnknown_203B28C - thumb_func_end sub_8021894 - - thumb_func_start sub_8021A60 -sub_8021A60: - push {r4-r7,lr} - ldr r2, _08021B4C - ldr r1, [r2] - movs r0, 0 - str r0, [r1, 0x70] - movs r6, 0 - adds r4, r2, 0 - movs r3, 0 -_08021A70: - ldr r1, [r4] - lsls r2, r6, 1 - adds r0, r1, 0 - adds r0, 0xE - adds r0, r2 - strh r3, [r0] - lsls r0, r6, 2 - adds r1, 0x30 - adds r1, r0 - str r3, [r1] - adds r6, 0x1 - cmp r6, 0xF - ble _08021A70 - movs r6, 0 - ldr r7, _08021B4C -_08021A8E: - lsls r0, r6, 16 - asrs r5, r0, 16 - ldr r4, [r7] - adds r0, r5, 0 - bl GetFriendArea - ldrb r1, [r4, 0xC] - lsls r0, 24 - lsrs r0, 24 - cmp r1, r0 - bne _08021AC4 - adds r0, r5, 0 - bl GetBaseSpeciesNoUnown - lsls r0, 16 - asrs r0, 16 - cmp r5, r0 - bne _08021AC4 - ldr r3, [r7] - ldr r1, [r3, 0x70] - lsls r2, r1, 1 - adds r0, r3, 0 - adds r0, 0xE - adds r0, r2 - strh r5, [r0] - adds r1, 0x1 - str r1, [r3, 0x70] -_08021AC4: - adds r6, 0x1 - ldr r0, _08021B50 - cmp r6, r0 - ble _08021A8E - movs r6, 0 -_08021ACE: - lsls r0, r6, 16 - asrs r4, r0, 16 - adds r0, r4, 0 - bl sub_8098134 - lsls r0, 24 - cmp r0, 0 - beq _08021AFC - adds r0, r4, 0 - bl sub_8021B58 - adds r2, r0, 0 - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - beq _08021AFC - ldr r0, _08021B4C - ldr r1, [r0] - lsls r0, r2, 2 - adds r1, 0x30 - adds r1, r0 - movs r0, 0x1 - str r0, [r1] -_08021AFC: - adds r6, 0x1 - ldr r0, _08021B50 - cmp r6, r0 - ble _08021ACE - movs r6, 0 - ldr r4, _08021B54 -_08021B08: - movs r0, 0x58 - adds r1, r6, 0 - muls r1, r0 - ldr r0, [r4] - adds r2, r0, r1 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08021B3C - movs r1, 0x8 - ldrsh r0, [r2, r1] - bl sub_8021B58 - adds r2, r0, 0 - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - beq _08021B3C - ldr r0, _08021B4C - ldr r1, [r0] - lsls r0, r2, 2 - adds r1, 0x30 - adds r1, r0 - movs r0, 0x2 - str r0, [r1] -_08021B3C: - adds r6, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r6, r0 - ble _08021B08 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08021B4C: .4byte gUnknown_203B28C -_08021B50: .4byte 0x000001a7 -_08021B54: .4byte gRecruitedPokemonRef - thumb_func_end sub_8021A60 - - thumb_func_start sub_8021B58 -sub_8021B58: - push {r4,r5,lr} - lsls r0, 16 - asrs r0, 16 - bl GetBaseSpeciesNoUnown - lsls r0, 16 - asrs r4, r0, 16 - movs r2, 0 - ldr r0, _08021B84 - ldr r0, [r0] - ldr r1, [r0, 0x70] - cmp r2, r1 - bge _08021B90 - adds r3, r1, 0 - adds r1, r0, 0 - adds r1, 0xE -_08021B78: - movs r5, 0 - ldrsh r0, [r1, r5] - cmp r4, r0 - bne _08021B88 - adds r0, r2, 0 - b _08021B94 - .align 2, 0 -_08021B84: .4byte gUnknown_203B28C -_08021B88: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, r3 - blt _08021B78 -_08021B90: - movs r0, 0x1 - negs r0, r0 -_08021B94: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8021B58 - - thumb_func_start CreateWigglytuffShop -CreateWigglytuffShop: - push {r4-r6,lr} - adds r4, r0, 0 - bl ResetUnusedInputStruct - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r5, _08021BF8 - movs r0, 0x9C - lsls r0, 1 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r5] - movs r6, 0 - str r6, [r0, 0x14] - str r6, [r0, 0x18] - str r4, [r0] - ldr r0, _08021BFC - movs r1, 0x28 - bl CopyYellowMonsterNametoBuffer - ldr r4, _08021C00 - adds r0, r4, 0 - movs r1, 0x28 - bl CopyYellowMonsterNametoBuffer - movs r0, 0x28 - bl GetMonSpecies - adds r1, r0, 0 - subs r4, 0x50 - adds r0, r4, 0 - bl strcpy - ldr r5, [r5] - ldr r0, [r5] - cmp r0, 0x1 - bne _08021C04 - adds r0, r5, 0 - adds r0, 0xCC - str r6, [r0] - b _08021C0E - .align 2, 0 -_08021BF8: .4byte gUnknown_203B290 -_08021BFC: .4byte gUnknown_202E5D8 -_08021C00: .4byte gUnknown_202E1C8 -_08021C04: - adds r1, r5, 0 - adds r1, 0xCC - adds r0, r5, 0 - adds r0, 0xBC - str r0, [r1] -_08021C0E: - movs r0, 0x28 - bl GetDialogueSpriteDataPtr - ldr r2, _08021C58 - ldr r3, [r2] - adds r1, r3, 0 - adds r1, 0xBC - str r0, [r1] - adds r1, 0x4 - ldr r0, [r0, 0x4] - str r0, [r1] - adds r0, r3, 0 - adds r0, 0xC8 - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - adds r0, 0xC9 - strb r1, [r0] - ldr r0, [r2] - adds r0, 0xCA - strb r1, [r0] - ldr r1, [r2] - adds r2, r1, 0 - adds r2, 0xC4 - movs r0, 0x2 - strh r0, [r2] - adds r1, 0xC6 - movs r0, 0x8 - strh r0, [r1] - movs r0, 0 - bl sub_8021D44 - movs r0, 0x1 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08021C58: .4byte gUnknown_203B290 - thumb_func_end CreateWigglytuffShop - - thumb_func_start sub_8021C5C -sub_8021C5C: - push {lr} - ldr r0, _08021C74 - ldr r0, [r0] - ldr r0, [r0, 0x4] - cmp r0, 0x17 - bhi _08021D10 - lsls r0, 2 - ldr r1, _08021C78 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08021C74: .4byte gUnknown_203B290 -_08021C78: .4byte _08021C7C - .align 2, 0 -_08021C7C: - .4byte _08021CDC - .4byte _08021CDC - .4byte _08021D10 - .4byte _08021D10 - .4byte _08021D0C - .4byte _08021D10 - .4byte _08021D10 - .4byte _08021D10 - .4byte _08021D10 - .4byte _08021CE2 - .4byte _08021CE2 - .4byte _08021CE8 - .4byte _08021D10 - .4byte _08021CF4 - .4byte _08021CFA - .4byte _08021D10 - .4byte _08021D00 - .4byte _08021CEE - .4byte _08021D10 - .4byte _08021D10 - .4byte _08021D10 - .4byte _08021D10 - .4byte _08021D06 - .4byte _08021D06 -_08021CDC: - bl sub_8022460 - b _08021D14 -_08021CE2: - bl sub_8022538 - b _08021D14 -_08021CE8: - bl sub_80225C8 - b _08021D14 -_08021CEE: - bl sub_80224D4 - b _08021D14 -_08021CF4: - bl sub_80226F0 - b _08021D14 -_08021CFA: - bl sub_8022790 - b _08021D14 -_08021D00: - bl sub_8022668 - b _08021D14 -_08021D06: - bl sub_8022684 - b _08021D14 -_08021D0C: - movs r0, 0x3 - b _08021D16 -_08021D10: - bl sub_80226CC -_08021D14: - movs r0, 0 -_08021D16: - pop {r1} - bx r1 - thumb_func_end sub_8021C5C - - thumb_func_start sub_8021D1C -sub_8021D1C: - push {r4,lr} - ldr r4, _08021D40 - ldr r0, [r4] - cmp r0, 0 - beq _08021D38 - adds r0, 0xBC - ldr r0, [r0] - bl CloseFile - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_08021D38: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08021D40: .4byte gUnknown_203B290 - thumb_func_end sub_8021D1C - - thumb_func_start sub_8021D44 -sub_8021D44: - push {lr} - ldr r1, _08021D58 - ldr r1, [r1] - str r0, [r1, 0x4] - bl sub_8021D5C - bl UpdateWigglytuffDialogue - pop {r0} - bx r0 - .align 2, 0 -_08021D58: .4byte gUnknown_203B290 - thumb_func_end sub_8021D44 - - thumb_func_start sub_8021D5C -sub_8021D5C: - push {r4-r7,lr} - ldr r4, _08021D7C - ldr r0, [r4] - adds r0, 0xD0 - bl sub_8006518 - ldr r1, [r4] - ldr r0, [r1, 0x4] - cmp r0, 0x9 - blt _08021DC8 - cmp r0, 0xA - ble _08021D80 - cmp r0, 0xB - beq _08021DB0 - b _08021DC8 - .align 2, 0 -_08021D7C: .4byte gUnknown_203B290 -_08021D80: - ldr r2, _08021DA8 - adds r1, 0xD0 - adds r0, r2, 0 - ldm r0!, {r3,r5,r6} - stm r1!, {r3,r5,r6} - ldm r0!, {r3,r5,r7} - stm r1!, {r3,r5,r7} - ldr r0, [r4] - movs r6, 0x80 - lsls r6, 1 - adds r0, r6 - ldm r2!, {r1,r3,r7} - stm r0!, {r1,r3,r7} - ldm r2!, {r5-r7} - stm r0!, {r5-r7} - ldr r1, [r4] - adds r1, 0xE8 - ldr r0, _08021DAC - b _08021DB8 - .align 2, 0 -_08021DA8: .4byte gUnknown_80DC534 -_08021DAC: .4byte gUnknown_80DC564 -_08021DB0: - movs r0, 0x80 - lsls r0, 1 - adds r1, r0 - ldr r0, _08021DC4 -_08021DB8: - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - b _08021DEC - .align 2, 0 -_08021DC4: .4byte gUnknown_80DC54C -_08021DC8: - ldr r0, _08021E04 - mov r12, r0 - ldr r4, _08021E08 - movs r3, 0 - movs r2, 0x3 -_08021DD2: - mov r5, r12 - ldr r1, [r5] - adds r1, r3 - adds r1, 0xD0 - 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 _08021DD2 -_08021DEC: - bl ResetUnusedInputStruct - ldr r0, _08021E04 - ldr r0, [r0] - adds r0, 0xD0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08021E04: .4byte gUnknown_203B290 -_08021E08: .4byte gUnknown_80DC534 - thumb_func_end sub_8021D5C - - thumb_func_start UpdateWigglytuffDialogue -UpdateWigglytuffDialogue: - push {r4,lr} - sub sp, 0x20 - ldr r1, _08021E28 - ldr r0, [r1] - ldr r0, [r0, 0x4] - adds r4, r1, 0 - cmp r0, 0x1C - bls _08021E1E - b _080222B6 -_08021E1E: - lsls r0, 2 - ldr r1, _08021E2C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08021E28: .4byte gUnknown_203B290 -_08021E2C: .4byte _08021E30 - .align 2, 0 -_08021E30: - .4byte _08021EA4 - .4byte _08021EC0 - .4byte _08021F38 - .4byte _08021F50 - .4byte _080222B6 - .4byte _08021F78 - .4byte _08021F90 - .4byte _08021F08 - .4byte _08021F20 - .4byte _08021FD8 - .4byte _08021FE2 - .4byte _08021FF0 - .4byte _0802208E - .4byte _080220B8 - .4byte _080220D8 - .4byte _080220EA - .4byte _08022080 - .4byte _08022024 - .4byte _08021FA8 - .4byte _08021FC0 - .4byte _08022138 - .4byte _08022150 - .4byte _08022168 - .4byte _08022176 - .4byte _0802217E - .4byte _08022238 - .4byte _08022250 - .4byte _08022268 - .4byte _08022294 -_08021EA4: - bl sub_80222C8 - ldr r2, _08021EB8 - ldr r0, _08021EBC - ldr r4, [r0] - ldr r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - b _08021ED4 - .align 2, 0 -_08021EB8: .4byte gWigglytuffDialogue -_08021EBC: .4byte gUnknown_203B290 -_08021EC0: - bl sub_80222C8 - ldr r2, _08021F00 - ldr r0, _08021F04 - ldr r4, [r0] - ldr r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x4 -_08021ED4: - adds r0, r2 - ldr r0, [r0] - ldr r2, [r4, 0x14] - adds r3, r4, 0 - adds r3, 0x1C - adds r1, r4, 0 - adds r1, 0x5C - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - adds r1, r4, 0 - adds r1, 0xCC - ldr r1, [r1] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - bl sub_8014248 - b _080222B6 - .align 2, 0 -_08021F00: .4byte gWigglytuffDialogue -_08021F04: .4byte gUnknown_203B290 -_08021F08: - ldr r3, [r4] - movs r0, 0x9 - str r0, [r3, 0x8] - ldr r2, _08021F1C - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0xC - b _0802227A - .align 2, 0 -_08021F1C: .4byte gWigglytuffDialogue -_08021F20: - ldr r3, [r4] - movs r0, 0xA - str r0, [r3, 0x8] - ldr r2, _08021F34 - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x10 - b _0802227A - .align 2, 0 -_08021F34: .4byte gWigglytuffDialogue -_08021F38: - ldr r3, [r4] - movs r0, 0x1 - str r0, [r3, 0x8] - ldr r2, _08021F4C - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x4C - b _0802227A - .align 2, 0 -_08021F4C: .4byte gWigglytuffDialogue -_08021F50: - ldr r3, [r4] - movs r0, 0x4 - str r0, [r3, 0x8] - ldr r2, _08021F70 - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x8 - adds r0, r2 - ldr r0, [r0] - adds r3, 0xCC - ldr r2, [r3] - ldr r3, _08021F74 - b _08022284 - .align 2, 0 -_08021F70: .4byte gWigglytuffDialogue -_08021F74: .4byte 0x0000030d -_08021F78: - ldr r3, [r4] - movs r0, 0x3 - str r0, [r3, 0x8] - ldr r2, _08021F8C - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x20 - b _0802227A - .align 2, 0 -_08021F8C: .4byte gWigglytuffDialogue -_08021F90: - ldr r3, [r4] - movs r0, 0xA - str r0, [r3, 0x8] - ldr r2, _08021FA4 - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x24 - b _0802227A - .align 2, 0 -_08021FA4: .4byte gWigglytuffDialogue -_08021FA8: - ldr r3, [r4] - movs r0, 0x3 - str r0, [r3, 0x8] - ldr r2, _08021FBC - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x28 - b _0802227A - .align 2, 0 -_08021FBC: .4byte gWigglytuffDialogue -_08021FC0: - ldr r3, [r4] - movs r0, 0xA - str r0, [r3, 0x8] - ldr r2, _08021FD4 - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x2C - b _0802227A - .align 2, 0 -_08021FD4: .4byte gWigglytuffDialogue -_08021FD8: - movs r0, 0x2 - movs r1, 0x3 - bl sub_80211AC - b _08021FE8 -_08021FE2: - movs r0, 0x1 - bl sub_8021354 -_08021FE8: - movs r0, 0x1 - bl DrawTeamMoneyBox - b _080222B6 -_08021FF0: - bl sub_8021494 - movs r0, 0x1 - bl DrawTeamMoneyBox - bl sub_8022380 - ldr r0, _08022020 - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x6C - adds r1, r2, 0 - adds r1, 0x1C - adds r3, r2, 0 - adds r3, 0x5C - ldr r2, [r2, 0x18] - str r2, [sp] - movs r2, 0x2 - str r2, [sp, 0x4] - movs r2, 0 - bl sub_8012D60 - b _080222B6 - .align 2, 0 -_08022020: .4byte gUnknown_203B290 -_08022024: - bl sub_8022420 - ldr r0, _08022070 - ldr r4, _08022074 - ldr r1, [r4] - ldrb r1, [r1, 0x10] - movs r2, 0 - bl sub_8092578 - ldr r1, _08022078 - ldr r4, [r4] - ldr r0, [r4, 0xC] - str r0, [r1] - ldr r2, _0802207C - ldr r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x14 - adds r0, r2 - ldr r0, [r0] - adds r3, r4, 0 - adds r3, 0x1C - movs r2, 0 - str r2, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - str r2, [sp, 0x8] - adds r4, 0xCC - ldr r1, [r4] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - movs r2, 0x5 - bl sub_8014248 - b _080222B6 - .align 2, 0 -_08022070: .4byte gUnknown_202E628 -_08022074: .4byte gUnknown_203B290 -_08022078: .4byte gUnknown_202DE30 -_0802207C: .4byte gWigglytuffDialogue -_08022080: - ldr r0, [r4] - ldrb r0, [r0, 0x10] - movs r1, 0 - movs r2, 0x2 - bl sub_8021774 - b _080222B6 -_0802208E: - ldr r1, [r4] - movs r0, 0xD - str r0, [r1, 0x8] - ldr r0, _080220B0 - ldrb r1, [r1, 0x10] - movs r2, 0 - bl sub_8092578 - ldr r2, _080220B4 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x18 - b _0802227A - .align 2, 0 -_080220B0: .4byte gUnknown_202E628 -_080220B4: .4byte gWigglytuffDialogue -_080220B8: - ldr r1, [r4] - movs r0, 0xE - str r0, [r1, 0x8] - ldr r0, _080220D4 - bl PlaySound - ldr r0, [r4] - movs r1, 0x98 - lsls r1, 1 - adds r0, r1 - movs r1, 0x1 - str r1, [r0] - b _080222B6 - .align 2, 0 -_080220D4: .4byte 0x0000025b -_080220D8: - ldr r0, [r4] - movs r1, 0xF - str r1, [r0, 0x8] - movs r1, 0x9A - lsls r1, 1 - adds r0, r1 - movs r1, 0x1E - str r1, [r0] - b _080222B6 -_080220EA: - movs r0, 0x2 - bl sub_8021700 - lsls r0, 24 - cmp r0, 0 - beq _08022108 - bl sub_80213A0 - ldr r0, _08022104 - ldr r1, [r0] - movs r0, 0x12 - b _0802210E - .align 2, 0 -_08022104: .4byte gUnknown_203B290 -_08022108: - ldr r0, _08022130 - ldr r1, [r0] - movs r0, 0x8 -_0802210E: - str r0, [r1, 0x8] - movs r0, 0xCE - bl PlaySound - ldr r3, _08022134 - ldr r0, _08022130 - ldr r2, [r0] - ldr r1, [r2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r3, 0x1C - adds r0, r3 - ldr r0, [r0] - adds r2, 0xCC - ldr r2, [r2] - b _08022282 - .align 2, 0 -_08022130: .4byte gUnknown_203B290 -_08022134: .4byte gWigglytuffDialogue -_08022138: - ldr r3, [r4] - movs r0, 0x16 - str r0, [r3, 0x8] - ldr r2, _0802214C - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x30 - b _0802227A - .align 2, 0 -_0802214C: .4byte gWigglytuffDialogue -_08022150: - ldr r3, [r4] - movs r0, 0x17 - str r0, [r3, 0x8] - ldr r2, _08022164 - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x34 - b _0802227A - .align 2, 0 -_08022164: .4byte gWigglytuffDialogue -_08022168: - movs r0, 0 - movs r1, 0x3 - movs r2, 0 - movs r3, 0xA - bl sub_8023144 - b _080222B6 -_08022176: - movs r0, 0x1 - bl sub_8023354 - b _080222B6 -_0802217E: - ldr r4, _080221A0 - ldr r0, [r4] - ldrb r0, [r0, 0x10] - add r1, sp, 0x14 - movs r2, 0 - movs r3, 0 - bl sub_8092638 - add r0, sp, 0x14 - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _080221A4 - ldr r1, [r4] - movs r0, 0x19 - str r0, [r1, 0x8] - b _080221FA - .align 2, 0 -_080221A0: .4byte gUnknown_203B290 -_080221A4: - ldr r0, [r4] - ldrb r0, [r0, 0x10] - bl GetFriendAreaUnlockCondition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - beq _080221E0 - cmp r0, 0x2 - bgt _080221BE - cmp r0, 0x1 - beq _080221C4 - b _080221F0 -_080221BE: - cmp r0, 0x3 - beq _080221E8 - b _080221F0 -_080221C4: - movs r0, 0x6 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - beq _080221D8 - ldr r1, [r4] - movs r0, 0x15 - str r0, [r1, 0x8] - b _080221FA -_080221D8: - ldr r1, [r4] - movs r0, 0x1A - str r0, [r1, 0x8] - b _080221FA -_080221E0: - ldr r1, [r4] - movs r0, 0x1B - str r0, [r1, 0x8] - b _080221FA -_080221E8: - ldr r1, [r4] - movs r0, 0x1C - str r0, [r1, 0x8] - b _080221FA -_080221F0: - ldr r2, _08022228 - ldr r1, [r2] - movs r0, 0x15 - str r0, [r1, 0x8] - adds r4, r2, 0 -_080221FA: - ldr r0, [r4] - movs r1, 0x12 - ldrsh r0, [r0, r1] - bl GetMonSpecies - adds r1, r0, 0 - ldr r0, _0802222C - bl strcpy - ldr r0, _08022230 - ldr r1, [r4] - ldrb r1, [r1, 0x10] - movs r2, 0 - bl sub_8092578 - ldr r2, _08022234 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x38 - b _0802227A - .align 2, 0 -_08022228: .4byte gUnknown_203B290 -_0802222C: .4byte gAvailablePokemonNames -_08022230: .4byte gUnknown_202E628 -_08022234: .4byte gWigglytuffDialogue -_08022238: - ldr r3, [r4] - movs r0, 0x15 - str r0, [r3, 0x8] - ldr r2, _0802224C - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x3C - b _0802227A - .align 2, 0 -_0802224C: .4byte gWigglytuffDialogue -_08022250: - ldr r3, [r4] - movs r0, 0x15 - str r0, [r3, 0x8] - ldr r2, _08022264 - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x40 - b _0802227A - .align 2, 0 -_08022264: .4byte gWigglytuffDialogue -_08022268: - ldr r3, [r4] - movs r0, 0x15 - str r0, [r3, 0x8] - ldr r2, _0802228C - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x44 -_0802227A: - adds r0, r2 - ldr r0, [r0] - adds r3, 0xCC - ldr r2, [r3] -_08022282: - ldr r3, _08022290 -_08022284: - movs r1, 0 - bl sub_80141B4 - b _080222B6 - .align 2, 0 -_0802228C: .4byte gWigglytuffDialogue -_08022290: .4byte 0x0000010d -_08022294: - ldr r3, [r4] - movs r0, 0x15 - str r0, [r3, 0x8] - ldr r2, _080222C0 - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x48 - adds r0, r2 - ldr r0, [r0] - adds r3, 0xCC - ldr r2, [r3] - ldr r3, _080222C4 - movs r1, 0 - bl sub_80141B4 -_080222B6: - add sp, 0x20 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080222C0: .4byte gWigglytuffDialogue -_080222C4: .4byte 0x0000010d - thumb_func_end UpdateWigglytuffDialogue - - thumb_func_start sub_80222C8 -sub_80222C8: - push {r4-r7,lr} - ldr r4, _08022344 - ldr r0, [r4] - adds r0, 0x5C - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r1, [r4] - movs r5, 0 - ldr r0, _08022348 - ldr r0, [r0] - str r0, [r1, 0x1C] - adds r3, r1, 0 - adds r3, 0x20 - movs r0, 0x2 - str r0, [r1, 0x20] - movs r2, 0x1 - ldr r0, _0802234C - ldr r0, [r0] - str r0, [r1, 0x24] - movs r0, 0x3 - str r0, [r1, 0x28] - ldr r0, _08022350 - ldr r0, [r0] - str r0, [r1, 0x2C] - movs r0, 0x4 - str r0, [r1, 0x30] - ldr r0, _08022354 - ldr r0, [r0] - str r0, [r1, 0x34] - str r2, [r1, 0x38] - movs r7, 0x4 - str r5, [r1, 0x3C] - str r2, [r3, 0x20] - adds r6, r1, 0 - adds r2, r6, 0 - adds r2, 0x5C -_08022314: - ldrh r0, [r2] - cmp r0, 0 - bne _08022322 - ldr r1, [r3] - ldr r0, [r6, 0x14] - cmp r1, r0 - beq _0802237A -_08022322: - adds r3, 0x8 - adds r2, 0x2 - adds r5, 0x1 - cmp r5, r7 - blt _08022314 - movs r5, 0 - cmp r5, r7 - bge _0802237A - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x5C - ldrh r0, [r0] - cmp r0, 0 - bne _08022358 - ldr r0, [r1, 0x20] - str r0, [r1, 0x14] - b _0802237A - .align 2, 0 -_08022344: .4byte gUnknown_203B290 -_08022348: .4byte gUnknown_80D4978 -_0802234C: .4byte gWigglytuffCheck -_08022350: .4byte gUnknown_80D4970 -_08022354: .4byte gUnknown_80D4934 -_08022358: - adds r5, 0x1 - cmp r5, r7 - bge _0802237A - ldr r2, [r4] - lsls r0, r5, 1 - adds r1, r2, 0 - adds r1, 0x5C - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _08022358 - lsls r0, r5, 3 - adds r1, r2, 0 - adds r1, 0x20 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x14] -_0802237A: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80222C8 - - thumb_func_start sub_8022380 -sub_8022380: - push {r4-r7,lr} - ldr r4, _080223EC - ldr r0, [r4] - adds r0, 0x5C - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r3, [r4] - movs r2, 0 - ldr r0, _080223F0 - ldr r0, [r0] - str r0, [r3, 0x1C] - movs r0, 0x2 - str r0, [r3, 0x20] - movs r1, 0x1 - ldr r0, _080223F4 - ldr r0, [r0] - str r0, [r3, 0x24] - movs r0, 0x4 - str r0, [r3, 0x28] - movs r6, 0x2 - str r2, [r3, 0x2C] - str r1, [r3, 0x30] - movs r5, 0 - mov r12, r3 - adds r3, 0x20 - mov r2, r12 - adds r2, 0x5C -_080223BA: - ldrh r0, [r2] - cmp r0, 0 - bne _080223CA - ldr r1, [r3] - mov r7, r12 - ldr r0, [r7, 0x18] - cmp r1, r0 - beq _0802241A -_080223CA: - adds r3, 0x8 - adds r2, 0x2 - adds r5, 0x1 - cmp r5, r6 - blt _080223BA - movs r5, 0 - cmp r5, r6 - bge _0802241A - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x5C - ldrh r0, [r0] - cmp r0, 0 - bne _080223F8 - ldr r0, [r1, 0x20] - str r0, [r1, 0x18] - b _0802241A - .align 2, 0 -_080223EC: .4byte gUnknown_203B290 -_080223F0: .4byte gUnknown_80D4978 -_080223F4: .4byte gUnknown_80D4970 -_080223F8: - adds r5, 0x1 - cmp r5, r6 - bge _0802241A - ldr r2, [r4] - lsls r0, r5, 1 - adds r1, r2, 0 - adds r1, 0x5C - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _080223F8 - lsls r0, r5, 3 - adds r1, r2, 0 - adds r1, 0x20 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x18] -_0802241A: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8022380 - - thumb_func_start sub_8022420 -sub_8022420: - push {r4,lr} - ldr r4, _08022454 - ldr r0, [r4] - adds r0, 0x5C - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r1, [r4] - movs r3, 0 - ldr r0, _08022458 - ldr r0, [r0] - str r0, [r1, 0x1C] - movs r0, 0x5 - str r0, [r1, 0x20] - movs r2, 0x1 - ldr r0, _0802245C - ldr r0, [r0] - str r0, [r1, 0x24] - movs r0, 0x6 - str r0, [r1, 0x28] - str r3, [r1, 0x2C] - str r2, [r1, 0x30] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08022454: .4byte gUnknown_203B290 -_08022458: .4byte gUnknown_80D4920 -_0802245C: .4byte gUnknown_80D4928 - thumb_func_end sub_8022420 - - thumb_func_start sub_8022460 -sub_8022460: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _080224CC - ldr r1, [sp] - cmp r1, 0x1 - beq _0802247A - ldr r0, _0802248C - ldr r0, [r0] - str r1, [r0, 0x14] -_0802247A: - ldr r0, [sp] - cmp r0, 0x2 - beq _0802249A - cmp r0, 0x2 - bgt _08022490 - cmp r0, 0x1 - beq _080224C6 - b _080224CC - .align 2, 0 -_0802248C: .4byte gUnknown_203B290 -_08022490: - cmp r0, 0x3 - beq _080224B6 - cmp r0, 0x4 - beq _080224BE - b _080224CC -_0802249A: - movs r0, 0x2 - bl sub_8021700 - lsls r0, 24 - cmp r0, 0 - beq _080224AE - movs r0, 0x5 - bl sub_8021D44 - b _080224CC -_080224AE: - movs r0, 0x7 - bl sub_8021D44 - b _080224CC -_080224B6: - movs r0, 0x14 - bl sub_8021D44 - b _080224CC -_080224BE: - movs r0, 0x2 - bl sub_8021D44 - b _080224CC -_080224C6: - movs r0, 0x3 - bl sub_8021D44 -_080224CC: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_8022460 - - thumb_func_start sub_80224D4 -sub_80224D4: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _08022532 - ldr r0, [sp] - cmp r0, 0x5 - beq _080224F8 - cmp r0, 0x5 - bgt _080224F2 - cmp r0, 0x1 - beq _0802252C - b _08022532 -_080224F2: - cmp r0, 0x6 - beq _0802252C - b _08022532 -_080224F8: - ldr r0, _08022524 - ldr r2, [r0] - movs r0, 0x98 - lsls r0, 2 - adds r2, r0 - ldr r0, _08022528 - ldr r3, [r0] - ldr r0, [r2] - ldr r1, [r3, 0xC] - subs r0, r1 - str r0, [r2] - ldrb r0, [r3, 0x10] - bl UnlockFriendArea - movs r0, 0xA6 - lsls r0, 1 - bl PlaySound - movs r0, 0xC - bl sub_8021D44 - b _08022532 - .align 2, 0 -_08022524: .4byte gTeamInventory_203B460 -_08022528: .4byte gUnknown_203B290 -_0802252C: - movs r0, 0xA - bl sub_8021D44 -_08022532: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_80224D4 - - thumb_func_start sub_8022538 -sub_8022538: - push {r4,lr} - movs r0, 0x1 - bl sub_8021274 - cmp r0, 0x4 - bhi _080225BC - lsls r0, 2 - ldr r1, _08022550 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08022550: .4byte _08022554 - .align 2, 0 -_08022554: - .4byte _080225C2 - .4byte _080225BC - .4byte _080225B0 - .4byte _08022568 - .4byte _0802258C -_08022568: - bl sub_802132C - ldr r4, _08022588 - ldr r1, [r4] - strb r0, [r1, 0x10] - ldr r0, [r4] - ldrb r0, [r0, 0x10] - bl GetFriendAreaPrice - ldr r1, [r4] - str r0, [r1, 0xC] - movs r0, 0xB - bl sub_8021D44 - b _080225C2 - .align 2, 0 -_08022588: .4byte gUnknown_203B290 -_0802258C: - bl sub_802132C - ldr r4, _080225AC - ldr r1, [r4] - strb r0, [r1, 0x10] - ldr r0, [r4] - ldrb r0, [r0, 0x10] - bl GetFriendAreaPrice - ldr r1, [r4] - str r0, [r1, 0xC] - movs r0, 0x10 - bl sub_8021D44 - b _080225C2 - .align 2, 0 -_080225AC: .4byte gUnknown_203B290 -_080225B0: - bl sub_80213A0 - movs r0, 0x1 - bl sub_8021D44 - b _080225C2 -_080225BC: - movs r0, 0x1 - bl DrawTeamMoneyBox -_080225C2: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8022538 - - thumb_func_start sub_80225C8 -sub_80225C8: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_8021274 - ldr r4, _08022608 - ldr r0, [r4] - adds r0, 0x6C - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _080225F8 - ldr r0, [r4] - adds r0, 0x6C - mov r1, sp - bl sub_8013114 - ldr r1, [sp] - cmp r1, 0x1 - beq _080225F8 - ldr r0, [r4] - str r1, [r0, 0x18] -_080225F8: - ldr r0, [sp] - cmp r0, 0x2 - beq _08022612 - cmp r0, 0x2 - bgt _0802260C - cmp r0, 0x1 - beq _08022658 - b _0802265E - .align 2, 0 -_08022608: .4byte gUnknown_203B290 -_0802260C: - cmp r0, 0x4 - beq _08022650 - b _0802265E -_08022612: - ldr r0, _0802262C - ldr r0, [r0] - movs r1, 0x98 - lsls r1, 2 - adds r0, r1 - ldr r1, [r0] - cmp r1, 0 - bne _08022630 - movs r0, 0x6 - bl sub_8021D44 - b _0802265E - .align 2, 0 -_0802262C: .4byte gTeamInventory_203B460 -_08022630: - ldr r0, _08022644 - ldr r0, [r0] - ldr r0, [r0, 0xC] - cmp r0, r1 - ble _08022648 - movs r0, 0x13 - bl sub_8021D44 - b _0802265E - .align 2, 0 -_08022644: .4byte gUnknown_203B290 -_08022648: - movs r0, 0x11 - bl sub_8021D44 - b _0802265E -_08022650: - movs r0, 0x10 - bl sub_8021D44 - b _0802265E -_08022658: - movs r0, 0xA - bl sub_8021D44 -_0802265E: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80225C8 - - thumb_func_start sub_8022668 -sub_8022668: - push {lr} - bl sub_80217EC - cmp r0, 0x1 - bls _08022680 - cmp r0, 0x3 - bhi _08022680 - bl sub_8021830 - movs r0, 0xA - bl sub_8021D44 -_08022680: - pop {r0} - bx r0 - thumb_func_end sub_8022668 - - thumb_func_start sub_8022684 -sub_8022684: - push {r4,lr} - movs r0, 0x1 - bl sub_8023278 - cmp r0, 0x2 - beq _080226BC - cmp r0, 0x2 - bcc _080226C6 - cmp r0, 0x3 - bne _080226C6 - bl sub_802331C - ldr r4, _080226B8 - ldr r1, [r4] - strh r0, [r1, 0x12] - movs r2, 0x12 - ldrsh r0, [r1, r2] - bl GetFriendArea - ldr r1, [r4] - strb r0, [r1, 0x10] - movs r0, 0x18 - bl sub_8021D44 - b _080226C6 - .align 2, 0 -_080226B8: .4byte gUnknown_203B290 -_080226BC: - bl sub_80233A0 - movs r0, 0x1 - bl sub_8021D44 -_080226C6: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8022684 - - thumb_func_start sub_80226CC -sub_80226CC: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _080226E4 - ldr r0, _080226EC - ldr r0, [r0] - ldr r0, [r0, 0x8] - bl sub_8021D44 -_080226E4: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080226EC: .4byte gUnknown_203B290 - thumb_func_end sub_80226CC - - thumb_func_start sub_80226F0 -sub_80226F0: - push {r4,lr} - sub sp, 0x4 - mov r1, sp - movs r2, 0 - movs r0, 0x80 - strb r0, [r1] - strb r0, [r1, 0x1] - movs r0, 0x10 - strb r0, [r1, 0x2] - strb r2, [r1, 0x3] - bl sub_8099B94 - lsls r0, 24 - cmp r0, 0 - bne _08022782 - ldr r0, _08022728 - ldr r0, [r0] - movs r1, 0x98 - lsls r1, 1 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0x4 - bhi _0802275C - lsls r0, 2 - ldr r1, _0802272C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08022728: .4byte gUnknown_203B290 -_0802272C: .4byte _08022730 - .align 2, 0 -_08022730: - .4byte _0802275C - .4byte _08022744 - .4byte _08022750 - .4byte _08022744 - .4byte _08022750 -_08022744: - movs r0, 0x5 - movs r1, 0x2 - ldr r2, [sp] - bl sub_8099AFC - b _08022772 -_08022750: - movs r0, 0x5 - movs r1, 0x2 - ldr r2, [sp] - bl sub_8099A5C - b _08022772 -_0802275C: - ldr r4, _0802278C - ldr r0, [r4] - ldr r0, [r0, 0x8] - bl sub_8021D44 - ldr r0, [r4] - movs r1, 0x98 - lsls r1, 1 - adds r0, r1 - movs r1, 0 - str r1, [r0] -_08022772: - ldr r0, _0802278C - ldr r1, [r0] - movs r0, 0x98 - lsls r0, 1 - adds r1, r0 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_08022782: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802278C: .4byte gUnknown_203B290 - thumb_func_end sub_80226F0 - - thumb_func_start sub_8022790 -sub_8022790: - push {lr} - ldr r0, _080227A8 - ldr r2, [r0] - movs r0, 0x9A - lsls r0, 1 - adds r1, r2, r0 - ldr r0, [r1] - cmp r0, 0 - beq _080227AC - subs r0, 0x1 - str r0, [r1] - b _080227B2 - .align 2, 0 -_080227A8: .4byte gUnknown_203B290 -_080227AC: - ldr r0, [r2, 0x8] - bl sub_8021D44 -_080227B2: - pop {r0} - bx r0 - thumb_func_end sub_8022790 - - thumb_func_start sub_80227B8 -sub_80227B8: - push {r4,r5,lr} - adds r5, r0, 0 - bl ResetUnusedInputStruct - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r4, _08022810 - movs r0, 0xD4 - lsls r0, 1 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r4] - adds r2, r0, 0 - adds r2, 0xF4 - movs r1, 0 - str r1, [r2] - str r5, [r0, 0x48] - cmp r5, 0 - beq _08022820 - ldr r4, _08022814 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x7 - bl PrintColoredPokeNameToBuffer - adds r4, 0x50 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x6 - bl PrintColoredPokeNameToBuffer - bl HasGummiItem - lsls r0, 24 - cmp r0, 0 - beq _08022818 - movs r0, 0 - bl sub_8022924 - b _08022856 - .align 2, 0 -_08022810: .4byte gUnknown_203B294 -_08022814: .4byte gAvailablePokemonNames -_08022818: - movs r0, 0x11 - bl sub_8022924 - b _08022856 -_08022820: - ldr r4, _08022848 - ldr r5, _0802284C - adds r0, r4, 0 - adds r1, r5, 0 - bl strcpy - adds r4, 0x50 - adds r0, r4, 0 - adds r1, r5, 0 - bl strcpy - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - bne _08022850 - movs r0, 0x12 - bl sub_8022924 - b _08022856 - .align 2, 0 -_08022848: .4byte gAvailablePokemonNames -_0802284C: .4byte gUnknown_80DC5EC -_08022850: - movs r0, 0 - bl sub_8022924 -_08022856: - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80227B8 - - thumb_func_start sub_8022860 -sub_8022860: - push {lr} - ldr r0, _08022878 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0x16 - bhi _080228FE - lsls r0, 2 - ldr r1, _0802287C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08022878: .4byte gUnknown_203B294 -_0802287C: .4byte _08022880 - .align 2, 0 -_08022880: - .4byte _080228DC - .4byte _080228DC - .4byte _080228E2 - .4byte _080228E8 - .4byte _080228EE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228F4 - .4byte _080228FA -_080228DC: - bl sub_8022E78 - b _08022902 -_080228E2: - bl sub_8022EF4 - b _08022902 -_080228E8: - bl sub_8023068 - b _08022902 -_080228EE: - bl sub_80230E8 - b _08022902 -_080228F4: - bl sub_8023104 - b _08022902 -_080228FA: - movs r0, 0x3 - b _08022904 -_080228FE: - bl sub_8023120 -_08022902: - movs r0, 0 -_08022904: - pop {r1} - bx r1 - thumb_func_end sub_8022860 - - thumb_func_start sub_8022908 -sub_8022908: - push {r4,lr} - ldr r4, _08022920 - ldr r0, [r4] - cmp r0, 0 - beq _0802291A - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0802291A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08022920: .4byte gUnknown_203B294 - thumb_func_end sub_8022908 - - thumb_func_start sub_8022924 -sub_8022924: - push {lr} - ldr r1, _08022938 - ldr r1, [r1] - str r0, [r1] - bl sub_802293C - bl sub_8022A10 - pop {r0} - bx r0 - .align 2, 0 -_08022938: .4byte gUnknown_203B294 - thumb_func_end sub_8022924 - - thumb_func_start sub_802293C -sub_802293C: - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r4, _08022964 - ldr r0, [r4] - movs r1, 0xA4 - lsls r1, 1 - adds r0, r1 - bl sub_8006518 - ldr r1, [r4] - ldr r0, [r1] - cmp r0, 0x3 - beq _080229A4 - cmp r0, 0x3 - bgt _08022968 - cmp r0, 0x2 - beq _08022972 - b _080229BC - .align 2, 0 -_08022964: .4byte gUnknown_203B294 -_08022968: - cmp r0, 0x10 - bgt _080229BC - cmp r0, 0xA - blt _080229BC - b _080229E6 -_08022972: - bl sub_8022D2C - ldr r2, [r4] - movs r0, 0xBC - lsls r0, 1 - adds r2, r0 - ldr r1, _080229A0 - 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 - adds r1, 0xF8 - bl sub_8012CAC - ldr r0, [r4] - movs r6, 0xC2 - lsls r6, 1 - adds r0, r6 - movs r1, 0x6 - strh r1, [r0] - b _080229E6 - .align 2, 0 -_080229A0: .4byte gUnknown_80DC5BC -_080229A4: - movs r7, 0xB0 - lsls r7, 1 - adds r1, r7 - ldr r0, _080229B8 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - b _080229E6 - .align 2, 0 -_080229B8: .4byte gUnknown_80DC5D4 -_080229BC: - ldr r0, _08022A08 - mov r12, r0 - movs r1, 0xA4 - lsls r1, 1 - mov r8, r1 - ldr r4, _08022A0C - movs r3, 0 - movs r2, 0x3 -_080229CC: - mov r5, r12 - ldr r1, [r5] - adds r1, r3 - add r1, r8 - 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 _080229CC -_080229E6: - bl ResetUnusedInputStruct - ldr r0, _08022A08 - ldr r0, [r0] - movs r6, 0xA4 - lsls r6, 1 - adds r0, r6 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08022A08: .4byte gUnknown_203B294 -_08022A0C: .4byte gUnknown_80DC5A4 - thumb_func_end sub_802293C - - thumb_func_start sub_8022A10 -sub_8022A10: - push {r4-r7,lr} - sub sp, 0x8 - ldr r1, _08022A2C - ldr r0, [r1] - ldr r0, [r0] - adds r4, r1, 0 - cmp r0, 0x16 - bls _08022A22 - b _08022D1E -_08022A22: - lsls r0, 2 - ldr r1, _08022A30 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08022A2C: .4byte gUnknown_203B294 -_08022A30: .4byte _08022A34 - .align 2, 0 -_08022A34: - .4byte _08022A90 - .4byte _08022AAA - .4byte _08022AB2 - .4byte _08022AE0 - .4byte _08022B10 - .4byte _08022B1A - .4byte _08022B24 - .4byte _08022B34 - .4byte _08022B44 - .4byte _08022B54 - .4byte _08022B64 - .4byte _08022C28 - .4byte _08022CA0 - .4byte _08022CA8 - .4byte _08022CB0 - .4byte _08022CB8 - .4byte _08022CC0 - .4byte _08022CC8 - .4byte _08022CD8 - .4byte _08022CE8 - .4byte _08022CF8 - .4byte _08022D14 - .4byte _08022D1E -_08022A90: - ldr r0, [r4] - ldr r0, [r0, 0x48] - cmp r0, 0 - beq _08022A9C - movs r0, 0x5 - b _08022A9E -_08022A9C: - movs r0, 0x1 -_08022A9E: - movs r1, 0x3 - movs r2, 0 - movs r3, 0xA - bl sub_801A5D8 - b _08022D22 -_08022AAA: - movs r0, 0x1 - bl sub_801A8D0 - b _08022D22 -_08022AB2: - bl sub_801A9E0 - ldr r0, _08022ADC - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x54 - adds r1, r2, 0 - adds r1, 0xF8 - movs r4, 0x9C - lsls r4, 1 - adds r3, r2, r4 - adds r2, 0xF4 - ldr r2, [r2] - str r2, [sp] - movs r2, 0x2 - str r2, [sp, 0x4] - movs r2, 0 - bl sub_8012D60 - b _08022D22 - .align 2, 0 -_08022ADC: .4byte gUnknown_203B294 -_08022AE0: - bl sub_801A9E0 - ldr r4, _08022B08 - ldr r0, [r4] - adds r0, 0x54 - movs r1, 0 - bl sub_8012EA4 - ldr r0, [r4] - adds r0, 0xA4 - ldr r1, _08022B0C - movs r2, 0x3 - str r2, [sp] - movs r2, 0x1 - str r2, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_8012D60 - b _08022D22 - .align 2, 0 -_08022B08: .4byte gUnknown_203B294 -_08022B0C: .4byte gUnknown_80DC584 -_08022B10: - ldr r0, [r4] - adds r0, 0x50 - bl sub_801B3C0 - b _08022D22 -_08022B1A: - ldr r0, _08022B20 - b _08022D00 - .align 2, 0 -_08022B20: .4byte gUnknown_80DC5F4 -_08022B24: - ldr r0, _08022B2C - ldr r3, _08022B30 - b _08022D02 - .align 2, 0 -_08022B2C: .4byte gUnknown_80DC618 -_08022B30: .4byte 0x00000101 -_08022B34: - ldr r0, _08022B3C - ldr r3, _08022B40 - b _08022D02 - .align 2, 0 -_08022B3C: .4byte gUnknown_80DC674 -_08022B40: .4byte 0x00000101 -_08022B44: - ldr r0, _08022B4C - ldr r3, _08022B50 - b _08022D02 - .align 2, 0 -_08022B4C: .4byte gUnknown_80DC6CC -_08022B50: .4byte 0x00000101 -_08022B54: - ldr r0, _08022B5C - ldr r3, _08022B60 - b _08022D02 - .align 2, 0 -_08022B5C: .4byte gUnknown_80DC728 -_08022B60: .4byte 0x00000101 -_08022B64: - ldr r7, _08022B68 - b _08022B78 - .align 2, 0 -_08022B68: .4byte gUnknown_203B294 -_08022B6C: - ldr r1, [r4] - ldr r0, [r1, 0x40] - adds r0, 0x1 - str r0, [r1, 0x40] - cmp r0, 0x17 - bgt _08022C10 -_08022B78: - movs r5, 0 - movs r6, 0 - movs r3, 0 - ldr r2, [r4] - ldr r0, [r2, 0x38] - cmp r5, r0 - bge _08022BA4 - ldrb r1, [r2, 0x8] - b _08022B9C -_08022B8A: - adds r3, 0x1 - ldr r2, [r4] - ldr r0, [r2, 0x38] - cmp r3, r0 - bge _08022BA4 - adds r0, r2, 0 - adds r0, 0x8 - adds r0, r3 - ldrb r1, [r0] -_08022B9C: - ldr r0, [r2, 0x40] - cmp r1, r0 - bne _08022B8A - movs r5, 0x1 -_08022BA4: - movs r3, 0 - ldr r2, [r4] - ldr r0, [r2, 0x3C] - cmp r3, r0 - bge _08022BCE - adds r0, r2, 0 - adds r0, 0x20 - b _08022BC4 -_08022BB4: - adds r3, 0x1 - ldr r2, [r4] - ldr r0, [r2, 0x3C] - cmp r3, r0 - bge _08022BCE - adds r0, r2, 0 - adds r0, 0x20 - adds r0, r3 -_08022BC4: - ldrb r1, [r0] - ldr r0, [r2, 0x40] - cmp r1, r0 - bne _08022BB4 - movs r6, 0x1 -_08022BCE: - cmp r5, r6 - beq _08022B6C - ldr r1, [r7] - movs r0, 0xA - str r0, [r1, 0x4] - ldr r0, [r1, 0x40] - lsls r0, 24 - lsrs r0, 24 - bl GetIQSkillName - adds r1, r0, 0 - ldr r0, _08022C18 - bl strcpy - movs r0, 0xCB - bl PlaySound - ldr r0, _08022C1C - movs r1, 0 - movs r2, 0 - ldr r3, _08022C20 - bl sub_80141B4 - ldr r1, [r7] - ldr r0, [r1, 0x40] - adds r0, 0x1 - str r0, [r1, 0x40] - ldr r0, _08022C24 - ldr r0, [r0] - ldr r0, [r0, 0x40] - cmp r0, 0x17 - bgt _08022C10 - b _08022D22 -_08022C10: - movs r0, 0xB - bl sub_8022924 - b _08022D22 - .align 2, 0 -_08022C18: .4byte gUnknown_202DEA8 -_08022C1C: .4byte gUnknown_80DC788 -_08022C20: .4byte 0x00000101 -_08022C24: .4byte gUnknown_203B294 -_08022C28: - ldr r1, [r4] - movs r0, 0x16 - str r0, [r1, 0x4] - bl nullsub_104 - ldr r0, [r4] - adds r0, 0x46 - ldrh r0, [r0] - cmp r0, 0x8 - bhi _08022C98 - lsls r0, 2 - ldr r1, _08022C48 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08022C48: .4byte _08022C4C - .align 2, 0 -_08022C4C: - .4byte _08022C70 - .4byte _08022C78 - .4byte _08022C80 - .4byte _08022C98 - .4byte _08022C88 - .4byte _08022C98 - .4byte _08022C98 - .4byte _08022C98 - .4byte _08022C90 -_08022C70: - movs r0, 0x16 - bl sub_8022924 - b _08022D22 -_08022C78: - movs r0, 0xD - bl sub_8022924 - b _08022D22 -_08022C80: - movs r0, 0xE - bl sub_8022924 - b _08022D22 -_08022C88: - movs r0, 0xF - bl sub_8022924 - b _08022D22 -_08022C90: - movs r0, 0x10 - bl sub_8022924 - b _08022D22 -_08022C98: - movs r0, 0xC - bl sub_8022924 - b _08022D22 -_08022CA0: - ldr r0, _08022CA4 - b _08022D00 - .align 2, 0 -_08022CA4: .4byte gUnknown_80DC7B4 -_08022CA8: - ldr r0, _08022CAC - b _08022D00 - .align 2, 0 -_08022CAC: .4byte gUnknown_80DC7FC -_08022CB0: - ldr r0, _08022CB4 - b _08022D00 - .align 2, 0 -_08022CB4: .4byte gUnknown_80DC81C -_08022CB8: - ldr r0, _08022CBC - b _08022D00 - .align 2, 0 -_08022CBC: .4byte gUnknown_80DC844 -_08022CC0: - ldr r0, _08022CC4 - b _08022D00 - .align 2, 0 -_08022CC4: .4byte gUnknown_80DC864 -_08022CC8: - ldr r1, [r4] - movs r0, 0x16 - str r0, [r1, 0x4] - ldr r0, _08022CD4 - b _08022D00 - .align 2, 0 -_08022CD4: .4byte gUnknown_80DC88C -_08022CD8: - ldr r1, [r4] - movs r0, 0x16 - str r0, [r1, 0x4] - ldr r0, _08022CE4 - b _08022D00 - .align 2, 0 -_08022CE4: .4byte gUnknown_80DC8AC -_08022CE8: - ldr r1, [r4] - movs r0, 0x16 - str r0, [r1, 0x4] - ldr r0, _08022CF4 - b _08022D00 - .align 2, 0 -_08022CF4: .4byte gUnknown_80DC8C8 -_08022CF8: - ldr r1, [r4] - movs r0, 0x16 - str r0, [r1, 0x4] - ldr r0, _08022D0C -_08022D00: - ldr r3, _08022D10 -_08022D02: - movs r1, 0 - movs r2, 0 - bl sub_80141B4 - b _08022D22 - .align 2, 0 -_08022D0C: .4byte gUnknown_80DC8DC -_08022D10: .4byte 0x00000301 -_08022D14: - ldr r0, [r4] - ldr r0, [r0, 0x4C] - bl sub_801AFA4 - b _08022D22 -_08022D1E: - bl sub_801A928 -_08022D22: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8022A10 - .align 2,0 diff --git a/asm/code_8023144.s b/asm/code_8023144.s new file mode 100644 index 000000000..04ae5a9fd --- /dev/null +++ b/asm/code_8023144.s @@ -0,0 +1,382 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_8022A10 +sub_8022A10: + push {r4-r7,lr} + sub sp, 0x8 + ldr r1, _08022A2C + ldr r0, [r1] + ldr r0, [r0] + adds r4, r1, 0 + cmp r0, 0x16 + bls _08022A22 + b _08022D1E +_08022A22: + lsls r0, 2 + ldr r1, _08022A30 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08022A2C: .4byte gUnknown_203B294 +_08022A30: .4byte _08022A34 + .align 2, 0 +_08022A34: + .4byte _08022A90 + .4byte _08022AAA + .4byte _08022AB2 + .4byte _08022AE0 + .4byte _08022B10 + .4byte _08022B1A + .4byte _08022B24 + .4byte _08022B34 + .4byte _08022B44 + .4byte _08022B54 + .4byte _08022B64 + .4byte _08022C28 + .4byte _08022CA0 + .4byte _08022CA8 + .4byte _08022CB0 + .4byte _08022CB8 + .4byte _08022CC0 + .4byte _08022CC8 + .4byte _08022CD8 + .4byte _08022CE8 + .4byte _08022CF8 + .4byte _08022D14 + .4byte _08022D1E +_08022A90: + ldr r0, [r4] + ldr r0, [r0, 0x48] + cmp r0, 0 + beq _08022A9C + movs r0, 0x5 + b _08022A9E +_08022A9C: + movs r0, 0x1 +_08022A9E: + movs r1, 0x3 + movs r2, 0 + movs r3, 0xA + bl sub_801A5D8 + b _08022D22 +_08022AAA: + movs r0, 0x1 + bl sub_801A8D0 + b _08022D22 +_08022AB2: + bl sub_801A9E0 + ldr r0, _08022ADC + ldr r2, [r0] + adds r0, r2, 0 + adds r0, 0x54 + adds r1, r2, 0 + adds r1, 0xF8 + movs r4, 0x9C + lsls r4, 1 + adds r3, r2, r4 + adds r2, 0xF4 + ldr r2, [r2] + str r2, [sp] + movs r2, 0x2 + str r2, [sp, 0x4] + movs r2, 0 + bl sub_8012D60 + b _08022D22 + .align 2, 0 +_08022ADC: .4byte gUnknown_203B294 +_08022AE0: + bl sub_801A9E0 + ldr r4, _08022B08 + ldr r0, [r4] + adds r0, 0x54 + movs r1, 0 + bl sub_8012EA4 + ldr r0, [r4] + adds r0, 0xA4 + ldr r1, _08022B0C + movs r2, 0x3 + str r2, [sp] + movs r2, 0x1 + str r2, [sp, 0x4] + movs r2, 0 + movs r3, 0 + bl sub_8012D60 + b _08022D22 + .align 2, 0 +_08022B08: .4byte gUnknown_203B294 +_08022B0C: .4byte gUnknown_80DC584 +_08022B10: + ldr r0, [r4] + adds r0, 0x50 + bl sub_801B3C0 + b _08022D22 +_08022B1A: + ldr r0, _08022B20 + b _08022D00 + .align 2, 0 +_08022B20: .4byte gUnknown_80DC5F4 +_08022B24: + ldr r0, _08022B2C + ldr r3, _08022B30 + b _08022D02 + .align 2, 0 +_08022B2C: .4byte gUnknown_80DC618 +_08022B30: .4byte 0x00000101 +_08022B34: + ldr r0, _08022B3C + ldr r3, _08022B40 + b _08022D02 + .align 2, 0 +_08022B3C: .4byte gUnknown_80DC674 +_08022B40: .4byte 0x00000101 +_08022B44: + ldr r0, _08022B4C + ldr r3, _08022B50 + b _08022D02 + .align 2, 0 +_08022B4C: .4byte gUnknown_80DC6CC +_08022B50: .4byte 0x00000101 +_08022B54: + ldr r0, _08022B5C + ldr r3, _08022B60 + b _08022D02 + .align 2, 0 +_08022B5C: .4byte gUnknown_80DC728 +_08022B60: .4byte 0x00000101 +_08022B64: + ldr r7, _08022B68 + b _08022B78 + .align 2, 0 +_08022B68: .4byte gUnknown_203B294 +_08022B6C: + ldr r1, [r4] + ldr r0, [r1, 0x40] + adds r0, 0x1 + str r0, [r1, 0x40] + cmp r0, 0x17 + bgt _08022C10 +_08022B78: + movs r5, 0 + movs r6, 0 + movs r3, 0 + ldr r2, [r4] + ldr r0, [r2, 0x38] + cmp r5, r0 + bge _08022BA4 + ldrb r1, [r2, 0x8] + b _08022B9C +_08022B8A: + adds r3, 0x1 + ldr r2, [r4] + ldr r0, [r2, 0x38] + cmp r3, r0 + bge _08022BA4 + adds r0, r2, 0 + adds r0, 0x8 + adds r0, r3 + ldrb r1, [r0] +_08022B9C: + ldr r0, [r2, 0x40] + cmp r1, r0 + bne _08022B8A + movs r5, 0x1 +_08022BA4: + movs r3, 0 + ldr r2, [r4] + ldr r0, [r2, 0x3C] + cmp r3, r0 + bge _08022BCE + adds r0, r2, 0 + adds r0, 0x20 + b _08022BC4 +_08022BB4: + adds r3, 0x1 + ldr r2, [r4] + ldr r0, [r2, 0x3C] + cmp r3, r0 + bge _08022BCE + adds r0, r2, 0 + adds r0, 0x20 + adds r0, r3 +_08022BC4: + ldrb r1, [r0] + ldr r0, [r2, 0x40] + cmp r1, r0 + bne _08022BB4 + movs r6, 0x1 +_08022BCE: + cmp r5, r6 + beq _08022B6C + ldr r1, [r7] + movs r0, 0xA + str r0, [r1, 0x4] + ldr r0, [r1, 0x40] + lsls r0, 24 + lsrs r0, 24 + bl GetIQSkillName + adds r1, r0, 0 + ldr r0, _08022C18 + bl strcpy + movs r0, 0xCB + bl PlaySound + ldr r0, _08022C1C + movs r1, 0 + movs r2, 0 + ldr r3, _08022C20 + bl sub_80141B4 + ldr r1, [r7] + ldr r0, [r1, 0x40] + adds r0, 0x1 + str r0, [r1, 0x40] + ldr r0, _08022C24 + ldr r0, [r0] + ldr r0, [r0, 0x40] + cmp r0, 0x17 + bgt _08022C10 + b _08022D22 +_08022C10: + movs r0, 0xB + bl sub_8022924 + b _08022D22 + .align 2, 0 +_08022C18: .4byte gUnknown_202DEA8 +_08022C1C: .4byte gUnknown_80DC788 +_08022C20: .4byte 0x00000101 +_08022C24: .4byte gUnknown_203B294 +_08022C28: + ldr r1, [r4] + movs r0, 0x16 + str r0, [r1, 0x4] + bl nullsub_104 + ldr r0, [r4] + adds r0, 0x46 + ldrh r0, [r0] + cmp r0, 0x8 + bhi _08022C98 + lsls r0, 2 + ldr r1, _08022C48 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08022C48: .4byte _08022C4C + .align 2, 0 +_08022C4C: + .4byte _08022C70 + .4byte _08022C78 + .4byte _08022C80 + .4byte _08022C98 + .4byte _08022C88 + .4byte _08022C98 + .4byte _08022C98 + .4byte _08022C98 + .4byte _08022C90 +_08022C70: + movs r0, 0x16 + bl sub_8022924 + b _08022D22 +_08022C78: + movs r0, 0xD + bl sub_8022924 + b _08022D22 +_08022C80: + movs r0, 0xE + bl sub_8022924 + b _08022D22 +_08022C88: + movs r0, 0xF + bl sub_8022924 + b _08022D22 +_08022C90: + movs r0, 0x10 + bl sub_8022924 + b _08022D22 +_08022C98: + movs r0, 0xC + bl sub_8022924 + b _08022D22 +_08022CA0: + ldr r0, _08022CA4 + b _08022D00 + .align 2, 0 +_08022CA4: .4byte gUnknown_80DC7B4 +_08022CA8: + ldr r0, _08022CAC + b _08022D00 + .align 2, 0 +_08022CAC: .4byte gUnknown_80DC7FC +_08022CB0: + ldr r0, _08022CB4 + b _08022D00 + .align 2, 0 +_08022CB4: .4byte gUnknown_80DC81C +_08022CB8: + ldr r0, _08022CBC + b _08022D00 + .align 2, 0 +_08022CBC: .4byte gUnknown_80DC844 +_08022CC0: + ldr r0, _08022CC4 + b _08022D00 + .align 2, 0 +_08022CC4: .4byte gUnknown_80DC864 +_08022CC8: + ldr r1, [r4] + movs r0, 0x16 + str r0, [r1, 0x4] + ldr r0, _08022CD4 + b _08022D00 + .align 2, 0 +_08022CD4: .4byte gUnknown_80DC88C +_08022CD8: + ldr r1, [r4] + movs r0, 0x16 + str r0, [r1, 0x4] + ldr r0, _08022CE4 + b _08022D00 + .align 2, 0 +_08022CE4: .4byte gUnknown_80DC8AC +_08022CE8: + ldr r1, [r4] + movs r0, 0x16 + str r0, [r1, 0x4] + ldr r0, _08022CF4 + b _08022D00 + .align 2, 0 +_08022CF4: .4byte gUnknown_80DC8C8 +_08022CF8: + ldr r1, [r4] + movs r0, 0x16 + str r0, [r1, 0x4] + ldr r0, _08022D0C +_08022D00: + ldr r3, _08022D10 +_08022D02: + movs r1, 0 + movs r2, 0 + bl sub_80141B4 + b _08022D22 + .align 2, 0 +_08022D0C: .4byte gUnknown_80DC8DC +_08022D10: .4byte 0x00000301 +_08022D14: + ldr r0, [r4] + ldr r0, [r0, 0x4C] + bl sub_801AFA4 + b _08022D22 +_08022D1E: + bl sub_801A928 +_08022D22: + add sp, 0x8 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_8022A10 + + .align 2,0 diff --git a/asm/code_809447C.s b/asm/code_809447C.s deleted file mode 100644 index 3d03a7a5d..000000000 --- a/asm/code_809447C.s +++ /dev/null @@ -1,335 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8094558 -sub_8094558: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xCC - adds r7, r0, 0 - adds r4, r1, 0 - adds r6, r2, 0 - bl sub_80073B8 - movs r5, 0 - str r5, [sp] - movs r0, 0x10 - movs r1, 0 - adds r2, r4, 0 - adds r3, r7, 0 - bl xxx_format_and_draw - ldr r4, _080945D0 - adds r1, r6, 0 - adds r1, 0x18 - adds r0, r4, 0 - bl PrintYellowDungeonNametoBuffer - ldr r0, _080945D4 - ldr r2, [r0] - str r5, [sp] - movs r0, 0x4 - movs r1, 0x10 - adds r3, r7, 0 - bl xxx_format_and_draw - movs r5, 0x1A - adds r0, r4, 0 - adds r1, r6, 0 - movs r2, 0xA - bl sub_80922B4 - adds r4, 0x50 - adds r1, r6, 0 - adds r1, 0xA - adds r0, r4, 0 - movs r2, 0xA - bl sub_80922B4 - movs r1, 0x14 - ldrsh r0, [r6, r1] - bl sub_8094528 - lsls r0, 24 - cmp r0, 0 - beq _080945DC - ldr r0, _080945D8 - ldr r0, [r0] - add r2, sp, 0xCC - add r1, sp, 0x4 - movs r3, 0 - bl xxx_format_string - b _080945EA - .align 2, 0 -_080945D0: .4byte gAvailablePokemonNames -_080945D4: .4byte gUnknown_8113850 -_080945D8: .4byte gUnknown_8113868 -_080945DC: - ldr r0, _0809465C - ldr r0, [r0] - add r2, sp, 0xCC - add r1, sp, 0x4 - movs r3, 0 - bl xxx_format_string -_080945EA: - add r0, sp, 0x4 - bl sub_8008ED0 - movs r4, 0xB0 - subs r0, r4, r0 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - movs r1, 0 - mov r8, r1 - str r1, [sp] - adds r1, r5, 0 - add r2, sp, 0x4 - adds r3, r7, 0 - bl xxx_format_and_draw - adds r5, 0xA - movs r1, 0x14 - ldrsh r0, [r6, r1] - add r1, sp, 0x4 - bl sub_80944BC - add r0, sp, 0x4 - bl sub_8008ED0 - subs r4, r0 - lsrs r0, r4, 31 - adds r4, r0 - asrs r0, r4, 1 - mov r1, r8 - str r1, [sp] - adds r1, r5, 0 - add r2, sp, 0x4 - adds r3, r7, 0 - bl xxx_format_and_draw - adds r5, 0x10 - ldr r1, _08094660 - ldr r0, [r6, 0x20] - str r0, [r1] - adds r0, r6, 0 - adds r0, 0x2A - ldrb r0, [r0] - str r0, [r1, 0x4] - cmp r0, 0x63 - ble _08094668 - ldr r0, _08094664 - ldr r2, [r0] - mov r0, r8 - str r0, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw - b _0809467A - .align 2, 0 -_0809465C: .4byte gUnknown_8113870 -_08094660: .4byte gUnknown_202DE30 -_08094664: .4byte gUnknown_81138C0 -_08094668: - ldr r0, _080946CC - ldr r2, [r0] - mov r1, r8 - str r1, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw -_0809467A: - adds r5, 0xA - ldr r4, _080946D0 - movs r1, 0x24 - ldrsh r0, [r6, r1] - str r0, [r4] - ldr r0, _080946D4 - ldr r2, [r0] - movs r0, 0 - mov r8, r0 - str r0, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw - adds r5, 0xA - adds r0, r6, 0 - adds r0, 0x26 - ldrb r2, [r0] - str r2, [r4] - adds r0, 0x2 - ldrb r0, [r0] - str r0, [r4, 0x4] - adds r0, r6, 0 - adds r0, 0x2B - ldrb r1, [r0] - cmp r1, 0 - beq _080946DC - adds r0, r1, 0 - adds r0, r2, r0 - str r0, [r4] - ldr r0, _080946D8 - ldr r2, [r0] - mov r1, r8 - str r1, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw - b _080946EC - .align 2, 0 -_080946CC: .4byte gUnknown_8113898 -_080946D0: .4byte gUnknown_202DE30 -_080946D4: .4byte gUnknown_81138D0 -_080946D8: .4byte gUnknown_8113950 -_080946DC: - ldr r0, _08094714 - ldr r2, [r0] - str r1, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw -_080946EC: - adds r0, r6, 0 - adds r0, 0x2D - ldrb r1, [r0] - cmp r1, 0 - beq _08094720 - ldr r2, _08094718 - ldr r0, [r2, 0x4] - adds r0, r1 - str r0, [r2, 0x4] - ldr r0, _0809471C - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw - b _08094730 - .align 2, 0 -_08094714: .4byte gUnknown_81138E4 -_08094718: .4byte gUnknown_202DE30 -_0809471C: .4byte gUnknown_8113974 -_08094720: - ldr r0, _08094768 - ldr r2, [r0] - str r1, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw -_08094730: - adds r5, 0xA - ldr r2, _0809476C - adds r0, r6, 0 - adds r0, 0x27 - ldrb r3, [r0] - str r3, [r2] - adds r0, 0x2 - ldrb r0, [r0] - str r0, [r2, 0x4] - adds r0, r6, 0 - adds r0, 0x2C - ldrb r1, [r0] - cmp r1, 0 - beq _08094774 - adds r0, r1, 0 - adds r0, r3, r0 - str r0, [r2] - ldr r0, _08094770 - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw - b _08094784 - .align 2, 0 -_08094768: .4byte gUnknown_8113900 -_0809476C: .4byte gUnknown_202DE30 -_08094770: .4byte gUnknown_8113990 -_08094774: - ldr r0, _080947AC - ldr r2, [r0] - str r1, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw -_08094784: - adds r0, r6, 0 - adds r0, 0x2E - ldrb r1, [r0] - cmp r1, 0 - beq _080947B8 - ldr r2, _080947B0 - ldr r0, [r2, 0x4] - adds r0, r1 - str r0, [r2, 0x4] - ldr r0, _080947B4 - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw - b _080947C8 - .align 2, 0 -_080947AC: .4byte gUnknown_8113918 -_080947B0: .4byte gUnknown_202DE30 -_080947B4: .4byte gUnknown_81139B4 -_080947B8: - ldr r0, _080947E4 - ldr r2, [r0] - str r1, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw -_080947C8: - adds r5, 0x10 - adds r2, r6, 0 - adds r2, 0x1C - ldrb r1, [r6, 0x1C] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080947EC - ldr r0, _080947E8 - adds r1, r2, 0 - movs r2, 0 - bl sub_8090E14 - b _080947F6 - .align 2, 0 -_080947E4: .4byte gUnknown_8113934 -_080947E8: .4byte gUnknown_202DE58 -_080947EC: - ldr r0, _0809481C - ldr r1, _08094820 - ldr r1, [r1] - bl strcpy -_080947F6: - ldr r0, _08094824 - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw - adds r0, r7, 0 - bl sub_80073E0 - add sp, 0xCC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809481C: .4byte gUnknown_202DE58 -_08094820: .4byte gUnknown_81139B8 -_08094824: .4byte gUnknown_81139CC - thumb_func_end sub_8094558 - - .align 2,0 diff --git a/asm/code_8098BDC.s b/asm/code_8098BDC.s index 62472cb23..d1a50d3b0 100644 --- a/asm/code_8098BDC.s +++ b/asm/code_8098BDC.s @@ -5573,7 +5573,7 @@ _0809BC26: lsrs r4, 31 bl sub_809B294 adds r0, r4, 0 - bl DisplayKangaskhanDialogueSprite + bl CreateKangaskhanStorage lsls r0, 24 cmp r0, 0 beq _0809BC5C diff --git a/asm/event_flag_1.s b/asm/event_flag_1.s deleted file mode 100644 index c3cf362fa..000000000 --- a/asm/event_flag_1.s +++ /dev/null @@ -1,45 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8002658 -sub_8002658: - push {r4,r5,lr} - lsls r0, 16 - asrs r4, r0, 16 - ldr r1, _0800267C - ldrh r2, [r1] - movs r3, 0 - ldrsh r0, [r1, r3] - movs r3, 0x1 - negs r3, r3 - cmp r0, r3 - beq _0800268C -_0800266E: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, r4 - bne _08002680 - ldrb r0, [r1, 0x2] - b _0800268E - .align 2, 0 -_0800267C: .4byte gUnknown_80B71E4 -_08002680: - adds r1, 0x4 - ldrh r2, [r1] - movs r5, 0 - ldrsh r0, [r1, r5] - cmp r0, r3 - bne _0800266E -_0800268C: - movs r0, 0 -_0800268E: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8002658 - - .align 2,0 diff --git a/asm/exclusive_pokemon.s b/asm/exclusive_pokemon.s deleted file mode 100644 index 71152bc65..000000000 --- a/asm/exclusive_pokemon.s +++ /dev/null @@ -1,341 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8097FA8 -sub_8097FA8: - lsls r0, 24 - ldr r1, _08097FCC - ldr r3, [r1] - lsrs r1, r0, 29 - lsls r1, 2 - adds r3, 0x48 - adds r3, r1 - movs r1, 0xF8 - lsls r1, 21 - ands r1, r0 - lsrs r1, 24 - movs r2, 0x1 - lsls r2, r1 - ldr r0, [r3] - orrs r0, r2 - str r0, [r3] - bx lr - .align 2, 0 -_08097FCC: .4byte gUnknown_203B498 - thumb_func_end sub_8097FA8 - - thumb_func_start sub_8097FD0 -sub_8097FD0: - lsls r0, 24 - ldr r1, _08097FF4 - ldr r3, [r1] - lsrs r1, r0, 29 - lsls r1, 2 - adds r3, 0x3C - adds r3, r1 - movs r1, 0xF8 - lsls r1, 21 - ands r1, r0 - lsrs r1, 24 - movs r2, 0x1 - lsls r2, r1 - ldr r0, [r3] - orrs r0, r2 - str r0, [r3] - bx lr - .align 2, 0 -_08097FF4: .4byte gUnknown_203B498 - thumb_func_end sub_8097FD0 - - thumb_func_start sub_8097FF8 -sub_8097FF8: - push {r4-r7,lr} - movs r4, 0 - ldr r6, _08098040 - movs r7, 0x1 -_08098000: - ldr r5, [r6] - adds r0, r4, 0 - cmp r4, 0 - bge _0809800A - adds r0, 0x1F -_0809800A: - asrs r0, 5 - lsls r3, r0, 2 - adds r1, r5, 0 - adds r1, 0x48 - adds r1, r3 - lsls r0, 5 - subs r0, r4, r0 - adds r2, r7, 0 - lsls r2, r0 - ldr r0, [r1] - ands r0, r2 - cmp r0, 0 - beq _08098030 - adds r1, r5, 0 - adds r1, 0x3C - adds r1, r3 - ldr r0, [r1] - orrs r0, r2 - str r0, [r1] -_08098030: - adds r4, 0x1 - cmp r4, 0x3F - ble _08098000 - bl sub_8098080 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08098040: .4byte gUnknown_203B498 - thumb_func_end sub_8097FF8 - - thumb_func_start sub_8098044 -sub_8098044: - push {r4,r5,lr} - lsls r0, 24 - ldr r1, _0809807C - ldr r3, [r1] - lsrs r5, r0, 29 - lsls r5, 2 - adds r4, r3, 0 - adds r4, 0x3C - adds r4, r5 - movs r1, 0xF8 - lsls r1, 21 - ands r1, r0 - lsrs r1, 24 - movs r2, 0x1 - lsls r2, r1 - mvns r2, r2 - ldr r0, [r4] - ands r0, r2 - str r0, [r4] - adds r3, 0x48 - adds r3, r5 - ldr r0, [r3] - ands r0, r2 - str r0, [r3] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809807C: .4byte gUnknown_203B498 - thumb_func_end sub_8098044 - - thumb_func_start sub_8098080 -sub_8098080: - push {r4,lr} - movs r2, 0 - ldr r4, _080980A0 - movs r3, 0 -_08098088: - ldr r0, [r4] - lsls r1, r2, 2 - adds r0, 0x48 - adds r0, r1 - str r3, [r0] - adds r2, 0x1 - cmp r2, 0x2 - ble _08098088 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080980A0: .4byte gUnknown_203B498 - thumb_func_end sub_8098080 - - thumb_func_start sub_80980A4 -sub_80980A4: - ldr r0, _080980B0 - ldr r2, [r0] - ldrb r0, [r2] - movs r1, 0x1 - strb r1, [r2] - bx lr - .align 2, 0 -_080980B0: .4byte gUnknown_203B498 - thumb_func_end sub_80980A4 - - thumb_func_start sub_80980B4 -sub_80980B4: - push {lr} - lsls r0, 16 - asrs r1, r0, 16 - adds r3, r1, 0 - ldr r0, _080980F8 - cmp r1, r0 - beq _080980F4 - adds r0, 0x1 - cmp r1, r0 - beq _080980F4 - adds r0, 0x1 - cmp r1, r0 - beq _080980F4 - ldr r0, _080980FC - ldr r2, [r0] - adds r0, r1, 0 - cmp r1, 0 - bge _080980DA - adds r0, 0x1F -_080980DA: - asrs r0, 5 - lsls r1, r0, 2 - adds r2, 0x4 - adds r2, r1 - lsls r0, 5 - subs r0, r3, r0 - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - lsls r1, r0 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] -_080980F4: - pop {r0} - bx r0 - .align 2, 0 -_080980F8: .4byte 0x000001a5 -_080980FC: .4byte gUnknown_203B498 - thumb_func_end sub_80980B4 - - thumb_func_start sub_8098100 -sub_8098100: - push {lr} - lsls r1, r0, 24 - lsrs r3, r1, 24 - cmp r3, 0x3F - bls _0809810E - movs r0, 0 - b _0809812C -_0809810E: - ldr r0, _08098130 - ldr r2, [r0] - lsrs r0, r1, 29 - lsls r0, 2 - adds r2, 0x3C - adds r2, r0 - movs r0, 0x1F - ands r0, r3 - movs r1, 0x1 - lsls r1, r0 - ldr r0, [r2] - ands r0, r1 - cmp r0, 0 - beq _0809812C - movs r0, 0x1 -_0809812C: - pop {r1} - bx r1 - .align 2, 0 -_08098130: .4byte gUnknown_203B498 - thumb_func_end sub_8098100 - - thumb_func_start sub_8098134 -sub_8098134: - push {lr} - lsls r0, 16 - asrs r1, r0, 16 - adds r3, r1, 0 - ldr r0, _0809816C - ldr r2, [r0] - adds r0, r1, 0 - cmp r1, 0 - bge _08098148 - adds r0, 0x1F -_08098148: - asrs r0, 5 - lsls r1, r0, 2 - adds r2, 0x4 - adds r2, r1 - lsls r0, 5 - subs r0, r3, r0 - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - lsls r1, r0 - ldr r0, [r2] - ands r0, r1 - cmp r0, 0 - beq _08098166 - movs r0, 0x1 -_08098166: - pop {r1} - bx r1 - .align 2, 0 -_0809816C: .4byte gUnknown_203B498 - thumb_func_end sub_8098134 - - thumb_func_start sub_8098170 -sub_8098170: - push {lr} - adds r3, r0, 0 - ldr r0, _0809819C - ldr r2, [r0] - adds r0, r3, 0 - cmp r3, 0 - bge _08098180 - adds r0, 0x1F -_08098180: - asrs r0, 5 - lsls r1, r0, 2 - adds r2, 0x54 - adds r2, r1 - lsls r0, 5 - subs r0, r3, r0 - movs r1, 0x1 - lsls r1, r0 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] - pop {r0} - bx r0 - .align 2, 0 -_0809819C: .4byte gUnknown_203B498 - thumb_func_end sub_8098170 - - thumb_func_start sub_80981A0 -sub_80981A0: - push {lr} - adds r3, r0, 0 - cmp r3, 0x1E - ble _080981AC - movs r0, 0 - b _080981D4 -_080981AC: - ldr r0, _080981D8 - ldr r2, [r0] - adds r1, r3, 0 - cmp r3, 0 - bge _080981B8 - adds r1, 0x1F -_080981B8: - asrs r1, 5 - lsls r0, r1, 2 - adds r2, 0x54 - adds r2, r0 - lsls r1, 5 - subs r1, r3, r1 - movs r0, 0x1 - lsls r0, r1 - ldr r2, [r2] - ands r2, r0 - cmp r2, 0 - beq _080981D2 - movs r2, 0x1 -_080981D2: - adds r0, r2, 0 -_080981D4: - pop {r1} - bx r1 - .align 2, 0 -_080981D8: .4byte gUnknown_203B498 - thumb_func_end sub_80981A0 - - .align 2,0 diff --git a/asm/friend_area_1.s b/asm/friend_area_1.s index 0a16b66b6..9feb24125 100644 --- a/asm/friend_area_1.s +++ b/asm/friend_area_1.s @@ -3,111 +3,7 @@ .syntax unified - .text - - thumb_func_start sub_8092638 -sub_8092638: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r1, 0 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r2, 24 - lsrs r2, 24 - mov r12, r2 - lsls r3, 24 - lsrs r3, 24 - mov r8, r3 - movs r6, 0 - movs r3, 0 - ldr r2, _080926DC - cmp r3, r5 - bge _0809266E - ldr r1, _080926E0 - adds r3, r5, 0 -_0809265E: - movs r7, 0 - ldrsh r0, [r1, r7] - adds r6, r0 - adds r1, 0x8 - subs r3, 0x1 - cmp r3, 0 - bne _0809265E - adds r3, r5, 0 -_0809266E: - str r6, [r4, 0x8] - ldr r0, [r2] - adds r0, r3 - ldrb r0, [r0] - strb r0, [r4, 0x4] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _080926E8 - movs r0, 0 - strh r0, [r4, 0x2] - ldr r1, _080926E0 - lsls r0, r3, 3 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r4] - movs r3, 0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r3, r0 - bge _080926EC - ldr r5, _080926E4 -_0809269A: - movs r0, 0x58 - adds r1, r6, 0 - muls r1, r0 - ldr r0, [r5] - adds r2, r0, r1 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080926CC - mov r7, r12 - cmp r7, 0 - beq _080926BA - ldrb r0, [r2, 0x2] - cmp r0, 0 - bne _080926CC -_080926BA: - mov r0, r8 - cmp r0, 0 - beq _080926C6 - ldrb r0, [r2, 0x4] - cmp r0, 0x41 - beq _080926CC -_080926C6: - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] -_080926CC: - adds r3, 0x1 - adds r6, 0x1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r3, r0 - blt _0809269A - b _080926EC - .align 2, 0 -_080926DC: .4byte gFriendAreas -_080926E0: .4byte gFriendAreaSettings -_080926E4: .4byte gRecruitedPokemonRef -_080926E8: - strh r0, [r4, 0x2] - strh r0, [r4] -_080926EC: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8092638 + .text thumb_func_start sub_80926F8 sub_80926F8: diff --git a/asm/kangaskhan_storage.s b/asm/kangaskhan_storage.s deleted file mode 100644 index c1cac72eb..000000000 --- a/asm/kangaskhan_storage.s +++ /dev/null @@ -1,685 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8016FF8 -sub_8016FF8: - push {r4,r5,lr} - sub sp, 0x14 - ldr r1, _08017014 - ldr r0, [r1] - ldr r0, [r0, 0x4] - adds r4, r1, 0 - cmp r0, 0x1D - bls _0801700A - b _08017584 -_0801700A: - lsls r0, 2 - ldr r1, _08017018 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08017014: .4byte gUnknown_203B208 -_08017018: .4byte _0801701C - .align 2, 0 -_0801701C: - .4byte _08017094 - .4byte _080170BC - .4byte _0801710C - .4byte _0801713C - .4byte _08017584 - .4byte _0801715C - .4byte _0801718C - .4byte _080171BC - .4byte _080171EC - .4byte _0801721C - .4byte _0801724C - .4byte _0801726C - .4byte _0801728C - .4byte _080172AC - .4byte _080172BA - .4byte _080172C2 - .4byte _080174A8 - .4byte _080172E4 - .4byte _0801731C - .4byte _08017344 - .4byte _08017394 - .4byte _080173B4 - .4byte _080173E8 - .4byte _080173F6 - .4byte _08017404 - .4byte _08017474 - .4byte _080174A8 - .4byte _080174B2 - .4byte _080174E8 - .4byte _08017530 -_08017094: - bl sub_80175FC - ldr r2, _080170B4 - ldr r0, [r2] - adds r0, 0xE4 - movs r4, 0 - movs r1, 0x1 - strb r1, [r0] - ldr r3, _080170B8 - ldr r5, [r2] - ldr r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r0, r3 - b _080170DA - .align 2, 0 -_080170B4: .4byte gUnknown_203B208 -_080170B8: .4byte gKangaskhanStorageDialogue -_080170BC: - bl sub_80175FC - ldr r1, _08017104 - ldr r0, [r1] - adds r0, 0xE4 - movs r4, 0 - strb r4, [r0] - ldr r2, _08017108 - ldr r5, [r1] - ldr r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x4 - adds r0, r2 -_080170DA: - ldr r0, [r0] - ldr r2, [r5, 0x18] - adds r3, r5, 0 - adds r3, 0x24 - adds r1, r5, 0 - adds r1, 0x4C - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - str r4, [sp, 0x8] - adds r1, r5, 0 - adds r1, 0xE8 - ldr r1, [r1] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - bl sub_8014248 - b _08017584 - .align 2, 0 -_08017104: .4byte gUnknown_203B208 -_08017108: .4byte gKangaskhanStorageDialogue -_0801710C: - ldr r0, [r4] - movs r1, 0x1 - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _08017134 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x4C - adds r0, r2 - ldr r0, [r0] - adds r3, 0xE8 - ldr r2, [r3] - ldr r3, _08017138 - b _080173D8 - .align 2, 0 -_08017134: .4byte gKangaskhanStorageDialogue -_08017138: .4byte 0x0000010d -_0801713C: - ldr r0, [r4] - movs r1, 0x4 - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0x1 - strb r1, [r0] - ldr r2, _08017158 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x8 - b _080173CE - .align 2, 0 -_08017158: .4byte gKangaskhanStorageDialogue -_0801715C: - ldr r0, [r4] - movs r1, 0x1 - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _08017184 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x34 - adds r0, r2 - ldr r0, [r0] - adds r3, 0xE8 - ldr r2, [r3] - ldr r3, _08017188 - b _080173D8 - .align 2, 0 -_08017184: .4byte gKangaskhanStorageDialogue -_08017188: .4byte 0x0000010d -_0801718C: - ldr r0, [r4] - movs r1, 0x1 - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _080171B4 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x38 - adds r0, r2 - ldr r0, [r0] - adds r3, 0xE8 - ldr r2, [r3] - ldr r3, _080171B8 - b _080173D8 - .align 2, 0 -_080171B4: .4byte gKangaskhanStorageDialogue -_080171B8: .4byte 0x0000010d -_080171BC: - ldr r0, [r4] - movs r1, 0x1 - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _080171E4 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x3C - adds r0, r2 - ldr r0, [r0] - adds r3, 0xE8 - ldr r2, [r3] - ldr r3, _080171E8 - b _080173D8 - .align 2, 0 -_080171E4: .4byte gKangaskhanStorageDialogue -_080171E8: .4byte 0x0000010d -_080171EC: - ldr r0, [r4] - movs r1, 0x1 - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _08017214 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x48 - adds r0, r2 - ldr r0, [r0] - adds r3, 0xE8 - ldr r2, [r3] - ldr r3, _08017218 - b _080173D8 - .align 2, 0 -_08017214: .4byte gKangaskhanStorageDialogue -_08017218: .4byte 0x0000010d -_0801721C: - ldr r0, _08017244 - ldr r1, [r4] - adds r1, 0xC - movs r2, 0 - bl sub_8090E14 - ldr r0, [r4] - movs r1, 0xE - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _08017248 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x40 - b _080173CE - .align 2, 0 -_08017244: .4byte gUnknown_202DE58 -_08017248: .4byte gKangaskhanStorageDialogue -_0801724C: - ldr r0, [r4] - movs r1, 0xE - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _08017268 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x44 - b _080173CE - .align 2, 0 -_08017268: .4byte gKangaskhanStorageDialogue -_0801726C: - ldr r0, [r4] - movs r1, 0xD - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _08017288 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0xC - b _080173CE - .align 2, 0 -_08017288: .4byte gKangaskhanStorageDialogue -_0801728C: - ldr r0, [r4] - movs r1, 0xE - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _080172A8 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x10 - b _080173CE - .align 2, 0 -_080172A8: .4byte gKangaskhanStorageDialogue -_080172AC: - movs r0, 0x3 - movs r1, 0x3 - movs r2, 0 - movs r3, 0xA - bl sub_801A5D8 - b _08017584 -_080172BA: - movs r0, 0x1 - bl sub_801A8D0 - b _08017584 -_080172C2: - bl sub_801A9E0 - bl sub_80176B8 - ldr r0, _080172E0 - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x58 - adds r1, r2, 0 - adds r1, 0x24 - adds r3, r2, 0 - adds r3, 0x4C - ldr r2, [r2, 0x1C] - b _08017494 - .align 2, 0 -_080172E0: .4byte gUnknown_203B208 -_080172E4: - bl sub_80177F8 - ldr r0, _08017310 - ldr r4, _08017314 - ldr r1, [r4] - adds r1, 0xC - movs r2, 0 - bl sub_8090E14 - ldr r0, [r4] - adds r0, 0xE4 - movs r5, 0 - strb r5, [r0] - ldr r2, _08017318 - ldr r4, [r4] - ldr r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x14 - b _08017504 - .align 2, 0 -_08017310: .4byte gUnknown_202DE58 -_08017314: .4byte gUnknown_203B208 -_08017318: .4byte gKangaskhanStorageDialogue -_0801731C: - bl sub_80177F8 - ldr r1, _0801733C - ldr r0, [r1] - adds r0, 0xE4 - movs r5, 0 - strb r5, [r0] - ldr r2, _08017340 - ldr r4, [r1] - ldr r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x18 - b _08017504 - .align 2, 0 -_0801733C: .4byte gUnknown_203B208 -_08017340: .4byte gKangaskhanStorageDialogue -_08017344: - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - bne _0801735C - bl sub_801A928 - ldr r0, _08017358 - ldr r1, [r0] - movs r0, 0x1 - b _08017362 - .align 2, 0 -_08017358: .4byte gUnknown_203B208 -_0801735C: - ldr r0, _08017388 - ldr r1, [r0] - movs r0, 0xC -_08017362: - str r0, [r1, 0x8] - ldr r3, _08017388 - ldr r0, [r3] - adds r0, 0xE4 - movs r1, 0x1 - strb r1, [r0] - ldr r2, _0801738C - ldr r3, [r3] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x1C - adds r0, r2 - ldr r0, [r0] - adds r3, 0xE8 - ldr r2, [r3] - ldr r3, _08017390 - b _080173D8 - .align 2, 0 -_08017388: .4byte gUnknown_203B208 -_0801738C: .4byte gKangaskhanStorageDialogue -_08017390: .4byte 0x0000010d -_08017394: - ldr r0, [r4] - movs r1, 0x16 - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _080173B0 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x20 - b _080173CE - .align 2, 0 -_080173B0: .4byte gKangaskhanStorageDialogue -_080173B4: - ldr r0, [r4] - movs r1, 0x17 - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _080173E0 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x24 -_080173CE: - adds r0, r2 - ldr r0, [r0] - adds r3, 0xE8 - ldr r2, [r3] - ldr r3, _080173E4 -_080173D8: - movs r1, 0 - bl sub_80141B4 - b _08017584 - .align 2, 0 -_080173E0: .4byte gKangaskhanStorageDialogue -_080173E4: .4byte 0x0000030d -_080173E8: - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0 - movs r3, 0xA - bl sub_801C8C4 - b _080173FC -_080173F6: - movs r0, 0x1 - bl sub_801CB5C -_080173FC: - movs r0, 0 - bl sub_801AD34 - b _08017584 -_08017404: - ldr r2, [r4] - adds r1, r2, 0 - adds r1, 0xB8 - movs r0, 0x2 - str r0, [r1] - subs r1, 0x8 - movs r0, 0x1 - str r0, [r1] - ldr r0, _08017430 - ldr r1, [r0] - ldrb r0, [r2, 0xE] - lsls r0, 1 - adds r1, 0x50 - adds r3, r1, r0 - ldrh r0, [r3] - cmp r0, 0x63 - bls _08017434 - adds r1, r2, 0 - adds r1, 0xB4 - movs r0, 0x63 - b _0801743A - .align 2, 0 -_08017430: .4byte gTeamInventory_203B460 -_08017434: - adds r1, r2, 0 - adds r1, 0xB4 - ldrh r0, [r3] -_0801743A: - str r0, [r1] - ldr r2, [r4] - adds r1, r2, 0 - adds r1, 0xAC - adds r0, r2, 0 - adds r0, 0xB4 - ldr r0, [r0] - str r0, [r1] - adds r1, 0x10 - movs r0, 0x1 - str r0, [r1] - adds r1, 0x4 - movs r3, 0x82 - lsls r3, 1 - adds r0, r2, r3 - str r0, [r1] - adds r1, 0x4 - movs r0, 0x28 - str r0, [r1] - adds r1, 0x4 - movs r0, 0x12 - str r0, [r1] - adds r0, r2, 0 - adds r0, 0xA8 - bl sub_8013AA0 - bl sub_8017598 - b _08017584 -_08017474: - bl sub_801CCD8 - movs r0, 0 - bl sub_801AD34 - bl sub_8017758 - ldr r0, _080174A4 - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x58 - adds r1, r2, 0 - adds r1, 0x24 - adds r3, r2, 0 - adds r3, 0x4C - ldr r2, [r2, 0x20] -_08017494: - str r2, [sp] - movs r2, 0x2 - str r2, [sp, 0x4] - movs r2, 0 - bl sub_8012D60 - b _08017584 - .align 2, 0 -_080174A4: .4byte gUnknown_203B208 -_080174A8: - ldr r0, [r4] - adds r0, 0xC - bl sub_801B3C0 - b _08017584 -_080174B2: - bl sub_80177F8 - ldr r0, _080174DC - ldr r4, _080174E0 - ldr r1, [r4] - adds r1, 0xC - movs r2, 0 - bl sub_8090E14 - ldr r0, [r4] - adds r0, 0xE4 - movs r5, 0 - strb r5, [r0] - ldr r2, _080174E4 - ldr r4, [r4] - ldr r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x28 - b _08017504 - .align 2, 0 -_080174DC: .4byte gUnknown_202DE58 -_080174E0: .4byte gUnknown_203B208 -_080174E4: .4byte gKangaskhanStorageDialogue -_080174E8: - bl sub_80177F8 - ldr r1, _08017528 - ldr r0, [r1] - adds r0, 0xE4 - movs r5, 0 - strb r5, [r0] - ldr r2, _0801752C - ldr r4, [r1] - ldr r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x2C -_08017504: - adds r0, r2 - ldr r0, [r0] - adds r3, r4, 0 - adds r3, 0x24 - str r5, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - str r5, [sp, 0x8] - adds r4, 0xE8 - ldr r1, [r4] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - movs r2, 0x4 - bl sub_8014248 - b _08017584 - .align 2, 0 -_08017528: .4byte gUnknown_203B208 -_0801752C: .4byte gKangaskhanStorageDialogue -_08017530: - movs r0, 0x1 - bl sub_801CF14 - lsls r0, 24 - cmp r0, 0 - bne _08017544 - bl GetNumberOfFilledInventorySlots - cmp r0, 0x13 - ble _08017554 -_08017544: - bl sub_801CBB8 - ldr r0, _08017550 - ldr r1, [r0] - movs r0, 0x1 - b _0801755A - .align 2, 0 -_08017550: .4byte gUnknown_203B208 -_08017554: - ldr r0, _0801758C - ldr r1, [r0] - movs r0, 0x15 -_0801755A: - str r0, [r1, 0x8] - ldr r3, _0801758C - ldr r0, [r3] - adds r0, 0xE4 - movs r1, 0x1 - strb r1, [r0] - ldr r2, _08017590 - ldr r3, [r3] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x30 - adds r0, r2 - ldr r0, [r0] - adds r3, 0xE8 - ldr r2, [r3] - ldr r3, _08017594 - movs r1, 0 - bl sub_80141B4 -_08017584: - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801758C: .4byte gUnknown_203B208 -_08017590: .4byte gKangaskhanStorageDialogue -_08017594: .4byte 0x0000010d - thumb_func_end sub_8016FF8 - - - .align 2,0 diff --git a/asm/other_menus.s b/asm/other_menus.s index 1bd67d082..478937ce6 100644 --- a/asm/other_menus.s +++ b/asm/other_menus.s @@ -5,505 +5,6 @@ .text - thumb_func_start sub_8037400 -sub_8037400: - push {r4-r6,lr} - movs r6, 0 - movs r5, 0 - bl sub_8037810 - bl sub_8011830 - ldr r4, _08037434 - ldr r0, [r4] - ldr r0, [r0] - bl sub_8037B28 - ldr r4, [r4] - str r0, [r4, 0x4] - cmp r0, 0 - beq _08037422 - b _080376BE -_08037422: - ldr r0, [r4] - cmp r0, 0xA - bls _0803742A - b _080375E8 -_0803742A: - lsls r0, 2 - ldr r1, _08037438 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08037434: .4byte gUnknown_203B35C -_08037438: .4byte _0803743C - .align 2, 0 -_0803743C: - .4byte _08037494 - .4byte _080374B8 - .4byte _08037534 - .4byte _0803751C - .4byte _0803756C - .4byte _080375D8 - .4byte _080374E4 - .4byte _080374D0 - .4byte _080375E8 - .4byte _08037480 - .4byte _08037468 -_08037468: - ldr r0, _0803747C - ldr r0, [r0] - movs r1, 0xE7 - lsls r1, 2 - adds r6, r0, r1 - movs r2, 0x8A - lsls r2, 3 - adds r5, r0, r2 - b _080375E8 - .align 2, 0 -_0803747C: .4byte gUnknown_203B35C -_08037480: - ldr r0, _08037490 - ldr r0, [r0] - movs r3, 0xE7 - lsls r3, 2 - adds r6, r0, r3 - movs r4, 0x8A - lsls r4, 3 - b _080375E6 - .align 2, 0 -_08037490: .4byte gUnknown_203B35C -_08037494: - bl sub_8035D94 - ldr r1, _080374B4 - ldr r3, [r1] - movs r5, 0xDE - lsls r5, 1 - adds r2, r3, r5 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [r2] - str r1, [r2, 0x4] - adds r6, r2, 0 - movs r0, 0xE2 - lsls r0, 1 - adds r5, r3, r0 - b _080375E8 - .align 2, 0 -_080374B4: .4byte gUnknown_203B35C -_080374B8: - ldr r0, _080374CC - ldr r0, [r0] - movs r1, 0xDE - lsls r1, 1 - adds r6, r0, r1 - movs r2, 0xE2 - lsls r2, 1 - adds r5, r0, r2 - b _080375E8 - .align 2, 0 -_080374CC: .4byte gUnknown_203B35C -_080374D0: - ldr r0, _080374E0 - ldr r0, [r0] - movs r3, 0xE6 - lsls r3, 1 - adds r6, r0, r3 - movs r4, 0xFE - lsls r4, 1 - b _080375E6 - .align 2, 0 -_080374E0: .4byte gUnknown_203B35C -_080374E4: - bl sub_8035D74 - lsls r0, 24 - lsrs r0, 24 - bl GetMailatIndex - ldr r3, _08037518 - ldr r1, [r3] - movs r2, 0xE6 - lsls r2, 1 - adds r1, r2 - ldm r0!, {r4-r6} - stm r1!, {r4-r6} - ldm r0!, {r4-r6} - stm r1!, {r4-r6} - ldm r0!, {r4-r6} - stm r1!, {r4-r6} - ldm r0!, {r4-r6} - stm r1!, {r4-r6} - ldr r0, [r3] - adds r6, r0, r2 - movs r1, 0xFE - lsls r1, 1 - adds r5, r0, r1 - b _080375E8 - .align 2, 0 -_08037518: .4byte gUnknown_203B35C -_0803751C: - ldr r0, _08037530 - ldr r0, [r0] - movs r2, 0x8B - lsls r2, 2 - adds r6, r0, r2 - movs r3, 0x97 - lsls r3, 2 - adds r5, r0, r3 - b _080375E8 - .align 2, 0 -_08037530: .4byte gUnknown_203B35C -_08037534: - bl sub_8035D74 - lsls r0, 24 - lsrs r0, 24 - bl GetMailatIndex - ldr r3, _08037568 - ldr r1, [r3] - movs r2, 0x8B - lsls r2, 2 - adds r1, r2 - ldm r0!, {r4-r6} - stm r1!, {r4-r6} - ldm r0!, {r4-r6} - stm r1!, {r4-r6} - ldm r0!, {r4-r6} - stm r1!, {r4-r6} - ldm r0!, {r4-r6} - stm r1!, {r4-r6} - ldr r0, [r3] - adds r6, r0, r2 - movs r1, 0x97 - lsls r1, 2 - adds r5, r0, r1 - b _080375E8 - .align 2, 0 -_08037568: .4byte gUnknown_203B35C -_0803756C: - bl sub_8035D74 - lsls r0, 24 - lsrs r0, 24 - bl GetMailatIndex - ldr r4, _080375CC - ldr r1, [r4] - movs r5, 0xA3 - lsls r5, 2 - adds r1, r5 - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - bl sub_8035D3C - lsls r0, 16 - ldr r1, _080375D0 - cmp r0, r1 - beq _080375BE - bl sub_8035D3C - ldr r3, [r4] - movs r1, 0xAF - lsls r1, 2 - adds r3, r1 - ldr r1, _080375D4 - ldr r1, [r1] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x58 - muls r0, r2 - adds r1, r0 - adds r0, r3, 0 - bl memcpy -_080375BE: - ldr r0, [r4] - adds r6, r0, r5 - movs r2, 0xC5 - lsls r2, 2 - adds r5, r0, r2 - b _080375E8 - .align 2, 0 -_080375CC: .4byte gUnknown_203B35C -_080375D0: .4byte 0xffff0000 -_080375D4: .4byte gRecruitedPokemonRef -_080375D8: - ldr r0, _08037610 - ldr r0, [r0] - movs r3, 0xA3 - lsls r3, 2 - adds r6, r0, r3 - movs r4, 0xC5 - lsls r4, 2 -_080375E6: - adds r5, r0, r4 -_080375E8: - ldr r4, _08037610 - ldr r0, [r4] - ldr r0, [r0] - adds r1, r6, 0 - adds r2, r5, 0 - bl sub_8037D64 - ldr r1, [r4] - str r0, [r1, 0x4] - cmp r0, 0 - bne _080376BE - ldr r0, [r1] - cmp r0, 0xA - bhi _080376AE - lsls r0, 2 - ldr r1, _08037614 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08037610: .4byte gUnknown_203B35C -_08037614: .4byte _08037618 - .align 2, 0 -_08037618: - .4byte _08037644 - .4byte _08037644 - .4byte _08037658 - .4byte _08037658 - .4byte _0803766C - .4byte _0803766C - .4byte _08037684 - .4byte _08037684 - .4byte _080376AE - .4byte _0803769C - .4byte _0803769C -_08037644: - ldr r0, _08037654 - ldr r2, [r0] - movs r5, 0xDE - lsls r5, 1 - adds r6, r2, r5 - movs r1, 0xE2 - lsls r1, 1 - b _0803767A - .align 2, 0 -_08037654: .4byte gUnknown_203B35C -_08037658: - ldr r0, _08037668 - ldr r2, [r0] - movs r3, 0x8B - lsls r3, 2 - adds r6, r2, r3 - movs r4, 0x97 - lsls r4, 2 - b _08037692 - .align 2, 0 -_08037668: .4byte gUnknown_203B35C -_0803766C: - ldr r0, _08037680 - ldr r2, [r0] - movs r5, 0xA3 - lsls r5, 2 - adds r6, r2, r5 - movs r1, 0xC5 - lsls r1, 2 -_0803767A: - adds r5, r2, r1 - adds r4, r0, 0 - b _080376AE - .align 2, 0 -_08037680: .4byte gUnknown_203B35C -_08037684: - ldr r0, _08037698 - ldr r2, [r0] - movs r3, 0xE6 - lsls r3, 1 - adds r6, r2, r3 - movs r4, 0xFE - lsls r4, 1 -_08037692: - adds r5, r2, r4 - adds r4, r0, 0 - b _080376AE - .align 2, 0 -_08037698: .4byte gUnknown_203B35C -_0803769C: - ldr r1, _080376C8 - ldr r0, [r1] - movs r5, 0xE7 - lsls r5, 2 - adds r6, r0, r5 - movs r2, 0x8A - lsls r2, 3 - adds r5, r0, r2 - adds r4, r1, 0 -_080376AE: - ldr r0, [r4] - ldr r0, [r0] - adds r1, r6, 0 - adds r2, r5, 0 - bl sub_80381F4 - ldr r1, [r4] - str r0, [r1, 0x4] -_080376BE: - bl xxx_call_start_bg_music - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080376C8: .4byte gUnknown_203B35C - thumb_func_end sub_8037400 - - thumb_func_start sub_80376CC -sub_80376CC: - push {r4,lr} - ldr r0, _08037728 - ldr r3, [r0] - ldrh r1, [r3, 0xC] - ldr r0, _0803772C - ands r0, r1 - ldr r1, _08037730 - ands r0, r1 - ldr r4, _08037734 - ands r0, r4 - ldr r1, _08037738 - ands r0, r1 - ldr r1, _0803773C - ands r0, r1 - movs r2, 0x80 - lsls r2, 7 - ldr r1, _08037740 - ands r0, r1 - orrs r0, r2 - strh r0, [r3, 0xC] - movs r2, 0xFC - lsls r2, 2 - ldrh r1, [r3, 0x10] - movs r0, 0xFC - lsls r0, 8 - ands r0, r1 - orrs r0, r2 - ands r0, r4 - movs r2, 0xF - movs r4, 0xF0 - lsls r4, 8 - ldr r1, _08037744 - ands r0, r1 - orrs r0, r4 - strh r0, [r3, 0x10] - movs r0, 0 - strh r0, [r3, 0xE] - movs r1, 0xC0 - lsls r1, 4 - ldrh r0, [r3, 0x12] - ands r2, r0 - orrs r2, r1 - strh r2, [r3, 0x12] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08037728: .4byte gUnknown_203B35C -_0803772C: .4byte 0x0000feff -_08037730: .4byte 0x0000fdff -_08037734: .4byte 0x0000f3ff -_08037738: .4byte 0x0000efff -_0803773C: .4byte 0x0000dfff -_08037740: .4byte 0x00003fff -_08037744: .4byte 0x00000fff - thumb_func_end sub_80376CC - - thumb_func_start sub_8037748 -sub_8037748: - push {r4,lr} - ldr r4, _08037794 - ldr r3, [r4] - ldrh r1, [r3, 0xE] - movs r0, 0xFE - lsls r0, 8 - ands r0, r1 - movs r1, 0x70 - orrs r0, r1 - strh r0, [r3, 0xE] - movs r2, 0xD0 - lsls r2, 3 - ldrh r1, [r3, 0x12] - movs r0, 0xF - ands r0, r1 - orrs r0, r2 - strh r0, [r3, 0x12] - ldr r0, [r3, 0x14] - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08037782 - adds r0, r3, 0 - adds r0, 0xC - adds r1, 0xF8 - movs r2, 0 - movs r3, 0 - bl AddSprite -_08037782: - bl xxx_draw_string_80144C4 - ldr r1, [r4] - ldr r0, [r1, 0x14] - adds r0, 0x1 - str r0, [r1, 0x14] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08037794: .4byte gUnknown_203B35C - thumb_func_end sub_8037748 - - thumb_func_start sub_8037798 -sub_8037798: - push {lr} - ldr r2, _080377B4 - ldr r1, _080377B8 - ldr r0, [r1] - ldr r0, [r0] - adds r3, r1, 0 - cmp r0, 0xA - bhi _0803780A - lsls r0, 2 - ldr r1, _080377BC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080377B4: .4byte 0x0000ffdc -_080377B8: .4byte gUnknown_203B35C -_080377BC: .4byte _080377C0 - .align 2, 0 -_080377C0: - .4byte _080377EC - .4byte _080377EC - .4byte _080377F0 - .4byte _080377F0 - .4byte _080377F0 - .4byte _080377F0 - .4byte _080377F0 - .4byte _080377F0 - .4byte _0803780A - .4byte _080377FE - .4byte _080377FE -_080377EC: - movs r2, 0x1 - b _0803780A -_080377F0: - ldr r0, [r3] - ldr r0, [r0, 0x4] - movs r2, 0x1 - cmp r0, 0 - bne _0803780A - movs r2, 0x2A - b _0803780A -_080377FE: - ldr r0, [r3] - ldr r0, [r0, 0x4] - movs r2, 0xD - cmp r0, 0 - bne _0803780A - movs r2, 0x2B -_0803780A: - adds r0, r2, 0 - pop {r1} - bx r1 - thumb_func_end sub_8037798 - thumb_func_start sub_8037810 sub_8037810: push {r4-r6,lr} @@ -1001,861 +502,4 @@ _08037C08: bx r1 thumb_func_end sub_8037B28 - thumb_func_start sub_8037C10 -sub_8037C10: - push {lr} - lsls r0, 24 - cmp r0, 0 - beq _08037C24 - bl sub_800D588 - lsls r0, 24 - cmp r0, 0 - bne _08037C38 - b _08037C2E -_08037C24: - bl sub_800D588 - lsls r0, 24 - cmp r0, 0 - beq _08037C38 -_08037C2E: - ldr r0, _08037C34 - ldr r0, [r0, 0x4] - b _08037C3C - .align 2, 0 -_08037C34: .4byte gUnknown_202EC40 -_08037C38: - ldr r0, _08037C40 - ldr r0, [r0] -_08037C3C: - pop {r1} - bx r1 - .align 2, 0 -_08037C40: .4byte gUnknown_202EC40 - thumb_func_end sub_8037C10 - - thumb_func_start sub_8037C44 -sub_8037C44: - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - movs r4, 0 -_08037C4C: - adds r0, r4, 0 - bl sub_800D68C - adds r4, 0x1 - cmp r4, 0x1 - ble _08037C4C - cmp r6, 0xA - bhi _08037CBE - lsls r0, r6, 2 - ldr r1, _08037C68 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08037C68: .4byte _08037C6C - .align 2, 0 -_08037C6C: - .4byte _08037C98 - .4byte _08037C98 - .4byte _08037CA2 - .4byte _08037CA2 - .4byte _08037CAC - .4byte _08037CAC - .4byte _08037CA2 - .4byte _08037CA2 - .4byte _08037CBE - .4byte _08037CB6 - .4byte _08037CB6 -_08037C98: - adds r0, r5, 0 - movs r1, 0x8 - bl sub_800D59C - b _08037CBE -_08037CA2: - adds r0, r5, 0 - movs r1, 0x30 - bl sub_800D59C - b _08037CBE -_08037CAC: - adds r0, r5, 0 - movs r1, 0x88 - bl sub_800D59C - b _08037CBE -_08037CB6: - adds r0, r5, 0 - movs r1, 0xB4 - bl sub_800D59C -_08037CBE: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8037C44 - - thumb_func_start sub_8037CC4 -sub_8037CC4: - push {r4,lr} - adds r3, r1, 0 - adds r4, r2, 0 - cmp r0, 0xA - bhi _08037D5E - lsls r0, 2 - ldr r1, _08037CD8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08037CD8: .4byte _08037CDC - .align 2, 0 -_08037CDC: - .4byte _08037D08 - .4byte _08037D08 - .4byte _08037D1E - .4byte _08037D1E - .4byte _08037D34 - .4byte _08037D34 - .4byte _08037D1E - .4byte _08037D1E - .4byte _08037D5E - .4byte _08037D4A - .4byte _08037D4A -_08037D08: - movs r0, 0 - adds r1, r3, 0 - movs r2, 0x8 - bl sub_800D670 - movs r0, 0x1 - adds r1, r4, 0 - movs r2, 0x8 - bl sub_800D670 - b _08037D5E -_08037D1E: - movs r0, 0 - adds r1, r3, 0 - movs r2, 0x30 - bl sub_800D670 - movs r0, 0x1 - adds r1, r4, 0 - movs r2, 0x30 - bl sub_800D670 - b _08037D5E -_08037D34: - movs r0, 0 - adds r1, r3, 0 - movs r2, 0x88 - bl sub_800D670 - movs r0, 0x1 - adds r1, r4, 0 - movs r2, 0x88 - bl sub_800D670 - b _08037D5E -_08037D4A: - movs r0, 0 - adds r1, r3, 0 - movs r2, 0xB4 - bl sub_800D670 - movs r0, 0x1 - adds r1, r4, 0 - movs r2, 0xB4 - bl sub_800D670 -_08037D5E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8037CC4 - - thumb_func_start sub_8037D64 -sub_8037D64: - push {r4-r7,lr} - adds r5, r0, 0 - adds r6, r1, 0 - adds r7, r2, 0 - movs r4, 0 - ldr r0, _08037D80 - str r4, [r0] - bl sub_800D494 - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_8037C44 - b _08037D96 - .align 2, 0 -_08037D80: .4byte gUnknown_202EC48 -_08037D84: - subs r0, r4, 0x3 - cmp r0, 0x2 - bls _08037DBC - ldr r1, _08037DB8 - ldr r0, [r1] - cmp r0, 0x63 - bgt _08037DC8 - adds r0, 0x1 - str r0, [r1] -_08037D96: - bl sub_80373C4 - bl sub_800D33C - adds r4, r0, 0 - bl sub_800D570 - cmp r4, 0x2 - bne _08037D84 - bl sub_800D600 - lsls r0, 24 - cmp r0, 0 - beq _08037DD4 - movs r4, 0 - b _08037DDE - .align 2, 0 -_08037DB8: .4byte gUnknown_202EC48 -_08037DBC: - bl sub_800D520 - bl sub_800D510 - movs r0, 0x1 - b _08037DEA -_08037DC8: - bl sub_800D520 - bl sub_800D510 - movs r0, 0xF - b _08037DEA -_08037DD4: - bl sub_800D520 - bl sub_800D510 - movs r4, 0x5 -_08037DDE: - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r7, 0 - bl sub_8037CC4 - adds r0, r4, 0 -_08037DEA: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8037D64 - - thumb_func_start sub_8037DF0 -sub_8037DF0: - push {r4,lr} - sub sp, 0x8 - movs r4, 0 - movs r0, 0 - mov r1, sp - movs r2, 0x4 - bl sub_800D670 - add r1, sp, 0x4 - movs r0, 0x1 - movs r2, 0x4 - bl sub_800D670 - ldr r0, [sp] - cmp r0, 0 - bne _08037E16 - ldr r0, [sp, 0x4] - cmp r0, 0 - beq _08037E2C -_08037E16: - bl sub_800D588 - lsls r0, 24 - cmp r0, 0 - bne _08037E24 - ldr r4, [sp, 0x4] - b _08037E26 -_08037E24: - ldr r4, [sp] -_08037E26: - cmp r4, 0 - bne _08037E2C - movs r4, 0xE -_08037E2C: - adds r0, r4, 0 - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8037DF0 - - thumb_func_start sub_8037E38 -sub_8037E38: - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - bl sub_800D588 - lsls r0, 24 - adds r4, r6, 0 - cmp r0, 0 - bne _08037E4C - adds r4, r5, 0 -_08037E4C: - bl sub_800D588 - lsls r0, 24 - adds r3, r5, 0 - cmp r0, 0 - bne _08037E5A - adds r3, r6, 0 -_08037E5A: - ldrb r0, [r4] - ldrb r1, [r3] - cmp r0, r1 - bne _08037E70 - ldr r0, _08037E6C - ldr r1, [r0] - ldrb r0, [r4] - b _08037E76 - .align 2, 0 -_08037E6C: .4byte gTeamInventory_203B460 -_08037E70: - ldr r0, _08037E8C - ldr r1, [r0] - ldrb r0, [r3] -_08037E76: - lsls r0, 1 - adds r1, 0x50 - adds r1, r0 - ldrh r2, [r1] - ldr r0, [r3, 0x4] - adds r2, r0 - strh r2, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08037E8C: .4byte gTeamInventory_203B460 - thumb_func_end sub_8037E38 - - thumb_func_start sub_8037E90 -sub_8037E90: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - bl sub_800D588 - lsls r0, 24 - cmp r0, 0 - bne _08037EA2 - adds r4, r5, 0 -_08037EA2: - movs r0, 0x2 - strb r0, [r4] - adds r0, r4, 0 - bl sub_80951BC - ldr r0, [r4, 0x10] - bl sub_8095274 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8037E90 - - thumb_func_start nullsub_53 -nullsub_53: - bx lr - thumb_func_end nullsub_53 - - thumb_func_start sub_8037EBC -sub_8037EBC: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - bl sub_800D588 - lsls r0, 24 - adds r5, r4, 0 - cmp r0, 0 - bne _08037ED0 - adds r5, r6, 0 -_08037ED0: - ldr r1, [r5, 0x10] - movs r0, 0x1 - bl GetMailIndex - lsls r0, 24 - lsrs r0, 24 - bl GetMailatIndex - adds r4, r0, 0 - adds r1, r4, 0 - adds r0, r5, 0 - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - movs r0, 0x5 - strb r0, [r4] - adds r0, r4, 0 - bl sub_80951FC - movs r0, 0x7 - strb r0, [r4] - movs r0, 0x38 - ldrsh r6, [r5, r0] - cmp r6, 0 - beq _08037F30 - ldr r4, _08037F2C - ldr r0, [r4] - ldr r1, [r5, 0x10] - stm r0!, {r1} - adds r1, r5, 0 - adds r1, 0x30 - movs r2, 0x58 - bl memcpy - ldr r1, [r4] - movs r0, 0x42 - strb r0, [r1, 0x8] - ldr r1, [r4] - movs r0, 0x1 - strb r0, [r1, 0x9] - b _08037F40 - .align 2, 0 -_08037F2C: .4byte gUnknown_203B484 -_08037F30: - ldr r4, _08037F48 - ldr r0, [r4] - movs r1, 0 - movs r2, 0x5C - bl MemoryFill8 - ldr r0, [r4] - strh r6, [r0, 0xC] -_08037F40: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08037F48: .4byte gUnknown_203B484 - thumb_func_end sub_8037EBC - - thumb_func_start sub_8037F4C -sub_8037F4C: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - bl sub_800D588 - lsls r0, 24 - cmp r0, 0 - bne _08037F5E - adds r4, r5, 0 -_08037F5E: - ldr r1, [r4, 0x10] - movs r0, 0x4 - bl GetMailIndex - lsls r0, 24 - lsrs r0, 24 - bl GetMailatIndex - adds r2, r0, 0 - adds r1, r4, 0 - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - movs r1, 0x6 - strb r1, [r0] - bl GetMainMenu - cmp r0, 0 - beq _08037F96 - adds r1, r0, 0 - adds r1, 0x3A - movs r0, 0x1 - strb r0, [r1] -_08037F96: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8037F4C - - thumb_func_start sub_8037F9C -sub_8037F9C: - push {lr} - adds r3, r1, 0 - cmp r0, 0xA - bhi _08038010 - lsls r0, 2 - ldr r1, _08037FB0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08037FB0: .4byte _08037FB4 - .align 2, 0 -_08037FB4: - .4byte _08037FE0 - .4byte _08037FE0 - .4byte _08038010 - .4byte _08037FF4 - .4byte _08038010 - .4byte _08037FFE - .4byte _08038010 - .4byte _08037FEA - .4byte _08038010 - .4byte _08038010 - .4byte _08038008 -_08037FE0: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8037E38 - b _08038010 -_08037FEA: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8037F4C - b _08038010 -_08037FF4: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8037E90 - b _08038010 -_08037FFE: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8037EBC - b _08038010 -_08038008: - adds r0, r3, 0 - adds r1, r2, 0 - bl nullsub_53 -_08038010: - pop {r0} - bx r0 - thumb_func_end sub_8037F9C - - thumb_func_start sub_8038014 -sub_8038014: - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - bl sub_800D588 - lsls r0, 24 - adds r4, r6, 0 - cmp r0, 0 - bne _08038028 - adds r4, r5, 0 -_08038028: - bl sub_800D588 - lsls r0, 24 - adds r3, r5, 0 - cmp r0, 0 - bne _08038036 - adds r3, r6, 0 -_08038036: - ldrb r0, [r4] - ldrb r1, [r3] - cmp r0, r1 - bne _0803804C - ldr r0, _08038048 - ldr r1, [r0] - ldrb r0, [r4] - b _08038052 - .align 2, 0 -_08038048: .4byte gTeamInventory_203B460 -_0803804C: - ldr r0, _08038070 - ldr r1, [r0] - ldrb r0, [r3] -_08038052: - lsls r0, 1 - adds r1, 0x50 - adds r1, r0 - ldrh r2, [r1] - ldr r0, [r3, 0x4] - adds r2, r0 - ldr r0, _08038074 - movs r1, 0 - cmp r2, r0 - ble _08038068 - movs r1, 0x6 -_08038068: - adds r0, r1, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08038070: .4byte gTeamInventory_203B460 -_08038074: .4byte 0x000003e7 - thumb_func_end sub_8038014 - - thumb_func_start sub_8038078 -sub_8038078: - push {r4-r6,lr} - adds r5, r0, 0 - adds r4, r1, 0 - bl sub_800D588 - lsls r0, 24 - cmp r0, 0 - bne _0803808A - adds r4, r5, 0 -_0803808A: - ldr r6, [r4, 0x10] - ldr r0, _08038098 - ldr r0, [r0] - cmp r0, 0 - beq _0803809C - ldr r5, [r0, 0x50] - b _080380A2 - .align 2, 0 -_08038098: .4byte gUnknown_203B184 -_0803809C: - bl sub_8011C34 - adds r5, r0, 0 -_080380A2: - movs r0, 0x4 - adds r1, r6, 0 - bl HasMail - lsls r0, 24 - cmp r0, 0 - beq _080380BA - ldr r0, [r4, 0x28] - cmp r0, r5 - bne _080380BA - movs r0, 0 - b _080380BC -_080380BA: - movs r0, 0xB -_080380BC: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8038078 - - thumb_func_start sub_80380C4 -sub_80380C4: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - bl sub_800D588 - lsls r0, 24 - adds r5, r4, 0 - cmp r0, 0 - bne _080380D8 - adds r5, r6, 0 -_080380D8: - ldr r4, [r5, 0x10] - movs r0, 0x2 - adds r1, r4, 0 - bl HasMail - lsls r0, 24 - cmp r0, 0 - bne _08038110 - movs r0, 0x4 - adds r1, r4, 0 - bl HasMail - lsls r0, 24 - cmp r0, 0 - bne _08038110 - movs r0, 0x6 - adds r1, r4, 0 - bl HasMail - lsls r0, 24 - cmp r0, 0 - bne _08038110 - ldr r0, [r5, 0x10] - bl sub_8095298 - lsls r0, 24 - cmp r0, 0 - beq _08038114 -_08038110: - movs r0, 0x7 - b _08038126 -_08038114: - bl FindOpenMailSlot - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - beq _08038124 - movs r0, 0 - b _08038126 -_08038124: - movs r0, 0xD -_08038126: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80380C4 - - thumb_func_start sub_803812C -sub_803812C: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - bl sub_800D588 - lsls r0, 24 - cmp r0, 0 - bne _0803813E - adds r4, r5, 0 -_0803813E: - ldr r1, [r4, 0x10] - movs r0, 0x1 - bl HasMail - lsls r0, 24 - cmp r0, 0 - bne _08038150 - movs r0, 0x9 - b _08038152 -_08038150: - movs r0, 0 -_08038152: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_803812C - - thumb_func_start sub_8038158 -sub_8038158: - movs r0, 0 - bx lr - thumb_func_end sub_8038158 - - thumb_func_start sub_803815C -sub_803815C: - push {r4,lr} - adds r3, r1, 0 - movs r4, 0 - cmp r0, 0xA - bhi _080381D2 - lsls r0, 2 - ldr r1, _08038170 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08038170: .4byte _08038174 - .align 2, 0 -_08038174: - .4byte _080381A0 - .4byte _080381A0 - .4byte _080381D2 - .4byte _080381B4 - .4byte _080381D2 - .4byte _080381BE - .4byte _080381D2 - .4byte _080381AA - .4byte _080381D2 - .4byte _080381D2 - .4byte _080381C8 -_080381A0: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8038014 - b _080381D0 -_080381AA: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8038078 - b _080381D0 -_080381B4: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_80380C4 - b _080381D0 -_080381BE: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_803812C - b _080381D0 -_080381C8: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8038158 -_080381D0: - adds r4, r0, 0 -_080381D2: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_803815C - - thumb_func_start sub_80381DC -sub_80381DC: - push {lr} - bl sub_8037F9C - pop {r0} - bx r0 - thumb_func_end sub_80381DC - - thumb_func_start sub_80381E8 -sub_80381E8: - push {lr} - bl sub_803815C - pop {r1} - bx r1 - thumb_func_end sub_80381E8 - - thumb_func_start sub_80381F4 -sub_80381F4: - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - adds r7, r2, 0 - movs r4, 0 - bl sub_803815C - str r0, [sp] - ldr r0, _08038218 - str r4, [r0] - bl sub_800D494 - mov r0, sp - movs r1, 0x4 - bl sub_800D59C - b _0803822E - .align 2, 0 -_08038218: .4byte gUnknown_202EC4C -_0803821C: - subs r0, r4, 0x3 - cmp r0, 0x2 - bls _08038272 - ldr r1, _08038250 - ldr r0, [r1] - cmp r0, 0x63 - bgt _0803827E - adds r0, 0x1 - str r0, [r1] -_0803822E: - bl sub_80373C4 - bl sub_800D33C - adds r4, r0, 0 - bl sub_800D570 - cmp r4, 0x2 - bne _0803821C - bl sub_800D600 - lsls r0, 24 - cmp r0, 0 - beq _08038254 - bl sub_8037DF0 - b _0803825E - .align 2, 0 -_08038250: .4byte gUnknown_202EC4C -_08038254: - bl sub_800D520 - bl sub_800D510 - movs r0, 0x5 -_0803825E: - str r0, [sp] - ldr r0, [sp] - cmp r0, 0 - bne _0803828A - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r7, 0 - bl sub_8037F9C - b _08038292 -_08038272: - bl sub_800D520 - bl sub_800D510 - movs r0, 0x1 - b _08038298 -_0803827E: - bl sub_800D520 - bl sub_800D510 - movs r0, 0xF - b _08038298 -_0803828A: - bl sub_800D520 - bl sub_800D510 -_08038292: - bl sub_800D520 - ldr r0, [sp] -_08038298: - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80381F4 - .align 2,0 diff --git a/asm/text.s b/asm/text.s index 2afc5070a..06954f8fc 100644 --- a/asm/text.s +++ b/asm/text.s @@ -6975,45 +6975,4 @@ _080097A8: .4byte 0x06017e00 _080097AC: .4byte gUnknown_80B88C0 thumb_func_end InitGraphics - thumb_func_start sub_80097B0 -sub_80097B0: - push {r4-r6,lr} - ldr r0, _080097F8 - ldr r1, _080097FC - bl OpenFileAndGetFileDataPtr - adds r6, r0, 0 - ldr r4, _08009800 - ldr r1, [r6, 0x4] - movs r2, 0x80 - lsls r2, 2 - adds r0, r4, 0 - bl CpuCopy - bl sub_80063B0 - adds r5, r4, 0 - adds r5, 0x40 - cmp r0, 0x1 - bne _080097D8 - adds r5, r4, 0 -_080097D8: - movs r4, 0 -_080097DA: - adds r0, r4, 0 - adds r0, 0xF0 - adds r1, r5, 0 - bl SetBGPaletteBufferColorArray - adds r5, 0x4 - adds r4, 0x1 - cmp r4, 0xF - ble _080097DA - adds r0, r6, 0 - bl CloseFile - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080097F8: .4byte gUnknown_80B88CC -_080097FC: .4byte gSystemFileArchive -_08009800: .4byte gUnknown_202D038 - thumb_func_end sub_80097B0 - .align 2, 0 @ Don't pad with nop. diff --git a/include/code_801EE10.h b/include/code_801EE10.h index b6ff7142e..10c8d7734 100644 --- a/include/code_801EE10.h +++ b/include/code_801EE10.h @@ -17,7 +17,7 @@ struct unkStruct_203B270 u32 unk50; u32 unk54; struct UnkTextStruct2 unk58[4]; - u8 *unkB8; + u8 *text; }; #endif diff --git a/include/code_8023144.h b/include/code_8023144.h new file mode 100644 index 000000000..750255bb9 --- /dev/null +++ b/include/code_8023144.h @@ -0,0 +1,27 @@ +#ifndef GUARD_CODE_8023144_H +#define GUARD_CODE_8023144_H + +struct unkStruct_203B294 +{ + // size: 0x1A8 + /* 0x0 */ s32 state; + /* 0x4 */ s32 fallbackState; + u8 iqSkillPreGummi[NUM_IQ_SKILLS]; + u8 iqSkillPostGummi[NUM_IQ_SKILLS]; + u32 availIQSkillPreGummi; + u32 availIQSkillPostGummi; + u32 unk40; // Gummi eaten flag? + struct Gummi gummi; + /* 0x48 */ struct PokemonStruct *pokeStruct; + u32 itemIndex; + struct Item item; + struct MenuStruct unk54; + struct MenuStruct unkA4; + u32 menuAction; + struct MenuItem unkF8[0x8]; + u16 unk138[0x8]; + struct UnkTextStruct2 unk148[4]; +}; + + +#endif // GUARD_CODE_8023144_H diff --git a/include/code_8094F88.h b/include/code_8094F88.h index 54d78e0ea..96a87dc1d 100644 --- a/include/code_8094F88.h +++ b/include/code_8094F88.h @@ -17,13 +17,12 @@ struct unkStruct_203B480 u32 unk10; u16 unk10_u16; } unk10; - /* 0x14 */ u8 playerName[0x20 - 0x14];; - struct Item unk20; + /* 0x14 */ u8 playerName[0x20 - 0x14]; + struct Item item; u32 unk24; u32 unk28; /* 0x2C */ s8 rescuesAllowed; u8 unk2D; - u8 padding4[0x30 - 0x2E]; }; // size: 0x5C diff --git a/include/dungeon.h b/include/dungeon.h index defd98a07..c5af3f4d7 100644 --- a/include/dungeon.h +++ b/include/dungeon.h @@ -39,7 +39,9 @@ const u8 *GetDungeonName1(u8 dungeon); u32 sub_80908D8(struct DungeonLocation *dungeon); u8 sub_8090910(struct DungeonLocation *dungeon, u32 param_2); bool8 sub_809095C(u8 dungeon); +u32 GetMaxItemsAllowed(u8 dungeon); s8 GetRescuesAllowed(u8 dungeon); bool8 HasCheckpoint(u8 dungeon); +s32 GetDungeonFloorCount(u8 dungeon); #endif //GUARD_DUNGEON_H diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index f218dccc1..27823b476 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -34,8 +34,8 @@ struct unkDungeonGlobal_unk1CE98_sub { /* 0x0 */ u8 buffer1[10]; /* 0xA */ u8 buffer2[10]; - s16 unk14; - u8 fill16[0x18 - 0x16]; + /* 0x14 */ s16 moveID; + /* 0x16 */ u8 fill16[0x2]; /* 0x18 */ struct DungeonLocation dungeonLocation; /* 0x1C */ struct Item heldItem; /* 0x20 */ u32 exp; @@ -109,7 +109,7 @@ struct Dungeon u8 unk66F; u8 unk670; /* 0x671 */ bool8 monsterHouseTriggered; - /* 0x672 */ u8 unk672; + /* 0x672 */ bool8 monsterHouseTriggeredEvent; u8 unk673; u8 unk674; u8 unk675; diff --git a/include/event_flag.h b/include/event_flag.h index 466a4b344..0fd643364 100644 --- a/include/event_flag.h +++ b/include/event_flag.h @@ -4,14 +4,32 @@ struct UnkEventStruct { /* 0x0 */ s16 *unk0; - /* 0x4 */ u32 *unk4; + /* 0x4 */ u8 *unk4; }; + +void sub_8001B88(s32 param_1,u32 *param_2,u32 *param_3); +void ScenarioCalc(s16 param_1, s32 param_2, s32 param_3); +bool8 sub_8001CC4(s16 param_1, u32 param_2, s32 param_3); +bool8 sub_8001D08(s16 param_1, u32 param_2, s32 param_3); +bool8 sub_8001D44(s16 param_1, u32 param_2, s32 param_3); +void sub_8001D88(void); +u32 _FlagCalc(s32 param_1, s32 param_2, u32 operation); +u8 _FlagJudge(s32 param_1, s32 param_2, u32 operation); +u32 FlagCalc(s32 r0, s32 r1, u32 operation); +void sub_800226C(u32 param_1, s16 param_2, s32 param_3, u32 operation); +void sub_80022A0(u32 param_1, s16 param_2, s16 param_3, u32 operation); +u8 FlagJudge(s32 r0, s32 r1, u32 operation); +u8 sub_80022F8(u32 param_1, s16 param_2, s32 param_3, u32 operation); +u8 sub_8002318(u32 param_1, s16 param_2, s16 param_3, u32 operation); +bool8 sub_80023E4(u32 param_1); +u8 sub_8002658(s16 param_1); +s16 sub_8002694(u8 param_1); bool8 sub_80026CC(s16 r0); void sub_80026E8(s16 r0); bool8 sub_8002700(void *r0); bool8 sub_8002718(u8 *r0); -void sub_8002758(u32 *r0); +void sub_8002758(s32 r0); u8 sub_800276C(void); #endif // GUARD_EVENT_FLAG_H diff --git a/include/exclusive_pokemon.h b/include/exclusive_pokemon.h index be105e700..14d00b945 100644 --- a/include/exclusive_pokemon.h +++ b/include/exclusive_pokemon.h @@ -15,8 +15,13 @@ struct ExclusivePokemon struct ExclusivePokemonData { - u8 fill0[0x48]; - u32 unk48[4]; + u8 unk0; + u32 unk4[1]; + u8 fill8[0x3C - 8]; + u32 unk3C[1]; + u8 fill40[8]; + u32 unk48[3]; + u32 unk54[1]; /* 0x58 */ bool8 Exclusives[NUM_EXCLUSIVE_POKEMON]; }; @@ -39,6 +44,17 @@ extern struct ExclusivePokemonData *gUnknown_203B498; void LoadExclusivePokemon(void); struct ExclusivePokemonData *GetExclusivePokemon(void); void InitializeExclusivePokemon(void); +void sub_8097FA8(u8 param_1); +void sub_8097FD0(u8 param_1); +void sub_8097FF8(void); +void sub_8098044(u8 param_1); +void sub_8098080(void); +u32 sub_80980A4(void); +void sub_80980B4(s16 pokeID); +bool8 sub_8098100(u8 param_1); +bool8 sub_8098134(s16 pokeID); +void sub_8098170(s32 param_1); +bool32 sub_80981A0(s32 param_1); bool8 IsExclusivePokemonUnlocked(s16 pokeID); void UnlockExclusivePokemon(s16 pokeID); void WriteExclusivePokemon(struct unkStruct_8094924 *r0); diff --git a/include/friend_area.h b/include/friend_area.h index 993358678..2a6bb36d1 100644 --- a/include/friend_area.h +++ b/include/friend_area.h @@ -8,6 +8,15 @@ struct FriendAreaSettings u32 price; }; +struct unkStruct_8092638 +{ + /* 0x0 */ s16 numPokemon; + s16 unk2; + /* 0x4 */ bool8 hasFriendArea; + u8 fill5[3]; + s32 unk8; +}; + void LoadFriendAreas(void); bool8 *GetBoughtFriendAreas(void); void InitializeFriendAreas(void); @@ -15,10 +24,11 @@ u8 sub_80923D4(s32 target); bool8 HasAllFriendAreas(void); bool8 GetFriendAreaStatus(u8 index); void UnlockFriendArea(u8 index); -u32 GetFriendAreaDescription(u8 index); +u8 *GetFriendAreaDescription(u8 index); u8 GetFriendAreaUnlockCondition(u8 index); -u32 GetFriendAreaPrice(u8 index); +s32 GetFriendAreaPrice(u8 index); const char *GetFriendAreaName(u8 index); +void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u8 param_4); u32 SaveFriendAreas(u8 *r0, u32 r1); u32 ReadSavedFriendAreas(u8 *r0, s32 r1); diff --git a/include/gulpin_shop.h b/include/gulpin_shop.h index be4b6adee..48ce06f20 100644 --- a/include/gulpin_shop.h +++ b/include/gulpin_shop.h @@ -33,5 +33,6 @@ struct GulpinShopWork u32 CreateGulpinShop(s32 isAsleep, s16 pokeSpecies, struct Move *moves); void DestroyGulpinShop(void); +bool8 GulpinIsNextMoveLinked(void); #endif diff --git a/include/item.h b/include/item.h index e890a7936..bca04270b 100644 --- a/include/item.h +++ b/include/item.h @@ -60,7 +60,8 @@ struct unkStruct_8090F58 enum ItemFlag { ITEM_FLAG_EXISTS = 1 << 0, - ITEM_FLAG_IN_SHOP = 1 << 1, + ITEM_FLAG_IN_SHOP = 1 << 1, // in a Kecleon shop + ITEM_FLAG_UNPAID = 1 << 2, // Picked up in Kecleon shop but not paid for yet ITEM_FLAG_STICKY = 1 << 3, ITEM_FLAG_SET = 1 << 4 // This item can be thrown by pressing L+R instead of having to go to the bag menu. }; diff --git a/include/kangaskhan_storage.h b/include/kangaskhan_storage.h index c43c51e7d..dcca82cf0 100644 --- a/include/kangaskhan_storage.h +++ b/include/kangaskhan_storage.h @@ -8,7 +8,7 @@ struct unkStruct_203B208 { // size: 0x14C - u32 unk0; + bool32 isAsleep; u32 currState; u32 fallbackState; struct Item storedItem; @@ -21,9 +21,15 @@ struct unkStruct_203B208 u16 unk4C[5]; struct MenuStruct unk58; u32 unkA8; - u8 unkAC[0xBC - 0xAC]; + u32 unkAC; + u32 unkB0; + u32 unkB4; + u32 unkB8; u32 unkBC; - u8 unkC0[0xD4 - 0xC0]; + struct UnkTextStruct2 *unkC0; + u32 unkC4; + u32 unkC8; + u8 unkCC[0xD4 - 0xCC]; u32 unkD4; struct OpenedFile *faceFile; u8 *faceData; diff --git a/include/main_menu.h b/include/main_menu.h index 606b6086b..3bcc50339 100644 --- a/include/main_menu.h +++ b/include/main_menu.h @@ -40,7 +40,7 @@ struct unkStruct_8035D94 u8 itemIndex_u8; u32 itemIndex_u32; } itemIndex; - u32 numItems; + s32 numItems; }; struct MainMenuSub diff --git a/include/menu_input.h b/include/menu_input.h index ca1030025..a23d14cf2 100644 --- a/include/menu_input.h +++ b/include/menu_input.h @@ -1,5 +1,8 @@ #include "menu.h" +u32 sub_8012A64(struct MenuInputStructSub *r0, s32 r1); +s32 GetKeyPress(struct MenuInputStruct *r0); +s32 sub_8012AE8(void); void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 color, u32 param_6); void sub_8012C60(u32 x, u32 y, u32 param_3, u32 color, u32 param_5); void sub_8012CAC(struct UnkTextStruct2 *param_1, const struct MenuItem *param_2); @@ -12,3 +15,24 @@ void sub_8012EBC(struct MenuStruct *param_1); bool8 sub_8012FD8(struct MenuStruct *param_1); bool8 sub_80130A8(struct MenuStruct *param_1); bool8 sub_8013114(struct MenuStruct *param_1, s32 *menuAction); +void sub_801317C(struct MenuInputStructSub *param_1); +void AddMenuCursorSprite(struct MenuInputStruct *param_1); +void sub_8013660(struct MenuInputStruct *param_1); +void UpdateMenuCursorSpriteCoords(struct MenuInputStruct *param_1); +void MoveMenuCursorDown(struct MenuInputStruct *param_1); +void sub_80136E0(struct MenuInputStruct *param_1, u8 param_2); +void MoveMenuCursorUp(struct MenuInputStruct *param_1); +void sub_8013744(struct MenuInputStruct *param_1, u8 param_2); +void sub_8013780(struct MenuInputStruct *param_1, s32 param_2); +s32 sub_80137A8(struct MenuInputStruct *param_1); +void sub_80137B0(struct MenuInputStruct *param_1, s32 param_2); +void sub_80137F8(struct MenuInputStruct *param_1, u32 param_2); +s32 sub_8013800(struct MenuInputStruct *param_1, s32 param_2); +void sub_8013818(struct MenuInputStruct *param_1, s32 param_2, u32 param_3, s32 param_4); +void sub_8013848(struct MenuInputStruct *param_1, s32 param_2, u32 param_3, s32 param_4); +void sub_8013878(struct MenuInputStruct *param_1, s32 param_2); +bool8 sub_80138B8(struct MenuInputStruct *param_1, bool8 param_2); +bool8 sub_8013938(struct MenuInputStruct *param_1); +void sub_8013984(struct MenuInputStruct * param_1); +void sub_8013A54(struct MenuInputStruct *param_1); +void sub_8013A7C(struct MenuInputStruct *param_1); diff --git a/include/moves.h b/include/moves.h index c6474ca66..5aed2b35d 100644 --- a/include/moves.h +++ b/include/moves.h @@ -57,5 +57,14 @@ void unk_LinkedSequencesToMoves8(struct Move* moves, struct Move linkedSequences int unk_FindMarkedMoveInLinkedSequences88_v2(struct Move linkedSequences[8][8]); void unk_LinkedSequencesToMoves8_v2(struct Move* moves, struct Move linkedSequences[8][8]); +bool8 IsMoveSet(int index, struct Move* struct_ptr); +bool8 IsMoveEnabled(int index, struct Move* struct_ptr); +bool8 TryLinkMovesAfter(int index, struct Move* moves); +bool8 UnlinkMovesAfter(int index, struct Move* moves); +bool8 ToggleSetMove(int index, struct Move* moves); +void UnSetMove(int index, struct Move* moves); +bool8 ToggleMoveEnabled(int index, struct Move* moves); +bool8 sub_8093318(int param_1, void* src_struct); +bool8 sub_809333C(int param_1, void* src_struct); #endif // GUARD_MOVES_H diff --git a/include/personality_test.h b/include/personality_test.h index 2b90ff5b3..2c0e39f6b 100644 --- a/include/personality_test.h +++ b/include/personality_test.h @@ -2,6 +2,7 @@ #define GUARD_PERSONALITY_TEST_H #include "constants/personality_test.h" +#include "input.h" #include "text.h" // Definitely wrong but need to figure out better structure later @@ -38,9 +39,7 @@ struct PersonalityTestTracker /* 0x44 */ s32 NatureTotals[NUM_PERSONALITIES]; /* 0x78 */ u8 QuestionTracker[NUM_QUIZ_QUESTIONS]; /* 0xB0 */ u32 playerGender; // 1 = Female, 0 = Male - u32 unkb4; - u32 unkb8; - u32 unkbc; + /* 0xB4 */ struct MenuInputStructSub input; }; struct PersonalityStruct_203B404 diff --git a/include/pokemon.h b/include/pokemon.h index 388a9890a..a6d12d403 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -196,6 +196,7 @@ void CopyMonsterNametoBuffer(u8 * buffer, s16 index); void CopyYellowMonsterNametoBuffer(u8 *buffer, s16 index); void CopyCyanMonsterNametoBuffer(u8 *buffer, s16 index); void PrintColoredPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon, s32 colorNum); +void sub_808D930(u8 *buffer, s32 index); void sub_808D9DC(u8 *buffer, struct PokemonStruct2 *param_2, s32 colorNum); void sub_808DA0C(u8 *buffer, struct PokemonStruct2 *param_2); void PeekPokemonItem(s16 index_, struct BulkItem* item); diff --git a/include/text_util.h b/include/text_util.h index 736af98bf..cbd3d882d 100644 --- a/include/text_util.h +++ b/include/text_util.h @@ -1,7 +1,7 @@ #ifndef GUARD_TEXT_UTIL_H #define GUARD_TEXT_UTIL_H -void sub_80922B4(u8 *buffer, u8 *string, s32 size); +void sub_80922B4(u8 *buffer, const u8 *string, s32 size); u32 sub_80922E4(u32 r0); void CopyStringtoBuffer(u8 *buffer, u8 *string); void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size); diff --git a/include/wigglytuff_shop.h b/include/wigglytuff_shop.h new file mode 100644 index 000000000..5d1c7f1b1 --- /dev/null +++ b/include/wigglytuff_shop.h @@ -0,0 +1,68 @@ +#ifndef GUARD_WIGGLYTUFF_SHOP_H +#define GUARD_WIGGLYTUFF_SHOP_H + +struct WigglytuffShop +{ + // size: 0x138 + bool32 isAsleep; + s32 state; + s32 fallbackState; + s32 friendAreaPrice; + u8 chosenFriendArea; + s16 chosenSpecies; + u32 menuAction1; + u32 menuAction2; + struct MenuItem unk1C[8]; + u16 unk5C[0x8]; + struct MenuStruct unk6C; + /* 0xBC */ struct OpenedFile *faceFile; + /* 0xC0 */ u8 *faceData; + u16 unkC4; + u16 unkC6; + u8 unkC8; + u8 unkC9; + u8 unkCA; + u8 fillCB; + u8 *unkCC; + struct UnkTextStruct2 unkD0[4]; + u32 unk130; + u32 unk134; +}; + +extern struct WigglytuffShop *gWigglytuffShop; + +enum WigglytuffStates +{ + WIGGLYTUFF_INIT = 0, + WIGGLYTUFF_MAIN_MENU = 1, + WIGGLYTUFF_INFO = 2, + WIGGLYTUFF_PRE_EXIT = 3, + WIGGLYTUFF_EXIT = 4, + WIGGLYTUFF_CANT_ADD_FRIEND_AREA = 5, + NO_MONEY = 6, + FRIEND_AREA_SELECT_BUY = 7, + FRIEND_AREA_SELECT_BUY_AGAIN = 8, + WIGGLYTUFF_UNK9 = 9, + WIGGLYTUFF_UNKA = 0xA, + WIGGLYTUFF_UNKB = 0xB, + CONFIRM_BUY_FRIEND_AREA = 0xC, + WIGGLYTUFF_UNKD = 0xD, + WIGGLYTUFF_UNKE = 0xE, + FRIEND_AREA_UNLOCKED = 0xF, + FRIEND_AREA_INFO = 0x10, + BUY_FRIEND_AREA = 0x11, + NO_FRIEND_AREAS = 0x12, + NOT_ENOUGH_MONEY = 0x13, + WIGGLYTUFF_CHECK = 0x14, + WIGGLYTUFF_CHECK_AGAIN = 0x15, + WIGGLYTUFF_UNK16 = 0x16, + WIGGLYTUFF_UNK17 = 0x17, + DISPLAY_POKEMON_FRIEND_AREA_INFO = 0x18, + WIGGLYTUFF_CHECK_HAS_FRIEND_AREA = 0x19, + WIGGLYTUFF_CHECK_POST_GAME = 0x1A, + WIGGLYTUFF_CHECK_WONDER_MAIL = 0x1B, + WIGGLYTUFF_CHECK_LEGENDARY = 0x1C, +}; + + +#endif // GUARD_WIGGLYTUFF_SHOP_H diff --git a/ld_script.txt b/ld_script.txt index 3a93386a8..9c569a899 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -47,8 +47,6 @@ SECTIONS { asm/code_2.o(.text); src/code.o(.text); asm/event_flag.o(.text); - src/event_flag_1.o(.text); - asm/event_flag_1.o(.text); src/event_flag.o(.text); asm/code_8002774.o(.text); src/memory.o(.text); @@ -92,7 +90,6 @@ SECTIONS { src/debug.o(.text); src/save.o(.text); src/code_8012A18.o(.text); - src/more_input.o(.text); src/menu_input.o(.text); asm/menu_input.o(.text); src/menu_input_1.o(.text); @@ -100,8 +97,6 @@ SECTIONS { src/code_8012A18_1.o(.text); src/felicity_bank.o(.text); src/kangaskhan_storage.o(.text); - asm/kangaskhan_storage.o(.text); - src/kangaskhan_storage_1.o(.text); src/kecleon_items.o(.text); asm/kecleon_items.o(.text); src/kecleon_items_1.o(.text); @@ -117,7 +112,13 @@ SECTIONS { src/code_801EE10.o(.text); asm/code_801EE10.o(.text); src/code_801EE10_mid.o(.text); + src/gulpin_shop_1.o(.text); + src/code_8021774_pre.o(.text); asm/code_801EE10_mid.o(.text); + src/code_8021774.o(.text); + src/wigglytuff_shop.o(.text); + src/code_8023144_pre.o(.text); + asm/code_8023144.o(.text); src/code_8023144.o(.text); asm/code_801EE10_1.o(.text); src/code_801EE10_1.o(.text); @@ -155,6 +156,7 @@ SECTIONS { src/trade_items_menu.o(.text); src/other_menus.o(.text); asm/other_menus.o(.text); + src/other_menus_1.o(.text); src/adventure_log_menu.o(.text); src/unk_menu_203B360.o(.text); src/save_menu.o(.text); @@ -284,7 +286,6 @@ SECTIONS { asm/code_8094148.o(.text); src/number_util.o(.text); src/code_809447C.o(.text); - asm/code_809447C.o(.text); src/code_8092334.o(.text); src/game_options.o(.text); asm/code_8094D28.o(.text); @@ -304,8 +305,6 @@ SECTIONS { asm/code_8097DD0.o(.text); src/code_8097F40.o(.text); src/exclusive_pokemon.o(.text); - asm/exclusive_pokemon.o(.text); - src/exclusive_pokemon_1.o(.text); src/position_util.o(.text); asm/code_8098468.o(.text); src/ground_main.o(.text); diff --git a/src/adventure_log.c b/src/adventure_log.c index 88c5c2802..f3ca0fd1a 100644 --- a/src/adventure_log.c +++ b/src/adventure_log.c @@ -41,11 +41,7 @@ const u8 fill_adven[] = "pksdir0"; void sub_8032084(); void DisplayAdventureLog(); -extern void sub_8013818(void *, u32, u32, u32); -extern bool8 sub_8013938(struct MenuInputStruct *); -extern void sub_8013660(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); -extern u32 GetKeyPress(struct MenuInputStruct *); extern bool8 sub_8097710(u8); extern s16 sub_80978B8(); @@ -59,7 +55,6 @@ extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern void xxx_format_and_draw(u32, u32, const char *, u32, u32); const u8 *GetAdventureLogLine(u8 index); -extern s32 sub_8013800(void *, s32); extern u32 gUnknown_202DE30; u32 CreateAdventureLogScreen(u32 param_1) @@ -73,7 +68,7 @@ u32 CreateAdventureLogScreen(u32 param_1) ResetUnusedInputStruct(); sub_800641C(gAdventureLog->unk3C,1,1); - sub_8013818(gAdventureLog,0x20,8,param_1); + sub_8013818(&gAdventureLog->input,0x20,8,param_1); sub_8032084(); DisplayAdventureLog(); return 1; @@ -227,41 +222,41 @@ void DisplayAdventureLog(void) case 0xc: v1 = sub_80978B8(); gUnknown_202DE30 = (s16)v1; - xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); + xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); break; case 7: v2 = sub_8097880(); gUnknown_202DE30 = (s16)v2; - xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); + xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); break; case 0xb: v3 = sub_8097838(); gUnknown_202DE30 = (s16)v3; - xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); + xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); break; case 8: v4 = sub_80977B8(); gUnknown_202DE30 = v4; - xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); + xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); break; case 9: v5 = sub_80977F8(); gUnknown_202DE30 = v5; - xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); + xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); break; case 10: v6 = sub_8097870(); gUnknown_202DE30 = (s16)v6; // fallthrough default: - xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); + xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); break; } } else { // Draw the ?????????? across the row - xxx_call_draw_string(8, sub_8013800(gAdventureLog, counter), gAdventureLogTextPlaceholder, gAdventureLog->unk34, 0); + xxx_call_draw_string(8, sub_8013800(&gAdventureLog->input, counter), gAdventureLogTextPlaceholder, gAdventureLog->unk34, 0); } } sub_80073E0(gAdventureLog->unk34); diff --git a/src/code.c b/src/code.c index 348465b0d..03d146058 100644 --- a/src/code.c +++ b/src/code.c @@ -1,4 +1,5 @@ #include "global.h" +#include "event_flag.h" extern void xxx_dungeon_8042F6C(u32 r0); extern void NDS_LoadOverlay_GroundMain(); @@ -49,7 +50,6 @@ struct unkStruct_80B7394 }; extern struct unkStruct_80B7394 gUnknown_80B7394[]; -void ScenarioCalc(s16 param_1,s32 param_2,s32 param_3); extern void sub_80015C0(u32, u32); extern void sub_800199C(u32, s32, u32, s32); extern void sub_80018D8(u32, u32, u32); diff --git a/src/code_8009804.c b/src/code_8009804.c index d06bf6949..98364c50b 100644 --- a/src/code_8009804.c +++ b/src/code_8009804.c @@ -1,9 +1,11 @@ #include "global.h" +#include "file_system.h" extern u8 gUnknown_202D238[4]; - extern s32 gUnknown_202D23C; extern u16 gUnknown_202B038[4][32][32]; +extern u8 gUnknown_80B88CC[]; +extern struct FileArchive gSystemFileArchive; struct unkStruct_202D240 { @@ -16,16 +18,37 @@ extern struct unkStruct_202D240 gUnknown_202D240[8]; struct unkStruct_202D038 { // size: 0x40 - u32 unk0; - u32 unk4; - u8 fill[0x40 - 0x8]; + u32 unk0[0x10]; }; extern struct unkStruct_202D038 gUnknown_202D038[8]; extern void CpuCopy(void* dest, void *src, s32 size); +extern void SetBGPaletteBufferColorArray(s32 index, void *colorArray); extern void sub_8009A1C(u32); +u32 sub_80063B0(void); +void sub_80097B0(void) +{ + struct OpenedFile *fontpalFile; + s32 index; + u32 *ptr; + + fontpalFile = OpenFileAndGetFileDataPtr(gUnknown_80B88CC,&gSystemFileArchive); // fontpal + CpuCopy(gUnknown_202D038, fontpalFile->data, sizeof(gUnknown_202D038)); + if (sub_80063B0() == 1) { + ptr = &gUnknown_202D038[0].unk0[0]; + } + else + { + ptr = &gUnknown_202D038[1].unk0[0]; + } + for(index = 0; index < 0x10; ptr++, index++) + { + SetBGPaletteBufferColorArray(index + 0xf0, ptr); + } + CloseFile(fontpalFile); +} void vram_related_8009804(void) { @@ -131,7 +154,7 @@ void sub_80099F0(u32 r0) s32 iVar2; for(iVar2 = 0; iVar2 < 8; iVar2++) { - gUnknown_202D038[iVar2].unk4 = r0; + gUnknown_202D038[iVar2].unk0[1] = r0; } } diff --git a/src/code_8012A18_1.c b/src/code_8012A18_1.c index 6e7104ccc..dc3031d94 100644 --- a/src/code_8012A18_1.c +++ b/src/code_8012A18_1.c @@ -4,6 +4,7 @@ #include "memory.h" #include "input.h" #include "text.h" +#include "text_util.h" struct unkStruct_203B200 { @@ -34,7 +35,6 @@ extern void sub_80160F4(u32); bool8 IsNameEmpty(void); extern u32 sub_80154F0(void); extern void sub_80155F0(void); -extern void sub_80922B4(u8 *, u8 *, s32); void nullsub_36(void); void sub_8016110(void); diff --git a/src/code_801B3C0.c b/src/code_801B3C0.c index 348219efd..aa55fce30 100644 --- a/src/code_801B3C0.c +++ b/src/code_801B3C0.c @@ -23,9 +23,7 @@ struct unkStruct_203B230 u32 unk20; u32 unk24; struct UnkTextStruct2 unk28[4]; - u32 unk88; - u32 unk8C; - u32 unk90; + struct MenuInputStructSub unk88; }; extern struct unkStruct_203B230 *gUnknown_203B230; @@ -93,7 +91,6 @@ extern void sub_80073B8(u32); extern void xxx_format_and_draw(u32, u32, u8 *, u32, u32); extern void PlayMenuSoundEffect(u32); extern void sub_8013F84(void); -extern u32 sub_8012A64(u32 *, u32); extern s32 sub_80913E0(struct Item *, u32, struct subStruct_203B240 **); extern void sub_80141B4(u8 *, u32, u32 *, u32); extern void sub_801BB20(void); @@ -102,7 +99,6 @@ extern void sub_801A9E0(void); extern void sub_801BC24(void); extern void sub_801A5D8(u32, u32, u32, u32); extern void sub_8014248(const char *, u32, u32, struct MenuItem *, u32, u32, u32, u32, u32); -extern void sub_801317C(u32 *); extern void sub_80140B4(struct UnkTextStruct2 *); extern void sub_801B46C(u32); extern void ResetSprites(u32); diff --git a/src/code_801C620.c b/src/code_801C620.c index 04d392f5d..175242df0 100644 --- a/src/code_801C620.c +++ b/src/code_801C620.c @@ -56,9 +56,7 @@ struct unkStruct_203B240 u32 unk20; u32 unk24; struct UnkTextStruct2 unk28[4]; - u32 unk88; - u32 unk8C; - u32 unk90; + struct MenuInputStructSub unk88; }; struct unkStruct_203B244 @@ -143,20 +141,16 @@ extern u8 *gUnknown_80D4970[]; void sub_8007B7C(s32, s32, s32, s32, s32); extern bool8 sub_801CF14(s32); -extern void sub_8013818(struct MenuInputStruct *, u32, u32, u32); extern u32 sub_801CE58(void); -extern void sub_8013984(struct MenuInputStruct *); 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 sub_8008C54(u32); extern void sub_80073B8(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 * GetIQSkillDescription(u8 r0); @@ -164,14 +158,9 @@ extern s32 GetNumAvailableIQSkills(u8 *param_1, s32 pokeIQ); extern void sub_8013C68(u32 *); extern char * GetIQSkillName(u8 r0); extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); -extern s32 sub_8013800(struct MenuInputStruct *, s32); extern u32 sub_80095E4(s16, u32); extern void sub_801C440(void); extern void sub_801C4C8(void); -extern void AddMenuCursorSprite(struct MenuInputStruct *); -extern u8 sub_80138B8(struct MenuInputStruct *, u32); -extern void sub_8013660(struct MenuInputStruct *); -extern s32 GetKeyPress(struct MenuInputStruct *); extern bool8 HasNoAvailIQSkills(s16 species); extern u32 sub_801C674(void); extern void sub_801C6B4(void); diff --git a/src/code_801D760.c b/src/code_801D760.c index 81c5cdaac..4013c6019 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -29,15 +29,9 @@ extern struct unkStruct_203B258 *gUnknown_203B258; extern struct UnkTextStruct2 gUnknown_80DBF88; extern struct UnkTextStruct2 gUnknown_80DBF70; -extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); -extern void sub_8013878(struct MenuInputStruct *, s32); -extern u8 sub_80138B8(struct MenuInputStruct *, u32); -extern u32 GetKeyPress(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); extern void sub_801DB54(); extern void sub_801DBD4(); -extern void sub_8013984(struct MenuInputStruct *); -extern void AddMenuCursorSprite(struct MenuInputStruct *); extern u32 sub_801BF48(void); extern void sub_801BF98(void); diff --git a/src/code_801EE10.c b/src/code_801EE10.c index ea6e5a000..b230640c5 100644 --- a/src/code_801EE10.c +++ b/src/code_801EE10.c @@ -4,19 +4,17 @@ #include "memory.h" #include "input.h" #include "code_801EE10.h" +#include "menu_input.h" extern struct unkStruct_203B270 *gUnknown_203B270; extern struct UnkTextStruct2 gUnknown_80DC25C; extern struct UnkTextStruct2 gUnknown_80DC274; -extern void sub_8012D08(void *, u32); -extern void sub_8013818(void *, u32, u32, u32); u32 sub_8006544(u32 index); s32 sub_801F3F8(void); -void sub_8013780(struct MenuInputStruct*, u32); void sub_801F280(u32); -u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u8 *param_5,u32 param_6) +u8 sub_801EE10(u32 param_1, s16 species, struct Move *moves, u32 param_4, u8 *text, u32 param_6) { s32 iVar5; s32 iVar8; @@ -24,7 +22,7 @@ u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u8 *param_ u8 param_4_u8; s32 four; - species_s32 = species; + species_s32 = species; param_4_u8 = param_4; gUnknown_203B270 = MemoryAlloc(sizeof(struct unkStruct_203B270), 8); gUnknown_203B270->unk4 = param_4_u8; @@ -47,7 +45,7 @@ u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u8 *param_ gUnknown_203B270->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32]; gUnknown_203B270->isTeamLeader = gUnknown_203B270->pokeStruct->isTeamLeader; gUnknown_203B270->moves = moves; - gUnknown_203B270->unkB8 = param_5; + gUnknown_203B270->text = text; iVar8 = iVar5 = sub_801F3F8(); four = 4; if (iVar8 < four) { @@ -56,7 +54,7 @@ u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u8 *param_ sub_8006518(gUnknown_203B270->unk58); gUnknown_203B270->unk50 = param_6; gUnknown_203B270->unk58[param_6] = gUnknown_80DC25C; - if (gUnknown_203B270->unkB8 != 0) { + if (gUnknown_203B270->text != NULL) { gUnknown_203B270->unk54 = sub_8006544(param_6); gUnknown_203B270->unk58[gUnknown_203B270->unk54] = gUnknown_80DC274; } diff --git a/src/code_801EE10_1.c b/src/code_801EE10_1.c index 046722ee7..5055072a6 100644 --- a/src/code_801EE10_1.c +++ b/src/code_801EE10_1.c @@ -5,6 +5,8 @@ #include "input.h" #include "memory.h" #include "text.h" +#include "text_util.h" +#include "menu_input.h" struct unkStruct_203B2AC { @@ -45,16 +47,11 @@ extern struct unkStruct_3001B60 *gUnknown_3001B60; extern struct UnkTextStruct2 gUnknown_80DC9B0; extern struct UnkTextStruct2 gUnknown_80DC9C8; -extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); extern bool8 sub_80023E4(u32); extern void sub_808FF20(u32 *, struct PokemonStruct *, bool8); extern void CreatePokemonInfoTabScreen(u32, s16, u32 *, u32 *, u32); -extern s32 GetKeyPress(struct MenuInputStruct*); -extern bool8 sub_8013938(struct MenuInputStruct*); extern void sub_802452C(void); extern void PlayMenuSoundEffect(u32); -extern void sub_8013984(struct MenuInputStruct*); -void sub_80922B4(u8 *buffer, u8 *string, s32 size); bool8 ComparePokemonNames(s16 a1, s16 a2); void sub_8024588(void); diff --git a/src/code_801EE10_mid.c b/src/code_801EE10_mid.c index 6bc0e6fee..e59f6821b 100644 --- a/src/code_801EE10_mid.c +++ b/src/code_801EE10_mid.c @@ -6,6 +6,8 @@ #include "code_800D090.h" #include "moves.h" #include "code_801EE10.h" +#include "menu_input.h" +#include "subStruct_203B240.h" extern struct unkStruct_203B270 *gUnknown_203B270; @@ -22,22 +24,50 @@ struct unkStruct_203B274 u8 unk3E4[4]; }; extern struct unkStruct_203B274 *gUnknown_203B274; + +struct unkStruct_203B278 +{ + s32 state; + u16 *moveIDs; + u16 unk8; + u16 fillA; + s32 unkC; + s32 unk10; + struct subStruct_203B240 *unk14[4]; + u32 unk24; + struct MenuInputStruct unk28; + u32 unk5C; + struct UnkTextStruct2 *unk60; + struct UnkTextStruct2 unk64[4]; + u8 unkC4[4]; + struct MenuInputStructSub unkC8; +}; + +extern struct unkStruct_203B278 *gUnknown_203B278; + extern struct UnkTextStruct2 gUnknown_80DC2C4; extern struct UnkTextStruct2 gUnknown_80DC2AC; +extern struct UnkTextStruct2 gUnknown_80DC2F8; +extern u8 gAvailablePokemonNames[]; +extern u8 gUnknown_80DC310[]; extern u8 gUnknown_80DC2DC[]; -extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); -extern s32 GetKeyPress(struct MenuInputStruct*); -extern void sub_8013660(struct MenuInputStruct*); -extern void AddMenuCursorSprite(struct MenuInputStruct*); -extern u8 sub_80138B8(struct MenuInputStruct*, u32); extern void PlayMenuSoundEffect(u32); -extern void sub_8013984(struct MenuInputStruct*); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern s32 sub_8013800(struct MenuInputStruct*, s32); +extern void ResetSprites(u32); +extern void sub_80140B4(struct UnkTextStruct2 *); +extern void sub_801F918(s32); +extern void sub_801FA58(void); +extern void sub_801FAD4(void); +extern void sub_801F930(void); +extern void sub_801F9A4(void); +int unk_MoveIDPrintMoveDescription(int a1, u16 moveID, int a3, struct subStruct_203B240** a4); +extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); +void sub_8013F84(void); + u32 sub_801F7E4(void); void sub_801F690(void); @@ -80,7 +110,7 @@ bool8 sub_801F428(s16 index, s32 param_2) { sub_8013818(&gUnknown_203B274->input, sub_801F7E4(), 4, param_2); sub_801F690(); sub_801F700(); - return 1; + return TRUE; } u32 sub_801F520(u8 param_1) @@ -224,3 +254,178 @@ u32 sub_801F7E4(void) sub_808E218(gUnknown_203B274->unk4, gUnknown_203B274->pokeStruct); return gUnknown_203B274->unk4->count; } + +bool8 sub_801F808(u16 *moveIDs) +{ + s32 index; + + ResetSprites(1); + gUnknown_203B278 = MemoryAlloc(sizeof(struct unkStruct_203B278), 8); + gUnknown_203B278->unk5C = 0; + gUnknown_203B278->unk60 = gUnknown_203B278->unk64; + sub_80140B4(gUnknown_203B278->unk64); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B278->unk64,1,1); + gUnknown_203B278->moveIDs = moveIDs; + + for(index = 4; index > 1; index--) + { + if(gUnknown_203B278->moveIDs[index - 1] != 0) break; + } + sub_8013818(&gUnknown_203B278->unk28,index,1,gUnknown_203B278->unk5C); + sub_801317C(&gUnknown_203B278->unkC8); + sub_801F918(0); + return 1; +} + +s32 sub_801F890(void) +{ + switch(gUnknown_203B278->state) + { + case 0: + sub_801FA58(); + break; + case 1: + sub_801FAD4(); + break; + case 3: + return 3; + default: + case 2: + return 2; + } + return 0; +} + +void sub_801F8D0(void) +{ + if(gUnknown_203B278) + { + gUnknown_203B278->unk64[gUnknown_203B278->unk5C] = gUnknown_80DC2F8; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B278->unk64, 1, 1); + MemoryFree(gUnknown_203B278); + gUnknown_203B278 = NULL; + } +} + +void sub_801F918(s32 newState) +{ + gUnknown_203B278->state = newState; + sub_801F930(); + sub_801F9A4(); +} + +void sub_801F930(void) +{ + sub_80140B4(gUnknown_203B278->unk64); + switch(gUnknown_203B278->state) + { + case 0: + gUnknown_203B278->unk60->unk14 = gUnknown_203B278->unkC4; + gUnknown_203B278->unkC4[0] = gUnknown_203B278->unk28.unk20; + gUnknown_203B278->unkC4[1] = gUnknown_203B278->unk28.unk1E; + gUnknown_203B278->unkC4[2] = 0x10; + gUnknown_203B278->unkC4[3] = 0; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B278->unk64, 1, 1); + break; + case 1: + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B278->unk64, 1, 1); + break; + default: + break; + } +} + +void sub_801F9A4(void) +{ + char **name; + switch(gUnknown_203B278->state) + { + case 0: + sub_8008C54(gUnknown_203B278->unk5C); + gUnknown_203B278->unk8 = gUnknown_203B278->moveIDs[gUnknown_203B278->unk28.unk1E]; + gUnknown_203B278->unk10 = unk_MoveIDPrintMoveDescription(gUnknown_203B278->unk28.unk1E,gUnknown_203B278->unk8,gUnknown_203B278->unk5C,gUnknown_203B278->unk14); + gUnknown_203B278->unk24 = 0; + break; + case 1: + sub_8008C54(gUnknown_203B278->unk5C); + sub_80073B8(gUnknown_203B278->unk5C); + name = &(gUnknown_203B278->unk14[gUnknown_203B278->unkC]->pokeName); + strcpy(gAvailablePokemonNames, *name); + xxx_format_and_draw(0x10,0,gUnknown_80DC310,gUnknown_203B278->unk5C,0); // $m0 + xxx_format_and_draw(4,0x10,gUnknown_203B278->unk14[gUnknown_203B278->unkC]->unk4,gUnknown_203B278->unk5C,0); + sub_80073E0(gUnknown_203B278->unk5C); + break; + case 2: + break; + } +} + +void sub_801FA58(void) +{ + if(gUnknown_203B278->unk10 != 0) + { + if(gUnknown_203B278->unk24 & 8) + { + sub_8013F84(); + } + gUnknown_203B278->unk24++; + } + switch(sub_8012A64(&gUnknown_203B278->unkC8, gUnknown_203B278->unk5C)) + { + case 1: + PlayMenuSoundEffect(0); + if(gUnknown_203B278->unk10 != 0) + { + gUnknown_203B278->unkC = 0; + sub_801F918(1); + } + else + { + sub_801F918(3); + } + break; + case 2: + PlayMenuSoundEffect(1); + sub_801F918(2); + break; + default: + if(sub_8013938(&gUnknown_203B278->unk28)) + { + sub_801F918(0); + } + } +} + +void sub_801FAD4(void) +{ + if(gUnknown_203B278->unkC < gUnknown_203B278->unk10 - 1) + { + if(gUnknown_203B278->unk24 & 8) + { + sub_8013F84(); + } + gUnknown_203B278->unk24++; + } + switch(sub_8012A64(&gUnknown_203B278->unkC8, gUnknown_203B278->unk5C)) + { + case 1: + PlayMenuSoundEffect(0); + gUnknown_203B278->unkC++; + if(gUnknown_203B278->unkC < gUnknown_203B278->unk10) + { + sub_801F918(1); + } + else { + sub_801F918(0); + } + break; + case 2: + PlayMenuSoundEffect(1); + sub_801F918(2); + break; + } +} diff --git a/src/code_8021774.c b/src/code_8021774.c new file mode 100644 index 000000000..072e52ed7 --- /dev/null +++ b/src/code_8021774.c @@ -0,0 +1,448 @@ +#include "constants/friend_area.h" +#include "global.h" +#include "input.h" +#include "memory.h" +#include "text.h" +#include "pokemon.h" +#include "exclusive_pokemon.h" +#include "friend_area.h" +#include "code_800D090.h" +#include "menu_input.h" + +struct unkStruct_203B28C +{ + struct MenuInputStructSub unk0; + u8 friendArea; + u8 unkD; + s16 unkE[0x10]; + u32 unk30[0x10]; + s32 unk70; + s32 unk74; + struct UnkTextStruct2 *unk78; + struct UnkTextStruct2 unk7C[4]; + u8 unkDC[4]; +}; +extern struct unkStruct_203B28C *gUnknown_203B28C; + +struct unkStruct_203B280 +{ + u8 unk0[NUM_FRIEND_AREAS]; + u32 unk3C; + struct MenuInputStruct unk40; + s32 unk74; + struct UnkTextStruct2 *unk78; + struct UnkTextStruct2 unk7C[4]; + u8 unkDC[4]; +}; +extern struct unkStruct_203B280 *gUnknown_203B280; + + + +extern struct UnkTextStruct2 gUnknown_80DC4BC; +extern struct UnkTextStruct2 gUnknown_80DC4D8; +s16 GetBaseSpeciesNoUnown(s16 index); +s32 sub_8021B58(s16 param_1); + +extern u8 gUnknown_80DC518[]; +extern u8 gUnknown_80DC4F0[]; +extern u8 *gUnknown_80D49BC[]; +extern u8 gUnknown_80DC524[]; +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); +extern void sub_8092578(u8 *buffer, u8 index, u8 r2); +void sub_800792C(u32, u32, u32, u32, u32); +void sub_8007A78(u32, u32, u32, u32, u32); + +extern void sub_8021878(void); +extern void sub_8021894(void); +extern void PlayMenuSoundEffect(u32); +extern void sub_8021A60(void); +void sub_8021820(void); +extern u8 *gFriendAreas; +u8 sub_80023E4(u32); + +s32 sub_8021664(void) +{ + s32 index; + s32 counter; + + counter = 0; + switch(gUnknown_203B280->unk3C) + { + case 0: + for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) + { + gUnknown_203B280->unk0[counter] = index; + counter++; + } + break; + case 1: + for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) + { + if(gFriendAreas[index]) + { + gUnknown_203B280->unk0[counter] = index; + counter++; + } + } + break; + case 2: + for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) + { + if (gFriendAreas[index] == 0) { + switch(GetFriendAreaUnlockCondition(index)) + { + case UNLOCK_SHOP_STORY: + gUnknown_203B280->unk0[counter] = index; + counter++; + break; + case UNLOCK_SHOP_POST_GAME: + if(sub_80023E4(6) != 0) { + gUnknown_203B280->unk0[counter] = index; + counter++; + } + break; + } + } + } + break; + } + return counter; +} + + +u8 sub_8021700(u32 mode) +{ + s32 index; + + switch(mode) + { + case 0: + return FALSE; + case 1: + for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) + { + if (gFriendAreas[index] != 0) { + return FALSE; + } + } + break; + case 2: + for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) + { + if (gFriendAreas[index] == 0) { + switch(GetFriendAreaUnlockCondition(index)) + { + case UNLOCK_SHOP_STORY: + return FALSE; + case UNLOCK_SHOP_POST_GAME: + if(sub_80023E4(6) != 0) { + return FALSE; + } + break; + } + } + } + break; + } + return TRUE; +} + + +bool8 sub_8021774(u8 friendArea, u8 param_2, s32 param_3) +{ + gUnknown_203B28C = MemoryAlloc(sizeof(struct unkStruct_203B28C), 8); + gUnknown_203B28C->friendArea = friendArea; + gUnknown_203B28C->unkD = param_2; + sub_801317C(&gUnknown_203B28C->unk0); + sub_8021A60(); + gUnknown_203B28C->unk74 = param_3; + gUnknown_203B28C->unk78 = &gUnknown_203B28C->unk7C[param_3]; + sub_8006518(gUnknown_203B28C->unk7C); + gUnknown_203B28C->unk7C[gUnknown_203B28C->unk74] = gUnknown_80DC4D8; + sub_8021820(); + return TRUE; +} + +u32 sub_80217EC(void) +{ + switch(sub_8012A64(&gUnknown_203B28C->unk0, gUnknown_203B28C->unk74)) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + PlayMenuSoundEffect(0); + return 3; + default: + return 0; + } +} + +void sub_8021820(void) +{ + sub_8021878(); + sub_8021894(); +} + +void sub_8021830(void) +{ + if(gUnknown_203B28C) + { + gUnknown_203B28C->unk7C[gUnknown_203B28C->unk74] = gUnknown_80DC4BC; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B28C->unk7C, 1, 1); + MemoryFree(gUnknown_203B28C); + gUnknown_203B28C = NULL; + } +} + +void sub_8021878(void) +{ + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B28C->unk7C, 1, 1); +} + +void sub_8021894(void) +{ + u8 *string; + s32 iVar1; + u32 y; + u32 x; + s32 index; + u8 buffer1 [256]; + u8 buffer2 [100]; + + sub_80073B8(gUnknown_203B28C->unk74); + sub_8092578(buffer1,gUnknown_203B28C->friendArea,0); + xxx_call_draw_string(0x14,0,buffer1,gUnknown_203B28C->unk74,0); + string = GetFriendAreaDescription(gUnknown_203B28C->friendArea); + xxx_call_draw_string(10,0x14,string,gUnknown_203B28C->unk74,0); + if (gUnknown_203B28C->unkD != 0) { + xxx_call_draw_string(0x20,0x3c,gUnknown_80DC4F0,gUnknown_203B28C->unk74,0); + } + else { + xxx_call_draw_string(0x20,0x3c,gUnknown_80DC518,gUnknown_203B28C->unk74,0); // Inhabitants + } + sub_800792C(gUnknown_203B28C->unk74,4,0x40,0x14,4); + if (gUnknown_203B28C->unkD != 0) { + sub_800792C(gUnknown_203B28C->unk74,0xb8,0x40,0x14,4); + } + else { + sub_800792C(gUnknown_203B28C->unk74,0x5e,0x40,0x6e,4); + } + sub_800792C(gUnknown_203B28C->unk74,4,0x82,200,4); + sub_8007A78(gUnknown_203B28C->unk74,3,0x40,0x43,4); + sub_8007A78(gUnknown_203B28C->unk74,0xcc,0x40,0x43,4); + for(index = 0; index < gUnknown_203B28C->unk70; index++) + { + iVar1 = index % 3; + x = iVar1 * 0x3f + 7; + iVar1 = index / 3; + y = iVar1 * 0xc + 0x47; + sub_808D930(buffer2, gUnknown_203B28C->unkE[index]); + switch(gUnknown_203B28C->unk30[index]) + { + case 0: + xxx_call_draw_string(x,y,*gUnknown_80D49BC,gUnknown_203B28C->unk74,0); // ??? + break; + case 1: + xxx_call_draw_string(x,y,buffer2,gUnknown_203B28C->unk74,0); // %s + break; + case 2: + sprintfStatic(buffer1,gUnknown_80DC524,buffer2); // {CYAN} %s {END_COLOR} + xxx_call_draw_string(x,y,buffer1,gUnknown_203B28C->unk74,0); + break; + } + } + sub_80073E0(gUnknown_203B28C->unk74); +} + +// https://decomp.me/scratch/P2BiC +// 99.40% matching (Seth) +#ifndef NONMATCHING +NAKED +void sub_8021A60(void) +{ + asm_unified( + "\tpush {r4-r7,lr}\n" + "\tldr r2, _08021B4C\n" + "\tldr r1, [r2]\n" + "\tmovs r0, 0\n" + "\tstr r0, [r1, 0x70]\n" + "\tmovs r6, 0\n" + "\tadds r4, r2, 0\n" + "\tmovs r3, 0\n" +"_08021A70:\n" + "\tldr r1, [r4]\n" + "\tlsls r2, r6, 1\n" + "\tadds r0, r1, 0\n" + "\tadds r0, 0xE\n" + "\tadds r0, r2\n" + "\tstrh r3, [r0]\n" + "\tlsls r0, r6, 2\n" + "\tadds r1, 0x30\n" + "\tadds r1, r0\n" + "\tstr r3, [r1]\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0xF\n" + "\tble _08021A70\n" + "\tmovs r6, 0\n" + "\tldr r7, _08021B4C\n" +"_08021A8E:\n" + "\tlsls r0, r6, 16\n" + "\tasrs r5, r0, 16\n" + "\tldr r4, [r7]\n" + "\tadds r0, r5, 0\n" + "\tbl GetFriendArea\n" + "\tldrb r1, [r4, 0xC]\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r1, r0\n" + "\tbne _08021AC4\n" + "\tadds r0, r5, 0\n" + "\tbl GetBaseSpeciesNoUnown\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r5, r0\n" + "\tbne _08021AC4\n" + "\tldr r3, [r7]\n" + "\tldr r1, [r3, 0x70]\n" + "\tlsls r2, r1, 1\n" + "\tadds r0, r3, 0\n" + "\tadds r0, 0xE\n" + "\tadds r0, r2\n" + "\tstrh r5, [r0]\n" + "\tadds r1, 0x1\n" + "\tstr r1, [r3, 0x70]\n" +"_08021AC4:\n" + "\tadds r6, 0x1\n" + "\tldr r0, _08021B50\n" + "\tcmp r6, r0\n" + "\tble _08021A8E\n" + "\tmovs r6, 0\n" +"_08021ACE:\n" + "\tlsls r0, r6, 16\n" + "\tasrs r4, r0, 16\n" + "\tadds r0, r4, 0\n" + "\tbl sub_8098134\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _08021AFC\n" + "\tadds r0, r4, 0\n" + "\tbl sub_8021B58\n" + "\tadds r2, r0, 0\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tcmp r2, r0\n" + "\tbeq _08021AFC\n" + "\tldr r0, _08021B4C\n" + "\tldr r1, [r0]\n" + "\tlsls r0, r2, 2\n" + "\tadds r1, 0x30\n" + "\tadds r1, r0\n" + "\tmovs r0, 0x1\n" + "\tstr r0, [r1]\n" +"_08021AFC:\n" + "\tadds r6, 0x1\n" + "\tldr r0, _08021B50\n" + "\tcmp r6, r0\n" + "\tble _08021ACE\n" + "\tmovs r6, 0\n" + "\tldr r4, _08021B54\n" +"_08021B08:\n" + "\tmovs r0, 0x58\n" + "\tadds r1, r6, 0\n" + "\tmuls r1, r0\n" + "\tldr r0, [r4]\n" + "\tadds r2, r0, r1\n" + "\tldrb r1, [r2]\n" + "\tmovs r0, 0x1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _08021B3C\n" + "\tmovs r1, 0x8\n" + "\tldrsh r0, [r2, r1]\n" + "\tbl sub_8021B58\n" + "\tadds r2, r0, 0\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tcmp r2, r0\n" + "\tbeq _08021B3C\n" + "\tldr r0, _08021B4C\n" + "\tldr r1, [r0]\n" + "\tlsls r0, r2, 2\n" + "\tadds r1, 0x30\n" + "\tadds r1, r0\n" + "\tmovs r0, 0x2\n" + "\tstr r0, [r1]\n" +"_08021B3C:\n" + "\tadds r6, 0x1\n" + "\tmovs r0, 0xCE\n" + "\tlsls r0, 1\n" + "\tcmp r6, r0\n" + "\tble _08021B08\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_08021B4C: .4byte gUnknown_203B28C\n" +"_08021B50: .4byte 0x000001a7\n" +"_08021B54: .4byte gRecruitedPokemonRef"); + +} +#else +void sub_8021A60(void) +{ + s32 sVar4; + s32 iVar6; + s32 index; + struct PokemonStruct *pokeStruct; + + gUnknown_203B28C->unk70 = 0; + for(index = 0; index < 0x10; index++) + { + gUnknown_203B28C->unkE[index] = 0; + gUnknown_203B28C->unk30[index] = 0; + } + for(index = 0; index < 0x1A8; index++) + { + if ((gUnknown_203B28C->friendArea == GetFriendArea((s16)index)) && + ((s16)index == GetBaseSpeciesNoUnown(index))) { + iVar6 = gUnknown_203B28C->unk70; + gUnknown_203B28C->unkE[iVar6] = index; + gUnknown_203B28C->unk70 = iVar6 + 1; + } + } + for(index = 0; index < 0x1A8; index++) + { + if ((sub_8098134(index) != '\0') && (sVar4 = sub_8021B58(index), sVar4 != -1)) { + gUnknown_203B28C->unk30[sVar4] = 1; + } + } + for(index = 0; index < 0x19d; index++) + { + pokeStruct = &gRecruitedPokemonRef->pokemon[index]; + if (((*(u8 *)&pokeStruct->unk0 & 1) != 0) && + (sVar4 = sub_8021B58(pokeStruct->speciesNum), sVar4 != -1)) { + gUnknown_203B28C->unk30[sVar4] = 2; + } + } + return; +} +#endif + +s32 sub_8021B58(s16 species) +{ + s32 baseSpecies; + int index; + + baseSpecies = GetBaseSpeciesNoUnown(species); + for(index = 0; index < gUnknown_203B28C->unk70; index++) + { + if (baseSpecies == gUnknown_203B28C->unkE[index]) return index; + } + return -1; +} + diff --git a/src/code_8021774_pre.c b/src/code_8021774_pre.c new file mode 100644 index 000000000..06ffe95e1 --- /dev/null +++ b/src/code_8021774_pre.c @@ -0,0 +1,133 @@ +#include "global.h" +#include "constants/friend_area.h" +#include "constants/input.h" +#include "friend_area.h" +#include "input.h" +#include "memory.h" +#include "text.h" +#include "item.h" +#include "team_inventory.h" +#include "menu_input.h" + +struct unkStruct_203B280 +{ + u8 unk0[NUM_FRIEND_AREAS]; + u32 unk3C; + struct MenuInputStruct unk40; + s32 unk74; + struct UnkTextStruct2 *unk78; + struct UnkTextStruct2 unk7C[4]; + u8 unkDC[4]; +}; +extern struct unkStruct_203B280 *gUnknown_203B280; +extern u32 gUnknown_203B284; +extern u16 gUnknown_203B288; +extern u16 gUnknown_203B28A; + +extern struct UnkTextStruct2 gUnknown_80DC47C; +extern struct UnkTextStruct2 gUnknown_80DC464; + +u8 sub_8021700(u32 mode); +s32 sub_8021664(void); +extern u8 sub_802132C(void); +extern void sub_8021410(void); +extern void sub_8021494(void); +extern void PlayMenuSoundEffect(u32); + +bool8 sub_80211AC(u32 param_1, u32 param_2) +{ + if(sub_8021700(param_1)) + { + return FALSE; + } + else { + gUnknown_203B280 = MemoryAlloc(sizeof(struct unkStruct_203B280), 8); + gUnknown_203B280->unk3C = param_1; + gUnknown_203B280->unk74 = param_2; + gUnknown_203B280->unk78 = &gUnknown_203B280->unk7C[gUnknown_203B280->unk74]; + sub_8006518(gUnknown_203B280->unk7C); + gUnknown_203B280->unk7C[gUnknown_203B280->unk74] = gUnknown_80DC47C; + gUnknown_203B280->unk78->unk14 = gUnknown_203B280->unkDC; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B280->unk7C, 1, 1); + sub_8013818(&gUnknown_203B280->unk40, sub_8021664(), 10, param_2); + if(gUnknown_203B284 == gUnknown_203B280->unk3C) + { + gUnknown_203B280->unk40.menuIndex = gUnknown_203B288; + gUnknown_203B280->unk40.unk1E = gUnknown_203B28A; + sub_8013984(&gUnknown_203B280->unk40); + } + sub_8021410(); + sub_8021494(); + return TRUE; + } +} + +u32 sub_8021274(u8 param_1) +{ + if (param_1 == 0) { + sub_8013660(&gUnknown_203B280->unk40); + return 0; + } + switch(GetKeyPress(&gUnknown_203B280->unk40)) + { + case INPUT_B_BUTTON: + PlayMenuSoundEffect(1); + return 2; + case INPUT_A_BUTTON: + if ((gUnknown_203B280->unk3C == 2) && (GetFriendAreaPrice(sub_802132C()) > gTeamInventory_203B460->teamMoney)) + { + PlayMenuSoundEffect(2); + } + else + { + PlayMenuSoundEffect(0); + } + return 3; + case INPUT_START_BUTTON: + PlayMenuSoundEffect(4); + return 4; + default: + if (sub_80138B8(&gUnknown_203B280->unk40, 1) != 0) { + sub_8021410(); + sub_8021494(); + return 1; + } + else { + return 0; + } + } +} + +u8 sub_802132C(void) +{ + return gUnknown_203B280->unk0[gUnknown_203B280->unk40.unk1E * gUnknown_203B280->unk40.unk1C + gUnknown_203B280->unk40.menuIndex]; +} + +void sub_8021354(u8 param_1) +{ + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B280->unk7C,0,0); + gUnknown_203B280->unk40.unk22 = sub_8021664(); + sub_8013984(&gUnknown_203B280->unk40); + sub_8021410(); + sub_8021494(); + if (param_1) { + AddMenuCursorSprite(&gUnknown_203B280->unk40); + } +} + +void sub_80213A0(void) +{ + if(gUnknown_203B280) + { + gUnknown_203B284 = gUnknown_203B280->unk3C; + gUnknown_203B288 = gUnknown_203B280->unk40.menuIndex; + gUnknown_203B28A = gUnknown_203B280->unk40.unk1E; + gUnknown_203B280->unk7C[gUnknown_203B280->unk74] = gUnknown_80DC464; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B280->unk7C, 1, 1); + MemoryFree(gUnknown_203B280); + gUnknown_203B280 = NULL; + } +} diff --git a/src/code_8023144.c b/src/code_8023144.c index 7a5c4c72d..6f8a56a93 100644 --- a/src/code_8023144.c +++ b/src/code_8023144.c @@ -1,5 +1,6 @@ -#include "constants/input.h" #include "global.h" +#include "constants/colors.h" +#include "constants/input.h" #include "constants/iq_skill.h" #include "memory.h" #include "menu.h" @@ -10,6 +11,9 @@ #include "input.h" #include "item.h" #include "menu_input.h" +#include "code_8023144.h" +#include "code_800D090.h" +#include "friend_area.h" struct unkStruct_3001B5C { @@ -30,6 +34,7 @@ struct unkStruct_3001B5C }; IWRAM_DATA struct unkStruct_3001B5C *gUnknown_3001B5C; +struct unkStruct_203B294 *gUnknown_203B294; extern u32 gUnknown_203B298; extern u16 gUnknown_203B29C; @@ -42,39 +47,11 @@ void sub_80237E0(void); extern bool8 sub_8098134(s32); extern void sub_8023730(void); extern u8 sub_8023704(u8); -extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); -extern void sub_8013984(struct MenuInputStruct*); extern void sub_8023420(void); extern void sub_80234BC(void); extern u32 sub_80236A4(void); -extern u8 sub_80138B8(struct MenuInputStruct*, u32); extern void PlayMenuSoundEffect(u32); -extern s32 GetKeyPress(struct MenuInputStruct*); -extern void sub_8013660(struct MenuInputStruct*); -extern void AddMenuCursorSprite(struct MenuInputStruct*); -struct unkStruct_203B294 -{ - // size: 0x1A8 - /* 0x0 */ u32 state; - /* 0x4 */ u32 fallbackState; - u8 iqSkillPreGummi[NUM_IQ_SKILLS]; - u8 iqSkillPostGummi[NUM_IQ_SKILLS]; - u32 availIQSkillPreGummi; - u32 availIQSkillPostGummi; - u32 unk40; // Gummi eaten flag? - struct Gummi gummi; - /* 0x48 */ struct PokemonStruct *pokeStruct; - u32 itemIndex; - struct Item item; - struct MenuStruct unk54; - struct MenuStruct unkA4; - u32 menuAction; - struct MenuItem unkF8[0x8]; - u16 unk138[0x8]; -}; - -struct unkStruct_203B294 *gUnknown_203B294; extern u8 gUnknown_80DC5EC[]; extern u8 gUnknown_202DE58[]; @@ -343,70 +320,70 @@ bool8 sub_8023144(s32 param_1, s32 index, struct UnkTextStruct2_sub *sub, u32 pa u8 sub_8023278(u8 param_1) { - s32 iVar3; - u32 temp; - - if (param_1 == 0) { - sub_8013660(&gUnknown_3001B5C->input); - return 0; - } - switch(GetKeyPress(&gUnknown_3001B5C->input)) - { - case INPUT_B_BUTTON: - PlayMenuSoundEffect(1); - return 2; - case INPUT_A_BUTTON: - PlayMenuSoundEffect(0); - return 3; - case INPUT_SELECT_BUTTON: - PlayMenuSoundEffect(5); - if (temp = gUnknown_3001B5C->unk4, iVar3 = 1, temp < 2) { - iVar3 = temp + 1; - } - gUnknown_3001B5C->unk4 = iVar3; - sub_80236A4(); - break; - default: - if (sub_80138B8(&gUnknown_3001B5C->input, 1) == 0) { - return 0; - } - break; - } - sub_8023420(); - sub_80234BC(); - return 1; + s32 iVar3; + u32 temp; + + if (param_1 == 0) { + sub_8013660(&gUnknown_3001B5C->input); + return 0; + } + switch(GetKeyPress(&gUnknown_3001B5C->input)) + { + case INPUT_B_BUTTON: + PlayMenuSoundEffect(1); + return 2; + case INPUT_A_BUTTON: + PlayMenuSoundEffect(0); + return 3; + case INPUT_SELECT_BUTTON: + PlayMenuSoundEffect(5); + if (temp = gUnknown_3001B5C->unk4, iVar3 = 1, temp < 2) { + iVar3 = temp + 1; + } + gUnknown_3001B5C->unk4 = iVar3; + sub_80236A4(); + break; + default: + if (sub_80138B8(&gUnknown_3001B5C->input, 1) == 0) { + return 0; + } + break; + } + sub_8023420(); + sub_80234BC(); + return 1; } s16 sub_802331C(void) { - return gUnknown_3001B5C->unkC[gUnknown_3001B5C->input.unk1E * gUnknown_3001B5C->input.unk1C + gUnknown_3001B5C->input.menuIndex]; + return gUnknown_3001B5C->unkC[gUnknown_3001B5C->input.unk1E * gUnknown_3001B5C->input.unk1C + gUnknown_3001B5C->input.menuIndex]; } void sub_8023354(u8 param_1) { - ResetUnusedInputStruct(); - sub_800641C(gUnknown_3001B5C->unk398,0,0); - sub_8013984(&gUnknown_3001B5C->input); - sub_8023420(); - sub_80234BC(); - if (param_1 != 0) { - AddMenuCursorSprite(&gUnknown_3001B5C->input); - } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_3001B5C->unk398,0,0); + sub_8013984(&gUnknown_3001B5C->input); + sub_8023420(); + sub_80234BC(); + if (param_1 != 0) { + AddMenuCursorSprite(&gUnknown_3001B5C->input); + } } void sub_80233A0(void) { - if (gUnknown_3001B5C != NULL) { - gUnknown_203B298 = gUnknown_3001B5C->unk4; - gUnknown_203B29C = gUnknown_3001B5C->input.menuIndex; - gUnknown_203B29E = gUnknown_3001B5C->input.unk1E; - gUnknown_3001B5C->unk398[gUnknown_3001B5C->unk390] = gUnknown_80DC904; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_3001B5C->unk398,1,1); - MemoryFree(gUnknown_3001B5C); - gUnknown_3001B5C = NULL; - } + if (gUnknown_3001B5C != NULL) { + gUnknown_203B298 = gUnknown_3001B5C->unk4; + gUnknown_203B29C = gUnknown_3001B5C->input.menuIndex; + gUnknown_203B29E = gUnknown_3001B5C->input.unk1E; + gUnknown_3001B5C->unk398[gUnknown_3001B5C->unk390] = gUnknown_80DC904; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_3001B5C->unk398,1,1); + MemoryFree(gUnknown_3001B5C); + gUnknown_3001B5C = NULL; + } } NAKED @@ -487,100 +464,85 @@ void sub_8023420(void) extern u8 gUnknown_80DC934[]; -struct unkStruct_8092638 -{ - u32 unk0; - u8 unk4; - u32 unk5; -}; -extern void sub_8092638(u8,struct unkStruct_8092638 *, u32, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -void sub_808D930(u8 *buffer, s32 index); -extern s32 sub_8013800(void *, u32); bool8 HasRecruitedMon(s16 species_); extern u8 gUnknown_80DC93C[]; -void sprintfStatic(char *buffer, const char *text, ...); void sub_80234BC(void) { - u8 cVar2; - u32 y; - s32 uVar3; - s32 iVar4; - s32 species; - u32 color; - s32 index; - u8 buffer2 [256]; - u8 buffer1 [100]; - struct unkStruct_8092638 auStack_2c; - - sub_8008C54(gUnknown_3001B5C->unk390); - sub_80073B8(gUnknown_3001B5C->unk390); - xxx_call_draw_string(10,0,gUnknown_80DC934,gUnknown_3001B5C->unk390,0); // Pokemon - sub_8012BC4(gUnknown_3001B5C->unk3F8[2] * 8 + 4,0, - gUnknown_3001B5C->input.unk1E + 1,2,7,gUnknown_3001B5C->unk390); - for(index = 0; index < gUnknown_3001B5C->input.unk1A; index++) - { - y = sub_8013800(&gUnknown_3001B5C->input,index); - species = gUnknown_3001B5C->unkC[(gUnknown_3001B5C->input.unk1E * gUnknown_3001B5C->input.unk1C + index)]; - sub_8092638(GetFriendArea(species),&auStack_2c,0,0); - color = 7; - if (auStack_2c.unk4 != 0) { - color = HasRecruitedMon(species) ? 5 : 4; - } - iVar4 = GetDexInternalNo(species,0); - cVar2 = (iVar4 % 10) + 0x30; - sub_8012C60(0x14,y,cVar2,color,gUnknown_3001B5C->unk390); - if (9 < iVar4) { - iVar4 /= 10; - cVar2 = (iVar4 % 10) + 0x30; - sub_8012C60(0xd,y,cVar2,color,gUnknown_3001B5C->unk390); - if (9 < iVar4) { - uVar3 = iVar4 / 10; - cVar2 = (uVar3 % 10) + 0x30; - sub_8012C60(6,y,cVar2,color,gUnknown_3001B5C->unk390); + u8 cVar2; + u32 y; + s32 uVar3; + s32 iVar4; + s32 species; + u32 color; + s32 index; + u8 buffer2 [256]; + u8 buffer1 [100]; + struct unkStruct_8092638 auStack_2c; + + sub_8008C54(gUnknown_3001B5C->unk390); + sub_80073B8(gUnknown_3001B5C->unk390); + xxx_call_draw_string(10,0,gUnknown_80DC934,gUnknown_3001B5C->unk390,0); // Pokemon + sub_8012BC4(gUnknown_3001B5C->unk3F8[2] * 8 + 4,0, + gUnknown_3001B5C->input.unk1E + 1,2,7,gUnknown_3001B5C->unk390); + for(index = 0; index < gUnknown_3001B5C->input.unk1A; index++) + { + y = sub_8013800(&gUnknown_3001B5C->input,index); + species = gUnknown_3001B5C->unkC[(gUnknown_3001B5C->input.unk1E * gUnknown_3001B5C->input.unk1C + index)]; + sub_8092638(GetFriendArea(species),&auStack_2c,0,0); + color = COLOR_WHITE_2; + if (auStack_2c.hasFriendArea) { + color = HasRecruitedMon(species) ? COLOR_CYAN : COLOR_GREEN; } - } - sub_808D930(buffer1,species); - sprintfStatic(buffer2,gUnknown_80DC93C,color,buffer1); // {COLOR_2}%c%s - xxx_call_draw_string(0x24,y,buffer2,gUnknown_3001B5C->unk390,0); - } - sub_80073E0(gUnknown_3001B5C->unk390); + iVar4 = GetDexInternalNo(species,0); + cVar2 = (iVar4 % 10) + 0x30; + sub_8012C60(0x14,y,cVar2,color,gUnknown_3001B5C->unk390); + if (9 < iVar4) { + iVar4 /= 10; + cVar2 = (iVar4 % 10) + 0x30; + sub_8012C60(0xd,y,cVar2,color,gUnknown_3001B5C->unk390); + if (9 < iVar4) { + uVar3 = iVar4 / 10; + cVar2 = (uVar3 % 10) + 0x30; + sub_8012C60(6,y,cVar2,color,gUnknown_3001B5C->unk390); + } + } + sub_808D930(buffer1,species); + sprintfStatic(buffer2,gUnknown_80DC93C,color,buffer1); // {COLOR_2}%c%s + xxx_call_draw_string(0x24,y,buffer2,gUnknown_3001B5C->unk390,0); + } + sub_80073E0(gUnknown_3001B5C->unk390); } u32 sub_80236A4(void) { - s16 index_s32; - int index; - s32 temp; - - gUnknown_3001B5C->unk8 = 0; - for(index = 0; index < 0x1a8; index++) - { - index_s32 = index; - if ((sub_8098134(index_s32)) && - (index_s32 == GetBaseSpeciesNoUnown(index_s32))) { - temp = gUnknown_3001B5C->unk8; - gUnknown_3001B5C->unkC[gUnknown_3001B5C->unk8] = index; - gUnknown_3001B5C->unk8 = temp + 1; + s32 index; + + gUnknown_3001B5C->unk8 = 0; + for(index = 0; index < 0x1a8; index++) + { + if ((sub_8098134((s16)index)) && + ((s16)index == GetBaseSpeciesNoUnown(index))) { + gUnknown_3001B5C->unkC[gUnknown_3001B5C->unk8++] = index; + } } - } - sub_8023730(); - return gUnknown_3001B5C->unk8; + sub_8023730(); + return gUnknown_3001B5C->unk8; } bool8 sub_8023704(u8 unused) { - s32 index; - - for(index = 0; index < 0x1a8; index++) - { - if (sub_8098134((s16)index)) - return FALSE; - } - return TRUE; + s32 index; + + for(index = 0; index < 0x1a8; index++) + { + if (sub_8098134((s16)index)) + return FALSE; + } + return TRUE; } void sub_8023730(void) diff --git a/src/code_8023144_pre.c b/src/code_8023144_pre.c new file mode 100644 index 000000000..738f1e450 --- /dev/null +++ b/src/code_8023144_pre.c @@ -0,0 +1,141 @@ +#include "global.h" +#include "constants/colors.h" +#include "constants/input.h" +#include "constants/iq_skill.h" +#include "memory.h" +#include "menu.h" +#include "pokemon.h" +#include "pokemon_3.h" +#include "team_inventory.h" +#include "text.h" +#include "input.h" +#include "item.h" +#include "menu_input.h" +#include "code_8023144.h" +#include "text.h" + +struct unkStruct_203B294 *gUnknown_203B294; +extern u8 gAvailablePokemonNames[]; +extern u8 gUnknown_80DC5EC[]; +extern u8 HasGummiItem(void); +extern void sub_8022924(s32); +extern void sub_8022E78(void); +extern void sub_8022EF4(void); +extern void sub_8023068(void); +extern void sub_80230E8(void); +extern void sub_8023120(void); +extern void sub_8023104(void); +extern void sub_802293C(void); +extern void sub_8022A10(void); +extern void sub_8022D2C(void); + +extern struct UnkTextStruct2 gUnknown_80DC5A4; +extern struct UnkTextStruct2 gUnknown_80DC5D4; +extern struct UnkTextStruct2 gUnknown_80DC5BC; + +bool8 sub_80227B8(struct PokemonStruct *pokeStruct) +{ + ResetUnusedInputStruct(); + sub_800641C(NULL, 1, 1); + gUnknown_203B294 = MemoryAlloc(sizeof(struct unkStruct_203B294), 8); + gUnknown_203B294->menuAction = 0; + gUnknown_203B294->pokeStruct = pokeStruct; + if(pokeStruct != NULL) + { + PrintColoredPokeNameToBuffer(gAvailablePokemonNames, pokeStruct, COLOR_WHITE_2); + PrintColoredPokeNameToBuffer(gAvailablePokemonNames + 0x50, pokeStruct, COLOR_YELLOW); + if(HasGummiItem()) + { + sub_8022924(0x0); + } + else + { + sub_8022924(0x11); + } + } + else { + strcpy(gAvailablePokemonNames, gUnknown_80DC5EC); + strcpy(gAvailablePokemonNames + 0x50, gUnknown_80DC5EC); + if(GetNumberOfFilledInventorySlots() == 0) + { + sub_8022924(0x12); + + } + else { + sub_8022924(0x0); + } + } + return TRUE; +} + +u32 sub_8022860(void) +{ + switch(gUnknown_203B294->state) { + case 0: + case 1: + sub_8022E78(); + break; + case 2: + sub_8022EF4(); + break; + case 3: + sub_8023068(); + break; + case 4: + sub_80230E8(); + break; + case 0x15: + sub_8023104(); + break; + case 0x16: + return 3; + default: + sub_8023120(); + break; + } + return 0; +} + +void sub_8022908(void) +{ + if(gUnknown_203B294) + { + MemoryFree(gUnknown_203B294); + gUnknown_203B294 = NULL; + } +} + +void sub_8022924(s32 newState) +{ + gUnknown_203B294->state = newState; + sub_802293C(); + sub_8022A10(); +} + +void sub_802293C(void) { + s32 index; + sub_8006518(gUnknown_203B294->unk148); + switch(gUnknown_203B294->state) + { + case 2: + sub_8022D2C(); + gUnknown_203B294->unk148[2] = gUnknown_80DC5BC; + sub_8012CAC(&gUnknown_203B294->unk148[2], gUnknown_203B294->unkF8); + gUnknown_203B294->unk148[2].unkC = 6; + break; + case 3: + gUnknown_203B294->unk148[1] = gUnknown_80DC5D4; + break; + default: + for(index = 0; index < 4; index++) + { + gUnknown_203B294->unk148[index] = gUnknown_80DC5A4; + } + break; + case 0xA ... 0x10: + break; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B294->unk148, 1, 1); + +} diff --git a/src/code_8031D70.c b/src/code_8031D70.c index 672597c8d..a6c8e8ab2 100644 --- a/src/code_8031D70.c +++ b/src/code_8031D70.c @@ -13,8 +13,7 @@ struct unkStruct_203B334 { // size: 0x7C u32 mailIndex; - u32 unk4; - u8 fill8[0x10 - 0x8]; + struct MenuInputStructSub unk4; u32 unk10; struct UnkTextStruct2 *unk14; struct UnkTextStruct2 unk18[4]; @@ -52,8 +51,6 @@ extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern void sub_80078A4(u32, u32, u32, u32, u32); extern void sub_803D2C0(u8 *, struct unkStruct_203B480 *); -extern void sub_801317C(u32 *); -extern u32 sub_8012A64(u32 *, u32); extern void PlayMenuSoundEffect(u32); void sub_8031E00(void); diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index a4d848f85..7dd0d4612 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -14,6 +14,7 @@ #include "item.h" #include "pokemon.h" #include "position_util.h" +#include "exclusive_pokemon.h" extern u32 gUnknown_202EDC8; extern u8 gUnknown_202E038[0x50]; @@ -380,7 +381,6 @@ extern void DisplayDungeonDialogue(u32 *r0); extern void SpriteShockEffect(struct Entity *); extern u32 sub_80861F8(u32, struct Entity *, u32); -extern void sub_8097FA8(u32); extern void JirachiWish(); extern void JirachiSpinEffect(struct Entity *); @@ -393,14 +393,12 @@ extern u8 sub_80860A8(u32); extern void sub_8049ED4(); extern void sub_8092578(u8 *buffer, u8 index, u8 r2); extern void sub_8052D44(s16 *, struct Entity *, struct Entity *); -extern void sub_8097FD0(u32); extern void SetMessageArgument(u8 *, struct Entity *, u32); extern struct Entity *GetLeader(); extern void sub_80421C0(struct Entity *, u32); extern void sub_8046D20(); extern void sub_808B1CC(u8); extern void sub_80464C8(struct Entity *, u32 *, struct Item *); -extern void sub_8098044(u32); extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32); extern void sub_803E46C(u32); extern void sub_80866C4(u32 *); @@ -418,7 +416,6 @@ extern void sub_80426C8(u32, u32); extern void sub_807EAA0(u32, u32); extern void CreateJirachiWishWarpTile(void); -extern u8 sub_8098100(u32); extern void sub_8086794(); void EnteiScreenFlash(void); diff --git a/src/code_8069E0C.c b/src/code_8069E0C.c index 9b6d5a74e..3adcbba24 100644 --- a/src/code_8069E0C.c +++ b/src/code_8069E0C.c @@ -1,6 +1,7 @@ #include "global.h" #include "constants/ability.h" #include "constants/move_id.h" +#include "constants/status.h" #include "constants/type.h" #include "constants/weather.h" #include "dungeon_entity.h" @@ -43,7 +44,6 @@ extern void sub_806A2BC(struct Entity *, u8); extern void sub_804178C(u32); extern void sub_803F508(struct Entity *); extern void sub_804AC20(struct Position *); -extern u8 sub_8092364(u8); extern void sub_803E46C(u32); extern void sub_803E708(u32 r0, u32 r1); @@ -211,7 +211,7 @@ void sub_806A120(struct Entity * pokemon, struct Entity * target, struct Move* m struct EntityInfo *entityInfo; if ((((EntityExists(pokemon)) && (EntityExists(target))) && (pokemon != target)) - && (entityInfo = target->info, entityInfo->protectionStatus == 0xC)) { + && (entityInfo = target->info, entityInfo->protectionStatus == STATUS_CONVERSION2)) { moveType = GetMoveTypeForMonster(pokemon, move); uVar2_u32 = sub_8092364(moveType); if (uVar2_u32 != TYPE_NONE) { diff --git a/src/code_80848F0.c b/src/code_80848F0.c index 506cf141c..56c19304b 100644 --- a/src/code_80848F0.c +++ b/src/code_80848F0.c @@ -1,6 +1,7 @@ #include "global.h" #include "dungeon_global_data.h" #include "dungeon_music.h" +#include "exclusive_pokemon.h" extern void SkarmoryPreFightDialogue(); extern void SkarmoryReFightDialogue(); @@ -62,7 +63,6 @@ extern void SmeargleRescueDialogue(); extern void sub_808CD9C(); extern void sub_8085764(); extern void sub_80857B8(); -extern void sub_8097FF8(); extern void sub_8086BDC(u32,u8); extern void sub_8086F54(u32,u8); @@ -143,10 +143,7 @@ extern void sub_808C9C4(void); extern void sub_808CB5C(void); extern void sub_808CBB0(void); extern void sub_808CD44(void); -extern void sub_8097FF8(void); -extern u8 sub_8098100(u8); -extern void sub_8097FA8(void); extern void sub_807E5E4(u32); void sub_8084854(u8 *param_1) @@ -168,7 +165,7 @@ void sub_8084854(u8 *param_1) { gDungeon->unk3A0D = param_1[1]; if (param_1[2] != 0x40) { - sub_8097FA8(); + sub_8097FA8(param_1[2]); } } } diff --git a/src/code_8086A3C.c b/src/code_8086A3C.c index af126aa8e..99bb14818 100644 --- a/src/code_8086A3C.c +++ b/src/code_8086A3C.c @@ -9,16 +9,15 @@ #include "pokemon.h" #include "dungeon_util_1.h" #include "dungeon_util.h" +#include "exclusive_pokemon.h" extern void SetDefaultIQSkills(u8 *param_1, u8 param_2); -extern void sub_8097FF8(void); extern u8 sub_8044B28(void); extern u8 HasRecruitedMon(u32); extern u8 gUnknown_202E038[]; extern void sub_8085374(); extern void sub_80855E4(void *); extern void sub_8068FE0(struct Entity *, u32, u32); -extern void sub_8097FA8(u32); extern void DisplayDungeonDialogue(u8 *); extern void sub_806CDD4(struct Entity *, u32, u32); extern void sub_80869E4(struct Entity *, u32, u32, u32); diff --git a/src/code_809447C.c b/src/code_809447C.c index 1281f2cd5..71795e65d 100644 --- a/src/code_809447C.c +++ b/src/code_809447C.c @@ -3,20 +3,46 @@ #include "code_809447C.h" #include "item.h" #include "moves.h" +#include "dungeon_global_data.h" +#include "text_util.h" struct unkStruct_8113080 { u8 unk0; - u8 *unk4; // some string + u8 *text; }; extern u8 gUnknown_202DE58[]; extern u8 gAvailablePokemonNames[]; +extern s32 gUnknown_202DE30[2]; + extern u8 *gUnknown_811383C[]; +extern u8 *gUnknown_8113850[]; +extern u8 *gUnknown_8113868[]; +extern u8 *gUnknown_8113898[]; +extern u8 *gUnknown_81138C0[]; +extern u8 *gUnknown_81138D0[]; +extern u8 *gUnknown_81138E4[]; +extern u8 *gUnknown_8113950[]; +extern u8 *gUnknown_8113900[]; +extern u8 *gUnknown_8113974[]; +extern u8 *gUnknown_8113918[]; +extern u8 *gUnknown_8113990[]; +extern u8 *gUnknown_8113934[]; +extern u8 *gUnknown_81139B4[]; +extern u8 *gUnknown_81139B8[]; +extern u8 *gUnknown_81139CC[]; +extern u8 *gUnknown_8113870[]; + extern struct unkStruct_8113080 gUnknown_8113080[]; void sub_80928C0(u8 *buffer, struct Move *move, struct unkStruct_80928C0 *param_3); extern void xxx_format_string(const char *, u8 *, void *, u32); +void PrintYellowDungeonNametoBuffer(u8 *buffer, struct DungeonLocation *dungeonLocation); +extern void sub_80073B8(u32); +extern void xxx_format_and_draw(s32, s32, const u8 *, ...); +extern s32 sub_8008ED0(u8 *); +extern void sub_80073E0(u32); void sub_809447C(struct unkStruct_8094924 *r0, u8 *r1) { @@ -30,24 +56,24 @@ void sub_809449C(struct unkStruct_8094924 *r0, u8 *r1) SaveIntegerBits(r0, r1 + 2, 0x10); } -void sub_80944BC(s16 moveID, u8 *arg2) +static void sub_80944BC(s16 moveID, u8 *buffer) { u16 moveID_u16; s32 moveID_s32 = moveID; - struct Move stack; + struct Move move; if (moveID_s32 < 0x1F4) { // Needed this cast/variable to match moveID_u16 = moveID_s32; - sub_8092AA8(&stack, moveID_u16); - sub_80928C0(gUnknown_202DE58, &stack, NULL); - xxx_format_string(*gUnknown_811383C, arg2, arg2 + 200, 0); + sub_8092AA8(&move, moveID_u16); + sub_80928C0(gUnknown_202DE58, &move, NULL); + xxx_format_string(*gUnknown_811383C, buffer, buffer + 200, 0); // $m0's $i0 } else { - strncpy(arg2, gUnknown_8113080[moveID - 0x1F4].unk4, 200); + strncpy(buffer, gUnknown_8113080[moveID - 0x1F4].text, 200); } } -u8 sub_8094528(s16 moveID) +static u8 sub_8094528(s16 moveID) { if(moveID < 0x1F4) { @@ -59,3 +85,95 @@ u8 sub_8094528(s16 moveID) } } +void sub_8094558(u32 param_1,u8 *param_2,struct unkDungeonGlobal_unk1CE98_sub *param_3) +{ + int iVar2; + u8 buffer [200]; + s32 y; + struct Item *item; + s32 var; + + sub_80073B8(param_1); + xxx_format_and_draw(0x10,0,param_2,param_1,0); + PrintYellowDungeonNametoBuffer(gAvailablePokemonNames, ¶m_3->dungeonLocation); + xxx_format_and_draw(4,0x10,*gUnknown_8113850,param_1,0); // #+Place: $m0 + y = 0x1A; + sub_80922B4(gAvailablePokemonNames, param_3->buffer1, POKEMON_NAME_LENGTH); + sub_80922B4(gAvailablePokemonNames + 0x50, param_3->buffer2, POKEMON_NAME_LENGTH); + if (sub_8094528(param_3->moveID) != 0) { + // $m1 was defeated by + xxx_format_string(*gUnknown_8113868,buffer,(u32 **)&buffer + 50,0); // TODO: fix this hack + } + else { + // $m1 + xxx_format_string(*gUnknown_8113870,buffer,(u32 **)&buffer + 50,0); // TODO: fix this hack + } + iVar2 = sub_8008ED0(buffer); + xxx_format_and_draw(((0xb0 - iVar2) / 2),y,buffer,param_1,0); + y += 0xA; + sub_80944BC(param_3->moveID, buffer); +#ifndef NONMATCHING + var = 0xb0 - sub_8008ED0(buffer); + var += (var < 0); + xxx_format_and_draw(var >> 1,y,buffer,param_1,0); + asm(""::"r"(var)); +#else + xxx_format_and_draw((0xb0 - sub_8008ED0(buffer) / 2),y,buffer,param_1,0); +#endif + y += 0x10; + gUnknown_202DE30[0] = param_3->exp; + gUnknown_202DE30[1] = param_3->level; + if (gUnknown_202DE30[1] >= 100) { + xxx_format_and_draw(4,y,*gUnknown_81138C0,param_1,0); + } + else { + xxx_format_and_draw(4,y,*gUnknown_8113898,param_1,0); + } + y += 0xA; + gUnknown_202DE30[0] = param_3->maxHPStat; + xxx_format_and_draw(4,y,*gUnknown_81138D0,param_1,0); + y += 0xA; + gUnknown_202DE30[0] = param_3->atk; + gUnknown_202DE30[1] = param_3->def; + if (param_3->attBoost) { + gUnknown_202DE30[0] = gUnknown_202DE30[0] + param_3->attBoost; + xxx_format_and_draw(4,y,*gUnknown_8113950,param_1,0); + } + else { + xxx_format_and_draw(4,y,*gUnknown_81138E4,param_1,0); + } + if (param_3->defBoost) { + gUnknown_202DE30[1] = gUnknown_202DE30[1] + param_3->defBoost; + xxx_format_and_draw(4,y,*gUnknown_8113974,param_1,0); + } + else { + xxx_format_and_draw(4,y,*gUnknown_8113900,param_1,0); + } + y += 0xA; + gUnknown_202DE30[0] = param_3->spAtk; + gUnknown_202DE30[1] = param_3->spDef; + if (param_3->spAttBoost) { + gUnknown_202DE30[0] = gUnknown_202DE30[0] + param_3->spAttBoost; + xxx_format_and_draw(4,y,*gUnknown_8113990,param_1,0); + } + else { + xxx_format_and_draw(4,y,*gUnknown_8113918,param_1,0); + } + if (param_3->spDefBoost) { + gUnknown_202DE30[1] = gUnknown_202DE30[1] + param_3->spDefBoost; + xxx_format_and_draw(4,y,*gUnknown_81139B4,param_1,0); + } + else { + xxx_format_and_draw(4,y,*gUnknown_8113934,param_1,0); + } + y += 0x10; + item = &(param_3->heldItem); + if ((param_3->heldItem.flags & ITEM_FLAG_EXISTS)) { + sub_8090E14(gUnknown_202DE58,item,0); + } + else { + strcpy(gUnknown_202DE58,*gUnknown_81139B8); + } + xxx_format_and_draw(4,y,*gUnknown_81139CC,param_1,0); + sub_80073E0(param_1); +} diff --git a/src/code_8094F88.c b/src/code_8094F88.c index 00912dd0a..123eef2da 100644 --- a/src/code_8094F88.c +++ b/src/code_8094F88.c @@ -13,10 +13,11 @@ EWRAM_DATA_2 struct unkStruct_203B484 *gUnknown_203B484 = {0}; EWRAM_DATA_2 u32 *gUnknown_203B488 = {0}; EWRAM_DATA_2 struct unkStruct_203B48C *gUnknown_203B48C = {0}; -extern struct unkStruct_203B480 gUnknown_2038C88; -extern struct unkStruct_203B484 gUnknown_2039288; -extern u32 gUnknown_20392E8; -extern struct unkStruct_203B48C gUnknown_20393C0; +EWRAM_DATA struct unkStruct_203B480 gUnknown_2038C88[0x20] = {0}; +EWRAM_DATA struct unkStruct_203B484 gUnknown_2039288 = {0}; +EWRAM_DATA UNUSED static u32 fill0 = {0}; // 203B484 is size 0x5C and I need to fill a gap of 0x4 +EWRAM_DATA u32 gUnknown_20392E8[0x36] = {0}; +EWRAM_DATA struct unkStruct_203B48C gUnknown_20393C0 = {0}; extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); @@ -32,15 +33,15 @@ extern void sub_8094D28(s32); void sub_80950BC(void) { - gUnknown_203B480 = &gUnknown_2038C88; + gUnknown_203B480 = gUnknown_2038C88; gUnknown_203B484 = &gUnknown_2039288; - gUnknown_203B488 = &gUnknown_20392E8; + gUnknown_203B488 = gUnknown_20392E8; gUnknown_203B48C = &gUnknown_20393C0; } struct unkStruct_203B480 *sub_80950F8(void) { - return &gUnknown_2038C88; + return gUnknown_2038C88; } struct unkStruct_203B484 *sub_8095100(void) @@ -50,7 +51,7 @@ struct unkStruct_203B484 *sub_8095100(void) u32 *sub_8095108(void) { - return &gUnknown_20392E8; + return gUnknown_20392E8; } struct unkStruct_203B48C *sub_8095110(void) @@ -72,7 +73,7 @@ void sub_8095118(void) unused = &gUnknown_203B480[index]; gUnknown_203B480[index].mailType = WONDER_MAIL_TYPE_NONE; unused = &gUnknown_203B480[index]; - gUnknown_203B480[index].unk20.id = ITEM_NOTHING; + gUnknown_203B480[index].item.id = ITEM_NOTHING; unused = &gUnknown_203B480[index]; gUnknown_203B480[index].unk2D = 0; } @@ -152,7 +153,7 @@ void DeleteMailAtIndex(u8 index) unused = &gUnknown_203B480[index]; gUnknown_203B480[index].mailType = 0; unused = &gUnknown_203B480[index]; - gUnknown_203B480[index].unk20.id = 0; + gUnknown_203B480[index].item.id = 0; } void sub_8095274(u32 param_1) @@ -424,9 +425,9 @@ void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b) RestoreIntegerBits(a, &b->clientSpecies, 0x9); RestoreIntegerBits(a, &b->unk10.unk10, 0x20); RestoreIntegerBits(a, &b->playerName, 0x50); - RestoreIntegerBits(a, &b->unk20.flags, 0x8); - RestoreIntegerBits(a, &b->unk20.quantity, 0x8); - RestoreIntegerBits(a, &b->unk20.id, 0x8); + RestoreIntegerBits(a, &b->item.flags, 0x8); + RestoreIntegerBits(a, &b->item.quantity, 0x8); + RestoreIntegerBits(a, &b->item.id, 0x8); RestoreIntegerBits(a, &b->unk24, 0x20); RestoreIntegerBits(a, &b->unk28, 0x20); RestoreIntegerBits(a, &b->rescuesAllowed, 0x8); @@ -449,9 +450,9 @@ void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b) SaveIntegerBits(a, &b->clientSpecies, 0x9); SaveIntegerBits(a, &b->unk10.unk10, 0x20); SaveIntegerBits(a, &b->playerName, 0x50); - SaveIntegerBits(a, &b->unk20.flags, 0x8); - SaveIntegerBits(a, &b->unk20.quantity, 0x8); - SaveIntegerBits(a, &b->unk20.id, 0x8); + SaveIntegerBits(a, &b->item.flags, 0x8); + SaveIntegerBits(a, &b->item.quantity, 0x8); + SaveIntegerBits(a, &b->item.id, 0x8); SaveIntegerBits(a, &b->unk24, 0x20); SaveIntegerBits(a, &b->unk28, 0x20); SaveIntegerBits(a, &b->rescuesAllowed, 0x8); diff --git a/src/code_80958E8.c b/src/code_80958E8.c index 6aeed7d62..4ee39320f 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -10,11 +10,9 @@ #include "pokemon.h" #include "code_8094F88.h" -extern s32 GetDungeonFloorCount(u8); extern bool8 sub_809017C(struct DungeonLocation *); extern s16 GetBaseSpecies(s16); extern u8 sub_803C1D0(struct DungeonLocation *, u8); -extern u32 GetMaxItemsAllowed(u8); extern bool8 sub_803C0DC(s16); extern void ResetMailboxSlot(u8); extern void ResetPelipperBoardSlot(u8); @@ -22,7 +20,7 @@ extern void ResetJobSlot(u8); extern bool8 ValidateWonderMail(struct WonderMail *); EWRAM_DATA_2 struct unkStruct_203B490 *gUnknown_203B490 = {0}; -extern struct unkStruct_203B490 gUnknown_2039448; +EWRAM_DATA struct unkStruct_203B490 gUnknown_2039448 = {0}; void LoadMailInfo(void) { diff --git a/src/code_80972F4.c b/src/code_80972F4.c index 8e463a75f..483f96218 100644 --- a/src/code_80972F4.c +++ b/src/code_80972F4.c @@ -4,6 +4,8 @@ #include "wonder_mail.h" #include "code_80958E8.h" #include "dungeon.h" +#include "exclusive_pokemon.h" +#include "event_flag.h" struct MissionText { @@ -19,15 +21,10 @@ extern const char gMeetNinetalesText[]; extern const char gAvoidCaptureText[]; extern const u8 gUnknown_8109CC0[]; extern const u8 gDummyScenarioText[]; -extern u8 sub_80A270C(); +extern u8 sub_80A270C(s16); -extern void sub_8097FA8(u32); -extern void sub_8097FF8(void); extern u8 sub_80A2728(s16); -extern bool8 sub_8001D08(u32, u32 ,s32); -extern u32 sub_8001784(u32, u32, u16); extern void sub_800199C(u8, u8, u16, s32); -extern bool8 sub_80023E4(u32); void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b); void RestoreWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b); diff --git a/src/credits.c b/src/credits.c index 8f1893797..3a69a2c91 100644 --- a/src/credits.c +++ b/src/credits.c @@ -28,8 +28,8 @@ struct CreditsData /* 0x8 */ u8 *text; }; -extern struct unkCreditsStruct_203B340 *gUnknown_203B340; -extern struct unkCreditsStruct_203B344 *gUnknown_203B344; +EWRAM_DATA_2 struct unkCreditsStruct_203B340 *gUnknown_203B340 = {0}; +EWRAM_DATA_2 struct unkCreditsStruct_203B344 *gUnknown_203B344 = {0}; extern struct UnkTextStruct2 gUnknown_80E4A10; extern struct UnkTextStruct2 gUnknown_80E4A28; @@ -244,4 +244,4 @@ void sub_8035758(void) MemoryFree(gUnknown_203B344); gUnknown_203B344 = NULL; } -} \ No newline at end of file +} diff --git a/src/dungeon.c b/src/dungeon.c index ec4a5f55e..0f4714eb5 100644 --- a/src/dungeon.c +++ b/src/dungeon.c @@ -50,7 +50,7 @@ bool8 IsLevelResetTo1(u8 dungeon) return gDungeons[dungeon].levelResetTo1; } -u8 GetMaxItemsAllowed(u8 dungeon) +u32 GetMaxItemsAllowed(u8 dungeon) { return gDungeons[dungeon].maxItemsAllowed; } diff --git a/src/dungeon_ai.c b/src/dungeon_ai.c index d4ca78e68..9fc479df3 100644 --- a/src/dungeon_ai.c +++ b/src/dungeon_ai.c @@ -147,7 +147,7 @@ void sub_8075900(struct Entity *pokemon, u8 r1) { // It's a monster house! SendMessage(GetLeader(), gPtrItsaMonsterHouseMessage); - gDungeon->unk672 = 1; + gDungeon->monsterHouseTriggeredEvent = TRUE; sub_807AB38(pokemon, r1); sub_8041888(0); if(sub_803F428(&pokemon->pos.x) != 0) diff --git a/src/dungeon_music.c b/src/dungeon_music.c index 549de2be6..da2ea13bd 100644 --- a/src/dungeon_music.c +++ b/src/dungeon_music.c @@ -61,7 +61,7 @@ void sub_8083AB0(s16 param_0, struct Entity * target, struct Entity * entity) } sub_80709C8(buffer,entityInfo); CopyStringtoBuffer(temp->buffer2, buffer); - temp->unk14 = param_0_s32; + temp->moveID = param_0_s32; temp->heldItem = entityInfo->heldItem; temp->exp = entityInfo->exp; temp->level = entityInfo->level; @@ -108,7 +108,7 @@ bool8 sub_8083C24(void) temp = &gDungeon->unk1CE98; - if (temp->unk14 < 0x226) { + if (temp->moveID < 0x226) { return TRUE; } else { @@ -122,7 +122,7 @@ bool8 sub_8083C50(void) temp = &gDungeon->unk1CE98; - if ((temp->unk14 == 0x227) || (temp->unk14 == 0x22A) || (temp->unk14 == 0x228)) { + if ((temp->moveID == 0x227) || (temp->moveID == 0x22A) || (temp->moveID == 0x228)) { return TRUE; } else { @@ -138,7 +138,7 @@ bool8 sub_8083C88(u8 param_1) if ((!HasCheckpoint(gDungeon->dungeonLocation.id) && ((gDungeon->unk65C != 0) || (param_1 != 0))) || - (temp->unk14 != 0x227)) { + (temp->moveID != 0x227)) { return TRUE; } else { @@ -197,7 +197,7 @@ void PlayDungeonFailBGM(void) { DungeonStartNewBGM(MUS_DUNGEON_FAIL); gDungeon->unk66F = 0; - gDungeon->unk672 = 0; + gDungeon->monsterHouseTriggeredEvent = FALSE; gDungeon->unk699 = 0; gDungeon->bossSongIndex = STOP_BGM; } @@ -206,7 +206,7 @@ void PlayDungeonCompleteBGM(void) { DungeonStartNewBGM(MUS_DUNGEON_COMPLETE); gDungeon->unk66F = 0; - gDungeon->unk672 = 0; + gDungeon->monsterHouseTriggeredEvent = FALSE; gDungeon->unk699 = 0; gDungeon->bossSongIndex = STOP_BGM; } @@ -296,7 +296,7 @@ void UpdateDungeonMusic(void) if (gDungeon->unk66F != 0) { newSongIndex = MUS_STOP_THIEF; } - else if (gDungeon->unk672 != 0) { + else if (gDungeon->monsterHouseTriggeredEvent) { newSongIndex = MUS_MONSTER_HOUSE; } else if (gDungeon->unk699 != 0) { diff --git a/src/event_flag.c b/src/event_flag.c index 06f8fd97d..ece655349 100644 --- a/src/event_flag.c +++ b/src/event_flag.c @@ -1,11 +1,18 @@ #include "global.h" +#include "constants/friend_area.h" +#include "constants/item.h" +#include "item.h" #include "event_flag.h" +#include "debug.h" #include "memory.h" #include "friend_area.h" +#include "rescue_team_info.h" +#include "other_random.h" +#include "friend_area.h" +#include "team_inventory.h" -extern void sub_800226C(u8 r0, u8 r1, u32* r2, u8 u3); -extern void sub_800160C(struct UnkEventStruct *r0, u32 r1, u32 r2); -extern u8 sub_8002658(s16); + +extern u8 gUnknown_2000A88[0x400]; struct unkEventStruct { @@ -16,7 +23,557 @@ struct unkEventStruct extern struct unkEventStruct gUnknown_80B71E4[58]; -extern u8 gUnknown_2000A88[0x400]; +struct unkStruct_80B6D90 +{ + u8 *text; + s32 num; +}; +extern struct unkStruct_80B6D90 gUnknown_80B6D90[]; + +extern u8 gUnknown_80B7144[]; +extern u8 *gUnknown_80B714C[]; +extern u8 *gUnknown_80B71A0[]; +extern u8 gUnknown_80B72CC[]; +extern struct DebugLocation gUnknown_80B7318; +extern u8 gUnknown_80B7324[]; +extern struct DebugLocation gUnknown_80B7350; +extern u8 gUnknown_80B735C[]; +extern u8 gUnknown_80B7378[]; +extern u8 gUnknown_80B7388[]; + +void FatalError(struct DebugLocation *, const char *, ...) __attribute__((noreturn)); +extern u8 sub_80973F4(u32); +extern bool8 HasCompletedAllMazes(void); +extern void sub_8097418(u32, u32); +extern void sub_800160C(struct UnkEventStruct *r0, u32 r1, u32 r2); +extern u8 sub_8002658(s16); +extern u32 sub_8001658(u32, s32); +extern void sub_80018D8(u32, u32, u32); +extern void sub_809733C(u32, u32); +extern void sub_80973A8(u32, u32); +extern u8 HasRecruitedMon(u32); +extern void sub_80976F8(u32); +extern void sub_800199C(u32, s32, u32, s32); +extern s32 sub_8001784(u32, s32, u16); + +u8 *sub_8001A74(s16 param_1) +{ + struct UnkEventStruct local_1c; + + sub_800160C(&local_1c,0,param_1); + return local_1c.unk4; +} + +s16 sub_8001A90(s16 param_1) +{ + struct UnkEventStruct local_1c; + + sub_800160C(&local_1c,0,param_1); + return local_1c.unk0[4]; +} + +s32 sub_8001AB0(s32 param_1, s16 param_2) +{ + s32 counter; + s32 total; + struct UnkEventStruct local_1c; + s32 param_2_s32; + + param_2_s32 = param_2; + + total = 0; + sub_800160C(&local_1c, 0, param_2_s32); + for(counter = 0; counter < local_1c.unk0[4]; counter++) + { + total += sub_8001784(param_1, param_2_s32, counter); + } + return total; +} + +void sub_8001AF8(s16 param_1, u8 *param_2, s32 param_3) +{ + u8 *r1; + s32 r2; + u8 r0; + struct UnkEventStruct local_10; + + sub_800160C(&local_10,0,param_1); + for (r1 = local_10.unk4, r2 = 0; r2 < param_3; r2++) { + r0 = *r1; + if (*r1++ == 0) break; + *param_2 = r0; + param_2++; + } + *param_2 = 0; +} + +void sub_8001B34(s16 param_1,u32 param_2,s32 param_3) +{ + u8 *r1; + s32 r2; + u8 r0; + struct UnkEventStruct local_10; + + sub_800160C(&local_10,0,param_1); + for (r1 = local_10.unk4, r2 = 0; r2 < param_3; r1++, r2++) { + r0 = *r1; + if (*r1++ == 0) break; + *r1 = r0; + } + if (r2 < local_10.unk0[4]) { + for(; r2 < local_10.unk0[4]; r1++, r2++) + { + *r1 = 0; + } + } +} + +void sub_8001B88(s32 param_1,u32 *param_2,u32 *param_3) +{ + *param_2 = sub_8001784(0, (s16)param_1, 0); + *param_3 = sub_8001784(0, (s16)param_1, 1); +} + +void ScenarioCalc(s16 param_1,s32 param_2,s32 param_3) +{ + s32 param_1_s32; + u32 local_18; + u32 local_14; + + param_1_s32 = param_1; + sub_8001B88(param_1_s32,&local_18,&local_14); + Log(6,gUnknown_80B72CC,param_1_s32,local_18,local_14,param_2,param_3); // SCENARIO CALC [%3d] %4d %4d -> %4d %4d + if ((param_1_s32 == 3) && ((param_2 != local_18 || (param_3 != local_14)))) { + sub_80018D8(0,0x19,0); + } + sub_800199C(0,param_1_s32,0,param_2); + sub_800199C(0,param_1_s32,1,param_3); + + switch(param_1_s32) + { + case 3: + if (((u32)(param_2 - 1) < 0x1b)) { + if (sub_8001D44(3,8,-1)) { + sub_80976F8(0); + } + if (sub_8001D44(3,0xb,3)) { + sub_80976F8(1); + } + if (sub_8001D44(3,0x11,0)) { + sub_80976F8(2); + } + } + break; + case 4: + if (sub_8001CC4(4,0x1f,0) == 0) { + sub_80976F8(4); + } + if (sub_8001CC4(4,0x20,0) == 0) { + sub_80976F8(5); + } + break; + case 0xC: + if(sub_8001CC4(0xc,0x37,2) == 0) { + sub_80976F8(3); + } + break; + } +} + +bool8 sub_8001CC4(s16 param_1,u32 param_2,s32 param_3) +{ + s32 uVar1; + s32 iVar2; + + uVar1 = sub_8001784(0,param_1,0); + iVar2 = sub_8001784(0,param_1,1); + if ((uVar1 != 0x3a) && + (uVar1 < param_2 || (param_3 >= 0 && (uVar1 == param_2) && (iVar2 < param_3)))) { + return TRUE; + } + else { + return FALSE; + } +} + +bool8 sub_8001D08(s16 param_1,u32 param_2,s32 param_3) +{ + s32 uVar1; + s32 iVar2; + + uVar1 = sub_8001784(0, param_1, 0); + iVar2 = sub_8001784(0, param_1, 1); + if (((uVar1 == param_2 && (((param_3 < 0) || (iVar2 == param_3)))))) { + return TRUE; + } + else { + return FALSE; + } +} + +bool8 sub_8001D44(s16 param_1,u32 param_2,s32 param_3) +{ + s32 uVar1; + s32 iVar2; + + uVar1 = sub_8001784(0, param_1, 0); + iVar2 = sub_8001784(0, param_1, 1); + if ((uVar1 != 0x3a) && + ((uVar1 > param_2 || (((param_3 >= 0 && (uVar1 == param_2)) && (iVar2 > param_3)))))) { + return TRUE; + } + else { + return FALSE; + } +} + +void sub_8001D88(void) +{ + u32 local_c; + u32 auStack8; + + sub_8001B88(3, &auStack8, &local_c); + if (auStack8 - 1 < 0x1b) { + if (sub_8001CC4(4,0x1f,0) != 0) { + if (sub_8001D44(3,0xf,7) != 0) { + ScenarioCalc(4,0x1f,0); + sub_8097418(0xe,1); + sub_80018D8(0,0x28,2); + } + else { + if ((sub_8001D08(4,0,0)) && (sub_8001D44(3,0xf,3))) { + ScenarioCalc(4,0x1d,1); + } + } + } + if ((sub_8001D08(4,0x1f,0)) && (GetFriendAreaStatus(SKY_BLUE_PLAINS))) { + ScenarioCalc(4,0x1f,1); + sub_809733C(0xf,1); + } + if (auStack8 > 0x11) { + sub_80973A8(0x25,1); + if (((FindItemInInventory(ITEM_HM_DIVE) != -1) || (gTeamInventory_203B460->teamStorage[ITEM_HM_DIVE] != 0)) || + (sub_8001D44(5,0x21,3) != 0)) { + sub_80973A8(0x22,1); + } + if (GetFriendAreaStatus(FURNACE_DESERT) != 0) { + sub_80973A8(0x1f,1); + } + if (GetFriendAreaStatus(BOULDER_CAVE)) { + sub_80973A8(0x20,1); + } + if (GetFriendAreaStatus(DRAGON_CAVE)) { + sub_80973A8(0x21,1); + } + if (GetFriendAreaStatus(SECRETIVE_FOREST)) { + sub_80973A8(0x23,1); + } + if (GetFriendAreaStatus(SERENE_SEA)) { + sub_80973A8(0x24,1); + sub_80973A8(0x28,1); + } + if ((GetFriendAreaStatus(AGED_CHAMBER_AN)) && (GetFriendAreaStatus(AGED_CHAMBER_O_EXCLAIM))) { + sub_80973A8(0x26,1); + } + if (sub_8001D08(5,0,0)) { + ScenarioCalc(5,0x21,1); + } + if ((FindItemInInventory(ITEM_HM_SURF) != -1) || (gTeamInventory_203B460->teamStorage[ITEM_HM_SURF] != 0)) { + if (sub_8001D08(7,0,0)) { + ScenarioCalc(7,0x26,1); + } + if ((sub_8001D08(9,0,0)) && (GetFriendAreaStatus(SOUTHERN_ISLAND))) { + ScenarioCalc(9,0x2e,1); + } + } + if (!sub_8001CC4(9,0x30,0)) { + if ((sub_8001D08(5,0x22,0)) && HasRecruitedMon(MONSTER_ARTICUNO) && HasRecruitedMon(MONSTER_ZAPDOS) && HasRecruitedMon(MONSTER_MOLTRES)) { + ScenarioCalc(5,0x22,1); + } + if (((sub_8001D08(0xb,0,0)) && (sub_8001D44(5,0x21,3) != 0)) && + (GetFriendAreaStatus(SKY_BLUE_PLAINS))) { + ScenarioCalc(0xb,0x33,1); + } + if (GetFriendAreaStatus(SKY_BLUE_PLAINS)) { + sub_80973A8(0x27,1); + } + if (GetFriendAreaStatus(SKY_BLUE_PLAINS)) { + sub_80973A8(0x29,1); + } + } + if (!sub_8001CC4(5,0x22,0)) { + if (sub_8001D08(10,0,0)) { + ScenarioCalc(10,0x31,1); + sub_809733C(0x1b,1); + } + if ((sub_8001D08(0xc,0,0)) && (!sub_8001CC4(0xb,0x34,0))) { + ScenarioCalc(0xc,0x35,1); + } + } + if ((sub_8001D08(6,0,0)) && (HasRecruitedMon(MONSTER_LUGIA))) { + ScenarioCalc(6,0x24,1); + } + if ((sub_8001D08(8,0,0)) && (HasRecruitedMon(MONSTER_HO_OH))) { + ScenarioCalc(8,0x2c,1); + } + } + } +} + +u32 _FlagCalc(s32 param_1, s32 param_2, u32 operation) +{ + switch(operation) { + case 0: + return param_2; + case 1: + return param_1 - param_2; + case 2: + return param_1 + param_2; + case 3: + return param_1 * param_2; + case 4: + return param_1 / param_2; + case 5: + return param_1 % param_2; + case 6: + return param_1 & param_2; + case 7: + return param_1 | param_2; + case 8: + return param_1 ^ param_2; + case 9: + return (1 << param_2) | param_1; + case 10: + return param_1 & ~(1 << param_2); + case 0xb: + return OtherRandInt(param_2); + default: + FatalError(&gUnknown_80B7318,gUnknown_80B7324, operation); // event flag expansion error %d + } +} + +u8 _FlagJudge(s32 param_1, s32 param_2, u32 operation) +{ + switch(operation) { + case 0: + return 1; + case 1: + return 0; + case 2: + return param_1 == param_2; + case 7: + return param_1 != param_2; + case 3: + return param_1 > param_2; + case 5: + return param_1 >= param_2; + case 4: + return param_1 < param_2; + case 6: + return param_1 <= param_2; + case 8: + return (param_1 & param_2) != 0; + case 9: + return (param_1 ^ param_2) != 0; + case 10: + return param_1 >> (param_2) & 1; + default: + FatalError(&gUnknown_80B7350,gUnknown_80B735C, operation); // event flag rule error %d + } +} + +u32 FlagCalc(s32 r0, s32 r1, u32 operation) +{ + return _FlagCalc(r0, r1, operation); +} + +void sub_800226C(u32 param_1, s16 param_2, s32 param_3, u32 operation) +{ + u32 uVar1; + u32 uVar3; + + uVar1 = sub_8001658(param_1,param_2); + uVar3 = _FlagCalc(uVar1,param_3,operation); + sub_80018D8(param_1,param_2,uVar3); +} + +void sub_80022A0(u32 param_1, s16 param_2, s16 param_3, u32 operation) +{ + s32 uVar1; + s32 uVar2; + s32 uVar3; + + s32 param_2_s32 = param_2; + s32 param_3_s32 = param_3; + + + uVar1 = sub_8001658(param_1,param_2_s32); + uVar2 = sub_8001658(param_1,param_3_s32); + uVar3 = _FlagCalc(uVar1,uVar2,operation); + sub_80018D8(param_1,param_2_s32,uVar3); +} + +u8 FlagJudge(s32 r0, s32 r1, u32 operation) +{ + return _FlagJudge(r0, r1, operation); +} + +u8 sub_80022F8(u32 param_1, s16 param_2, s32 param_3, u32 operation) +{ + s32 uVar1; + + uVar1 = sub_8001658(param_1, param_2); + return _FlagJudge(uVar1,param_3,operation); +} + +u8 sub_8002318(u32 param_1, s16 param_2, s16 param_3, u32 operation) +{ + s32 uVar1; + s32 uVar2; + + s32 param_2_s32 = param_2; + s32 param_3_s32 = param_3; + + uVar1 = sub_8001658(param_1,param_2_s32); + uVar2 = sub_8001658(param_1,param_3_s32); + return _FlagJudge(uVar1,uVar2,operation); +} + +s32 sub_8002354(u32 param_1) +{ + if (param_1 < 0x3b) { + return gUnknown_80B6D90[param_1].num; + } + else { + return -1; + } +} + +u8 *sub_8002374(u32 param_1) +{ + if (param_1 < 0x3b) { + return gUnknown_80B6D90[param_1].text; + } + else { + return gUnknown_80B7378; // error number + } +} + +// Unused +u8 *sub_8002394(u32 param_1) +{ + if (param_1 - 0x12 < 9) { + return gUnknown_80B714C[param_1 - 0x12]; + } + else if (param_1 == 0xf) { + return gUnknown_80B7388; // 1-1 + } + else { + return gUnknown_80B7144; // NONE + } +} + +// Unused +u8 *sub_80023C4(u32 param_1) +{ + if (param_1 < 4) { + return gUnknown_80B71A0[param_1]; // CISTART, CECONTINUE, CNLAST, CWEND + } + else { + return gUnknown_80B7144; // NONE + } +} + +bool8 sub_80023E4(u32 param_1) +{ + switch(param_1) { + case 0: + return sub_8001D44(3,2,-1); + case 1: + return sub_8001D44(3,3,3); + case 2: + return sub_8001D44(3,4,3); + case 3: + return sub_8001D44(3,5,0); + case 4: + return (sub_8001D44(3,0xb,0) && sub_8001CC4(3,0xd,0)); + case 5: + return (sub_8001D44(3,0xb,3) && sub_8001CC4(3,0xf,0)); + case 6: + return sub_8001D44(3,0x11,-1); + case 7: + return sub_8001D44(3,0x12,2); + case 8: + return sub_8001D44(3,0x12,3); + case 9: + return sub_8001D44(3,0x12,-1); + case 10: + return sub_8001D44(3,5,4); + case 0xb: + return sub_8001D44(3,5,4); + case 0xc: + return (!sub_8001D08(3,0xb,2) && !sub_8001D08(3,0xb,3)); + case 0xd: + return sub_8001D08(3,0x10,2); + case 0xe: + return !sub_8001CC4(3,5,7); + case 0xf: + return !sub_8001CC4(3,0xf,0); + case 0x10: + return sub_8001D44(3,7,-1); + case 0x11: + return sub_8001D44(3,0xc,-1); + case 0x12: + return sub_8001D44(3,0xd,-1); + case 0x13: + return sub_8001D44(3,0xf,-1); + case 0x14: + return sub_8001D44(3,0x10,-1); + case 0x15: + return sub_8001D44(5,0x21,-1); + case 0x16: + return sub_8001D44(5,0x22,-1); + case 0x17: + return sub_8001D44(6,0x24,-1); + case 0x18: + return sub_8001D44(7,0x2a,-1); + case 0x19: + return sub_8001D44(8,0x2c,-1); + case 0x1a: + return sub_8001D44(10,0x31,-1); + case 0x1b: + return sub_80973F4(0x29); + case 0x1c: + return GetRescueTeamRank() == LUCARIO_RANK; + case 0x1d: + return HasCompletedAllMazes(); + default: + return FALSE; + } +} + +u8 sub_8002658(s16 param_1) + +{ + short sVar1; + s32 param_1_s32; + struct unkEventStruct *ptr; + + param_1_s32 = param_1; + + ptr = gUnknown_80B71E4; + sVar1 = gUnknown_80B71E4[0].unk0; + if (sVar1 != -1) { + do { + if (sVar1 == param_1_s32) { + return ptr->unk2; + } + ptr++; + sVar1 = ptr->unk0; + } while (sVar1 != -1); + } + return 0; +} s16 sub_8002694(u8 param_1) { @@ -54,12 +611,12 @@ bool8 sub_8002718(u8 *r0) struct UnkEventStruct temp; sub_800160C(&temp, 0, 0); MemoryCopy8(gUnknown_2000A88, r0, 0x400); - if (temp.unk0[5] != temp.unk4[0]) + if (temp.unk0[5] != *(u32 *)temp.unk4) return 0; return 1; } -void sub_8002758(u32 *r0) +void sub_8002758(s32 r0) { sub_800226C(0, 0x1, r0, 0x9); } diff --git a/src/event_flag_1.c b/src/event_flag_1.c deleted file mode 100644 index 1bbdc201a..000000000 --- a/src/event_flag_1.c +++ /dev/null @@ -1,569 +0,0 @@ -#include "global.h" -#include "constants/friend_area.h" -#include "friend_area.h" -#include "item.h" -#include "debug.h" -#include "other_random.h" -#include "rescue_team_info.h" -#include "team_inventory.h" - -extern bool8 HasCompletedAllMazes(void); -extern u8 sub_80973F4(u32); -extern u8 _FlagJudge(s32, s32, u32); -extern u32 sub_8001658(u32, s32); -extern u32 _FlagCalc(s32, s32, u32); -extern void sub_80018D8(u32, u32, u32); -extern u8 HasRecruitedMon(u32); -extern void sub_809733C(u32, u32); -extern void sub_80973A8(u32, u32); -extern void sub_8097418(u32, u32); -extern s32 sub_8001784(u32, s32, u16); - -extern u8 gUnknown_80B7144[]; -extern u8 *gUnknown_80B71A0[]; -extern u8 *gUnknown_80B714C[]; -extern u8 gUnknown_80B7388[]; -extern u8 gUnknown_80B7378[]; - -struct unkStruct_80B6D90 -{ - u8 *text; - s32 num; -}; -extern struct unkStruct_80B6D90 gUnknown_80B6D90[]; - -extern u8 gUnknown_80B735C[]; -extern u32 gUnknown_80B7350; -extern u8 gUnknown_80B7324[]; -extern u32 gUnknown_80B7318; -extern u8 gUnknown_80B72CC[]; - -extern void sub_80976F8(u32); -extern void sub_800199C(u32, s32, u32, s32); -bool8 sub_8001CC4(u32 param_1,u32 param_2,s32 param_3); -bool8 sub_8001D44(u32 param_1,u32 param_2,s32 param_3); - -void FatalError(u32 *, const char *, ...) __attribute__((noreturn)); - - -// TODO: rectify with UnkEventStruct -struct UnkEventStruct2_sub -{ - /* 0x0 */ s16 *unk0; - u32 fill4; - s16 unk8; -}; - -struct UnkEventStruct2 -{ - /* 0x0 */ struct UnkEventStruct2_sub *unk0; - /* 0x4 */ u8 *unk4; -}; - - -extern void sub_800160C(struct UnkEventStruct2 *r0, u32 r1, s32 r2); - - -u8 *sub_8001A74(s16 param_1) -{ - struct UnkEventStruct2 local_1c; - - sub_800160C(&local_1c,0,param_1); - return local_1c.unk4; -} - -s16 sub_8001A90(s16 param_1) -{ - struct UnkEventStruct2 local_1c; - - sub_800160C(&local_1c,0,param_1); - return local_1c.unk0->unk8; -} - -s32 sub_8001AB0(s32 param_1,s16 param_2) -{ - s32 iVar1; - s32 counter; - s32 total; - struct UnkEventStruct2 local_1c; - s32 param_2_s32; - - param_2_s32 = param_2; - - total = 0; - sub_800160C(&local_1c,0,param_2_s32); - counter = 0; - if (counter < local_1c.unk0->unk8) { - for(; counter < local_1c.unk0->unk8; counter++) - { - iVar1 = sub_8001784(param_1, param_2_s32, counter); - total += iVar1; - } - } - return total; -} - -void sub_8001AF8(s16 param_1, u8 *param_2, s32 param_3) -{ - u8 *r1; - s32 r2; - u8 r0; - struct UnkEventStruct2 local_10; - - sub_800160C(&local_10,0,param_1); - for (r1 = local_10.unk4, r2 = 0; r2 < param_3; r2++) { - r0 = *r1; - if (*r1++ == 0) break; - *param_2 = r0; - param_2++; - } - *param_2 = 0; -} - -void sub_8001B34(s16 param_1,u32 param_2,s32 param_3) -{ - u8 *r1; - s32 r2; - u8 r0; - struct UnkEventStruct2 local_10; - - sub_800160C(&local_10,0,param_1); - for (r1 = local_10.unk4, r2 = 0; r2 < param_3; r1++, r2++) { - r0 = *r1; - if (*r1++ == 0) break; - *r1 = r0; - } - if (r2 < local_10.unk0->unk8) { - for(; r2 < local_10.unk0->unk8; r1++, r2++) - { - *r1 = 0; - } - } -} - -void sub_8001B88(s32 param_1,u32 *param_2,u32 *param_3) -{ - *param_2 = sub_8001784(0, (s16)param_1, 0); - *param_3 = sub_8001784(0, (s16)param_1, 1); -} - -void ScenarioCalc(s16 param_1,s32 param_2,s32 param_3) -{ - s32 param_1_s32; - u32 local_18; - u32 local_14; - - param_1_s32 = param_1; - sub_8001B88(param_1_s32,&local_18,&local_14); - Log(6,gUnknown_80B72CC,param_1_s32,local_18,local_14,param_2,param_3); // SCENARIO CALC [%3d] %4d %4d -> %4d %4d - if ((param_1_s32 == 3) && ((param_2 != local_18 || (param_3 != local_14)))) { - sub_80018D8(0,0x19,0); - } - sub_800199C(0,param_1_s32,0,param_2); - sub_800199C(0,param_1_s32,1,param_3); - - switch(param_1_s32) - { - case 3: - if (((u32)(param_2 - 1) < 0x1b)) { - if (sub_8001D44(3,8,-1)) { - sub_80976F8(0); - } - if (sub_8001D44(3,0xb,3)) { - sub_80976F8(1); - } - if (sub_8001D44(3,0x11,0)) { - sub_80976F8(2); - } - } - break; - case 4: - if (sub_8001CC4(4,0x1f,0) == 0) { - sub_80976F8(4); - } - if (sub_8001CC4(4,0x20,0) == 0) { - sub_80976F8(5); - } - break; - case 0xC: - if(sub_8001CC4(0xc,0x37,2) == 0) { - sub_80976F8(3); - } - break; - } -} - -bool8 sub_8001CC4(u32 param_1,u32 param_2,s32 param_3) -{ - s32 uVar1; - s32 iVar2; - - uVar1 = sub_8001784(0,(s16)param_1,0); - iVar2 = sub_8001784(0,(s16)param_1,1); - if ((uVar1 != 0x3a) && - (uVar1 < param_2 || (param_3 >= 0 && (uVar1 == param_2) && (iVar2 < param_3)))) { - return TRUE; - } - else { - return FALSE; - } -} - -bool8 sub_8001D08(u32 param_1,u32 param_2,s32 param_3) -{ - s32 uVar1; - s32 iVar2; - - uVar1 = sub_8001784(0, (s16)param_1, 0); - iVar2 = sub_8001784(0, (s16)param_1, 1); - if (((uVar1 == param_2 && (((param_3 < 0) || (iVar2 == param_3)))))) { - return TRUE; - } - else { - return FALSE; - } -} - -bool8 sub_8001D44(u32 param_1,u32 param_2,s32 param_3) -{ - s32 uVar1; - s32 iVar2; - - uVar1 = sub_8001784(0, (s16)param_1, 0); - iVar2 = sub_8001784(0, (s16)param_1, 1); - if ((uVar1 != 0x3a) && - ((uVar1 > param_2 || (((param_3 >= 0 && (uVar1 == param_2)) && (iVar2 > param_3)))))) { - return TRUE; - } - else { - return FALSE; - } -} - -void sub_8001D88(void) -{ - u32 local_c; - u32 auStack8; - - sub_8001B88(3, &auStack8, &local_c); - if (auStack8 - 1 < 0x1b) { - if (sub_8001CC4(4,0x1f,0) != 0) { - if (sub_8001D44(3,0xf,7) != 0) { - ScenarioCalc(4,0x1f,0); - sub_8097418(0xe,1); - sub_80018D8(0,0x28,2); - } - else { - if ((sub_8001D08(4,0,0)) && (sub_8001D44(3,0xf,3))) { - ScenarioCalc(4,0x1d,1); - } - } - } - if ((sub_8001D08(4,0x1f,0)) && (GetFriendAreaStatus(SKY_BLUE_PLAINS))) { - ScenarioCalc(4,0x1f,1); - sub_809733C(0xf,1); - } - if (auStack8 > 0x11) { - sub_80973A8(0x25,1); - if (((FindItemInInventory(ITEM_HM_DIVE) != -1) || (gTeamInventory_203B460->teamStorage[ITEM_HM_DIVE] != 0)) || - (sub_8001D44(5,0x21,3) != 0)) { - sub_80973A8(0x22,1); - } - if (GetFriendAreaStatus(FURNACE_DESERT) != 0) { - sub_80973A8(0x1f,1); - } - if (GetFriendAreaStatus(BOULDER_CAVE)) { - sub_80973A8(0x20,1); - } - if (GetFriendAreaStatus(DRAGON_CAVE)) { - sub_80973A8(0x21,1); - } - if (GetFriendAreaStatus(SECRETIVE_FOREST)) { - sub_80973A8(0x23,1); - } - if (GetFriendAreaStatus(SERENE_SEA)) { - sub_80973A8(0x24,1); - sub_80973A8(0x28,1); - } - if ((GetFriendAreaStatus(AGED_CHAMBER_AN)) && (GetFriendAreaStatus(AGED_CHAMBER_O_EXCLAIM))) { - sub_80973A8(0x26,1); - } - if (sub_8001D08(5,0,0)) { - ScenarioCalc(5,0x21,1); - } - if ((FindItemInInventory(ITEM_HM_SURF) != -1) || (gTeamInventory_203B460->teamStorage[ITEM_HM_SURF] != 0)) { - if (sub_8001D08(7,0,0)) { - ScenarioCalc(7,0x26,1); - } - if ((sub_8001D08(9,0,0)) && (GetFriendAreaStatus(SOUTHERN_ISLAND))) { - ScenarioCalc(9,0x2e,1); - } - } - if (!sub_8001CC4(9,0x30,0)) { - if ((sub_8001D08(5,0x22,0)) && HasRecruitedMon(MONSTER_ARTICUNO) && HasRecruitedMon(MONSTER_ZAPDOS) && HasRecruitedMon(MONSTER_MOLTRES)) { - ScenarioCalc(5,0x22,1); - } - if (((sub_8001D08(0xb,0,0)) && (sub_8001D44(5,0x21,3) != 0)) && - (GetFriendAreaStatus(SKY_BLUE_PLAINS))) { - ScenarioCalc(0xb,0x33,1); - } - if (GetFriendAreaStatus(SKY_BLUE_PLAINS)) { - sub_80973A8(0x27,1); - } - if (GetFriendAreaStatus(SKY_BLUE_PLAINS)) { - sub_80973A8(0x29,1); - } - } - if (!sub_8001CC4(5,0x22,0)) { - if (sub_8001D08(10,0,0)) { - ScenarioCalc(10,0x31,1); - sub_809733C(0x1b,1); - } - if ((sub_8001D08(0xc,0,0)) && (!sub_8001CC4(0xb,0x34,0))) { - ScenarioCalc(0xc,0x35,1); - } - } - if ((sub_8001D08(6,0,0)) && (HasRecruitedMon(MONSTER_LUGIA))) { - ScenarioCalc(6,0x24,1); - } - if ((sub_8001D08(8,0,0)) && (HasRecruitedMon(MONSTER_HO_OH))) { - ScenarioCalc(8,0x2c,1); - } - } - } -} - -u32 _FlagCalc(s32 param_1, s32 param_2, u32 operation) -{ - switch(operation) { - case 0: - return param_2; - case 1: - return param_1 - param_2; - case 2: - return param_1 + param_2; - case 3: - return param_1 * param_2; - case 4: - return param_1 / param_2; - case 5: - return param_1 % param_2; - case 6: - return param_1 & param_2; - case 7: - return param_1 | param_2; - case 8: - return param_1 ^ param_2; - case 9: - return (1 << param_2) | param_1; - case 10: - return param_1 & ~(1 << param_2); - case 0xb: - return OtherRandInt(param_2); - default: - FatalError(&gUnknown_80B7318,gUnknown_80B7324, operation); // event flag expansion error %d - } -} - -u8 _FlagJudge(s32 param_1, s32 param_2, u32 operation) -{ - switch(operation) { - case 0: - return 1; - case 1: - return 0; - case 2: - return param_1 == param_2; - case 7: - return param_1 != param_2; - case 3: - return param_1 > param_2; - case 5: - return param_1 >= param_2; - case 4: - return param_1 < param_2; - case 6: - return param_1 <= param_2; - case 8: - return (param_1 & param_2) != 0; - case 9: - return (param_1 ^ param_2) != 0; - case 10: - return param_1 >> (param_2) & 1; - default: - FatalError(&gUnknown_80B7350,gUnknown_80B735C, operation); // event flag rule error %d - } -} - -u32 FlagCalc(u32 r0, u32 r1, u32 operation) -{ - return _FlagCalc(r0, r1, operation); -} - -void sub_800226C(u32 param_1, s16 param_2, s32 param_3, u32 operation) -{ - u32 uVar1; - u32 uVar3; - - s32 param_2_s32 = param_2; - - - uVar1 = sub_8001658(param_1,param_2_s32); - uVar3 = _FlagCalc(uVar1,param_3,operation); - sub_80018D8(param_1,param_2_s32,uVar3); -} - -void sub_80022A0(u32 param_1, s16 param_2, s16 param_3, u32 operation) -{ - s32 uVar1; - s32 uVar2; - s32 uVar3; - - s32 param_2_s32 = param_2; - s32 param_3_s32 = param_3; - - - uVar1 = sub_8001658(param_1,param_2_s32); - uVar2 = sub_8001658(param_1,param_3_s32); - uVar3 = _FlagCalc(uVar1,uVar2,operation); - sub_80018D8(param_1,param_2_s32,uVar3); -} - -u8 FlagJudge(s32 r0, s32 r1, u32 operation) -{ - return _FlagJudge(r0, r1, operation); -} - -u8 sub_80022F8(u32 param_1, s16 param_2, s32 param_3, u32 operation) -{ - s32 uVar1; - - uVar1 = sub_8001658(param_1, param_2); - return _FlagJudge(uVar1,param_3,operation); -} - -u8 sub_8002318(u32 param_1, s16 param_2, s16 param_3, u32 operation) -{ - s32 uVar1; - s32 uVar2; - - s32 param_2_s32 = param_2; - s32 param_3_s32 = param_3; - - uVar1 = sub_8001658(param_1,param_2_s32); - uVar2 = sub_8001658(param_1,param_3_s32); - return _FlagJudge(uVar1,uVar2,operation); -} - -s32 sub_8002354(u32 param_1) -{ - if (param_1 < 0x3b) { - return gUnknown_80B6D90[param_1].num; - } - else { - return -1; - } -} - -u8 *sub_8002374(u32 param_1) -{ - if (param_1 < 0x3b) { - return gUnknown_80B6D90[param_1].text; - } - else { - return gUnknown_80B7378; - } -} - -// Unused -u8 *sub_8002394(u32 param_1) -{ - if (param_1 - 0x12 < 9) { - return gUnknown_80B714C[param_1 - 0x12U]; - } - else if (param_1 == 0xf) { - return gUnknown_80B7388; // 1-1 - } - else { - return gUnknown_80B7144; // NONE - } -} - -// Unused -u8 *sub_80023C4(u32 param_1) -{ - if (param_1 < 4) { - return gUnknown_80B71A0[param_1]; // CISTART, CECONTINUE, CNLAST, CWEND - } - else { - return gUnknown_80B7144; // NONE - } -} - -bool8 sub_80023E4(u32 param_1) -{ - switch(param_1) { - case 0: - return sub_8001D44(3,2,-1); - case 1: - return sub_8001D44(3,3,3); - case 2: - return sub_8001D44(3,4,3); - case 3: - return sub_8001D44(3,5,0); - case 4: - return (sub_8001D44(3,0xb,0) && sub_8001CC4(3,0xd,0)); - case 5: - return (sub_8001D44(3,0xb,3) && sub_8001CC4(3,0xf,0)); - case 6: - return sub_8001D44(3,0x11,-1); - case 7: - return sub_8001D44(3,0x12,2); - case 8: - return sub_8001D44(3,0x12,3); - case 9: - return sub_8001D44(3,0x12,-1); - case 10: - return sub_8001D44(3,5,4); - case 0xb: - return sub_8001D44(3,5,4); - case 0xc: - return (!sub_8001D08(3,0xb,2) && !sub_8001D08(3,0xb,3)); - case 0xd: - return sub_8001D08(3,0x10,2); - case 0xe: - return !sub_8001CC4(3,5,7); - case 0xf: - return !sub_8001CC4(3,0xf,0); - case 0x10: - return sub_8001D44(3,7,-1); - case 0x11: - return sub_8001D44(3,0xc,-1); - case 0x12: - return sub_8001D44(3,0xd,-1); - case 0x13: - return sub_8001D44(3,0xf,-1); - case 0x14: - return sub_8001D44(3,0x10,-1); - case 0x15: - return sub_8001D44(5,0x21,-1); - case 0x16: - return sub_8001D44(5,0x22,-1); - case 0x17: - return sub_8001D44(6,0x24,-1); - case 0x18: - return sub_8001D44(7,0x2a,-1); - case 0x19: - return sub_8001D44(8,0x2c,-1); - case 0x1a: - return sub_8001D44(10,0x31,-1); - case 0x1b: - return sub_80973F4(0x29); - case 0x1c: - return GetRescueTeamRank() == LUCARIO_RANK; - case 0x1d: - return HasCompletedAllMazes(); - default: - return FALSE; - } -} diff --git a/src/exclusive_pokemon.c b/src/exclusive_pokemon.c index c5e9a09a7..17106d6a2 100644 --- a/src/exclusive_pokemon.c +++ b/src/exclusive_pokemon.c @@ -29,7 +29,6 @@ const u8 filler_ex1[8] = EWRAM_DATA_2 struct ExclusivePokemonData *gUnknown_203B498 = {0}; EWRAM_DATA struct ExclusivePokemonData gExclusivePokemonInfo = {0}; - void LoadExclusivePokemon(void) { gUnknown_203B498 = &gExclusivePokemonInfo; @@ -49,3 +48,269 @@ void InitializeExclusivePokemon(void) gUnknown_203B498->Exclusives[counter] = gExclusivePokemon[counter].in_rrt; } } + +void sub_8097FA8(u8 param_1) +{ + gUnknown_203B498->unk48[param_1 >> 5] |= 1 << ((param_1 & 0x1f)); +} + +void sub_8097FD0(u8 param_1) +{ + gUnknown_203B498->unk3C[param_1 >> 5] |= 1 << ((param_1 & 0x1f)); +} + +void sub_8097FF8(void) +{ + s32 iVar1; + s32 index; + struct ExclusivePokemonData *ptr; + + for(index = 0; index < 0x40; index++) + { + ptr = gUnknown_203B498; + if (index < 0) { + iVar1 = index + 0x1f; + } + else + { + iVar1 = index; + } + if ((ptr->unk48[iVar1 >> 5] & (1 << (index - ((iVar1 >> 5) * 0x20)))) != 0) { + ptr->unk3C[iVar1 >> 5] |= (1 << (index - ((iVar1 >> 5) * 0x20))); + } + } + sub_8098080(); +} + +void sub_8098044(u8 param_1) +{ + gUnknown_203B498->unk3C[param_1 >> 5] &= ~(1 << (((param_1 & 0x1f)))); + gUnknown_203B498->unk48[param_1 >> 5] &= ~(1 << (((param_1 & 0x1f)))); +} + +void sub_8098080(void) +{ + s32 index; + + for(index = 0; index < 0x3; index++) + { + gUnknown_203B498->unk48[index] = 0; + } +} + +u32 sub_80980A4(void) +{ + u32 temp = gUnknown_203B498->unk0; + gUnknown_203B498->unk0 = 1; + return temp; +} + +void sub_80980B4(s16 pokeID) +{ + s32 index; + s32 pokeID_s32; + s32 pokeID_s32_1; + struct ExclusivePokemonData *ptr; + + pokeID_s32 = pokeID; + pokeID_s32_1 = pokeID_s32; + if (pokeID_s32 != MONSTER_DECOY) + { + if(pokeID_s32 != MONSTER_STATUE) + { + if(pokeID_s32 != MONSTER_RAYQUAZA_CUTSCENE) { + ptr = gUnknown_203B498; + index = pokeID_s32; + if (pokeID_s32 < 0) { + index = pokeID_s32 + 0x1f; + } + ptr->unk4[index >> 5] |= 1 << (s16)((pokeID_s32_1 - (index >> 5) * 0x20)); + } + } + } +} + +bool8 sub_8098100(u8 param_1) +{ + u32 index = param_1; + + if (index > 0x3f) { + return FALSE; + } + else + { + return (gUnknown_203B498->unk3C[param_1 >> 0x5] & (1 << (index & 0x1f))) ? TRUE : FALSE; + } +} + +bool8 sub_8098134(s16 pokeID) +{ + s32 index; + s32 pokeID_s32; + s32 pokeID_s32_1; + struct ExclusivePokemonData *ptr; + + pokeID_s32 = pokeID; + pokeID_s32_1 = pokeID_s32; + ptr = gUnknown_203B498; + if (pokeID < 0) { + index = pokeID_s32 + 0x1f; + } + else + { + index = pokeID_s32; + } + return ((ptr->unk4[(index >> 5)] & (1 << (s16)(pokeID_s32_1 - ((index >> 5) * 0x20)))) != 0) ? TRUE : FALSE; +} + +void sub_8098170(s32 param_1) +{ + s32 index; + struct ExclusivePokemonData *ptr; + + ptr = gUnknown_203B498; + if (param_1 < 0) { + index = param_1 + 0x1f; + } + else + { + index = param_1; + } + ptr->unk54[(index >> 5)] |= 1 << (param_1 - ((index >> 5) * 0x20)); +} + +bool32 sub_80981A0(s32 param_1) +{ + s32 index; + bool32 flag; + struct ExclusivePokemonData *ptr; + + if (param_1 > 0x1e) { + return FALSE; + } + else { + ptr = gUnknown_203B498; + if (param_1 < 0) { + index = param_1 + 0x1f; + } + else + { + index = param_1; + } + flag = ptr->unk54[(index >> 5)] & 1 << (param_1 - ((index >> 5) * 0x20)); + if (flag != 0) { + flag = TRUE; + } + return flag; + } +} + +bool8 IsExclusivePokemonUnlocked(s16 pokeID) +{ + s32 index; + s32 pokeID_s32; + + pokeID_s32 = pokeID; + + for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) + { + if(gExclusivePokemon[index].poke_id == pokeID_s32) + return gUnknown_203B498->Exclusives[index]; + } + return TRUE; +} + +void UnlockExclusivePokemon(s16 pokeID) +{ + s32 index; + s32 pokeID_s32; + + pokeID_s32 = pokeID; + + for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) + { + if(gExclusivePokemon[index].poke_id == pokeID_s32) + gUnknown_203B498->Exclusives[index] = TRUE; + } +} + +void WriteExclusivePokemon(struct unkStruct_8094924 *r0) +{ + s32 index; + u8 *puVar2; + + u8 stack_0; + u8 stack_1; + u8 stack_2; + u8 neg_1; + u8 zero; + + neg_1 = -1; + zero = 0; + + + SaveIntegerBits(r0, gUnknown_203B498, 1); + for(index = 0; index < 424; index++) + { + stack_0 = sub_8098134(index); + SaveIntegerBits(r0, &stack_0, 1); + } + for(index = 0; index < 64; index++) + { + stack_1 = sub_8098100(index); + SaveIntegerBits(r0, &stack_1, 1); + } + for(index = 0; index < 31; index++) + { + stack_2 = sub_80981A0(index); + SaveIntegerBits(r0, &stack_2, 1); + } + for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) + { + if(gUnknown_203B498->Exclusives[index]) + puVar2 = &neg_1; + else + puVar2 = &zero; + SaveIntegerBits(r0, puVar2, 1); + } +} + +void ReadExclusivePokemon(struct unkStruct_8094924 *r0) +{ + s32 index; + u8 stack_0; + u8 stack_1; + u8 stack_2; + u8 stack_3; + + memset(gUnknown_203B498, 0, sizeof(struct ExclusivePokemonData)); + RestoreIntegerBits(r0, gUnknown_203B498, 1); + for(index = 0; index < 424; index++) + { + RestoreIntegerBits(r0, &stack_0, 1); + if(stack_0) + sub_80980B4(index); + } + for(index = 0; index < 64; index++) + { + RestoreIntegerBits(r0, &stack_1, 1); + if(stack_1) + sub_8097FA8(index); + } + for(index = 0; index < 31; index++) + { + RestoreIntegerBits(r0, &stack_2, 1); + if(stack_2) + sub_8098170(index); + } + for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) + { + RestoreIntegerBits(r0, &stack_3, 1); + + do; while(0); // do/while needed for matching - jiang + + gUnknown_203B498->Exclusives[index] = 1 & stack_3; + } + sub_8097FF8(); +} + diff --git a/src/exclusive_pokemon_1.c b/src/exclusive_pokemon_1.c deleted file mode 100644 index 44a6ab04f..000000000 --- a/src/exclusive_pokemon_1.c +++ /dev/null @@ -1,123 +0,0 @@ -#include "global.h" -#include "exclusive_pokemon.h" - -extern struct ExclusivePokemonData *gUnknown_203B498; -extern struct ExclusivePokemon gExclusivePokemon[NUM_EXCLUSIVE_POKEMON]; - -void sub_80980B4(s16); -void sub_8097FA8(u8); -void sub_8098170(s32); -void sub_8097FF8(void); - -u8 sub_8098100(u8); -u8 sub_8098134(s16); -u8 sub_80981A0(s32); - -bool8 IsExclusivePokemonUnlocked(s16 pokeID) -{ - s32 index; - s32 pokeID_s32; - - pokeID_s32 = pokeID; - - for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) - { - if(gExclusivePokemon[index].poke_id == pokeID_s32) - return gUnknown_203B498->Exclusives[index]; - } - return TRUE; -} - -void UnlockExclusivePokemon(s16 pokeID) -{ - s32 index; - s32 pokeID_s32; - - pokeID_s32 = pokeID; - - for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) - { - if(gExclusivePokemon[index].poke_id == pokeID_s32) - gUnknown_203B498->Exclusives[index] = TRUE; - } -} - -void WriteExclusivePokemon(struct unkStruct_8094924 *r0) -{ - s32 index; - u8 *puVar2; - - u8 stack_0; - u8 stack_1; - u8 stack_2; - u8 neg_1; - u8 zero; - - neg_1 = -1; - zero = 0; - - - SaveIntegerBits(r0, gUnknown_203B498, 1); - for(index = 0; index < 424; index++) - { - stack_0 = sub_8098134(index); - SaveIntegerBits(r0, &stack_0, 1); - } - for(index = 0; index < 64; index++) - { - stack_1 = sub_8098100(index); - SaveIntegerBits(r0, &stack_1, 1); - } - for(index = 0; index < 31; index++) - { - stack_2 = sub_80981A0(index); - SaveIntegerBits(r0, &stack_2, 1); - } - for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) - { - if(gUnknown_203B498->Exclusives[index]) - puVar2 = &neg_1; - else - puVar2 = &zero; - SaveIntegerBits(r0, puVar2, 1); - } -} - -void ReadExclusivePokemon(struct unkStruct_8094924 *r0) -{ - s32 index; - u8 stack_0; - u8 stack_1; - u8 stack_2; - u8 stack_3; - - memset(gUnknown_203B498, 0, sizeof(struct ExclusivePokemonData)); - RestoreIntegerBits(r0, gUnknown_203B498, 1); - for(index = 0; index < 424; index++) - { - RestoreIntegerBits(r0, &stack_0, 1); - if(stack_0) - sub_80980B4(index); - } - for(index = 0; index < 64; index++) - { - RestoreIntegerBits(r0, &stack_1, 1); - if(stack_1) - sub_8097FA8(index); - } - for(index = 0; index < 31; index++) - { - RestoreIntegerBits(r0, &stack_2, 1); - if(stack_2) - sub_8098170(index); - } - for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) - { - RestoreIntegerBits(r0, &stack_3, 1); - - do; while(0); // do/while needed for matching - jiang - - gUnknown_203B498->Exclusives[index] = 1 & stack_3; - } - sub_8097FF8(); -} diff --git a/src/felicity_bank.c b/src/felicity_bank.c index 3332384e8..475ba9b9f 100644 --- a/src/felicity_bank.c +++ b/src/felicity_bank.c @@ -8,6 +8,8 @@ #include "text.h" #include "menu_input.h" +EWRAM_DATA_2 struct FelicityBankWork *gFelicityBankWork = {0}; + extern u32 gUnknown_202DE30; extern u8 gUnknown_202E1C8[]; extern u8 gUnknown_202E5D8[]; @@ -421,4 +423,4 @@ void DrawTeamMoneyBox(u32 param_1) xxx_call_draw_string(6, 0, &gUnknown_80DB738, param_1, 0); // Money sub_8012BC4(42, 12, gTeamInventory_203B460->teamMoney, 5, 5, param_1); sub_80073E0(param_1); -} \ No newline at end of file +} diff --git a/src/friend_area.c b/src/friend_area.c index 139882e9a..4911e6375 100644 --- a/src/friend_area.c +++ b/src/friend_area.c @@ -11,7 +11,7 @@ EWRAM_DATA_2 bool8 *gFriendAreas = {0}; extern bool8 *gFriendAreas; -extern u32 gFriendAreaDescriptions[]; +extern u8 *gFriendAreaDescriptions[]; extern const char *gFriendAreaNames[]; extern const char gUnknown_81098A4; extern const char gUnknown_81098AC; @@ -504,7 +504,7 @@ u8 GetFriendAreaUnlockCondition(u8 index) return gFriendAreaSettings[index].unlock_condition; } -u32 GetFriendAreaPrice(u8 index) +s32 GetFriendAreaPrice(u8 index) { return gFriendAreaSettings[index].price; } @@ -530,7 +530,7 @@ void sub_8092578(u8 *buffer, u8 index, u8 r2) } } -u32 GetFriendAreaDescription(u8 index) +u8 *GetFriendAreaDescription(u8 index) { return gFriendAreaDescriptions[index]; } @@ -558,3 +558,38 @@ bool8 HasAllFriendAreas(void) return TRUE; } +void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u8 param_4) +{ + struct PokemonStruct *pokeStruct; + s32 counter; + s32 iVar4; + + + iVar4 = 0; + + for(counter = 0; counter < friendArea; counter++) + { + iVar4 += gFriendAreaSettings[counter].num_pokemon; + } + param_2->unk8 = iVar4; + + param_2->hasFriendArea = gFriendAreas[counter]; + if (param_2->hasFriendArea != 0) { + param_2->unk2 = 0; + param_2->numPokemon = gFriendAreaSettings[counter].num_pokemon; + + for(counter = 0; counter < param_2->numPokemon; counter++, iVar4++) + { + pokeStruct = &gRecruitedPokemonRef->pokemon[iVar4]; + if (((((u8)pokeStruct->unk0 & 1) != 0) && + ((param_3 == 0 || (!pokeStruct->isTeamLeader)))) && + ((param_4 == 0 || ((pokeStruct->dungeonLocation).id != DUNGEON_JOIN_LOCATION_PARTNER)))) { + param_2->unk2++; + } + } + } + else { + param_2->unk2 = 0; + param_2->numPokemon = 0; + } +} diff --git a/src/friend_rescue.c b/src/friend_rescue.c index dcad3b627..f35a7f52e 100644 --- a/src/friend_rescue.c +++ b/src/friend_rescue.c @@ -3,6 +3,7 @@ #include "constants/monster.h" #include "constants/wonder_mail.h" #include "text.h" +#include "text_util.h" #include "input.h" #include "item.h" #include "team_inventory.h" @@ -316,7 +317,6 @@ extern void sub_8035CF4(struct MenuStruct *, u32, u32); extern s32 sub_8037B28(u32); extern s32 sub_8037D64(u32, void *, void *); extern s32 sub_80381F4(u32, void *, void *); -extern void sub_80922B4(u8 *buffer, u8 *string, s32 size); extern s32 CountMailType(u8 mailType); extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32); @@ -1188,8 +1188,8 @@ void sub_8032828(void) gUnknown_203B33C->unk53C.moneyReward = 0; mail = GetMailatIndex(GetMailIndex(6, gUnknown_203B33C->unk420)); // ABSOLUTELY GENIUS - if (mail->unk20.id != ITEM_NOTHING) - gUnknown_203B33C->unk53C.itemRewards[0] = mail->unk20.id; + if (mail->item.id != ITEM_NOTHING) + gUnknown_203B33C->unk53C.itemRewards[0] = mail->item.id; else gUnknown_203B33C->unk53C.itemRewards[0] = ITEM_NOTHING; gUnknown_203B33C->unk53C.quantity = 1; @@ -2691,7 +2691,7 @@ void sub_8034F88(void) case 6: mail = GetMailatIndex(gUnknown_203B33C->unk218); if(gUnknown_203B33C->item.id != ITEM_NOTHING) - mail->unk20 = gUnknown_203B33C->item; + mail->item = gUnknown_203B33C->item; gTeamInventory_203B460->teamStorage[gUnknown_203B33C->item.id]--; SetFriendRescueMenuState(0x75); break; @@ -2892,7 +2892,7 @@ void sub_8035210(void) if(gUnknown_203B33C->unk528 == 0x13) { mail = GetMailatIndex(GetFirstIndexofMailType(5)); - if(mail->unk20.id != ITEM_NOTHING) + if(mail->item.id != ITEM_NOTHING) SetFriendRescueMenuState(0x53); else SetFriendRescueMenuState(0x55); @@ -3034,4 +3034,4 @@ void nullsub_50(void) void nullsub_51(void) { -} \ No newline at end of file +} diff --git a/src/ground_main.c b/src/ground_main.c index 373d237ed..6aae81407 100644 --- a/src/ground_main.c +++ b/src/ground_main.c @@ -3,17 +3,20 @@ #include "input.h" #include "debug.h" #include "code_80A26CC.h" +#include "event_flag.h" -extern u32 gUnknown_20398A8; -extern u32 gUnknown_20398AC; -extern u32 gUnknown_20398B0; -extern u32 gUnknown_20398B4; -extern u8 gUnknown_20398B8; -extern u8 gUnknown_20398B9; -extern u8 gUnknown_20398BA; -extern u16 gUnknown_20398BE; -extern u32 gUnknown_20398C0; -extern s16 gUnknown_20398C4; +EWRAM_DATA u32 gUnknown_20398A8 = {0}; +EWRAM_DATA u32 gUnknown_20398AC = {0}; +EWRAM_DATA u32 gUnknown_20398B0 = {0}; +EWRAM_DATA u32 gUnknown_20398B4 = {0}; +EWRAM_DATA u8 gUnknown_20398B8 = {0}; +EWRAM_DATA u8 gUnknown_20398B9 = {0}; +EWRAM_DATA u8 gUnknown_20398BA = {0}; +EWRAM_DATA UNUSED static u8 gUnknown_20398BB = {0}; // NOTE: Needed for matching but not used +EWRAM_DATA u16 gUnknown_20398BC = {0}; +EWRAM_DATA u16 gUnknown_20398BE = {0}; +EWRAM_DATA u32 gUnknown_20398C0 = {0}; +EWRAM_DATA s16 gUnknown_20398C4 = {0}; EWRAM_DATA_2 u8 gUnknown_203B49C = {0}; EWRAM_DATA_2 u8 gUnknown_203B49D = {0}; @@ -66,7 +69,6 @@ extern void GroundEffect_Action(); extern s32 sub_8001658(u8, u8); extern s32 sub_8001784(u8, u8, u8); extern void sub_809CB8C(); -extern void sub_8001D88(); extern void sub_80015C0(u8, u8); extern void sub_80018D8(u8, u8, u32); extern void sub_800199C(u8, u8, u8, s32); @@ -75,13 +77,10 @@ extern void GeneratePelipperJobs(); extern void sub_80961B4(); extern void ClearAllItems_8091FB4(); extern const char *sub_80A2B18(s16); -extern bool8 sub_8001CC4(u8, u8, u8); extern void ChooseKecleonShopInventory(u32); -extern bool8 sub_80023E4(u32); extern void FadeOutAllMusic(u16); extern u8 sub_809C730(); extern s16 sub_80A2750(s16); -extern u8 sub_8001D44(u32, u32, s32); void sub_8098BDC(void) { diff --git a/src/gulpin_shop.c b/src/gulpin_shop.c index 9f3b8dd90..f0d500d3f 100644 --- a/src/gulpin_shop.c +++ b/src/gulpin_shop.c @@ -151,7 +151,7 @@ void sub_801EA28(void) { switch (gGulpinShopWork->state) { case 0: - sub_801EE10(2, gGulpinShopWork->speciesNum, gGulpinShopWork->moves, 0, &gUnknown_80DC164, 0); + sub_801EE10(2, gGulpinShopWork->speciesNum, gGulpinShopWork->moves, 0, gUnknown_80DC164, 0); break; case 1: sub_801F1B0(1, 0); @@ -331,4 +331,4 @@ void sub_801EDC0(void) break; } } -} \ No newline at end of file +} diff --git a/src/gulpin_shop_1.c b/src/gulpin_shop_1.c new file mode 100644 index 000000000..42fbf746d --- /dev/null +++ b/src/gulpin_shop_1.c @@ -0,0 +1,1175 @@ +#include "global.h" +#include "memory.h" +#include "menu.h" +#include "pokemon.h" +#include "pokemon_3.h" +#include "file_system.h" +#include "input.h" +#include "text.h" +#include "team_inventory.h" +#include "menu_input.h" +#include "gulpin_shop.h" +#include "moves.h" + +// size: 0x1E0 +struct unkStruct_203B27C +{ + /* 0x0 */ bool32 isAsleep; + /* 0x4 */ s32 state; + /* 0x8 */ u32 fallbackState; + /* 0xC */ s16 speciesNum; + /* 0x10 */ struct PokemonStruct *pokeStruct; + /* 0x14 */ bool8 isNextMoveLinked; + bool8 unk15; + /* 0x16 */ bool8 isTeamLeader; + /* 0x18 */ u32 moveIndex; + // Group of move ids but not sure purpose just yet... + u16 unk1C; + u16 unk1E; + u16 unk20; + /* 0x24 */ struct Move moves[MAX_MON_MOVES * 2]; + /* 0x64 */ u16 sequenceMoveIDs[MAX_MON_MOVES]; + /* 0x6C */ u32 menuAction1; + /* 0x70 */ u32 menuAction2; + /* 0x74 */ u32 menuAction3; + /* 0x78 */ u32 menuAction4; + struct MenuItem unk7C[8]; + u16 unkBC[8]; + struct MenuStruct unkCC; + u8 fill11C[0x16C - 0x11C]; + /* 0x16C */ struct OpenedFile *faceFile; + /* 0x170 */ u8 *faceData; + u16 unk174; + u16 unk176; + u8 unk178; + u8 unk179; + u8 unk17A; + struct OpenedFile **unk17C; + struct UnkTextStruct2 unk180[4]; +}; + +EWRAM_DATA_2 struct unkStruct_203B27C *gUnknown_203B27C = {0}; + +extern u8 gAvailablePokemonNames[]; +extern u8 gUnknown_202DFE8[]; +extern u8 gUnknown_202E1C8[]; +extern u8 gUnknown_202E5D8[]; + +extern struct UnkTextStruct2 gUnknown_80DC31C; +extern struct UnkTextStruct2 gUnknown_80DC334; +extern struct UnkTextStruct2 gUnknown_80DC31C; +extern struct UnkTextStruct2 gUnknown_80DC34C; +extern struct UnkTextStruct2 gUnknown_80DC37C; + +extern const u8 *gGulpinDialogue[2][25]; +extern u8 gUnknown_80DC3D8[]; +extern u8 gUnknown_80DC3E0[]; +extern u8 gUnknown_80DC3E8[]; +extern u8 gUnknown_80DC3F4[]; +extern u8 gUnknown_80DC394[]; +extern u8 gGulpinProceed[]; +extern u8 gGulpinInfo[]; +extern u8 *gUnknown_80D4934[]; +extern u8 *gUnknown_80D4920[]; +extern u8 *gUnknown_80D4928[]; +extern u8 gGulpinForget[]; +extern u8 gGulpinLink[]; +extern u8 gGulpinDelink[]; +extern u8 gGulpinSet[]; +extern u8 gGulpinDeselect[]; +extern u8 *gUnknown_80D4970[]; +extern u8 gUnknown_80DC428[]; +extern u8 gUnknown_80DC438[]; +extern u8 gUnknown_80DC448[]; +extern u8 gUnknown_202E128[]; + +extern s32 sub_80144A4(s32 *); +void PlayMenuSoundEffect(u32); +void PlaySound(u32); +bool8 sub_8021178(void); +void CreateGulpinShopMenu(void); +extern void sub_8014248(const u8 *, u32, u32, const struct MenuItem *, void *, u32, u32, struct OpenedFile **, u32); +extern void sub_80141B4(const u8 *, u32, struct OpenedFile **, u32); +extern void DrawTeamMoneyBox(u32); +void sub_8020950(void); +void sub_8020900(void); +bool8 sub_801F808(u16 *moveIDs); +void sub_801F700(void); +bool8 sub_801F428(s16 index, s32 param_2); +void sub_801F5F0(u8 r0); +extern void sub_8023DA4(void); +extern void sub_8023868(u32, u32, u32, u32); +extern void sub_8023B7C(u32); +extern void sub_801F1B0(u32, u32); +extern void sub_801F280(u32); +void sub_8024458(u32, u32); +extern void sub_801BEEC(s16); +extern void sub_801EE10(u32, s16, struct Move *, u32, void *, u32); +void sub_80208B0(void); +void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); +extern struct PokemonStruct *GetPlayerPokemonStruct(void); +extern void sub_801FDA8(s32); +extern void sub_8020A80(void); +extern void sub_8020B38(void); +extern void sub_8020C2C(void); +extern void sub_8020C48(void); +extern void sub_8020C64(void); +extern void sub_8020CC0(void); +extern void sub_8020D74(void); +extern void sub_8020D90(void); +extern void sub_8020DCC(void); +extern void sub_8020EB4(void); +extern void sub_80210C8(void); +extern void sub_80210E4(void); +extern void sub_8021154(void); +extern void sub_80209AC(void); +extern void sub_8021130(void); +extern void sub_80209FC(void); +extern void sub_8020A34(void); +extern void sub_801FDC0(void); +extern void sub_801FF28(void); +u32 sub_8023A94(u32); +void sub_8023C60(void); +extern s16 sub_8023B44(void); +extern u32 sub_80244E4(void); +extern u32 sub_801BF48(void); +extern void sub_802453C(void); +extern void sub_801BF98(void); +extern u32 sub_801F520(u32); +extern void sub_801F63C(void); +extern u16 sub_801F5B4(void); +extern void sub_801F8D0(void); +extern u32 sub_801F890(void); +extern u32 sub_801E8C0(void); +extern u32 sub_801F194(void); +bool8 sub_801F1A4(void); +void sub_801F214(void); +extern u32 sub_801EF38(u32); + +extern void CreateGulpinLinkMenu(void); +extern void sub_802069C(void); +extern void sub_80205D0(void); + +bool8 sub_801FB50(bool32 isAsleep) +{ + char *name; + struct OpenedFile *faceFile; + + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + gUnknown_203B27C = MemoryAlloc(sizeof(struct unkStruct_203B27C), 0x8); + gUnknown_203B27C->menuAction2 = 0; + gUnknown_203B27C->menuAction3 = 0; + gUnknown_203B27C->menuAction4 = 0; + gUnknown_203B27C->isAsleep = isAsleep; + gUnknown_203B27C->unk15 = FALSE; + CopyYellowMonsterNametoBuffer(gUnknown_202E5D8,MONSTER_GULPIN); + CopyYellowMonsterNametoBuffer(gUnknown_202E1C8,MONSTER_GULPIN); + name = GetMonSpecies(MONSTER_GULPIN); + strcpy(gUnknown_202E1C8 - 0x50, name); + PrintPokeNameToBuffer(gUnknown_202E1C8 - 0xF0, GetPlayerPokemonStruct()); + if (gUnknown_203B27C->isAsleep == 1) { + gUnknown_203B27C->unk17C = NULL; + } + else { + gUnknown_203B27C->unk17C = &gUnknown_203B27C->faceFile; + } + faceFile = GetDialogueSpriteDataPtr(MONSTER_GULPIN); + gUnknown_203B27C->faceFile = faceFile; + gUnknown_203B27C->faceData = faceFile->data; + gUnknown_203B27C->unk178 = 0; + gUnknown_203B27C->unk179 = 0; + gUnknown_203B27C->unk17A = 0; + gUnknown_203B27C->unk174 = 2; + gUnknown_203B27C->unk176 = 8; + sub_801FDA8(0); + return TRUE; +} + +u32 sub_801FC40(void) +{ + switch(gUnknown_203B27C->state) { + case 0: + case 1: + sub_8021154(); + break; + case 2: + sub_80209AC(); + break; + case 7: + sub_80209FC(); + break; + case 8: + sub_8020A34(); + break; + case 0xf: + case 0x10: + sub_8020A80(); + break; + case 0x11: + sub_8020B38(); + break; + case 0x12: + sub_8020C2C(); + break; + case 0x13: + sub_8020C48(); + break; + case 0x15: + case 0x16: + sub_8020C64(); + break; + case 0x17: + sub_8020CC0(); + break; + case 0x18: + sub_8020D74(); + break; + case 0x1d: + sub_8020D90(); + break; + case 0x1e: + case 0x1f: + sub_8020DCC(); + break; + case 0x20: + sub_8020EB4(); + break; + case 0x21: + sub_80210C8(); + break; + case 0x22: + sub_80210E4(); + break; + case 0xd: + if (gUnknown_203B27C->unk15 == TRUE) { + gTeamInventory_203B460->teamMoney -= 150; + } + return 3; + default: + sub_8021130(); + break; + } + return 0; +} + +void sub_801FD7C(void) +{ + if(gUnknown_203B27C) + { + CloseFile(gUnknown_203B27C->faceFile); + MemoryFree(gUnknown_203B27C); + gUnknown_203B27C = NULL; + } +} + +void sub_801FDA8(s32 newState) +{ + gUnknown_203B27C->state = newState; + sub_801FDC0(); + sub_801FF28(); +} + +void sub_801FDC0(void) +{ + s32 index; + + sub_8006518(gUnknown_203B27C->unk180); + switch(gUnknown_203B27C->state) + { + case 0x2: + gUnknown_203B27C->unk180[0].unk0 = 0x80; + gUnknown_203B27C->unk180[1].unk0 = 0x80; + gUnknown_203B27C->unk180[2].unk0 = 0x80; + gUnknown_203B27C->unk180[3] = gUnknown_80DC37C; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B27C->unk180, 1, 0); + break; + case 0x11: + sub_80205D0(); + gUnknown_203B27C->unk180[2] = gUnknown_80DC334; + sub_8012CAC(&gUnknown_203B27C->unk180[2], gUnknown_203B27C->unk7C); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B27C->unk180, 1, 1); + break; + case 0x17: + sub_802069C(); + gUnknown_203B27C->unk180[2] = gUnknown_80DC334; + sub_8012CAC(&gUnknown_203B27C->unk180[2], gUnknown_203B27C->unk7C); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B27C->unk180, 1, 1); + break; + case 0x20: + CreateGulpinLinkMenu(); + gUnknown_203B27C->unk180[1] = gUnknown_80DC31C; + gUnknown_203B27C->unk180[2] = gUnknown_80DC34C; + sub_8012CAC(&gUnknown_203B27C->unk180[2], gUnknown_203B27C->unk7C); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B27C->unk180, 1, 1); + break; + default: + for(index = 0; index < 4; index++) + { + gUnknown_203B27C->unk180[index] = gUnknown_80DC31C; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B27C->unk180, 1, 1); + break; + } +} + +void sub_801FF28(void) +{ + s32 index; + + switch(gUnknown_203B27C->state) + { + case 0: + gUnknown_203B27C->menuAction1 = 2; + CreateGulpinShopMenu(); + gUnknown_203B27C->fallbackState = 2; + sub_8014248(gGulpinDialogue[gUnknown_203B27C->isAsleep][0],0,gUnknown_203B27C->menuAction1,gUnknown_203B27C->unk7C,gUnknown_203B27C->unkBC,4,0,gUnknown_203B27C->unk17C,0xc); + break; + case 1: + CreateGulpinShopMenu(); + gUnknown_203B27C->fallbackState = 2; + sub_8014248(gGulpinDialogue[gUnknown_203B27C->isAsleep][1],0,gUnknown_203B27C->menuAction1,gUnknown_203B27C->unk7C,gUnknown_203B27C->unkBC,4,0,gUnknown_203B27C->unk17C,0xc); + break; + case 2: + DrawTeamMoneyBox(3); + break; + case 3: + gUnknown_203B27C->fallbackState = 0x1f; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][2],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 4: + gUnknown_203B27C->fallbackState = 0x1f; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][3],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 5: + gUnknown_203B27C->fallbackState = 0x1f; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][4],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 6: + gUnknown_203B27C->fallbackState = 0x1f; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][5],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 7: + sub_8020900(); + sub_8014248(gGulpinDialogue[gUnknown_203B27C->isAsleep][6],0,0x10, + gUnknown_203B27C->unk7C,gUnknown_203B27C->unkBC,4,0, + gUnknown_203B27C->unk17C,0xc); + break; + case 8: + sub_8020950(); + sub_8014248(gGulpinDialogue[gUnknown_203B27C->isAsleep][21],0,0xd, + gUnknown_203B27C->unk7C,gUnknown_203B27C->unkBC,4,0, + gUnknown_203B27C->unk17C,0xc); + break; + case 9: + gUnknown_203B27C->fallbackState = 1; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][22],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 10: + gUnknown_203B27C->fallbackState = 1; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][23],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 0xb: + gUnknown_203B27C->fallbackState = 1; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][24],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 0xc: + gUnknown_203B27C->fallbackState = 0xd; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][7],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 0xe: + gUnknown_203B27C->fallbackState = 0xf; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][8],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 0xf: + sub_8023868(2,0,0,10); + break; + case 0x10: + sub_8023B7C(1); + break; + case 0x11: + sub_8023DA4(); + sub_8012D60(&gUnknown_203B27C->unkCC,gUnknown_203B27C->unk7C,0,gUnknown_203B27C->unkBC,gUnknown_203B27C->menuAction2,2); + break; + case 0x12: + sub_8024458(gUnknown_203B27C->speciesNum,2); + break; + case 0x13: + sub_801BEEC(gUnknown_203B27C->speciesNum); + break; + case 0x14: + gUnknown_203B27C->fallbackState = 0x15; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][9],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 0x15: + sub_801F428(gUnknown_203B27C->speciesNum,0); + break; + case 0x16: + sub_801F5F0(1); + break; + case 0x17: + sub_801F700(); + sub_8012D60(&gUnknown_203B27C->unkCC,gUnknown_203B27C->unk7C,0,gUnknown_203B27C->unkBC,gUnknown_203B27C->menuAction3,2); + break; + case 0x18: + gUnknown_203B27C->sequenceMoveIDs[0] = gUnknown_203B27C->unk1C; + for(index = 1; index < 4; index++) + { + gUnknown_203B27C->sequenceMoveIDs[index] = 0; + } + sub_801F808(gUnknown_203B27C->sequenceMoveIDs); + break; + case 0x19: + sub_8094060(gUnknown_203B27C->moves,gUnknown_203B27C->pokeStruct->moves); + gUnknown_203B27C->fallbackState = 0x10; + sub_8092C84(gAvailablePokemonNames,gUnknown_203B27C->unk1E); + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][10],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 0x1a: + sub_8094060(gUnknown_203B27C->moves,gUnknown_203B27C->pokeStruct->moves); + gUnknown_203B27C->fallbackState = 0x10; + if (gUnknown_203B27C->isNextMoveLinked) { + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][14],0,gUnknown_203B27C->unk17C,0x10d); + } + else + { + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][13],0,gUnknown_203B27C->unk17C,0x10d); + } + break; + case 0x1d: + if (gUnknown_203B27C->isAsleep == FALSE) { + CreateGulpinShop(FALSE,gUnknown_203B27C->speciesNum,gUnknown_203B27C->moves); + } + else { + CreateGulpinShop(TRUE,gUnknown_203B27C->speciesNum,gUnknown_203B27C->moves); + } + break; + case 0x1b: + gUnknown_203B27C->fallbackState = 0x10; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][15],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 0x1c: + gUnknown_203B27C->fallbackState = 0x10; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][16],0,gUnknown_203B27C->unk17C,0x10d); + break; + + case 0x1e: + unk_CopyMoves4To8(gUnknown_203B27C->moves,gUnknown_203B27C->pokeStruct->moves); + sub_801EE10(1,gUnknown_203B27C->speciesNum,gUnknown_203B27C->moves,gUnknown_203B27C->unk15,gUnknown_80DC394,0); + break; + case 0x1f: + sub_801F1B0(1,gUnknown_203B27C->unk15); + break; + case 0x20: + sub_801F280(0); + sub_8012D60(&gUnknown_203B27C->unkCC,gUnknown_203B27C->unk7C,0,gUnknown_203B27C->unkBC,gUnknown_203B27C->menuAction4,2); + break; + case 0x21: + GetLinkedSequence(gUnknown_203B27C->moveIndex,gUnknown_203B27C->moves,gUnknown_203B27C->sequenceMoveIDs); + sub_801F808(gUnknown_203B27C->sequenceMoveIDs); + break; + case 0x22: + sub_80208B0(); + sub_8092C84(gUnknown_202DFE8,gUnknown_203B27C->unk20); + if (gUnknown_203B27C->isNextMoveLinked) { + sub_8014248(gGulpinDialogue[gUnknown_203B27C->isAsleep][18],0,0x11,gUnknown_203B27C->unk7C,gUnknown_203B27C->unkBC,4,0, + gUnknown_203B27C->unk17C,0xc); + } + else { + sub_8014248(gGulpinDialogue[gUnknown_203B27C->isAsleep][17],0,0x11,gUnknown_203B27C->unk7C,gUnknown_203B27C->unkBC,4,0, + gUnknown_203B27C->unk17C,0xc); + } + break; + case 0x23: + gUnknown_203B27C->fallbackState = 0x1f; + sub_8092C84(gUnknown_202DFE8,gUnknown_203B27C->unk20); + if (gUnknown_203B27C->isNextMoveLinked) + { + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][20],0,gUnknown_203B27C->unk17C,0x10d); + } + else + { + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][19],0,gUnknown_203B27C->unk17C,0x10d); + } + break; + } +} + +void CreateGulpinShopMenu(void) +{ + s32 loopMax = 0; + MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); + gUnknown_203B27C->unk7C[loopMax].text = gGulpinProceed; + gUnknown_203B27C->unk7C[loopMax].menuAction = 2; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gGulpinInfo; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xb; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = *gUnknown_80D4934; + gUnknown_203B27C->unk7C[loopMax].menuAction = 1; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = 0x0; + gUnknown_203B27C->unk7C[loopMax].menuAction = 1; +} + +void sub_80205D0(void) +{ + s32 loopMax; + s32 i; + loopMax = 0; + + MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); + + gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC3D8; + gUnknown_203B27C->unk7C[loopMax].menuAction = 4; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC3E0; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xB; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC3E8; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xC; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC3F4; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0x3; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = NULL; + gUnknown_203B27C->unk7C[loopMax].menuAction = 1; + + for (i = 0; i < loopMax; i++) { + if (gUnknown_203B27C->unkBC[i] == 0 && gUnknown_203B27C->unk7C[i].menuAction == gUnknown_203B27C->menuAction2) + return; + } + for (i = 0; i < loopMax; i++) { + if (gUnknown_203B27C->unkBC[i] == 0) { + gUnknown_203B27C->menuAction2 = gUnknown_203B27C->unk7C[i].menuAction; + break; + } + } +} + +void sub_802069C(void) +{ + s32 loopMax; + s32 i; + loopMax = 0; + + MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); + + gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC3F4; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0x3; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = *gUnknown_80D4970; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xB; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = NULL; + gUnknown_203B27C->unk7C[loopMax].menuAction = 1; + + for (i = 0; i < loopMax; i++) { + if (gUnknown_203B27C->unkBC[i] == 0 && gUnknown_203B27C->unk7C[i].menuAction == gUnknown_203B27C->menuAction3) + return; + } + for (i = 0; i < loopMax; i++) { + if (gUnknown_203B27C->unkBC[i] == 0) { + gUnknown_203B27C->menuAction3 = gUnknown_203B27C->unk7C[i].menuAction; + break; + } + } +} + +void CreateGulpinLinkMenu(void) +{ + s32 loopMax; + s32 i; + loopMax = 0; + + MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); + + if(gUnknown_203B27C->isTeamLeader) + { + if(IsMoveSet(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) + { + gUnknown_203B27C->unk7C[loopMax].text = gGulpinDeselect; + gUnknown_203B27C->unk7C[loopMax].menuAction = 6; + } + else + { + gUnknown_203B27C->unk7C[loopMax].text = gGulpinSet; + gUnknown_203B27C->unk7C[loopMax].menuAction = 5; + } + } + else + { + if(IsMoveEnabled(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) + { + gUnknown_203B27C->unk7C[loopMax].text = gGulpinDeselect; + } + else + { + gUnknown_203B27C->unk7C[loopMax].text = gGulpinSet; + } + gUnknown_203B27C->unk7C[loopMax].menuAction = 7; + } + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gGulpinLink; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0x8; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gGulpinDelink; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0x9; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gGulpinForget; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xA; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = *gUnknown_80D4970; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xB; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = NULL; + gUnknown_203B27C->unk7C[loopMax].menuAction = 1; + + for (i = 0; i < loopMax; i++) { + if (gUnknown_203B27C->unkBC[i] == 0 && gUnknown_203B27C->unk7C[i].menuAction == gUnknown_203B27C->menuAction4) + return; + } + for (i = 0; i < loopMax; i++) { + if (gUnknown_203B27C->unkBC[i] == 0) { + gUnknown_203B27C->menuAction4 = gUnknown_203B27C->unk7C[i].menuAction; + break; + } + } +} + +void sub_80208B0(void) +{ + s32 loopMax = 0; + MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); + gUnknown_203B27C->unk7C[loopMax].text = *gUnknown_80D4920; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0x10; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = *gUnknown_80D4928; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0x11; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = NULL; + gUnknown_203B27C->unk7C[loopMax].menuAction = 1; +} + +void sub_8020900(void) +{ + s32 loopMax = 0; + MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); + gUnknown_203B27C->unk7C[loopMax].text = *gUnknown_80D4920; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0x10; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = *gUnknown_80D4928; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0x11; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = NULL; + gUnknown_203B27C->unk7C[loopMax].menuAction = -1; +} + +void sub_8020950(void) +{ + s32 loopMax = 0; + MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); + + gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC428; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xD; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC438; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xE; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC448; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xF; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = NULL; + gUnknown_203B27C->unk7C[loopMax].menuAction = 1; +} + +void sub_80209AC(void) +{ + s32 menuAciton; + if(sub_80144A4(&menuAciton) == 0) + { + gUnknown_203B27C->menuAction1 = menuAciton; + switch(menuAciton) + { + case 2: + sub_801FDA8(0xe); + break; + case 0xB: + sub_801FDA8(0x8); + break; + case 1: + sub_801FDA8(0xC); + break; + } + } +} + +void sub_80209FC(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 0x10: + sub_801FDA8(0xe); + break; + case 0x11: + case 1: + sub_801FDA8(0xC); + break; + } + } +} + +void sub_8020A34(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 0xD: + sub_801FDA8(0x9); + break; + case 0xE: + sub_801FDA8(10); + break; + case 0xF: + sub_801FDA8(0xb); + break; + case 1: + sub_801FDA8(0x1); + break; + } + } +} + +void sub_8020A80(void) +{ + switch(sub_8023A94(1)) + { + case 3: + gUnknown_203B27C->speciesNum = sub_8023B44(); + gUnknown_203B27C->pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B27C->speciesNum]; + gUnknown_203B27C->isTeamLeader = gUnknown_203B27C->pokeStruct->isTeamLeader; + PrintPokeNameToBuffer(gUnknown_202E128, gUnknown_203B27C->pokeStruct); + sub_801FDA8(0x11); + break; + case 4: + gUnknown_203B27C->speciesNum = sub_8023B44(); + gUnknown_203B27C->pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B27C->speciesNum]; + gUnknown_203B27C->isTeamLeader = gUnknown_203B27C->pokeStruct->isTeamLeader; + PrintPokeNameToBuffer(gUnknown_202E128, gUnknown_203B27C->pokeStruct); + sub_801FDA8(0x12); + break; + case 0: + case 1: + break; + case 2: + sub_8023C60(); + sub_801FDA8(7); + break; + } +} + +void sub_8020B38(void) +{ + s32 menuAction; + + menuAction = 0; + sub_8023A94(0); + if (!sub_8012FD8(&gUnknown_203B27C->unkCC)) { + sub_8013114(&gUnknown_203B27C->unkCC,&menuAction); + if (menuAction != 1) { + gUnknown_203B27C->menuAction2 = menuAction; + } + } + + switch(menuAction) + { + case 0x1: + case 0x11: + sub_801FDA8(0x10); + break; + case 0x3: + if(GetBaseSpeciesNoUnown(gUnknown_203B27C->pokeStruct->speciesNum) == MONSTER_DEOXYS_NORMAL) + { + sub_801FDA8(0x1C); + } + else if(sub_8021178()) + { + sub_801FDA8(0x1b); + } + else + { + sub_801FDA8(0x14); + } + break; + case 0x4: + sub_801FDA8(0x1e); + break; + case 0xB: + sub_801FDA8(0x12); + break; + case 0xC: + sub_801FDA8(0x13); + break; + } +} + +void sub_8020C2C(void) +{ + switch(sub_80244E4()) + { + case 2: + case 3: + sub_802453C(); + sub_801FDA8(0x10); + break; + case 0: + case 1: + break; + } +} + +void sub_8020C48(void) +{ + switch(sub_801BF48()) + { + case 2: + case 3: + sub_801BF98(); + sub_801FDA8(0x10); + break; + case 0: + case 1: + break; + } +} + +void sub_8020C64(void) +{ + switch(sub_801F520(1)) + { + case 3: + gUnknown_203B27C->unk1E = gUnknown_203B27C->unk1C = sub_801F5B4(); + sub_801FDA8(0x17); + break; + case 4: + gUnknown_203B27C->unk1E = gUnknown_203B27C->unk1C = sub_801F5B4(); + sub_801FDA8(0x18); + break; + case 2: + sub_801F63C(); + sub_801FDA8(0x10); + break; + } +} + +void sub_8020CC0(void) +{ + s32 menuAction; + s32 index; + struct Move *move; + + menuAction = 0; + sub_801F520(0); + if (!sub_8012FD8(&gUnknown_203B27C->unkCC)) { + sub_8013114(&gUnknown_203B27C->unkCC,&menuAction); + if (menuAction != 1) { + gUnknown_203B27C->menuAction3 = menuAction; + } + } + + switch(menuAction) + { + case 0x1: + case 0x11: + sub_801FDA8(0x16); + break; + case 0x3: + sub_801F63C(); + unk_CopyMoves4To8(gUnknown_203B27C->moves,gUnknown_203B27C->pokeStruct->moves); + for(index = 0; index < MAX_MON_MOVES * 2; index++) + { + move = &gUnknown_203B27C->moves[index]; + if(!(move->moveFlags & MOVE_FLAG_EXISTS)) + { + InitZeroedPPPokemonMove(move,gUnknown_203B27C->unk1E); + break; + } + } + if(index >= MAX_MON_MOVES) + { + sub_801FDA8(0x1d); + } + else + { + sub_801FDA8(0x19); + } + break; + case 0xB: + sub_801FDA8(0x18); + break; + } +} + +void sub_8020D74(void) +{ + switch(sub_801F890()) + { + case 2: + case 3: + sub_801F8D0(); + sub_801FDA8(0x16); + break; + case 0: + case 1: + break; + } +} + +void sub_8020D90(void) +{ + switch(sub_801E8C0()) + { + case 3: + gUnknown_203B27C->isNextMoveLinked = GulpinIsNextMoveLinked(); + DestroyGulpinShop(); + sub_801FDA8(0x1A); + break; + case 2: + DestroyGulpinShop(); + sub_801FDA8(0x10); + break; + case 0: + case 1: + break; + } +} + +void sub_8020DCC(void) +{ + switch(sub_801EF38(1)) { + case 3: + if (sub_801F1A4() != 0) { + gUnknown_203B27C->unk15 = TRUE; + } + gUnknown_203B27C->moveIndex = sub_801F194(); + gUnknown_203B27C->unk1C = gUnknown_203B27C->moves [gUnknown_203B27C->moveIndex].id; + gUnknown_203B27C->unk20 = gUnknown_203B27C->moves [gUnknown_203B27C->moveIndex].id; + sub_801FDA8(0x20); + break; + case 4: + if (sub_801F1A4() != 0) { + gUnknown_203B27C->unk15 = TRUE; + } + gUnknown_203B27C->moveIndex = sub_801F194(); + gUnknown_203B27C->unk1C = gUnknown_203B27C->moves [gUnknown_203B27C->moveIndex].id; + gUnknown_203B27C->unk20 = gUnknown_203B27C->moves [gUnknown_203B27C->moveIndex].id; + sub_801FDA8(0x21); + break; + case 2: + if (sub_801F1A4() != 0) { + gUnknown_203B27C->unk15 = TRUE; + } + sub_801F214(); + sub_8094060(gUnknown_203B27C->moves,gUnknown_203B27C->pokeStruct->moves); + sub_801FDA8(0x10); + break; + case 1: + if (sub_801F1A4() != 0) { + gUnknown_203B27C->unk15 = TRUE; + } + break; + case 0: + break; + } +} + +void sub_8020EB4(void) +{ + s32 menuAction; + + menuAction = 0; + sub_801EF38(0); + if (!sub_8012FD8(&gUnknown_203B27C->unkCC)) { + sub_8013114(&gUnknown_203B27C->unkCC,&menuAction); + if (menuAction != 1) { + gUnknown_203B27C->menuAction4 = menuAction; + } + } + + switch(menuAction) + { + case 5: + if(ToggleSetMove(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) + { + PlaySound(0x133); + sub_801FDA8(0x1F); + } + else + { + PlayMenuSoundEffect(2); + sub_801FDA8(0x1F); + } + break; + case 6: + PlaySound(0x133); + UnSetMove(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves); + sub_801FDA8(0x1F); + break; + case 7: + if(ToggleMoveEnabled(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) + { + PlaySound(0x133); + asm(""); + } + else + { + PlayMenuSoundEffect(2); + } + sub_801FDA8(0x1F); + break; + case 8: + if(gTeamInventory_203B460->teamMoney < 150) + { + PlayMenuSoundEffect(2); + sub_801FDA8(0x3); + } + else if(!sub_8093318(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) + { + PlayMenuSoundEffect(2); + sub_801FDA8(0x4); + } + else + { + if(!gUnknown_203B27C->unk15) + { + gUnknown_203B27C->unk15 = TRUE; + PlaySound(0x14c); + } + else + { + PlaySound(0x133); + } + TryLinkMovesAfter(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves); + sub_801FDA8(0x1F); + } + break; + case 9: + if(!sub_809333C(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) + { + PlayMenuSoundEffect(2); + sub_801FDA8(0x5); + } + else + { + PlaySound(0x133); + UnlinkMovesAfter(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves); + sub_801FDA8(0x1F); + } + break; + case 1: + case 0x11: + sub_801FDA8(0x1F); + break; + case 0xA: + if(!IsAnyMoveLinked(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) + { + PlayMenuSoundEffect(2); + sub_801FDA8(0x6); + } + else + { + PlaySound(0x133); + gUnknown_203B27C->isNextMoveLinked = IsNextMoveLinked(gUnknown_203B27C->moveIndex,gUnknown_203B27C->moves); + sub_801FDA8(0x22); + } + break; + case 0xB: + sub_801FDA8(0x21); + break; + case 0xC ... 0xF: + break; + } +} + +void sub_80210C8(void) +{ + switch(sub_801F890()) + { + case 2: + case 3: + sub_801F8D0(); + sub_801FDA8(0x1F); + break; + case 0: + case 1: + break; + } +} + +void sub_80210E4(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 0x10: + RemoveLinkSequenceFromMoves8(gUnknown_203B27C->moves, gUnknown_203B27C->moveIndex); + sub_801FDA8(0x23); + break; + case 1: + case 0x11: + sub_801FDA8(0x1F); + break; + } + } +} + +void sub_8021130(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + sub_801FDA8(gUnknown_203B27C->fallbackState); + } +} + +void sub_8021154(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 4) + { + sub_801FDA8(gUnknown_203B27C->fallbackState); + } +} + +bool8 sub_8021178(void) +{ + s32 count; + struct unkStruct_808E218_arg local; + + count = sub_808E218(&local, gUnknown_203B27C->pokeStruct); + if(count == 0) return TRUE; + else return FALSE; +} diff --git a/src/hints_menu.c b/src/hints_menu.c index f118a31de..112e926ce 100644 --- a/src/hints_menu.c +++ b/src/hints_menu.c @@ -2,6 +2,7 @@ #include "memory.h" #include "text.h" #include "input.h" +#include "menu_input.h" #define MAX_HINTS 5 @@ -42,24 +43,15 @@ extern struct Hints gGameHints[MAX_HINTS]; extern u8 gUnknown_80DC0D4[MAX_HINTS]; extern void sub_801E714(void); -extern void sub_8013818(struct MenuInputStruct *, u32, u32, u32); -extern bool8 sub_8013938(struct MenuInputStruct *); -extern s32 GetKeyPress(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); extern void sub_801E714(void); extern void sub_801E76C(void); extern void DisplayChosenHint(void); extern void sub_80073E0(u32); extern void sub_80073B8(u32); -extern s32 sub_8013800(struct MenuInputStruct *, u32); extern void sub_8008C54(u32); void DrawHintSelectionMenu(void); void sub_801E594(void); -void sub_8013984(struct MenuInputStruct *); -void AddMenuCursorSprite(struct MenuInputStruct *); -extern u8 sub_80138B8(struct MenuInputStruct *, u32); -extern void sub_8013660(struct MenuInputStruct *); -extern void sub_8012D08(struct UnkTextStruct2 *, u32); u32 sub_801E3F0(u32 r0) { diff --git a/src/kangaskhan_storage.c b/src/kangaskhan_storage.c index 088068ebf..5d009cce2 100644 --- a/src/kangaskhan_storage.c +++ b/src/kangaskhan_storage.c @@ -5,14 +5,35 @@ #include "item.h" #include "kangaskhan_storage.h" #include "memory.h" +#include "menu_input.h" +#include "team_inventory.h" + +EWRAM_DATA_2 struct unkStruct_203B208 *gUnknown_203B208 = {0}; +EWRAM_DATA_2 struct unkStruct_203B20C *gUnknown_203B20C = {0}; -extern struct unkStruct_203B208 *gUnknown_203B208; extern struct UnkTextStruct2 gUnknown_80DB748; extern struct UnkTextStruct2 gUnknown_80DB778; extern struct UnkTextStruct2 gUnknown_80DB790; extern struct UnkTextStruct2 gUnknown_80DB760; +extern struct UnkTextStruct2 gUnknown_80DB7B8; +extern struct UnkTextStruct2 gUnknown_80DB7E8; +extern struct UnkTextStruct2 gUnknown_80DB7D0; +extern struct UnkTextStruct2 gUnknown_80DB800; +extern struct UnkTextStruct2 gUnknown_80DB818; +extern u8 gUnknown_80DB830[]; +extern u8 *gUnknown_80D4920[]; +extern u8 *gUnknown_80D4928[]; +extern u8 gUnknown_80DB7A8; +extern u8 *gUnknown_80D4970[]; +extern u8 *gUnknown_80D4964[]; +extern u8 *gUnknown_80D4958[]; +extern u8 *gUnknown_80D4984[]; +extern u8 *gUnknown_80D4934[]; + +extern u8 *gKangaskhanStorageDialogue[2][20]; extern u8 gUnknown_202E5D8[]; +extern u8 gUnknown_202DE58[]; extern u8 gUnknown_202E1C8[]; void UpdateKangaskhanStorageState(u32); @@ -31,9 +52,81 @@ extern void sub_8017A1C(); extern void AdvanceToKangaskhanStorageFallbackState(); void sub_8016E80(); extern void sub_8016FF8(); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_8013C68(u32 *); +extern void sub_80073E0(u32); +extern s32 sub_80144A4(s32 *); +extern u8 sub_801CF50(u32); +extern void sub_801A5D8(u32, u32, u32, u32); +extern void sub_801C8C4(u32, u32, u32, u32); +extern void sub_801CB5C(u32); +extern void sub_801A8D0(u32); +extern u32 sub_801CFE0(u8); +extern void sub_801CF94(void); +extern void sub_801AE84(void); +extern s32 sub_801AED0(s32); +extern u8 sub_801CF14(u32); +extern u8 sub_801CF50(u32); +extern u32 sub_801A6E8(u32); +extern u32 sub_801AEA8(void); +extern u32 sub_801A8AC(void); +extern void sub_801A928(void); +extern void sub_80182E4(void); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_8013C68(u32 *); +extern void sub_80073E0(u32); +extern bool8 sub_801ADA0(u32); +extern void sub_8099690(u32); +extern u32 sub_8013BBC(u32 *); +extern void sub_8017598(void); +extern u32 sub_801CA08(u32); +extern u32 sub_801CFB8(void); +extern u8 sub_801CB24(); +extern void sub_801B450(); +extern u32 sub_801B410(void); +extern void sub_8017F10(u32); +extern void sub_8018588(void); +extern void sub_8018620(void); +extern void sub_8018904(void); +extern void sub_8018AC8(void); +extern void sub_80186F8(void); +extern void sub_8018854(void); +extern void sub_80189C8(void); +extern void sub_8018AE4(void); +extern void sub_8017F28(); +extern void sub_8018100(); +extern void sub_801A9E0(); +extern void sub_801841C(); +extern void sub_801CCD8(); +extern void sub_80184D4(); +extern void sub_8018280(); +void sub_80175FC(void); +extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); +extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u16 *, u32, u32, struct OpenedFile **r5, u32); +extern void sub_801A5D8(u32, u32, u32, u32); +extern void sub_801C8C4(u32, u32, u32, u32); +extern void sub_801CB5C(u32); +extern void sub_801A8D0(u32); +extern void sub_801BB20(void); +extern void sub_801A8D0(u32); +extern void sub_801A9E0(void); +extern void sub_801BC24(void); +void sub_80176B8(void); +void sub_80177F8(void); +void sub_8017758(void); +void sub_801A928(void); +extern void sub_801AD34(u32); +extern void sub_8013AA0(u32 *); +extern void sub_8017598(void); +extern void sub_801CCD8(void); +extern void sub_801CBB8(void); +extern void sub_801B3C0(struct Item *); +extern u8 sub_801CF14(u32); -u32 DisplayKangaskhanDialogueSprite(s32 param_1) +u32 CreateKangaskhanStorage(bool32 isAsleep) { char *monName; struct OpenedFile * faceFile; @@ -44,12 +137,12 @@ u32 DisplayKangaskhanDialogueSprite(s32 param_1) gUnknown_203B208->menuAction1 = 0; gUnknown_203B208->menuAction2 = 0; gUnknown_203B208->menuAction3 = 0; - gUnknown_203B208->unk0 = param_1; + gUnknown_203B208->isAsleep = isAsleep; CopyYellowMonsterNametoBuffer(gUnknown_202E5D8, MONSTER_KANGASKHAN); CopyYellowMonsterNametoBuffer(gUnknown_202E1C8, MONSTER_KANGASKHAN); monName = GetMonSpecies(MONSTER_KANGASKHAN); strcpy(gUnknown_202E1C8 - 0x50, monName); - if (gUnknown_203B208->unk0 == 1) { + if (gUnknown_203B208->isAsleep == 1) { gUnknown_203B208->unkE8 = 0; } else { @@ -171,3 +264,1278 @@ void sub_8016E80(void) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B208->unkEC, 1, 1); } + +void sub_8016FF8(void) +{ + + switch(gUnknown_203B208->currState) { + case KANGASKHAN_STORAGE_INIT: + sub_80175FC(); + gUnknown_203B208->unkE4 = 1; + sub_8014248(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][0],0,gUnknown_203B208->menuAction1,gUnknown_203B208->unk24, + gUnknown_203B208->unk4C,4,0,gUnknown_203B208->unkE8,0xc); + break; + case KANGASKHAN_STORAGE_MAIN_MENU: + sub_80175FC(); + gUnknown_203B208->unkE4 = 0; + sub_8014248(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][1],0,gUnknown_203B208->menuAction1,gUnknown_203B208->unk24, + gUnknown_203B208->unk4C,4,0,gUnknown_203B208->unkE8,0xc); + break; + case 2: + gUnknown_203B208->fallbackState = KANGASKHAN_STORAGE_MAIN_MENU; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][19],0,gUnknown_203B208->unkE8,0x10d); + break; + case 3: + gUnknown_203B208->fallbackState = KANGASKHAN_STORAGE_EXIT; + gUnknown_203B208->unkE4 = 1; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][2],0,gUnknown_203B208->unkE8,0x30d); + break; + case KANGASKHAN_STORAGE_NO_INV_ITEMS: + gUnknown_203B208->fallbackState = KANGASKHAN_STORAGE_MAIN_MENU; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][13],0,gUnknown_203B208->unkE8,0x10d); + break; + case KANGASKHAN_STORAGE_TOO_MANY_ITEMS: + gUnknown_203B208->fallbackState = KANGASKHAN_STORAGE_MAIN_MENU; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][14],0,gUnknown_203B208->unkE8,0x10d); + break; + case 7: + gUnknown_203B208->fallbackState = KANGASKHAN_STORAGE_MAIN_MENU; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][15],0,gUnknown_203B208->unkE8,0x10d); + break; + case 8: + gUnknown_203B208->fallbackState = KANGASKHAN_STORAGE_MAIN_MENU; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][18],0,gUnknown_203B208->unkE8,0x10d); + break; + case KANGASKHAN_STORAGE_IS_MONEY_USED_TM: + sub_8090E14(gUnknown_202DE58,&gUnknown_203B208->storedItem,0); + gUnknown_203B208->fallbackState = 0xe; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][16],0,gUnknown_203B208->unkE8,0x30d); + break; + case 10: + gUnknown_203B208->fallbackState = 0xe; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][17],0,gUnknown_203B208->unkE8,0x30d); + break; + case 0xb: + gUnknown_203B208->fallbackState = 0xd; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][3],0,gUnknown_203B208->unkE8,0x30d); + break; + case 0xc: + gUnknown_203B208->fallbackState = 0xe; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][4],0,gUnknown_203B208->unkE8,0x30d); + break; + case 0xd: + sub_801A5D8(3,3,0,10); + break; + case 0xe: + sub_801A8D0(1); + break; + case 0xf: + sub_801A9E0(); + sub_80176B8(); + sub_8012D60(&gUnknown_203B208->unk58,gUnknown_203B208->unk24,0, + gUnknown_203B208->unk4C,gUnknown_203B208->menuAction2,2); + break; + + case 0x11: + sub_80177F8(); + sub_8090E14(gUnknown_202DE58,&gUnknown_203B208->storedItem,0); + gUnknown_203B208->unkE4 = 0; + sub_8014248(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][5],0,4,gUnknown_203B208->unk24,0,4,0, + gUnknown_203B208->unkE8,0xc); + break; + case 0x12: + sub_80177F8(); + gUnknown_203B208->unkE4 = 0; + sub_8014248(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][6],0,4,gUnknown_203B208->unk24,0,4,0, + gUnknown_203B208->unkE8,0xc); + break; + case 0x13: + if (GetNumberOfFilledInventorySlots() == 0) { + sub_801A928(); + gUnknown_203B208->fallbackState = KANGASKHAN_STORAGE_MAIN_MENU; + } + else { + gUnknown_203B208->fallbackState = 0xc; + } + gUnknown_203B208->unkE4 = 1; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][7],0,gUnknown_203B208->unkE8,0x10d); + break; + case 0x14: + gUnknown_203B208->fallbackState = 0x16; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][8],0,gUnknown_203B208->unkE8,0x30d); + break; + case 0x15: + gUnknown_203B208->fallbackState = 0x17; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][9],0,gUnknown_203B208->unkE8,0x30d); + break; + case 0x16: + sub_801C8C4(1,3,0,10); + sub_801AD34(0); + break; + case 0x17: + sub_801CB5C(1); + sub_801AD34(0); + break; + case 0x18: + gUnknown_203B208->unkB8 = 2; + gUnknown_203B208->unkB0 = 1; + if (gTeamInventory_203B460->teamStorage[gUnknown_203B208->storedItem.id] >= 100) + { + gUnknown_203B208->unkB4 = 99; + } + else { + gUnknown_203B208->unkB4 = gTeamInventory_203B460->teamStorage [gUnknown_203B208->storedItem.id]; + + } + gUnknown_203B208->unkAC = gUnknown_203B208->unkB4; + gUnknown_203B208->unkBC = 1; + gUnknown_203B208->unkC0 = &gUnknown_203B208->unkEC[1]; + gUnknown_203B208->unkC4 = 0x28; + gUnknown_203B208->unkC8 = 0x12; + sub_8013AA0(&gUnknown_203B208->unkA8); + sub_8017598(); + break; + case 0x19: + sub_801CCD8(); + sub_801AD34(0); + sub_8017758(); + sub_8012D60(&gUnknown_203B208->unk58,gUnknown_203B208->unk24,0, + gUnknown_203B208->unk4C,gUnknown_203B208->menuAction3,2); + break; + case 0x10: + case 0x1a: + sub_801B3C0(&gUnknown_203B208->storedItem); + break; + case 0x1b: + sub_80177F8(); + sub_8090E14(gUnknown_202DE58,&gUnknown_203B208->storedItem,0); + gUnknown_203B208->unkE4 = 0; + sub_8014248(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][10],0,4,gUnknown_203B208->unk24,0,4,0, + gUnknown_203B208->unkE8,0xc); + break; + case 0x1c: + sub_80177F8(); + gUnknown_203B208->unkE4 = 0; + sub_8014248(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][11],0,4,gUnknown_203B208->unk24,0,4,0, + gUnknown_203B208->unkE8,0xc); + break; + case 0x1d: + if ((sub_801CF14(1)) || (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE)) { + sub_801CBB8(); + gUnknown_203B208->fallbackState = KANGASKHAN_STORAGE_MAIN_MENU; + } + else { + gUnknown_203B208->fallbackState = 0x15; + } + gUnknown_203B208->unkE4 = 1; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][12],0,gUnknown_203B208->unkE8,0x10d); + break; + } +} + +void sub_8017598(void) +{ + + sub_8008C54(gUnknown_203B208->unkBC); + sub_80073B8(gUnknown_203B208->unkBC); + xxx_call_draw_string(4,0,&gUnknown_80DB7A8,gUnknown_203B208->unkBC,0); // Number? + sub_8013C68(&gUnknown_203B208->unkA8); + sub_80073E0(gUnknown_203B208->unkBC); + sub_801CCD8(); + sub_801AD34(0); + sub_8012EA4(&gUnknown_203B208->unk58,0); +} + +void sub_80175FC(void) +{ + int index; + + s32 loopMax; + MemoryFill16(gUnknown_203B208->unk4C,0, sizeof(gUnknown_203B208->unk4C)); + loopMax = 0; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4958; + gUnknown_203B208->unk24[loopMax].menuAction = 2; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4964; + gUnknown_203B208->unk24[loopMax].menuAction = 3; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4970; + gUnknown_203B208->unk24[loopMax].menuAction = 6; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4934; + gUnknown_203B208->unk24[loopMax].menuAction = 1; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = NULL; + gUnknown_203B208->unk24[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B208->unk4C[index] == 0) + { + if(gUnknown_203B208->unk24[index].menuAction == gUnknown_203B208->menuAction1) + return; + } + } + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B208->unk4C[index] == 0) + { + gUnknown_203B208->menuAction1 = gUnknown_203B208->unk24[index].menuAction; + break; + } + } +} + +void sub_80176B8(void) +{ + int index; + s32 loopMax; + + MemoryFill16(gUnknown_203B208->unk4C,0,sizeof(gUnknown_203B208->unk4C)); + loopMax = 0; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4958; + gUnknown_203B208->unk24[loopMax].menuAction = 2; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4970; + gUnknown_203B208->unk24[loopMax].menuAction = 6; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = NULL; + gUnknown_203B208->unk24[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B208->unk4C[index] == 0) + { + if(gUnknown_203B208->unk24[index].menuAction == gUnknown_203B208->menuAction2) + return; + } + } + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B208->unk4C[index] == 0) + { + gUnknown_203B208->menuAction2 = gUnknown_203B208->unk24[index].menuAction; + break; + } + } +} + +void sub_8017758(void) +{ + int index; + s32 loopMax; + + MemoryFill16(gUnknown_203B208->unk4C,0,sizeof(gUnknown_203B208->unk4C)); + loopMax = 0; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4964; + gUnknown_203B208->unk24[loopMax].menuAction = 3; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4970; + gUnknown_203B208->unk24[loopMax].menuAction = 6; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = NULL; + gUnknown_203B208->unk24[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B208->unk4C[index] == 0) + { + if(gUnknown_203B208->unk24[index].menuAction == gUnknown_203B208->menuAction3) + return; + } + } + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B208->unk4C[index] == 0) + { + gUnknown_203B208->menuAction3 = gUnknown_203B208->unk24[index].menuAction; + break; + } + } +} + +void sub_80177F8(void) +{ + s32 loopMax; + + loopMax = 0; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4920; + gUnknown_203B208->unk24[loopMax].menuAction = 4; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4928; + gUnknown_203B208->unk24[loopMax].menuAction = 5; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = NULL; + gUnknown_203B208->unk24[loopMax].menuAction = 1; +} + +void sub_8017828(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + if (menuAction != 1) { + gUnknown_203B208->menuAction1 = menuAction; + } + switch(menuAction) + { + case 2: + if (GetNumberOfFilledInventorySlots() == 0) { + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_NO_INV_ITEMS); + } + else if (sub_801CF50(0) != 0) { + UpdateKangaskhanStorageState(8); + } + else { + UpdateKangaskhanStorageState(0xb); + } + break; + case 3: + if (sub_801CF14(1) != 0) { + UpdateKangaskhanStorageState(7); + } + else if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) { + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_TOO_MANY_ITEMS); + } + else { + UpdateKangaskhanStorageState(0x14); + } + break; + case 6: + UpdateKangaskhanStorageState(2); + break; + case 1: + UpdateKangaskhanStorageState(3); + break; + } + } +} + +void sub_80178D0(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + switch(menuAction) + { + case 4: + MoveToStorage(&gUnknown_203B208->storedItem); + ShiftItemsDownFrom(gUnknown_203B208->itemIndex); + FillInventoryGaps(); + UpdateKangaskhanStorageState(0x13); + break; + case 1: + case 5: + UpdateKangaskhanStorageState(0xe); + break; + } + } +} + +void sub_8017928(void) +{ + int menuAction; + struct BulkItem item; + + if (sub_80144A4(&menuAction) == 0) { + switch(menuAction) + { + case 4: + gTeamInventory_203B460->teamStorage[gUnknown_203B208->storedItem.id] -= gUnknown_203B208->storedItem.quantity; + item.id = gUnknown_203B208->storedItem.id; + item.quantity = gUnknown_203B208->storedItem.quantity; + AddHeldItemToInventory(&item); + UpdateKangaskhanStorageState(0x1d); + break; + case 1: + case 5: + UpdateKangaskhanStorageState(0x17); + break; + } + } +} + +void sub_80179A8(void) +{ + s32 index; + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + switch(menuAction) + { + case 4: + for(index = 0; index < INVENTORY_SIZE; index++) + { + if (sub_801AED0(index) != 0) { + MoveToStorage(&gTeamInventory_203B460->teamItems[index]); + gTeamInventory_203B460->teamItems[index].id = 0; + gTeamInventory_203B460->teamItems[index].flags = 0; + } + } + FillInventoryGaps(); + sub_801AE84(); + UpdateKangaskhanStorageState(0x13); + break; + case 1: + case 5: + UpdateKangaskhanStorageState(0xe); + break; + } + } +} + +void sub_8017A1C(void) +{ + s32 itemID; + int menuAction; + struct BulkItem item; + + if (sub_80144A4(&menuAction) == 0) { + + switch(menuAction) + { + case 4: + for(itemID = 0; itemID < NUMBER_OF_ITEM_IDS; itemID++) + { + if(sub_801CFE0(itemID) != 0) + { + item.id = itemID; + if(IsThrowableItem(item.id)) + if(gTeamInventory_203B460->teamStorage[item.id] > 0x63) + { + item.quantity = 0x63; + } + else + { + item.quantity = gTeamInventory_203B460->teamStorage[item.id]; + } + else + { + item.quantity = 1; + } + gTeamInventory_203B460->teamStorage[item.id] -= item.quantity; + AddHeldItemToInventory(&item); + } + } + FillInventoryGaps(); + sub_801CF94(); + UpdateKangaskhanStorageState(0x1d); + break; + case 1: + case 5: + UpdateKangaskhanStorageState(0x17); + break; + } + } +} + +void sub_8017AF8(void) +{ + switch(sub_801A6E8(1)) + { + case 3: + if(sub_801AEA8() != 0) + { + sub_8099690(0); + UpdateKangaskhanStorageState(0x12); + } + else + { + gUnknown_203B208->itemIndex = sub_801A8AC(); + gUnknown_203B208->storedItem = gTeamInventory_203B460->teamItems[gUnknown_203B208->itemIndex]; + UpdateKangaskhanStorageState(0xF); + } + break; + case 4: + gUnknown_203B208->itemIndex = sub_801A8AC(); + gUnknown_203B208->storedItem = gTeamInventory_203B460->teamItems[gUnknown_203B208->itemIndex]; + UpdateKangaskhanStorageState(0x10); + break; + case 2: + sub_801A928(); + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_MAIN_MENU); + break; + } +} + +void sub_8017B88(void) +{ + switch(sub_801CA08(1)) + { + case 3: + if(sub_801CFB8() != 0){ + UpdateKangaskhanStorageState(0x1C); + } + else + { + gUnknown_203B208->id = sub_801CB24(); + xxx_init_itemslot_8090A8C(&gUnknown_203B208->storedItem, gUnknown_203B208->id, 0); + gUnknown_203B208->storedItem.quantity = 1; + UpdateKangaskhanStorageState(0x19); + } + break; + case 4: + gUnknown_203B208->id = sub_801CB24(); + xxx_init_itemslot_8090A8C(&gUnknown_203B208->storedItem, gUnknown_203B208->id, 0); + gUnknown_203B208->storedItem.quantity = 1; + UpdateKangaskhanStorageState(0x1A); + break; + case 2: + sub_801CBB8(); + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_MAIN_MENU); + break; + case 1: + sub_801AD34(0); + break; + } +} + +void sub_8017C28(void) +{ + sub_801CA08(0); + sub_8012FD8(&gUnknown_203B208->unk58); + switch(sub_8013BBC(&gUnknown_203B208->unkA8)) + { + case 1: + sub_8017598(); + break; + case 3: + gUnknown_203B208->storedItem.quantity = gUnknown_203B208->unkA8; + UpdateKangaskhanStorageState(0x1B); + break; + case 2: + UpdateKangaskhanStorageState(0x17); + break; + case 0: + default: + break; + } +} + +void sub_8017C7C(void) +{ + s32 menuAction; + menuAction = 0; + sub_801A6E8(0); + if (sub_8012FD8(&gUnknown_203B208->unk58) == 0) { + sub_8013114(&gUnknown_203B208->unk58, &menuAction); + if(menuAction != 1) gUnknown_203B208->menuAction2 = menuAction; + } + + switch(menuAction) + { + case 2: + sub_8099690(0); + if(!IsNotMoneyOrUsedTMItem(gUnknown_203B208->storedItem.id)) + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_IS_MONEY_USED_TM); + else if(!sub_801ADA0(gUnknown_203B208->itemIndex)) + UpdateKangaskhanStorageState(0xA); + else + UpdateKangaskhanStorageState(0x11); + break; + case 6: + sub_8099690(0); + UpdateKangaskhanStorageState(0x10); + break; + case 1: + UpdateKangaskhanStorageState(0xE); + break; + } +} + +void sub_8017D24(void) +{ + s32 menuAction; + menuAction = 0; + sub_801CA08(0); + if (sub_8012FD8(&gUnknown_203B208->unk58) == 0) { + sub_8013114(&gUnknown_203B208->unk58, &menuAction); + if(menuAction != 1) gUnknown_203B208->menuAction3 = menuAction; + } + + switch(menuAction) + { + case 3: + if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) + { + sub_801CBB8(); + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_TOO_MANY_ITEMS); + } + else if(IsThrowableItem(gUnknown_203B208->storedItem.id)) + UpdateKangaskhanStorageState(0x18); + else + UpdateKangaskhanStorageState(0x1B); + break; + case 6: + UpdateKangaskhanStorageState(0x1A); + break; + case 1: + UpdateKangaskhanStorageState(0x17); + break; + } +} + +void sub_8017DC0(void) +{ + switch(sub_801B410()) + { + case 0: + case 1: + default: + break; + case 2: + case 3: + sub_801B450(); + UpdateKangaskhanStorageState(0xE); + break; + } +} + +void sub_8017DDC(void) +{ + switch(sub_801B410()) + { + case 0: + case 1: + default: + break; + case 2: + case 3: + sub_801B450(); + UpdateKangaskhanStorageState(0x17); + break; + } +} + +void AdvanceToKangaskhanStorageFallbackState(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + UpdateKangaskhanStorageState(gUnknown_203B208->fallbackState); + } +} + +u32 sub_8017E1C(void) +{ + ResetUnusedInputStruct(); + sub_800641C(NULL, 1, 1); + gUnknown_203B20C = MemoryAlloc(sizeof(struct unkStruct_203B20C), 8); + gUnknown_203B20C->menuAction1 = 0; + gUnknown_203B20C->menuAction2 = 0; + gUnknown_203B20C->menuAction3 = 0; + sub_8017F10(0); + return 1; +} + +u32 sub_8017E54(void) +{ + switch(gUnknown_203B20C->state) + { + case 0: + sub_8017F10(1); + break; + case 1: + sub_8018588(); + break; + case 4: + case 5: + sub_8018620(); + break; + case 6: + sub_8018904(); + break; + case 7: + sub_8018AC8(); + break; + case 10: + case 11: + sub_80186F8(); + break; + case 12: + sub_8018854(); + break; + case 13: + sub_80189C8(); + break; + case 14: + sub_8018AE4(); + break; + case 3: + return 3; + } + return 0; +} + +void sub_8017EF4(void) +{ + if(gUnknown_203B20C != NULL) + { + MemoryFree(gUnknown_203B20C); + gUnknown_203B20C = NULL; + } +} + +void sub_8017F10(u32 newState) +{ + gUnknown_203B20C->state = newState; + sub_8017F28(); + sub_8018100(); +} + +void sub_8017F28(void) +{ + s32 index; + + sub_8006518(gUnknown_203B20C->unkF0); + + switch(gUnknown_203B20C->state) + { + case 1: + gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; + gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8; + gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; + sub_80182E4(); + gUnknown_203B20C->unkF0[2] = gUnknown_80DB7D0; + sub_8012CAC(&gUnknown_203B20C->unkF0[2], gUnknown_203B20C->unk20); + break; + case 4: + case 5: + gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; + gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8; + gUnknown_203B20C->unkF0[2] = gUnknown_80DB7B8; + gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; + break; + case 10: + case 11: + gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; + gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8; + gUnknown_203B20C->unkF0[2] = gUnknown_80DB7B8; + gUnknown_203B20C->unkF0[0] = gUnknown_80DB800; + break; + case 12: + gUnknown_203B20C->unkF0[1] = gUnknown_80DB818; + break; + case 6: + case 13: + gUnknown_203B20C->unkF0[2] = gUnknown_80DB7E8; + break; + default: + case 0: + for(index = 0; index < 4; index++) + { + gUnknown_203B20C->unkF0[index] = gUnknown_80DB7B8; + } + break; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B20C->unkF0, 1, 1); +} + +void sub_8018100(void) +{ + + switch(gUnknown_203B20C->state) + { + case 1: + sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->menuAction1, 2); + break; + case 4: + sub_801A5D8(3, 3, 0, 0xA); + break; + case 5: + sub_801A8D0(1); + break; + case 6: + sub_801A9E0(); + sub_801841C(); + sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->menuAction2, 2); + break; + case 7: + sub_801B3C0(&gUnknown_203B20C->item); + break; + case 10: + sub_801C8C4(1, 3, 0, 0xA); + sub_801AD34(0); + break; + case 11: + sub_801CB5C(1); + sub_801AD34(0); + break; + case 12: + gUnknown_203B20C->unkD0 = 2; + gUnknown_203B20C->unkC8 = 1; + if(gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id] > 99) + gUnknown_203B20C->unkCC = 99; + else + gUnknown_203B20C->unkCC = gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id]; + gUnknown_203B20C->unkC4 = gUnknown_203B20C->unkCC; + gUnknown_203B20C->unkD4 = 1; + gUnknown_203B20C->unkD8 = &gUnknown_203B20C->unkF0[1]; + gUnknown_203B20C->unkDC = 0x28; + gUnknown_203B20C->unkE0 = 0x12; + sub_8013AA0(&gUnknown_203B20C->unkC0); + sub_8018280(); + break; + case 13: + sub_801CCD8(); + sub_801AD34(0); + sub_80184D4(); + sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->menuAction3, 2); + break; + case 14: + sub_801B3C0(&gUnknown_203B20C->item); + break; + case 0: + default: + break; + } +} + +void sub_8018280(void) +{ + sub_8008C54(gUnknown_203B20C->unkD4); + sub_80073B8(gUnknown_203B20C->unkD4); + xxx_call_draw_string(4, 0, gUnknown_80DB830, gUnknown_203B20C->unkD4, 0); // Number? + sub_8013C68(&gUnknown_203B20C->unkC0); + sub_80073E0(gUnknown_203B20C->unkD4); + sub_801CCD8(); + sub_801AD34(0); + sub_8012EA4(&gUnknown_203B20C->unk70,0); +} + +void sub_80182E4(void) +{ + int index; + s32 loopMax; + + loopMax = 0; + MemoryFill16(gUnknown_203B20C->unk60,0,sizeof(gUnknown_203B20C->unk60)); + gUnknown_203B20C->unk20[0].text = *gUnknown_80D4958; + gUnknown_203B20C->unk20[0].menuAction = 2; + if ((GetNumberOfFilledInventorySlots() == 0) || (sub_801CF50(0) != 0)) { + gUnknown_203B20C->unk60[0] = 1; + } + loopMax += 1; + gUnknown_203B20C->unk20[loopMax].text = *gUnknown_80D4964; + gUnknown_203B20C->unk20[loopMax].menuAction = 3; + if ((sub_801CF14(1) != 0) || (INVENTORY_SIZE <= GetNumberOfFilledInventorySlots())) { + gUnknown_203B20C->unk60[loopMax] = 1; + } + loopMax += 1; + gUnknown_203B20C->unk20[loopMax].text = *gUnknown_80D4934; + gUnknown_203B20C->unk20[loopMax].menuAction = 1; + loopMax += 1; + gUnknown_203B20C->unk20[loopMax].text = NULL; + gUnknown_203B20C->unk20[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B20C->unk60[index] == 0) { + if(gUnknown_203B20C->unk20[index].menuAction == gUnknown_203B20C->menuAction1) + return; + } + } + + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B20C->unk60[index] == 0) { + gUnknown_203B20C->menuAction1 = gUnknown_203B20C->unk20[index].menuAction; + break; + } + } +} + +void sub_801841C(void) +{ + int index; + s32 loopMax; + + loopMax = 0; + MemoryFill16(gUnknown_203B20C->unk60,0,sizeof(gUnknown_203B20C->unk60)); + gUnknown_203B20C->unk20[0].text = *gUnknown_80D4958; + gUnknown_203B20C->unk20[0].menuAction = 2; + if (!sub_801ADA0(gUnknown_203B20C->itemIndex)) { + gUnknown_203B20C->unk60[0] = 1; + } + loopMax += 1; + gUnknown_203B20C->unk20[loopMax].text = *gUnknown_80D4970; + gUnknown_203B20C->unk20[loopMax].menuAction = 4; + loopMax += 1; + gUnknown_203B20C->unk20[loopMax].text = NULL; + gUnknown_203B20C->unk20[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B20C->unk60[index] == 0) { + if(gUnknown_203B20C->unk20[index].menuAction == gUnknown_203B20C->menuAction2) + return; + } + } + + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B20C->unk60[index] == 0) { + gUnknown_203B20C->menuAction2 = gUnknown_203B20C->unk20[index].menuAction; + break; + } + } +} + +void sub_80184D4(void) +{ + int index; + s32 loopMax; + + loopMax = 0; + MemoryFill16(gUnknown_203B20C->unk60,0,sizeof(gUnknown_203B20C->unk60)); + gUnknown_203B20C->unk20[0].text = *gUnknown_80D4964; + gUnknown_203B20C->unk20[0].menuAction = 3; + if ((GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE)) { + gUnknown_203B20C->unk60[0] = 1; + } + loopMax += 1; + gUnknown_203B20C->unk20[loopMax].text = *gUnknown_80D4970; + gUnknown_203B20C->unk20[loopMax].menuAction = 4; + loopMax += 1; + gUnknown_203B20C->unk20[loopMax].text = NULL; + gUnknown_203B20C->unk20[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B20C->unk60[index] == 0) { + if(gUnknown_203B20C->unk20[index].menuAction == gUnknown_203B20C->menuAction3) + return; + } + } + + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B20C->unk60[index] == 0) { + gUnknown_203B20C->menuAction3 = gUnknown_203B20C->unk20[index].menuAction; + break; + } + } +} + +void sub_8018588(void) +{ + s32 menuAction; + menuAction = 0; + + if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0) + { + sub_8013114(&gUnknown_203B20C->unk70, &menuAction); + if(menuAction != 1) gUnknown_203B20C->menuAction1 = menuAction; + } + + switch(menuAction) + { + case 2: + if((GetNumberOfFilledInventorySlots() != 0) && sub_801CF50(0) == 0) + sub_8017F10(4); + else + sub_8012EA4(&gUnknown_203B20C->unk70, 1);; + break; + case 3: + if(sub_801CF14(1) != 0) + sub_8012EA4(&gUnknown_203B20C->unk70, 1); + else + sub_8017F10(0xA); + break; + case 1: + sub_8017F10(3); + break; + } +} + +void sub_8018620(void) +{ + s32 index; + switch(sub_801A6E8(1)) + { + case 3: + if(sub_801AEA8() != 0) + { + for(index = 0; index < INVENTORY_SIZE; index++) + { + if(sub_801AED0(index) != 0) + { + MoveToStorage(&gTeamInventory_203B460->teamItems[index]); + gTeamInventory_203B460->teamItems[index].id = 0; + gTeamInventory_203B460->teamItems[index].flags = 0; + } + } + FillInventoryGaps(); + sub_801AE84(); + if(GetNumberOfFilledInventorySlots() == 0) + { + sub_801A928(); + sub_8017F10(1); + } + else + { + sub_8017F10(5); + } + } + else + { + gUnknown_203B20C->itemIndex = sub_801A8AC(); + gUnknown_203B20C->item = gTeamInventory_203B460->teamItems[gUnknown_203B20C->itemIndex]; + sub_8017F10(6); + } + break; + case 4: + gUnknown_203B20C->itemIndex = sub_801A8AC(); + gUnknown_203B20C->item = gTeamInventory_203B460->teamItems[gUnknown_203B20C->itemIndex]; + sub_8017F10(7); + break; + case 2: + sub_801A928(); + sub_8017F10(1); + break; + } +} + +void sub_80186F8(void) +{ + struct BulkItem item; + s32 itemID; + + switch(sub_801CA08(1)) + { + case 3: + if(sub_801CFB8() != 0) + { + for(itemID = 0; itemID < NUMBER_OF_ITEM_IDS; itemID++) + { + if(sub_801CFE0(itemID) != 0) + { + item.id = itemID; + if(IsThrowableItem(item.id)) + if(gTeamInventory_203B460->teamStorage[item.id] > 0x63) + { + item.quantity = 0x63; + } + else + { + item.quantity = gTeamInventory_203B460->teamStorage[item.id]; + } + else + { + item.quantity = 1; + } + gTeamInventory_203B460->teamStorage[item.id] -= item.quantity; + AddHeldItemToInventory(&item); + } + } + FillInventoryGaps(); + sub_801CF94(); + if((sub_801CF14(1) == 0) && (GetNumberOfFilledInventorySlots() < INVENTORY_SIZE)) + sub_8017F10(0xB); + else + { + sub_801CBB8(); + sub_8017F10(1); + } + } + else + { + gUnknown_203B20C->id = sub_801CB24(); + xxx_init_itemslot_8090A8C(&gUnknown_203B20C->item, gUnknown_203B20C->id, 0); + gUnknown_203B20C->item.quantity = 1; + sub_8017F10(0xD); + } + break; + case 4: + gUnknown_203B20C->id = sub_801CB24(); + xxx_init_itemslot_8090A8C(&gUnknown_203B20C->item, gUnknown_203B20C->id, 0); + gUnknown_203B20C->item.quantity = 1; + sub_8017F10(0xE); + break; + case 2: + sub_801CBB8(); + sub_8017F10(1); + break; + case 1: + sub_801AD34(0); + break; + } +} + +void sub_8018854(void) +{ + struct BulkItem item; + + sub_801CA08(0); + sub_8012FD8(&gUnknown_203B20C->unk70); + + switch(sub_8013BBC(&gUnknown_203B20C->unkC0)) + { + case 3: + gUnknown_203B20C->item.quantity = gUnknown_203B20C->unkC0; + gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id] -= gUnknown_203B20C->item.quantity; + item.id = gUnknown_203B20C->item.id; + item.quantity = gUnknown_203B20C->item.quantity; + AddHeldItemToInventory(&item); + if(sub_801CF14(1) == 0) + if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) + { + error: + sub_801CBB8(); + sub_8017F10(0x1); + } + else + sub_8017F10(0xB); + else + goto error; + break; + case 2: + sub_8017F10(0xB); + break; + case 1: + sub_8018280(); + break; + case 0: + break; + } +} + +void sub_8018904(void) +{ + s32 menuAction; + + menuAction = 0; + + sub_801A6E8(0); + if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0) + { + sub_8013114(&gUnknown_203B20C->unk70, &menuAction); + if(menuAction != 1) gUnknown_203B20C->menuAction2 = menuAction; + } + switch(menuAction) + { + case 2: + if(IsNotMoneyOrUsedTMItem(gUnknown_203B20C->item.id)) + if(sub_801ADA0(gUnknown_203B20C->itemIndex) == 0) + error: + sub_8012EA4(&gUnknown_203B20C->unk70, 1); + else + { + MoveToStorage(&gUnknown_203B20C->item); + ShiftItemsDownFrom(gUnknown_203B20C->itemIndex); + FillInventoryGaps(); + if(GetNumberOfFilledInventorySlots() == 0) + { + sub_801A928(); + sub_8017F10(1); + } + else + sub_8017F10(5); + } + else + goto error; + break; + case 4: + sub_8099690(0); + sub_8017F10(7); + break; + case 1: + sub_8017F10(5); + break; + } +} + +void sub_80189C8(void) +{ + struct BulkItem item; + s32 menuAction; + + menuAction = 0; + + sub_801CA08(0); + if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0) + { + sub_8013114(&gUnknown_203B20C->unk70, &menuAction); + if(menuAction != 1) gUnknown_203B20C->menuAction3 = menuAction; + } + switch(menuAction) + { + case 3: + if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) + sub_8012EA4(&gUnknown_203B20C->unk70, 1); + else if(IsThrowableItem(gUnknown_203B20C->item.id)) + sub_8017F10(0xC); + else + { + gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id] -= gUnknown_203B20C->item.quantity; + item.id = gUnknown_203B20C->item.id; + item.quantity = gUnknown_203B20C->item.quantity; + AddHeldItemToInventory(&item); + if(sub_801CF14(1) == 0) + if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) + { + error: + sub_801CBB8(); + sub_8017F10(1); + } + else + { + sub_8017F10(0xB); + } + else + goto error; + } + break; + case 4: + sub_8017F10(0xE); + break; + case 1: + sub_8017F10(0xB); + break; + } +} + +void sub_8018AC8(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + sub_8017F10(0x5); + break; + case 0: + case 1: + default: + break; + } +} + +void sub_8018AE4(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + sub_8017F10(0xB); + break; + case 0: + case 1: + default: + break; + } +} + diff --git a/src/kangaskhan_storage_1.c b/src/kangaskhan_storage_1.c deleted file mode 100644 index e32dff046..000000000 --- a/src/kangaskhan_storage_1.c +++ /dev/null @@ -1,1183 +0,0 @@ -#include "constants/item.h" -#include "global.h" -#include "input.h" -#include "memory.h" -#include "text.h" -#include "item.h" -#include "team_inventory.h" -#include "input.h" -#include "kangaskhan_storage.h" -#include "menu_input.h" - - -extern struct unkStruct_203B208 *gUnknown_203B208; -extern struct unkStruct_203B20C *gUnknown_203B20C; - -extern u8 gUnknown_80DB7A8; - -extern void sub_8017F10(u32); -extern void sub_8018588(void); -extern void sub_8018620(void); -extern void sub_8018904(void); -extern void sub_8018AC8(void); -extern void sub_80186F8(void); -extern void sub_8018854(void); -extern void sub_80189C8(void); -extern void sub_8018AE4(void); - - -extern void sub_8017F28(); -extern void sub_8018100(); -extern void UpdateKangaskhanStorageState(u32); -extern s32 sub_80144A4(s32 *); -extern void sub_801B450(); -extern u32 sub_801B410(void); - -extern void sub_801CBB8(); - -extern bool8 sub_801ADA0(u32); -extern void sub_8099690(u32); -extern u32 sub_8013BBC(u32 *); -extern void sub_8017598(void); - -extern u32 sub_801CA08(u32); -extern u32 sub_801CFB8(void); -extern u8 sub_801CB24(); -extern void sub_801AD34(u32); -extern u32 sub_801A6E8(u32); -extern u32 sub_801AEA8(void); -extern u32 sub_801A8AC(void); -extern void sub_801A928(void); -extern void sub_80182E4(void); -extern void sub_8008C54(u32); -extern void sub_80073B8(u32); -extern void sub_8013C68(u32 *); -extern void sub_80073E0(u32); - -extern void sub_801A9E0(); -extern void sub_801841C(); -extern void sub_801CCD8(); -extern void sub_80184D4(); -extern void sub_8018280(); -extern void sub_8013AA0(u32 *); -extern void sub_801B3C0(struct Item *); -extern void sub_801A5D8(u32, u32, u32, u32); -extern void sub_801C8C4(u32, u32, u32, u32); -extern void sub_801CB5C(u32); -extern void sub_801A8D0(u32); -extern u32 sub_801CFE0(u8); -extern void sub_801CF94(void); -extern void sub_801AE84(void); -extern s32 sub_801AED0(s32); -extern u8 sub_801CF14(u32); -extern u8 sub_801CF50(u32); - -extern struct UnkTextStruct2 gUnknown_80DB7B8; -extern struct UnkTextStruct2 gUnknown_80DB7E8; -extern struct UnkTextStruct2 gUnknown_80DB7D0; -extern struct UnkTextStruct2 gUnknown_80DB800; -extern struct UnkTextStruct2 gUnknown_80DB818; -extern u8 gUnknown_80DB830[]; -extern u8 *gUnknown_80D4920[]; -extern u8 *gUnknown_80D4928[]; - -extern u8 *gUnknown_80D4970[]; -extern u8 *gUnknown_80D4964[]; -extern u8 *gUnknown_80D4958[]; -extern u8 *gUnknown_80D4984[]; -extern u8 *gUnknown_80D4934[]; - -void sub_8017598(void) -{ - - sub_8008C54(gUnknown_203B208->unkBC); - sub_80073B8(gUnknown_203B208->unkBC); - xxx_call_draw_string(4,0,&gUnknown_80DB7A8,gUnknown_203B208->unkBC,0); // Number? - sub_8013C68(&gUnknown_203B208->unkA8); - sub_80073E0(gUnknown_203B208->unkBC); - sub_801CCD8(); - sub_801AD34(0); - sub_8012EA4(&gUnknown_203B208->unk58,0); -} - -void sub_80175FC(void) -{ - int index; - - s32 loopMax; - MemoryFill16(gUnknown_203B208->unk4C,0, sizeof(gUnknown_203B208->unk4C)); - loopMax = 0; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4958; - gUnknown_203B208->unk24[loopMax].menuAction = 2; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4964; - gUnknown_203B208->unk24[loopMax].menuAction = 3; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4970; - gUnknown_203B208->unk24[loopMax].menuAction = 6; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4934; - gUnknown_203B208->unk24[loopMax].menuAction = 1; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = NULL; - gUnknown_203B208->unk24[loopMax].menuAction = 1; - - for(index = 0; index < loopMax; index++) - { - if(gUnknown_203B208->unk4C[index] == 0) - { - if(gUnknown_203B208->unk24[index].menuAction == gUnknown_203B208->menuAction1) - return; - } - } - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B208->unk4C[index] == 0) - { - gUnknown_203B208->menuAction1 = gUnknown_203B208->unk24[index].menuAction; - break; - } - } -} - -void sub_80176B8(void) -{ - int index; - s32 loopMax; - - MemoryFill16(gUnknown_203B208->unk4C,0,sizeof(gUnknown_203B208->unk4C)); - loopMax = 0; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4958; - gUnknown_203B208->unk24[loopMax].menuAction = 2; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4970; - gUnknown_203B208->unk24[loopMax].menuAction = 6; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = NULL; - gUnknown_203B208->unk24[loopMax].menuAction = 1; - - for(index = 0; index < loopMax; index++) - { - if(gUnknown_203B208->unk4C[index] == 0) - { - if(gUnknown_203B208->unk24[index].menuAction == gUnknown_203B208->menuAction2) - return; - } - } - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B208->unk4C[index] == 0) - { - gUnknown_203B208->menuAction2 = gUnknown_203B208->unk24[index].menuAction; - break; - } - } -} - -void sub_8017758(void) -{ - int index; - s32 loopMax; - - MemoryFill16(gUnknown_203B208->unk4C,0,sizeof(gUnknown_203B208->unk4C)); - loopMax = 0; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4964; - gUnknown_203B208->unk24[loopMax].menuAction = 3; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4970; - gUnknown_203B208->unk24[loopMax].menuAction = 6; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = NULL; - gUnknown_203B208->unk24[loopMax].menuAction = 1; - - for(index = 0; index < loopMax; index++) - { - if(gUnknown_203B208->unk4C[index] == 0) - { - if(gUnknown_203B208->unk24[index].menuAction == gUnknown_203B208->menuAction3) - return; - } - } - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B208->unk4C[index] == 0) - { - gUnknown_203B208->menuAction3 = gUnknown_203B208->unk24[index].menuAction; - break; - } - } -} - -void sub_80177F8(void) -{ - s32 loopMax; - - loopMax = 0; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4920; - gUnknown_203B208->unk24[loopMax].menuAction = 4; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4928; - gUnknown_203B208->unk24[loopMax].menuAction = 5; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = NULL; - gUnknown_203B208->unk24[loopMax].menuAction = 1; -} - -void sub_8017828(void) -{ - s32 menuAction; - - if (sub_80144A4(&menuAction) == 0) { - if (menuAction != 1) { - gUnknown_203B208->menuAction1 = menuAction; - } - switch(menuAction) - { - case 2: - if (GetNumberOfFilledInventorySlots() == 0) { - UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_NO_INV_ITEMS); - } - else if (sub_801CF50(0) != 0) { - UpdateKangaskhanStorageState(8); - } - else { - UpdateKangaskhanStorageState(0xb); - } - break; - case 3: - if (sub_801CF14(1) != 0) { - UpdateKangaskhanStorageState(7); - } - else if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) { - UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_TOO_MANY_ITEMS); - } - else { - UpdateKangaskhanStorageState(0x14); - } - break; - case 6: - UpdateKangaskhanStorageState(2); - break; - case 1: - UpdateKangaskhanStorageState(3); - break; - } - } -} - -void sub_80178D0(void) -{ - s32 menuAction; - - if (sub_80144A4(&menuAction) == 0) { - switch(menuAction) - { - case 4: - MoveToStorage(&gUnknown_203B208->storedItem); - ShiftItemsDownFrom(gUnknown_203B208->itemIndex); - FillInventoryGaps(); - UpdateKangaskhanStorageState(0x13); - break; - case 1: - case 5: - UpdateKangaskhanStorageState(0xe); - break; - } - } -} - -void sub_8017928(void) -{ - int menuAction; - struct BulkItem item; - - if (sub_80144A4(&menuAction) == 0) { - switch(menuAction) - { - case 4: - gTeamInventory_203B460->teamStorage[gUnknown_203B208->storedItem.id] -= gUnknown_203B208->storedItem.quantity; - item.id = gUnknown_203B208->storedItem.id; - item.quantity = gUnknown_203B208->storedItem.quantity; - AddHeldItemToInventory(&item); - UpdateKangaskhanStorageState(0x1d); - break; - case 1: - case 5: - UpdateKangaskhanStorageState(0x17); - break; - } - } -} - -void sub_80179A8(void) -{ - s32 index; - s32 menuAction; - - if (sub_80144A4(&menuAction) == 0) { - switch(menuAction) - { - case 4: - for(index = 0; index < INVENTORY_SIZE; index++) - { - if (sub_801AED0(index) != 0) { - MoveToStorage(&gTeamInventory_203B460->teamItems[index]); - gTeamInventory_203B460->teamItems[index].id = 0; - gTeamInventory_203B460->teamItems[index].flags = 0; - } - } - FillInventoryGaps(); - sub_801AE84(); - UpdateKangaskhanStorageState(0x13); - break; - case 1: - case 5: - UpdateKangaskhanStorageState(0xe); - break; - } - } -} - -void sub_8017A1C(void) -{ - s32 itemID; - int menuAction; - struct BulkItem item; - - if (sub_80144A4(&menuAction) == 0) { - - switch(menuAction) - { - case 4: - for(itemID = 0; itemID < NUMBER_OF_ITEM_IDS; itemID++) - { - if(sub_801CFE0(itemID) != 0) - { - item.id = itemID; - if(IsThrowableItem(item.id)) - if(gTeamInventory_203B460->teamStorage[item.id] > 0x63) - { - item.quantity = 0x63; - } - else - { - item.quantity = gTeamInventory_203B460->teamStorage[item.id]; - } - else - { - item.quantity = 1; - } - gTeamInventory_203B460->teamStorage[item.id] -= item.quantity; - AddHeldItemToInventory(&item); - } - } - FillInventoryGaps(); - sub_801CF94(); - UpdateKangaskhanStorageState(0x1d); - break; - case 1: - case 5: - UpdateKangaskhanStorageState(0x17); - break; - } - } -} - -void sub_8017AF8(void) -{ - switch(sub_801A6E8(1)) - { - case 3: - if(sub_801AEA8() != 0) - { - sub_8099690(0); - UpdateKangaskhanStorageState(0x12); - } - else - { - gUnknown_203B208->itemIndex = sub_801A8AC(); - gUnknown_203B208->storedItem = gTeamInventory_203B460->teamItems[gUnknown_203B208->itemIndex]; - UpdateKangaskhanStorageState(0xF); - } - break; - case 4: - gUnknown_203B208->itemIndex = sub_801A8AC(); - gUnknown_203B208->storedItem = gTeamInventory_203B460->teamItems[gUnknown_203B208->itemIndex]; - UpdateKangaskhanStorageState(0x10); - break; - case 2: - sub_801A928(); - UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_MAIN_MENU); - break; - } -} - -void sub_8017B88(void) -{ - switch(sub_801CA08(1)) - { - case 3: - if(sub_801CFB8() != 0){ - UpdateKangaskhanStorageState(0x1C); - } - else - { - gUnknown_203B208->id = sub_801CB24(); - xxx_init_itemslot_8090A8C(&gUnknown_203B208->storedItem, gUnknown_203B208->id, 0); - gUnknown_203B208->storedItem.quantity = 1; - UpdateKangaskhanStorageState(0x19); - } - break; - case 4: - gUnknown_203B208->id = sub_801CB24(); - xxx_init_itemslot_8090A8C(&gUnknown_203B208->storedItem, gUnknown_203B208->id, 0); - gUnknown_203B208->storedItem.quantity = 1; - UpdateKangaskhanStorageState(0x1A); - break; - case 2: - sub_801CBB8(); - UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_MAIN_MENU); - break; - case 1: - sub_801AD34(0); - break; - } -} - -void sub_8017C28(void) -{ - sub_801CA08(0); - sub_8012FD8(&gUnknown_203B208->unk58); - switch(sub_8013BBC(&gUnknown_203B208->unkA8)) - { - case 1: - sub_8017598(); - break; - case 3: - gUnknown_203B208->storedItem.quantity = gUnknown_203B208->unkA8; - UpdateKangaskhanStorageState(0x1B); - break; - case 2: - UpdateKangaskhanStorageState(0x17); - break; - case 0: - default: - break; - } -} - -void sub_8017C7C(void) -{ - s32 menuAction; - menuAction = 0; - sub_801A6E8(0); - if (sub_8012FD8(&gUnknown_203B208->unk58) == 0) { - sub_8013114(&gUnknown_203B208->unk58, &menuAction); - if(menuAction != 1) gUnknown_203B208->menuAction2 = menuAction; - } - - switch(menuAction) - { - case 2: - sub_8099690(0); - if(!IsNotMoneyOrUsedTMItem(gUnknown_203B208->storedItem.id)) - UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_IS_MONEY_USED_TM); - else if(!sub_801ADA0(gUnknown_203B208->itemIndex)) - UpdateKangaskhanStorageState(0xA); - else - UpdateKangaskhanStorageState(0x11); - break; - case 6: - sub_8099690(0); - UpdateKangaskhanStorageState(0x10); - break; - case 1: - UpdateKangaskhanStorageState(0xE); - break; - } -} - -void sub_8017D24(void) -{ - s32 menuAction; - menuAction = 0; - sub_801CA08(0); - if (sub_8012FD8(&gUnknown_203B208->unk58) == 0) { - sub_8013114(&gUnknown_203B208->unk58, &menuAction); - if(menuAction != 1) gUnknown_203B208->menuAction3 = menuAction; - } - - switch(menuAction) - { - case 3: - if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) - { - sub_801CBB8(); - UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_TOO_MANY_ITEMS); - } - else if(IsThrowableItem(gUnknown_203B208->storedItem.id)) - UpdateKangaskhanStorageState(0x18); - else - UpdateKangaskhanStorageState(0x1B); - break; - case 6: - UpdateKangaskhanStorageState(0x1A); - break; - case 1: - UpdateKangaskhanStorageState(0x17); - break; - } -} - -void sub_8017DC0(void) -{ - switch(sub_801B410()) - { - case 0: - case 1: - default: - break; - case 2: - case 3: - sub_801B450(); - UpdateKangaskhanStorageState(0xE); - break; - } -} - -void sub_8017DDC(void) -{ - switch(sub_801B410()) - { - case 0: - case 1: - default: - break; - case 2: - case 3: - sub_801B450(); - UpdateKangaskhanStorageState(0x17); - break; - } -} - -void AdvanceToKangaskhanStorageFallbackState(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - UpdateKangaskhanStorageState(gUnknown_203B208->fallbackState); - } -} - -u32 sub_8017E1C(void) -{ - ResetUnusedInputStruct(); - sub_800641C(NULL, 1, 1); - gUnknown_203B20C = MemoryAlloc(sizeof(struct unkStruct_203B20C), 8); - gUnknown_203B20C->menuAction1 = 0; - gUnknown_203B20C->menuAction2 = 0; - gUnknown_203B20C->menuAction3 = 0; - sub_8017F10(0); - return 1; -} - -u32 sub_8017E54(void) -{ - switch(gUnknown_203B20C->state) - { - case 0: - sub_8017F10(1); - break; - case 1: - sub_8018588(); - break; - case 4: - case 5: - sub_8018620(); - break; - case 6: - sub_8018904(); - break; - case 7: - sub_8018AC8(); - break; - case 10: - case 11: - sub_80186F8(); - break; - case 12: - sub_8018854(); - break; - case 13: - sub_80189C8(); - break; - case 14: - sub_8018AE4(); - break; - case 3: - return 3; - } - return 0; -} - -void sub_8017EF4(void) -{ - if(gUnknown_203B20C != NULL) - { - MemoryFree(gUnknown_203B20C); - gUnknown_203B20C = NULL; - } -} - -void sub_8017F10(u32 newState) -{ - gUnknown_203B20C->state = newState; - sub_8017F28(); - sub_8018100(); -} - -void sub_8017F28(void) -{ - s32 index; - - sub_8006518(gUnknown_203B20C->unkF0); - - switch(gUnknown_203B20C->state) - { - case 1: - gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; - gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8; - gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; - sub_80182E4(); - gUnknown_203B20C->unkF0[2] = gUnknown_80DB7D0; - sub_8012CAC(&gUnknown_203B20C->unkF0[2], gUnknown_203B20C->unk20); - break; - case 4: - case 5: - gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; - gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8; - gUnknown_203B20C->unkF0[2] = gUnknown_80DB7B8; - gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; - break; - case 10: - case 11: - gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; - gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8; - gUnknown_203B20C->unkF0[2] = gUnknown_80DB7B8; - gUnknown_203B20C->unkF0[0] = gUnknown_80DB800; - break; - case 12: - gUnknown_203B20C->unkF0[1] = gUnknown_80DB818; - break; - case 6: - case 13: - gUnknown_203B20C->unkF0[2] = gUnknown_80DB7E8; - break; - default: - case 0: - for(index = 0; index < 4; index++) - { - gUnknown_203B20C->unkF0[index] = gUnknown_80DB7B8; - } - break; - } - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B20C->unkF0, 1, 1); -} - -void sub_8018100(void) -{ - - switch(gUnknown_203B20C->state) - { - case 1: - sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->menuAction1, 2); - break; - case 4: - sub_801A5D8(3, 3, 0, 0xA); - break; - case 5: - sub_801A8D0(1); - break; - case 6: - sub_801A9E0(); - sub_801841C(); - sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->menuAction2, 2); - break; - case 7: - sub_801B3C0(&gUnknown_203B20C->item); - break; - case 10: - sub_801C8C4(1, 3, 0, 0xA); - sub_801AD34(0); - break; - case 11: - sub_801CB5C(1); - sub_801AD34(0); - break; - case 12: - gUnknown_203B20C->unkD0 = 2; - gUnknown_203B20C->unkC8 = 1; - if(gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id] > 99) - gUnknown_203B20C->unkCC = 99; - else - gUnknown_203B20C->unkCC = gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id]; - gUnknown_203B20C->unkC4 = gUnknown_203B20C->unkCC; - gUnknown_203B20C->unkD4 = 1; - gUnknown_203B20C->unkD8 = &gUnknown_203B20C->unkF0[1]; - gUnknown_203B20C->unkDC = 0x28; - gUnknown_203B20C->unkE0 = 0x12; - sub_8013AA0(&gUnknown_203B20C->unkC0); - sub_8018280(); - break; - case 13: - sub_801CCD8(); - sub_801AD34(0); - sub_80184D4(); - sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->menuAction3, 2); - break; - case 14: - sub_801B3C0(&gUnknown_203B20C->item); - break; - case 0: - default: - break; - } -} - -void sub_8018280(void) -{ - sub_8008C54(gUnknown_203B20C->unkD4); - sub_80073B8(gUnknown_203B20C->unkD4); - xxx_call_draw_string(4, 0, gUnknown_80DB830, gUnknown_203B20C->unkD4, 0); // Number? - sub_8013C68(&gUnknown_203B20C->unkC0); - sub_80073E0(gUnknown_203B20C->unkD4); - sub_801CCD8(); - sub_801AD34(0); - sub_8012EA4(&gUnknown_203B20C->unk70,0); -} - -void sub_80182E4(void) -{ - int index; - s32 loopMax; - - loopMax = 0; - MemoryFill16(gUnknown_203B20C->unk60,0,sizeof(gUnknown_203B20C->unk60)); - gUnknown_203B20C->unk20[0].text = *gUnknown_80D4958; - gUnknown_203B20C->unk20[0].menuAction = 2; - if ((GetNumberOfFilledInventorySlots() == 0) || (sub_801CF50(0) != 0)) { - gUnknown_203B20C->unk60[0] = 1; - } - loopMax += 1; - gUnknown_203B20C->unk20[loopMax].text = *gUnknown_80D4964; - gUnknown_203B20C->unk20[loopMax].menuAction = 3; - if ((sub_801CF14(1) != 0) || (INVENTORY_SIZE <= GetNumberOfFilledInventorySlots())) { - gUnknown_203B20C->unk60[loopMax] = 1; - } - loopMax += 1; - gUnknown_203B20C->unk20[loopMax].text = *gUnknown_80D4934; - gUnknown_203B20C->unk20[loopMax].menuAction = 1; - loopMax += 1; - gUnknown_203B20C->unk20[loopMax].text = NULL; - gUnknown_203B20C->unk20[loopMax].menuAction = 1; - - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B20C->unk60[index] == 0) { - if(gUnknown_203B20C->unk20[index].menuAction == gUnknown_203B20C->menuAction1) - return; - } - } - - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B20C->unk60[index] == 0) { - gUnknown_203B20C->menuAction1 = gUnknown_203B20C->unk20[index].menuAction; - break; - } - } -} - -void sub_801841C(void) -{ - int index; - s32 loopMax; - - loopMax = 0; - MemoryFill16(gUnknown_203B20C->unk60,0,sizeof(gUnknown_203B20C->unk60)); - gUnknown_203B20C->unk20[0].text = *gUnknown_80D4958; - gUnknown_203B20C->unk20[0].menuAction = 2; - if (!sub_801ADA0(gUnknown_203B20C->itemIndex)) { - gUnknown_203B20C->unk60[0] = 1; - } - loopMax += 1; - gUnknown_203B20C->unk20[loopMax].text = *gUnknown_80D4970; - gUnknown_203B20C->unk20[loopMax].menuAction = 4; - loopMax += 1; - gUnknown_203B20C->unk20[loopMax].text = NULL; - gUnknown_203B20C->unk20[loopMax].menuAction = 1; - - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B20C->unk60[index] == 0) { - if(gUnknown_203B20C->unk20[index].menuAction == gUnknown_203B20C->menuAction2) - return; - } - } - - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B20C->unk60[index] == 0) { - gUnknown_203B20C->menuAction2 = gUnknown_203B20C->unk20[index].menuAction; - break; - } - } -} - -void sub_80184D4(void) -{ - int index; - s32 loopMax; - - loopMax = 0; - MemoryFill16(gUnknown_203B20C->unk60,0,sizeof(gUnknown_203B20C->unk60)); - gUnknown_203B20C->unk20[0].text = *gUnknown_80D4964; - gUnknown_203B20C->unk20[0].menuAction = 3; - if ((GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE)) { - gUnknown_203B20C->unk60[0] = 1; - } - loopMax += 1; - gUnknown_203B20C->unk20[loopMax].text = *gUnknown_80D4970; - gUnknown_203B20C->unk20[loopMax].menuAction = 4; - loopMax += 1; - gUnknown_203B20C->unk20[loopMax].text = NULL; - gUnknown_203B20C->unk20[loopMax].menuAction = 1; - - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B20C->unk60[index] == 0) { - if(gUnknown_203B20C->unk20[index].menuAction == gUnknown_203B20C->menuAction3) - return; - } - } - - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B20C->unk60[index] == 0) { - gUnknown_203B20C->menuAction3 = gUnknown_203B20C->unk20[index].menuAction; - break; - } - } -} - -void sub_8018588(void) -{ - s32 menuAction; - menuAction = 0; - - if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0) - { - sub_8013114(&gUnknown_203B20C->unk70, &menuAction); - if(menuAction != 1) gUnknown_203B20C->menuAction1 = menuAction; - } - - switch(menuAction) - { - case 2: - if((GetNumberOfFilledInventorySlots() != 0) && sub_801CF50(0) == 0) - sub_8017F10(4); - else - sub_8012EA4(&gUnknown_203B20C->unk70, 1);; - break; - case 3: - if(sub_801CF14(1) != 0) - sub_8012EA4(&gUnknown_203B20C->unk70, 1); - else - sub_8017F10(0xA); - break; - case 1: - sub_8017F10(3); - break; - } -} - -void sub_8018620(void) -{ - s32 index; - switch(sub_801A6E8(1)) - { - case 3: - if(sub_801AEA8() != 0) - { - for(index = 0; index < INVENTORY_SIZE; index++) - { - if(sub_801AED0(index) != 0) - { - MoveToStorage(&gTeamInventory_203B460->teamItems[index]); - gTeamInventory_203B460->teamItems[index].id = 0; - gTeamInventory_203B460->teamItems[index].flags = 0; - } - } - FillInventoryGaps(); - sub_801AE84(); - if(GetNumberOfFilledInventorySlots() == 0) - { - sub_801A928(); - sub_8017F10(1); - } - else - { - sub_8017F10(5); - } - } - else - { - gUnknown_203B20C->itemIndex = sub_801A8AC(); - gUnknown_203B20C->item = gTeamInventory_203B460->teamItems[gUnknown_203B20C->itemIndex]; - sub_8017F10(6); - } - break; - case 4: - gUnknown_203B20C->itemIndex = sub_801A8AC(); - gUnknown_203B20C->item = gTeamInventory_203B460->teamItems[gUnknown_203B20C->itemIndex]; - sub_8017F10(7); - break; - case 2: - sub_801A928(); - sub_8017F10(1); - break; - } -} - -void sub_80186F8(void) -{ - struct BulkItem item; - s32 itemID; - - switch(sub_801CA08(1)) - { - case 3: - if(sub_801CFB8() != 0) - { - for(itemID = 0; itemID < NUMBER_OF_ITEM_IDS; itemID++) - { - if(sub_801CFE0(itemID) != 0) - { - item.id = itemID; - if(IsThrowableItem(item.id)) - if(gTeamInventory_203B460->teamStorage[item.id] > 0x63) - { - item.quantity = 0x63; - } - else - { - item.quantity = gTeamInventory_203B460->teamStorage[item.id]; - } - else - { - item.quantity = 1; - } - gTeamInventory_203B460->teamStorage[item.id] -= item.quantity; - AddHeldItemToInventory(&item); - } - } - FillInventoryGaps(); - sub_801CF94(); - if((sub_801CF14(1) == 0) && (GetNumberOfFilledInventorySlots() < INVENTORY_SIZE)) - sub_8017F10(0xB); - else - { - sub_801CBB8(); - sub_8017F10(1); - } - } - else - { - gUnknown_203B20C->id = sub_801CB24(); - xxx_init_itemslot_8090A8C(&gUnknown_203B20C->item, gUnknown_203B20C->id, 0); - gUnknown_203B20C->item.quantity = 1; - sub_8017F10(0xD); - } - break; - case 4: - gUnknown_203B20C->id = sub_801CB24(); - xxx_init_itemslot_8090A8C(&gUnknown_203B20C->item, gUnknown_203B20C->id, 0); - gUnknown_203B20C->item.quantity = 1; - sub_8017F10(0xE); - break; - case 2: - sub_801CBB8(); - sub_8017F10(1); - break; - case 1: - sub_801AD34(0); - break; - } -} - -void sub_8018854(void) -{ - struct BulkItem item; - - sub_801CA08(0); - sub_8012FD8(&gUnknown_203B20C->unk70); - - switch(sub_8013BBC(&gUnknown_203B20C->unkC0)) - { - case 3: - gUnknown_203B20C->item.quantity = gUnknown_203B20C->unkC0; - gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id] -= gUnknown_203B20C->item.quantity; - item.id = gUnknown_203B20C->item.id; - item.quantity = gUnknown_203B20C->item.quantity; - AddHeldItemToInventory(&item); - if(sub_801CF14(1) == 0) - if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) - { - error: - sub_801CBB8(); - sub_8017F10(0x1); - } - else - sub_8017F10(0xB); - else - goto error; - break; - case 2: - sub_8017F10(0xB); - break; - case 1: - sub_8018280(); - break; - case 0: - break; - } -} - -void sub_8018904(void) -{ - s32 menuAction; - - menuAction = 0; - - sub_801A6E8(0); - if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0) - { - sub_8013114(&gUnknown_203B20C->unk70, &menuAction); - if(menuAction != 1) gUnknown_203B20C->menuAction2 = menuAction; - } - switch(menuAction) - { - case 2: - if(IsNotMoneyOrUsedTMItem(gUnknown_203B20C->item.id)) - if(sub_801ADA0(gUnknown_203B20C->itemIndex) == 0) - error: - sub_8012EA4(&gUnknown_203B20C->unk70, 1); - else - { - MoveToStorage(&gUnknown_203B20C->item); - ShiftItemsDownFrom(gUnknown_203B20C->itemIndex); - FillInventoryGaps(); - if(GetNumberOfFilledInventorySlots() == 0) - { - sub_801A928(); - sub_8017F10(1); - } - else - sub_8017F10(5); - } - else - goto error; - break; - case 4: - sub_8099690(0); - sub_8017F10(7); - break; - case 1: - sub_8017F10(5); - break; - } -} - -void sub_80189C8(void) -{ - struct BulkItem item; - s32 menuAction; - - menuAction = 0; - - sub_801CA08(0); - if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0) - { - sub_8013114(&gUnknown_203B20C->unk70, &menuAction); - if(menuAction != 1) gUnknown_203B20C->menuAction3 = menuAction; - } - switch(menuAction) - { - case 3: - if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) - sub_8012EA4(&gUnknown_203B20C->unk70, 1); - else if(IsThrowableItem(gUnknown_203B20C->item.id)) - sub_8017F10(0xC); - else - { - gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id] -= gUnknown_203B20C->item.quantity; - item.id = gUnknown_203B20C->item.id; - item.quantity = gUnknown_203B20C->item.quantity; - AddHeldItemToInventory(&item); - if(sub_801CF14(1) == 0) - if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) - { - error: - sub_801CBB8(); - sub_8017F10(1); - } - else - { - sub_8017F10(0xB); - } - else - goto error; - } - break; - case 4: - sub_8017F10(0xE); - break; - case 1: - sub_8017F10(0xB); - break; - } -} - -void sub_8018AC8(void) -{ - switch(sub_801B410()) - { - case 2: - case 3: - sub_801B450(); - sub_8017F10(0x5); - break; - case 0: - case 1: - default: - break; - } -} - -void sub_8018AE4(void) -{ - switch(sub_801B410()) - { - case 2: - case 3: - sub_801B450(); - sub_8017F10(0xB); - break; - case 0: - case 1: - default: - break; - } -} diff --git a/src/kecleon_items_1.c b/src/kecleon_items_1.c index 9878b7b88..cf11ed156 100644 --- a/src/kecleon_items_1.c +++ b/src/kecleon_items_1.c @@ -11,11 +11,26 @@ #include "menu_input.h" #include "text.h" +struct unkStruct_203B214 +{ + // size: 0xA0 + struct MenuInputStruct input; + u32 unk34; + struct UnkTextStruct2 *unk38; + struct UnkTextStruct2 unk3C[4]; + u8 unk9C[4]; +}; + + extern struct unkStruct_203B210 *gUnknown_203B210; +extern struct unkStruct_203B214 *gUnknown_203B214; extern u16 gUnknown_203B218; +extern struct unkStruct_203B214 *gUnknown_203B21C; extern u16 gUnknown_203B220; +extern struct unkStruct_203B224 *gUnknown_203B224; extern u16 gUnknown_203B228; extern u16 gUnknown_203B22A; + extern u8 gUnknown_80DB8E4[]; extern u8 gUnknown_80DB8EC[]; extern u8 gUnknown_80DB92C[]; @@ -46,7 +61,6 @@ extern void DrawTeamMoneyBox(u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern s32 sub_8013800(struct MenuInputStruct *, u32); extern void xxx_format_and_draw(u32, u32, u8 *, u32, u32); extern s32 sub_801AED0(s32); void sub_8007B7C(s32, s32, s32, s32, s32); @@ -59,29 +73,9 @@ extern s32 sub_801AEA8(void); s32 sub_801AE24(u32); -extern struct unkStruct_203B224 *gUnknown_203B224; - -struct unkStruct_203B214 -{; - // size: 0xA0 - struct MenuInputStruct input; - u32 unk34; - struct UnkTextStruct2 *unk38; - struct UnkTextStruct2 unk3C[4]; - u8 unk9C[4]; -}; - -extern struct unkStruct_203B214 *gUnknown_203B214; -extern struct unkStruct_203B214 *gUnknown_203B21C; - -extern void sub_8013818(struct MenuInputStruct *, u32, u32, u32); - extern u8 sub_8019FB0(void); -extern u8 sub_80138B8(struct MenuInputStruct *, u32); extern void PlayMenuSoundEffect(u32); -extern s32 GetKeyPress(struct MenuInputStruct *); -extern void sub_8013660(struct MenuInputStruct *); extern struct UnkTextStruct2 gUnknown_80DB8CC; extern struct UnkTextStruct2 gUnknown_80DB8B4; @@ -91,10 +85,8 @@ extern struct UnkTextStruct2 gUnknown_80DB95C; extern const struct UnkTextStruct2 gUnknown_80DB914; extern void sub_801A430(void); extern void sub_801A4A4(void); -extern void sub_8013984(struct MenuInputStruct*); extern void sub_801A064(void); extern void sub_801A0D8(void); -extern void AddMenuCursorSprite(struct MenuInputStruct *); extern u8 sub_801A37C(void); extern void sub_801A010(void); diff --git a/src/load_screen.c b/src/load_screen.c index f517a0b08..ffb725e33 100644 --- a/src/load_screen.c +++ b/src/load_screen.c @@ -7,6 +7,7 @@ #include "memory.h" #include "menu.h" #include "text.h" +#include "text_util.h" #include "pokemon.h" #include "save.h" #include "code_800D090.h" @@ -50,13 +51,11 @@ extern u8 *sub_8098FB4(); extern u8 *GetDungeonLocationInfo(void); extern u32 GetNumAdventures(void); extern void PrintDungeonLocationtoBuffer(u8 *, u8 *); -extern void sub_80922B4(u8 *, const u8 *, u32); extern u32 sub_8001658(u32, u32); extern void sub_80073E0(u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); -extern void sub_808D930(u8 *, s16); extern void xxx_format_string(u8 *, u8 *, u8 *, u32); extern void SetBGPaletteBufferColorArray(s32, s32); diff --git a/src/luminous_cave.c b/src/luminous_cave.c index 8625acd8e..47bef4546 100644 --- a/src/luminous_cave.c +++ b/src/luminous_cave.c @@ -8,6 +8,7 @@ #include "pokemon.h" #include "random.h" #include "text.h" +#include "text_util.h" #include "team_inventory.h" #include "menu_input.h" @@ -201,7 +202,6 @@ void sub_8024DBC(void); void sub_8024E30(void); void sub_801AEE4(u32, u32); void sub_808F734(struct PokemonStruct *, s16); -void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size); u32 sub_801602C(u32 r0, u8 *name); extern s32 sub_80144A4(s32 *); extern u32 sub_801A6E8(u32); diff --git a/src/makuhita_dojo_1.c b/src/makuhita_dojo_1.c index de5838dc6..485e945e8 100644 --- a/src/makuhita_dojo_1.c +++ b/src/makuhita_dojo_1.c @@ -60,19 +60,12 @@ extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern u8 sub_80A2740(s32 r0); extern s16 sub_80A2668(u32 r0); -extern s32 sub_8013800(void *, u32); extern bool8 IsMazeCompleted(s32); extern s32 sub_8030668(void); -extern void sub_8013984(void *); extern void sub_80304C8(); -extern void AddMenuCursorSprite(struct MenuInputStruct *); extern void DrawDojoCourseList(void); -extern u8 sub_80138B8(void *, u32); extern void PlayMenuSoundEffect(u32); -extern s32 GetKeyPress(void *); -extern void sub_8013660(void *); -extern void sub_8013818(void *, u32, u32, u32); extern void sub_803053C(void); extern u8 sub_80306A4(void); extern s32 sub_80144A4(s32 *); @@ -355,4 +348,4 @@ s32 sub_8030668(void) bool8 sub_80306A4(void) { return FALSE; -} \ No newline at end of file +} diff --git a/src/menu_input.c b/src/menu_input.c index 48aa55d82..6f76eb017 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -17,30 +17,128 @@ extern struct UnkTextStruct1 gUnknown_2027370[4]; extern u8 gUnknown_80D4828[]; extern void PlayMenuSoundEffect(u32); -extern s32 GetKeyPress(struct MenuInputStruct *); -extern u32 sub_80137A8(struct MenuInputStruct *); -void MoveMenuCursorUp(struct MenuInputStruct *); -void MoveMenuCursorDown(struct MenuInputStruct *); extern void sub_80073B8(u32); extern s32 sub_8008ED0(const u8 *); extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); -extern s32 sub_8013800(struct MenuInputStruct *, s32); extern void sub_80073E0(u32); -extern void sub_8013660(struct MenuInputStruct *); -void AddMenuCursorSprite(struct MenuInputStruct *); void AddMenuCursorSprite_(struct MenuInputStruct *, u32); void sub_8012EBC(struct MenuStruct *param_1); extern void sub_8013134(struct MenuInputStruct *, u32, u32); -extern void sub_80137B0(struct MenuInputStruct *, u32); extern s16 sub_8009614(u32, u32); extern u32 ReturnIntFromChar2(u8); struct unkChar *GetCharacter(u32); extern void xxx_call_draw_char(u32, u32, u32, u32, u32); -extern void sub_801317C(struct MenuInputStructSub *); extern void nullsub_7(u16 *); +extern void nullsub_34(struct MenuInputStructSub *r0); const u32 gDefaultMenuTextColors[] = { COLOR_WHITE_2, COLOR_RED, COLOR_RED }; + +u32 sub_8012A64(struct MenuInputStructSub *r0, s32 r1) +{ + if(r0 == NULL) + { + return sub_8012AE8(); + } + if(r1 != -1) + { + nullsub_34(r0); + } + if(r0->a_button != 0) + { + r0->a_button = 0; + return INPUT_A_BUTTON; + } + else if(r0->b_button == 0) + { + return sub_8012AE8(); + } + else + { + r0->b_button = 0; + return INPUT_B_BUTTON; + } +} + +s32 GetKeyPress(struct MenuInputStruct *r0) +{ + if(r0 != NULL) + { + if(r0->unk28.a_button != 0) + { + return INPUT_A_BUTTON; + } + if(r0->unk28.b_button != 0) + { + return INPUT_B_BUTTON; + } + if(r0->unk28.dpad_left != 0) + { + return INPUT_DPAD_LEFT; + } + if(r0->unk28.dpad_right != 0) + { + return INPUT_DPAD_RIGHT; + } + } + return sub_8012AE8(); +} + +s32 sub_8012AE8(void) +{ + if ((gRealInputs.held & R_BUTTON) != 0) { + if ((gRealInputs.pressed & A_BUTTON) != 0) { + return INPUT_R_A_BUTTONS; + } + if ((gRealInputs.repeated & DPAD_UP) != 0) { + return INPUT_R_DPAD_UP_BUTTONS; + } + if ((gRealInputs.repeated & DPAD_DOWN) != 0) { + return INPUT_R_DPAD_DOWN_BUTTONS; + } + if ((gRealInputs.repeated & DPAD_LEFT) != 0) { + return INPUT_R_DPAD_LEFT_BUTTONS; + } + if ((gRealInputs.repeated & DPAD_RIGHT) != 0) { + return INPUT_R_DPAD_RIGHT_BUTTONS; + } + if ((gRealInputs.repeated & R_BUTTON) != 0) { + return INPUT_R_BUTTON; + } + } + else + { + if ((gRealInputs.pressed & A_BUTTON) != 0) { + return INPUT_A_BUTTON; + } + if ((gRealInputs.pressed & B_BUTTON) != 0) { + return INPUT_B_BUTTON; + } + if ((gRealInputs.pressed & SELECT_BUTTON) != 0) { + return INPUT_SELECT_BUTTON; + } + if ((gRealInputs.pressed & START_BUTTON) != 0) { + return INPUT_START_BUTTON; + } + if ((gRealInputs.repeated & DPAD_UP) != 0) { + return INPUT_DPAD_UP; + } + if ((gRealInputs.repeated & DPAD_DOWN) != 0) { + return INPUT_DPAD_DOWN; + } + if ((gRealInputs.repeated & DPAD_LEFT) != 0) { + return INPUT_DPAD_LEFT; + } + if ((gRealInputs.repeated & DPAD_RIGHT) != 0) { + return INPUT_DPAD_RIGHT; + } + if ((gRealInputs.repeated & L_BUTTON) != 0) { + return INPUT_L_BUTTON; + } + } + return INPUT_NONE; +} + void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 color, u32 param_6) { s32 iVar1; diff --git a/src/menu_input_1.c b/src/menu_input_1.c index 04a33b326..f8eaebf3e 100644 --- a/src/menu_input_1.c +++ b/src/menu_input_1.c @@ -2,20 +2,10 @@ #include "constants/input.h" #include "input.h" #include "text.h" +#include "menu_input.h" extern struct UnkTextStruct1 gUnknown_2027370[4]; extern void PlayMenuSoundEffect(u32); -extern void AddMenuCursorSprite(struct MenuInputStruct *); -extern void sub_8013A7C(struct MenuInputStruct *); -extern void sub_8013A54(struct MenuInputStruct *); -extern s32 GetKeyPress(struct MenuInputStruct *); -extern void MoveMenuCursorUp(struct MenuInputStruct *); -extern void MoveMenuCursorDown(struct MenuInputStruct *); -void sub_8013984(struct MenuInputStruct *); -void sub_801317C(struct MenuInputStructSub *); -void sub_80137F8(struct MenuInputStruct *, u32); -s32 sub_8013800(struct MenuInputStruct *param_1, s32 param_2); -void UpdateMenuCursorSpriteCoords(struct MenuInputStruct *param_1); void sub_801332C(u16 *); void sub_8013660(struct MenuInputStruct *param_1) @@ -170,7 +160,7 @@ s32 sub_8013800(struct MenuInputStruct *param_1, s32 param_2) return (iVar2 + (iVar1 >> 8)); } -void sub_8013818(struct MenuInputStruct *param_1, short param_2, u16 param_3, s32 param_4) +void sub_8013818(struct MenuInputStruct *param_1, s32 param_2, u32 param_3, s32 param_4) { param_1->unk0 = param_4; param_1->unk22 = param_2; @@ -185,7 +175,7 @@ void sub_8013818(struct MenuInputStruct *param_1, short param_2, u16 param_3, s3 } -void sub_8013848(struct MenuInputStruct *param_1, short param_2, u16 param_3, s32 param_4) +void sub_8013848(struct MenuInputStruct *param_1, s32 param_2, u32 param_3, s32 param_4) { param_1->unk0 = param_4; param_1->unk22 = param_2; @@ -199,7 +189,7 @@ void sub_8013848(struct MenuInputStruct *param_1, short param_2, u16 param_3, s3 sub_80137F8(param_1,0x18); } -void sub_8013878(struct MenuInputStruct *param_1, int param_2) +void sub_8013878(struct MenuInputStruct *param_1, s32 param_2) { if (param_2 < 0) { param_2 = 0; @@ -280,7 +270,8 @@ bool8 sub_8013938(struct MenuInputStruct *param_1) } } -void sub_8013984(struct MenuInputStruct * param_1) { +void sub_8013984(struct MenuInputStruct * param_1) +{ s32 iVar2; s32 iVar4; struct UnkTextStruct1 *ptr; diff --git a/src/more_input.c b/src/more_input.c deleted file mode 100644 index 8b4deee92..000000000 --- a/src/more_input.c +++ /dev/null @@ -1,113 +0,0 @@ -#include "global.h" -#include "constants/input.h" -#include "input.h" - - -extern void nullsub_34(struct MenuInputStructSub *r0); -u32 sub_8012AE8(void); - -u32 sub_8012A64(struct MenuInputStructSub *r0, u32 r1) -{ - if(r0 == NULL) - { - return sub_8012AE8(); - } - if(r1 != -1) - { - nullsub_34(r0); - } - if(r0->a_button != 0) - { - r0->a_button = 0; - return INPUT_A_BUTTON; - } - else if(r0->b_button == 0) - { - return sub_8012AE8(); - } - else - { - r0->b_button = 0; - return INPUT_B_BUTTON; - } -} - -u32 GetKeyPress(struct MenuInputStruct *r0) -{ - if(r0 != NULL) - { - if(r0->unk28.a_button != 0) - { - return INPUT_A_BUTTON; - } - if(r0->unk28.b_button != 0) - { - return INPUT_B_BUTTON; - } - if(r0->unk28.dpad_left != 0) - { - return INPUT_DPAD_LEFT; - } - if(r0->unk28.dpad_right != 0) - { - return INPUT_DPAD_RIGHT; - } - } - return sub_8012AE8(); -} - -u32 sub_8012AE8(void) -{ - if ((gRealInputs.held & R_BUTTON) != 0) { - if ((gRealInputs.pressed & A_BUTTON) != 0) { - return INPUT_R_A_BUTTONS; - } - if ((gRealInputs.repeated & DPAD_UP) != 0) { - return INPUT_R_DPAD_UP_BUTTONS; - } - if ((gRealInputs.repeated & DPAD_DOWN) != 0) { - return INPUT_R_DPAD_DOWN_BUTTONS; - } - if ((gRealInputs.repeated & DPAD_LEFT) != 0) { - return INPUT_R_DPAD_LEFT_BUTTONS; - } - if ((gRealInputs.repeated & DPAD_RIGHT) != 0) { - return INPUT_R_DPAD_RIGHT_BUTTONS; - } - if ((gRealInputs.repeated & R_BUTTON) != 0) { - return INPUT_R_BUTTON; - } - } - else - { - if ((gRealInputs.pressed & A_BUTTON) != 0) { - return INPUT_A_BUTTON; - } - if ((gRealInputs.pressed & B_BUTTON) != 0) { - return INPUT_B_BUTTON; - } - if ((gRealInputs.pressed & SELECT_BUTTON) != 0) { - return INPUT_SELECT_BUTTON; - } - if ((gRealInputs.pressed & START_BUTTON) != 0) { - return INPUT_START_BUTTON; - } - if ((gRealInputs.repeated & DPAD_UP) != 0) { - return INPUT_DPAD_UP; - } - if ((gRealInputs.repeated & DPAD_DOWN) != 0) { - return INPUT_DPAD_DOWN; - } - if ((gRealInputs.repeated & DPAD_LEFT) != 0) { - return INPUT_DPAD_LEFT; - } - if ((gRealInputs.repeated & DPAD_RIGHT) != 0) { - return INPUT_DPAD_RIGHT; - } - if ((gRealInputs.repeated & L_BUTTON) != 0) { - return INPUT_L_BUTTON; - } - } - return INPUT_NONE; -} - diff --git a/src/options_menu.c b/src/options_menu.c index 8f3d596d8..8cf77c91a 100644 --- a/src/options_menu.c +++ b/src/options_menu.c @@ -14,7 +14,7 @@ struct unkStruct_203B25C u32 chosenHintIndex; struct GameOptions newOptions; u32 menuAction; - struct MenuStruct unk1C; + struct MenuStruct menu; struct MenuItem menuItems[8]; u16 unkAC[8]; struct UnkTextStruct2 unkBC[4]; @@ -23,13 +23,8 @@ struct unkStruct_203B25C struct unkStruct_203B260 { struct GameOptions *optionsMenu; - u32 unk4; - u8 unk8; - u8 fill9[0x10 - 0x9]; - u32 unk10; - u8 fill14[0x28 - 0x14]; - s16 unk28; - u8 fill2A[0x44 - 0x2A]; + struct MenuInputStructSub unk4; + struct MenuInputStruct input; u32 unk44; struct UnkTextStruct2 * unk48; struct UnkTextStruct2 unk4C[4]; @@ -60,13 +55,9 @@ extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern s32 sub_8008ED0(u8 *); -extern s32 sub_8013800(u32 *, u32); +extern void CreateOthersMenu(void); extern void sub_80078A4(u32, u32, u32, u32, u32); -extern u8 sub_80138B8(u32 *, u32); void PlayMenuSoundEffect(u32); -s32 sub_8012AE8(void); -void sub_801317C(u32 *); -extern void sub_8013818(void *, u32, u32, u32); void CreateOptionsMenu(void); void nullsub_38(void); extern void SetOptionsMenuState(u32); @@ -166,235 +157,58 @@ void SetOptionsMenuState(u32 newState) sub_801DED0(); } -#ifdef NONMATCHING void sub_801DD84(void) { - s32 iVar3; + s32 index; sub_8006518(gUnknown_203B25C->unkBC); switch(gUnknown_203B25C->state) { - case 0: + case OPTIONS_MENU_INIT: CreateOthersMenu(); - // TODO probably could be cleaned up to actually match - iVar3 = 0; - if (gUnknown_203B25C->unkAC[iVar3] == 0) { - gUnknown_203B25C->unk18 = gUnknown_203B25C->menuItems[iVar3].menuAction; - } - else { - do { - iVar3++; - if(iVar3 > 7) - break; - if(gUnknown_203B25C->unkAC[iVar3] == 0){ - gUnknown_203B25C->unk18 = gUnknown_203B25C->menuItems[iVar3].menuAction; - break; - } - } while (iVar3 < 8); - } - for(iVar3 = 0; iVar3 < 4; iVar3++) + for(index = 0; index < 8; index++) { - gUnknown_203B25C->unkBC[iVar3] = gUnknown_80DBFCC; + if(gUnknown_203B25C->unkAC[index] == 0) + { + gUnknown_203B25C->menuAction = gUnknown_203B25C->menuItems[index].menuAction; + break; + } } - gUnknown_203B25C->unkBC[0] = gUnknown_80DBFB0; - sub_8012CAC(&gUnknown_203B25C->unkBC[0], gUnknown_203B25C->menuItems); - gUnknown_203B25C->unkBC[0].unk0c = 0xA; - break; - case 1: - CreateOthersMenu(); - for(iVar3 = 0; iVar3 < 4; iVar3++) + for(index = 0; index < 4; index++) { - gUnknown_203B25C->unkBC[iVar3] = gUnknown_80DBFB0; + gUnknown_203B25C->unkBC[index] = gUnknown_80DBFB0; } gUnknown_203B25C->unkBC[0] = gUnknown_80DBFCC; sub_8012CAC(&gUnknown_203B25C->unkBC[0], gUnknown_203B25C->menuItems); - gUnknown_203B25C->unkBC[0].unk0c = 0xA; + gUnknown_203B25C->unkBC[0].unkC = 0xA; + break; + case OPTIONS_MENU_MAIN: + CreateOthersMenu(); + for(index = 0; index < 4; index++) + { + gUnknown_203B25C->unkBC[index] = gUnknown_80DBFB0; + } + gUnknown_203B25C->unkBC[0] = gUnknown_80DBFCC; + sub_8012CAC(&gUnknown_203B25C->unkBC[0], gUnknown_203B25C->menuItems); + gUnknown_203B25C->unkBC[0].unkC = 0xA; break; default: - for(iVar3 = 0; iVar3 < 4; iVar3++) + for(index = 0; index < 4; index++) { - gUnknown_203B25C->unkBC[iVar3] = gUnknown_80DBFB0; + gUnknown_203B25C->unkBC[index] = gUnknown_80DBFB0; } break; } ResetUnusedInputStruct(); sub_800641C(gUnknown_203B25C->unkBC, 1, 1); } -#else -NAKED -void sub_801DD84(void) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r9\n" - "\tmov r6, r8\n" - "\tpush {r6,r7}\n" - "\tldr r4, _0801DDAC\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0xBC\n" - "\tbl sub_8006518\n" - "\tldr r0, [r4]\n" - "\tldr r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbeq _0801DDB4\n" - "\tcmp r0, 0x1\n" - "\tbeq _0801DE38\n" - "\tmovs r3, 0\n" - "\tadds r7, r4, 0\n" - "\tldr r2, _0801DDB0\n" - "\tb _0801DE90\n" - "\t.align 2, 0\n" -"_0801DDAC: .4byte gUnknown_203B25C\n" -"_0801DDB0: .4byte gUnknown_80DBFB0\n" -"_0801DDB4:\n" - "\tbl CreateOthersMenu\n" - "\tmovs r3, 0\n" - "\tldr r1, [r4]\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0xAC\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbne _0801DDCE\n" - "\tldr r0, [r1, 0x70]\n" - "\tstr r0, [r1, 0x18]\n" - "\tadds r7, r4, 0\n" - "\tb _0801DDF2\n" -"_0801DDCE:\n" - "\tadds r3, 0x1\n" - "\tldr r7, _0801DE2C\n" - "\tcmp r3, 0x7\n" - "\tbgt _0801DDF2\n" - "\tldr r2, [r7]\n" - "\tlsls r0, r3, 1\n" - "\tadds r1, r2, 0\n" - "\tadds r1, 0xAC\n" - "\tadds r1, r0\n" - "\tldrh r0, [r1]\n" - "\tcmp r0, 0\n" - "\tbne _0801DDCE\n" - "\tlsls r0, r3, 3\n" - "\tadds r1, r2, 0\n" - "\tadds r1, 0x70\n" - "\tadds r1, r0\n" - "\tldr r0, [r1]\n" - "\tstr r0, [r2, 0x18]\n" -"_0801DDF2:\n" - "\tldr r0, _0801DE30\n" - "\tmov r9, r0\n" - "\tldr r2, _0801DE2C\n" - "\tmov r12, r2\n" - "\tldr r3, _0801DE34\n" - "\tmov r8, r3\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0x3\n" -"_0801DE02:\n" - "\tmov r4, r12\n" - "\tldr r1, [r4]\n" - "\tadds r1, r2\n" - "\tadds r1, 0xBC\n" - "\tmov r0, r8\n" - "\tldm r0!, {r4-r6}\n" - "\tstm r1!, {r4-r6}\n" - "\tldm r0!, {r4-r6}\n" - "\tstm r1!, {r4-r6}\n" - "\tadds r2, 0x18\n" - "\tsubs r3, 0x1\n" - "\tcmp r3, 0\n" - "\tbge _0801DE02\n" - "\tldr r1, [r7]\n" - "\tadds r1, 0xBC\n" - "\tmov r0, r9\n" - "\tldm r0!, {r2,r5,r6}\n" - "\tstm r1!, {r2,r5,r6}\n" - "\tldm r0!, {r3-r5}\n" - "\tstm r1!, {r3-r5}\n" - "\tb _0801DE70\n" - "\t.align 2, 0\n" -"_0801DE2C: .4byte gUnknown_203B25C\n" -"_0801DE30: .4byte gUnknown_80DBFCC\n" -"_0801DE34: .4byte gUnknown_80DBFB0\n" -"_0801DE38:\n" - "\tbl CreateOthersMenu\n" - "\tmov r8, r4\n" - "\tldr r6, _0801DE88\n" - "\tmov r12, r6\n" - "\tmov r7, r8\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0x3\n" -"_0801DE48:\n" - "\tmov r0, r8\n" - "\tldr r1, [r0]\n" - "\tadds r1, r2\n" - "\tadds r1, 0xBC\n" - "\tmov r0, r12\n" - "\tldm r0!, {r4-r6}\n" - "\tstm r1!, {r4-r6}\n" - "\tldm r0!, {r4-r6}\n" - "\tstm r1!, {r4-r6}\n" - "\tadds r2, 0x18\n" - "\tsubs r3, 0x1\n" - "\tcmp r3, 0\n" - "\tbge _0801DE48\n" - "\tldr r1, [r7]\n" - "\tadds r1, 0xBC\n" - "\tldr r0, _0801DE8C\n" - "\tldm r0!, {r2-r4}\n" - "\tstm r1!, {r2-r4}\n" - "\tldm r0!, {r2,r5,r6}\n" - "\tstm r1!, {r2,r5,r6}\n" -"_0801DE70:\n" - "\tldr r1, [r7]\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0xBC\n" - "\tadds r1, 0x6C\n" - "\tbl sub_8012CAC\n" - "\tldr r0, [r7]\n" - "\tadds r0, 0xC8\n" - "\tmovs r1, 0xA\n" - "\tstrh r1, [r0]\n" - "\tb _0801DEAC\n" - "\t.align 2, 0\n" -"_0801DE88: .4byte gUnknown_80DBFB0\n" -"_0801DE8C: .4byte gUnknown_80DBFCC\n" -"_0801DE90:\n" - "\tldr r0, [r7]\n" - "\tlsls r1, r3, 1\n" - "\tadds r1, r3\n" - "\tlsls r1, 3\n" - "\tadds r0, r1\n" - "\tadds r0, 0xBC\n" - "\tadds r1, r2, 0\n" - "\tldm r1!, {r4-r6}\n" - "\tstm r0!, {r4-r6}\n" - "\tldm r1!, {r4-r6}\n" - "\tstm r0!, {r4-r6}\n" - "\tadds r3, 0x1\n" - "\tcmp r3, 0x3\n" - "\tble _0801DE90\n" -"_0801DEAC:\n" - "\tbl ResetUnusedInputStruct\n" - "\tldr r0, _0801DECC\n" - "\tldr r0, [r0]\n" - "\tadds r0, 0xBC\n" - "\tmovs r1, 0x1\n" - "\tmovs r2, 0x1\n" - "\tbl sub_800641C\n" - "\tpop {r3,r4}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_0801DECC: .4byte gUnknown_203B25C"); -} -#endif void sub_801DED0(void) { switch(gUnknown_203B25C->state) { case OPTIONS_MENU_INIT: case OPTIONS_MENU_MAIN: - gUnknown_203B25C->unk1C.unk0 = gOthers_MenuOption; - sub_8012D60(&gUnknown_203B25C->unk1C,gUnknown_203B25C->menuItems,0,gUnknown_203B25C->unkAC,gUnknown_203B25C->menuAction,0); + gUnknown_203B25C->menu.unk0 = gOthers_MenuOption; + sub_8012D60(&gUnknown_203B25C->menu,gUnknown_203B25C->menuItems,0,gUnknown_203B25C->unkAC,gUnknown_203B25C->menuAction,0); break; case OPTIONS_MENU_PRE_HINT_SELECTION: sub_801E3F0(0); @@ -458,8 +272,8 @@ void HandleOthersMenu(void) s32 menuAction; menuAction = 0; - if (sub_8012FD8(&gUnknown_203B25C->unk1C) == '\0') { - sub_8013114(&gUnknown_203B25C->unk1C,&menuAction); + if (sub_8012FD8(&gUnknown_203B25C->menu) == '\0') { + sub_8013114(&gUnknown_203B25C->menu,&menuAction); gUnknown_203B25C->menuAction = menuAction; } switch(menuAction) @@ -570,7 +384,7 @@ bool8 sub_801E198(struct GameOptions *optionsMenu) sub_8012D08(gUnknown_203B260->unk48,1); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B260->unk4C,1,1); - sub_8013818(&gUnknown_203B260->unk10,1,1,gUnknown_203B260->unk44); + sub_8013818(&gUnknown_203B260->input,1,1,gUnknown_203B260->unk44); nullsub_38(); CreateOptionsMenu(); return TRUE; @@ -591,7 +405,7 @@ u32 sub_801E218(void) PlayMenuSoundEffect(0); return 3; case INPUT_DPAD_LEFT: - if (gUnknown_203B260->unk28 == 0) + if (gUnknown_203B260->input.menuIndex == 0) { if (gUnknown_203B260->optionsMenu->windowColor == WINDOW_COLOR_BLUE) { gUnknown_203B260->optionsMenu->windowColor = WINDOW_COLOR_GREEN; @@ -604,7 +418,7 @@ u32 sub_801E218(void) } break; case INPUT_DPAD_RIGHT: - if(gUnknown_203B260->unk28 == 0) + if(gUnknown_203B260->input.menuIndex == 0) { if (gUnknown_203B260->optionsMenu->windowColor > WINDOW_COLOR_RED) { gUnknown_203B260->optionsMenu->windowColor = WINDOW_COLOR_BLUE; @@ -618,7 +432,7 @@ u32 sub_801E218(void) } // == 1 is needed for matching - if ((sub_80138B8(&gUnknown_203B260->unk10,1) != 0) || (flag == TRUE)) { + if ((sub_80138B8(&gUnknown_203B260->input,1) != 0) || (flag == TRUE)) { nullsub_38(); CreateOptionsMenu(); return 1; @@ -654,7 +468,7 @@ void CreateOptionsMenu(void) sub_8008C54(gUnknown_203B260->unk44); sub_80073B8(gUnknown_203B260->unk44); xxx_call_draw_string(0x10,0,gWindowBGTitle,gUnknown_203B260->unk44,0); - y = sub_8013800(&gUnknown_203B260->unk10,0); + y = sub_8013800(&gUnknown_203B260->input,0); xxx_call_draw_string(8,y,gUnknown_80DC064,gUnknown_203B260->unk44,0); switch(gUnknown_203B260->optionsMenu->windowColor) diff --git a/src/other_menus.c b/src/other_menus.c index 79c5c9892..9473c052d 100644 --- a/src/other_menus.c +++ b/src/other_menus.c @@ -8,6 +8,18 @@ #include "memory.h" #include "text.h" #include "menu_input.h" +#include "dungeon_global_data.h" +#include "pokemon.h" +#include "code_8094F88.h" + +struct unkSprite +{ + u16 unk0; + u16 unk2; + u16 unk4; + u16 unk6; +}; + struct unkStruct_203B35C { @@ -15,13 +27,26 @@ struct unkStruct_203B35C u32 unk0; u32 linkStatus; u32 state; - u8 fillC[0x1C - 0xC]; + struct unkSprite unkC; + u32 unk14; + u8 fill18[0x1C - 0x18]; struct MenuStruct unk1C[4]; struct UnkTextStruct2 unk15C[4]; - u8 unk1BC[4]; - u32 unk1C0[9]; + struct unkStruct_8035D94 unk1BC[2]; + struct unkStruct_203B480 unk1CC; + struct unkStruct_203B480 unk1FC; + struct unkStruct_203B480 unk22C; + struct unkStruct_203B480 unk25C; + struct unkStruct_203B480 unk28C; + struct PokemonStruct unk2BC; + struct unkStruct_203B480 unk314; + struct PokemonStruct unk344; + s32 unk39C; + u8 fill3A0[0x450 - 0x3A0]; + s32 unk450; }; -extern struct unkStruct_203B35C *gUnknown_203B35C; + +EWRAM_DATA_2 struct unkStruct_203B35C *gUnknown_203B35C = {0}; const struct UnkTextStruct2 gUnknown_80E653C = { 0x00, 0x00, 0x00, 0x00, @@ -440,13 +465,21 @@ extern void TransferBGPaletteBuffer(); extern void xxx_call_update_bg_vram(); extern void sub_8009908(); extern void xxx_call_update_bg_sound_input(); +extern s32 sub_8037D64(u32 mode, void *, void *); +extern s32 sub_80381F4(u32 mode, void *, void *); +extern void sub_8037810(void); +extern void sub_8011830(void); +extern s32 sub_8037B28(u32); +s32 sub_8035D3C(void); +extern s32 sub_8035D74(void); +extern void xxx_call_start_bg_music(void); +extern void xxx_draw_string_80144C4(void); +extern void AddSprite(struct unkSprite *, u32, u32, u32); - -#ifdef NONMATCHING void sub_8036FDC(s32 param_1) { - int iVar3; - int iVar4; + int index1; + int index2; ResetUnusedInputStruct(); sub_800641C(0,1,1); @@ -457,143 +490,22 @@ void sub_8036FDC(s32 param_1) } gUnknown_203B35C->unk0 = param_1; - gUnknown_203B35C->linkStatus = 0; + gUnknown_203B35C->linkStatus = COMMS_GOOD; gUnknown_203B35C->state = 0; - iVar3 = 0; - do { - gUnknown_203B35C->unk1C0[iVar3 * 2] = 0; - // Add statements of index flip but ends in same result - gUnknown_203B35C->unk1BC[iVar3 * 8] = 0; - iVar3 = iVar3 + 1; - } while (iVar3 < 2); - for(iVar4 = 0; iVar4 < 4; iVar4++){ - gUnknown_203B35C->unk15C[iVar4] = gUnknown_80E653C; + for(index1 = 0; index1 < 2; index1++) + { + gUnknown_203B35C->unk1BC[index1].numItems = 0; + gUnknown_203B35C->unk1BC[index1].itemIndex.itemIndex_u8 = ITEM_NOTHING; + } + for(index2 = 0; index2 < 4; index2++){ + gUnknown_203B35C->unk15C[index2] = gUnknown_80E653C; } ResetUnusedInputStruct(); sub_800641C(gUnknown_203B35C->unk15C,1,1); - SetMenuItems(gUnknown_203B35C->unk1C,gUnknown_203B35C->unk15C,0,&gUnknown_80E6CD0,gUnknown_80E6CE8,0, - 6,0); + SetMenuItems(gUnknown_203B35C->unk1C,gUnknown_203B35C->unk15C,0,&gUnknown_80E6CD0,gUnknown_80E6CE8,0,6,0); sub_8035CF4(gUnknown_203B35C->unk1C,0,1); sub_80376CC(); } -#else -NAKED -void sub_8036FDC(s32 param_1) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r8\n" - "\tpush {r7}\n" - "\tsub sp, 0x10\n" - "\tadds r6, r0, 0\n" - "\tbl ResetUnusedInputStruct\n" - "\tmovs r0, 0\n" - "\tmovs r1, 0x1\n" - "\tmovs r2, 0x1\n" - "\tbl sub_800641C\n" - "\tmovs r0, 0\n" - "\tbl ResetSprites\n" - "\tldr r5, _080370C0\n" - "\tldr r0, [r5]\n" - "\tcmp r0, 0\n" - "\tbne _08037016\n" - "\tldr r4, _080370C4\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0x8\n" - "\tbl MemoryAlloc\n" - "\tstr r0, [r5]\n" - "\tmovs r1, 0\n" - "\tadds r2, r4, 0\n" - "\tbl MemoryFill8\n" -"_08037016:\n" - "\tldr r0, [r5]\n" - "\tstr r6, [r0]\n" - "\tmovs r1, 0\n" - "\tstr r1, [r0, 0x4]\n" - "\tstr r1, [r0, 0x8]\n" - "\tmovs r3, 0\n" - "\tadds r7, r5, 0\n" - "\tmovs r6, 0xE0\n" - "\tlsls r6, 1\n" - "\tmovs r4, 0\n" - "\tmovs r5, 0xDE\n" - "\tlsls r5, 1\n" -"_0803702E:\n" - "\tldr r0, [r7]\n" - "\tlsls r2, r3, 3\n" - "\tadds r1, r0, r6\n" - "\tadds r1, r2\n" - "\tstr r4, [r1]\n" - "\tadds r0, r2\n" - "\tadds r0, r5\n" - "\tstrb r4, [r0]\n" - "\tadds r3, 0x1\n" - "\tcmp r3, 0x1\n" - "\tble _0803702E\n" - "\tldr r0, _080370C0\n" - "\tmov r12, r0\n" - "\tmovs r5, 0xAE\n" - "\tlsls r5, 1\n" - "\tmov r8, r5\n" - "\tldr r4, _080370C8\n" - "\tmovs r3, 0\n" - "\tmovs r2, 0x3\n" -"_08037054:\n" - "\tmov r6, r12\n" - "\tldr r1, [r6]\n" - "\tadds r1, r3\n" - "\tadd r1, r8\n" - "\tadds r0, r4, 0\n" - "\tldm r0!, {r5-r7}\n" - "\tstm r1!, {r5-r7}\n" - "\tldm r0!, {r5-r7}\n" - "\tstm r1!, {r5-r7}\n" - "\tadds r3, 0x18\n" - "\tsubs r2, 0x1\n" - "\tcmp r2, 0\n" - "\tbge _08037054\n" - "\tmovs r6, 0\n" - "\tbl ResetUnusedInputStruct\n" - "\tldr r5, _080370C0\n" - "\tldr r0, [r5]\n" - "\tmovs r4, 0xAE\n" - "\tlsls r4, 1\n" - "\tadds r0, r4\n" - "\tmovs r1, 0x1\n" - "\tmovs r2, 0x1\n" - "\tbl sub_800641C\n" - "\tldr r1, [r5]\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0x1C\n" - "\tadds r1, r4\n" - "\tldr r3, _080370CC\n" - "\tldr r2, _080370D0\n" - "\tstr r2, [sp]\n" - "\tstr r6, [sp, 0x4]\n" - "\tmovs r2, 0x6\n" - "\tstr r2, [sp, 0x8]\n" - "\tstr r6, [sp, 0xC]\n" - "\tmovs r2, 0\n" - "\tbl SetMenuItems\n" - "\tldr r0, [r5]\n" - "\tadds r0, 0x1C\n" - "\tmovs r1, 0\n" - "\tmovs r2, 0x1\n" - "\tbl sub_8035CF4\n" - "\tbl sub_80376CC\n" - "\tadd sp, 0x10\n" - "\tpop {r3}\n" - "\tmov r8, r3\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_080370C0: .4byte gUnknown_203B35C\n" -"_080370C4: .4byte 0x00000504\n" -"_080370C8: .4byte gUnknown_80E653C\n" -"_080370CC: .4byte gUnknown_80E6CD0\n" -"_080370D0: .4byte gUnknown_80E6CE8"); -} -#endif void sub_80370D4(void) { @@ -753,3 +665,209 @@ struct unkStruct_203B35C *sub_80373F4(void) { return gUnknown_203B35C; } + +void sub_8037400(void) +{ + u8 mailIndex; + void *r5; + void *r6; + s32 species; + struct unkStruct_8035D94 *puVar5; + struct unkStruct_8035D94 *puVar6; + + r6 = NULL; + r5 = NULL; + sub_8037810(); + sub_8011830(); + gUnknown_203B35C->linkStatus = sub_8037B28(gUnknown_203B35C->unk0); + if (gUnknown_203B35C->linkStatus == COMMS_GOOD) + { + switch(gUnknown_203B35C->unk0) { + case 10: + r6 = &gUnknown_203B35C->unk39C; + r5 = &gUnknown_203B35C->unk450; + break; + case 9: + r6 = &gUnknown_203B35C->unk39C; + r5 = &gUnknown_203B35C->unk450; + break; + case 0: + { +#ifndef NONMATCING + register u32 temp1 asm("r1"); +#else + u32 temp1; +#endif + puVar5 = sub_8035D94(); + puVar6 = &gUnknown_203B35C->unk1BC[0]; + temp1 = puVar5->numItems; + puVar6->itemIndex.itemIndex_u32 = puVar5->itemIndex.itemIndex_u32; + puVar6->numItems = temp1; + } + r6 = &gUnknown_203B35C->unk1BC[0]; + r5 = &gUnknown_203B35C->unk1BC[1]; + break; + case 1: + r6 = &gUnknown_203B35C->unk1BC[0]; + r5 = &gUnknown_203B35C->unk1BC[1]; + break; + case 7: + r6 = &gUnknown_203B35C->unk1CC; + r5 = &gUnknown_203B35C->unk1FC; + break; + case 6: + mailIndex = sub_8035D74(); + gUnknown_203B35C->unk1CC = *GetMailatIndex(mailIndex); + r6 = &gUnknown_203B35C->unk1CC; + r5 = &gUnknown_203B35C->unk1FC; + break; + case 3: + r6 = &gUnknown_203B35C->unk22C; + r5 = &gUnknown_203B35C->unk25C; + break; + case 2: + mailIndex = sub_8035D74(); + gUnknown_203B35C->unk22C = *GetMailatIndex(mailIndex); + r6 = &gUnknown_203B35C->unk22C; + r5 = &gUnknown_203B35C->unk25C; + break; + case 4: + mailIndex = sub_8035D74(); + gUnknown_203B35C->unk28C = *GetMailatIndex(mailIndex); + if( sub_8035D3C() << 0x10 != 0xffff0000) + { + species = sub_8035D3C(); + gUnknown_203B35C->unk2BC = gRecruitedPokemonRef->pokemon[(s16)species]; + } + r6 = &gUnknown_203B35C->unk28C; + r5 = &gUnknown_203B35C->unk314; + break; + case 5: + r6 = &gUnknown_203B35C->unk28C; + r5 = &gUnknown_203B35C->unk314; + break; + } + gUnknown_203B35C->linkStatus = sub_8037D64(gUnknown_203B35C->unk0, r6, r5); + + if (gUnknown_203B35C->linkStatus == COMMS_GOOD) + { + switch(gUnknown_203B35C->unk0) { + case 0: + case 1: + r6 = &gUnknown_203B35C->unk1BC[0]; + r5 = &gUnknown_203B35C->unk1BC[1]; + break; + case 2: + case 3: + r6 = &gUnknown_203B35C->unk22C; + r5 = &gUnknown_203B35C->unk25C; + break; + case 4: + case 5: + r6 = &gUnknown_203B35C->unk28C; + r5 = &gUnknown_203B35C->unk314; + break; + case 6: + case 7: + r6 = &gUnknown_203B35C->unk1CC; + r5 = &gUnknown_203B35C->unk1FC; + break; + case 9: + case 10: + r6 = &gUnknown_203B35C->unk39C; + r5 = &gUnknown_203B35C->unk450; + break; + } + gUnknown_203B35C->linkStatus = sub_80381F4(gUnknown_203B35C->unk0, r6, r5); + } + } + xxx_call_start_bg_music(); +} + +void sub_80376CC(void) +{ +#ifdef NONMATCHING + u32 r0; + u32 r2; +#else + register u32 r0 asm("r0"); + register u32 r2 asm("r2"); +#endif + u32 r1; + u32 r4; + + + r1 = gUnknown_203B35C->unkC.unk0; + r0 = 0xfeff; + r0 &= r1; + r0 &= 0xfdff; + r0 &= 0xf3ff; + r0 &= 0xefff; + r0 &= 0xdfff; + r2 = 0x4000; + r0 &= 0x3fff; + r0 |= r2; + gUnknown_203B35C->unkC.unk0 = r0; + + r2 = 0x3F0; + r1 = gUnknown_203B35C->unkC.unk4; + r0 = 0xFC00; + r0 &= r1; + r0 |= r2; + r0 &= 0xf3ff; + r2 = 0xF; + r4 = 0xF000; + r0 &= 0xfff; + r0 |= r4; + + gUnknown_203B35C->unkC.unk4 = r0; + r0 = 0; + gUnknown_203B35C->unkC.unk2 = r0; + + r1 = 0xC00; + r0 = gUnknown_203B35C->unkC.unk6; + r2 &= r0; + r2 |= r1; + gUnknown_203B35C->unkC.unk6 = r2; + +} + +void sub_8037748(void) +{ + u32 temp2; + + gUnknown_203B35C->unkC.unk2 = (gUnknown_203B35C->unkC.unk2 & 0xfe00) | 0x70; + + temp2 = 0x680; + gUnknown_203B35C->unkC.unk6 = (gUnknown_203B35C->unkC.unk6 & 0xf) | temp2; + + if ((gUnknown_203B35C->unk14 & 8) != 0) { + AddSprite(&gUnknown_203B35C->unkC,0x100,0,0x0); + } + xxx_draw_string_80144C4(); + gUnknown_203B35C->unk14++; +} + +u32 sub_8037798(void) +{ + u32 nextMenu = MENU_NO_SCREEN_CHANGE; + switch(gUnknown_203B35C->unk0) { + case 0: + case 1: + nextMenu = MENU_MAIN_SCREEN; + break; + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + nextMenu = (gUnknown_203B35C->linkStatus == COMMS_GOOD) ? 0x2A : MENU_MAIN_SCREEN; + break; + case 9: + case 10: + nextMenu = (gUnknown_203B35C->linkStatus == COMMS_GOOD) ? 0x2B : MENU_WONDER_MAIL; + break; + } + return nextMenu; +} diff --git a/src/other_menus_1.c b/src/other_menus_1.c new file mode 100644 index 000000000..04ff9e6b4 --- /dev/null +++ b/src/other_menus_1.c @@ -0,0 +1,477 @@ +#include "global.h" +#include "constants/communication_error_codes.h" +#include "constants/dungeon.h" +#include "dungeon_global_data.h" +#include "pokemon.h" +#include "code_8094F88.h" +#include "save.h" +#include "team_inventory.h" +#include "main_menu.h" +#include "memory.h" + +extern s32 gCommsTimeout; // Counts to 100 and then errors if other player hasn't connected +extern s32 gUnknown_202EC48; +extern u32 gUnknown_202EC40[2]; + +extern void sub_800D494(void); +extern s32 sub_800D33C(void); +extern void sub_800D520(void); +extern u8 sub_800D600(void); +extern void sub_80373C4(void); +extern void sub_800D59C(s32 *, u32); +extern void sub_800D570(void); +extern void sub_800D510(void); +extern u8 sub_800D588(void); +extern struct UnkStruct_203B184 *gUnknown_203B184; +extern void sub_800D670(u32, s32 *, u32); +extern void sub_800D68C(u32); + +u32 sub_8037C10(u8 param_1) +{ + u32 ret; + + if (param_1 != 0) + { + if (sub_800D588()) + { + ret = gUnknown_202EC40[0]; + } + else + { + ret = gUnknown_202EC40[1]; + } + } + else if (sub_800D588()) + { + ret = gUnknown_202EC40[1]; + } + else + { + ret = gUnknown_202EC40[0]; + } + return ret; +} + +void sub_8037C44(s32 mode, void *data) +{ + s32 index; + + for(index = 0; index < 2; index++) + { + sub_800D68C(index); + } + switch(mode) { + case 0: + case 1: + sub_800D59C(data, sizeof(struct unkStruct_8035D94)); + break; + case 2: + case 3: + case 6: + case 7: + sub_800D59C(data, sizeof(struct unkStruct_203B480)); + break; + case 4: + case 5: + sub_800D59C(data, sizeof(struct WonderMailStruct_203B2C0_sub)); + break; + case 9: + case 10: + sub_800D59C(data, 0xb4); + break; + } +} + +void sub_8037CC4(s32 mode, void *param_2, void *param_3) +{ + switch(mode) + { + case 0: + case 1: + sub_800D670(0, param_2, sizeof(struct unkStruct_8035D94)); + sub_800D670(1, param_3, sizeof(struct unkStruct_8035D94)); + break; + case 2: + case 3: + case 6: + case 7: + sub_800D670(0, param_2, sizeof(struct unkStruct_203B480)); + sub_800D670(1, param_3, sizeof(struct unkStruct_203B480)); + break; + case 4: + case 5: + sub_800D670(0, param_2, sizeof(struct WonderMailStruct_203B2C0_sub)); + sub_800D670(1, param_3, sizeof(struct WonderMailStruct_203B2C0_sub)); + break; + case 9: + case 10: + sub_800D670(0, param_2, 0xb4); + sub_800D670(1, param_3, 0xb4); + break; + } +} + +// TODO: same as sub_80381F4 +s32 sub_8037D64(u32 mode, void * param_2, void * param_3) +{ + u32 iVar2; + s32 linkStatus; + + iVar2 = 0; + linkStatus = COMMS_GOOD; + gUnknown_202EC48 = 0; + sub_800D494(); + sub_8037C44(mode, param_2); + goto _first; +_start: + while (iVar2 - 3 > 2) { + if (99 < gUnknown_202EC48) { + sub_800D520(); + sub_800D510(); + return COMMS_NOT_READY; + } + gUnknown_202EC48++; + _first: + sub_80373C4(); + iVar2 = sub_800D33C(); + sub_800D570(); + if (iVar2 == 2) { + if (sub_800D600() == 0) { + sub_800D520(); + sub_800D510(); + linkStatus = 5; + } + else { + linkStatus = COMMS_GOOD; + } + goto _end; + } + else + goto _start; + } + sub_800D520(); + sub_800D510(); + return 1; +_end: + sub_8037CC4(mode, param_2, param_3); + return linkStatus; +} + +s32 sub_8037DF0(void) +{ + s32 linkStatus; + s32 iStack_10; + s32 iStack_c; + + linkStatus = COMMS_GOOD; + sub_800D670(0,&iStack_10,4); + sub_800D670(1,&iStack_c,4); + if ((iStack_10 != 0) || (iStack_c != 0)) { + linkStatus = (!sub_800D588()) ? iStack_c : iStack_10; + if (linkStatus == COMMS_GOOD) { + linkStatus = 0xe; + } + } + return linkStatus; +} + +void sub_8037E38(struct unkStruct_8035D94 *param_1,struct unkStruct_8035D94 *param_2) +{ + struct unkStruct_8035D94 *r3; + struct unkStruct_8035D94 *r4; + u32 load; + + r4 = sub_800D588() == 0 ? param_2 : param_1; + r3 = sub_800D588() == 0 ? param_1 : param_2; + + if ((r4->itemIndex).itemIndex_u8 == (r3->itemIndex).itemIndex_u8) { + load = gTeamInventory_203B460->teamStorage[r4->itemIndex.itemIndex_u8]; + load += r3->numItems; + gTeamInventory_203B460->teamStorage[r4->itemIndex.itemIndex_u8] = load; + } + else { + load = gTeamInventory_203B460->teamStorage[r3->itemIndex.itemIndex_u8]; + load += r3->numItems; + gTeamInventory_203B460->teamStorage[r3->itemIndex.itemIndex_u8] = load; + } +} + +void sub_8037E90(struct unkStruct_203B480 *param_1, struct unkStruct_203B480 *param_2) +{ + if(sub_800D588() == 0) + { + param_2 = param_1; + } + param_2->mailType = 2; + sub_80951BC(param_2); + sub_8095274(param_2->unk10.unk10); +} + +void nullsub_53(void *param_1, void *param_2) +{} + +void sub_8037EBC(struct WonderMailStruct_203B2C0_sub *param_1, struct WonderMailStruct_203B2C0_sub *param_2) { + struct unkStruct_203B480 *mail; + struct WonderMailStruct_203B2C0_sub *puVar2; + + if(sub_800D588() == 0) + { + puVar2 = param_1; + } + else + { + puVar2 = param_2; + } + mail = GetMailatIndex(GetMailIndex(1, (puVar2->mail).unk10.unk10)); + *mail = (*puVar2).mail; + mail->mailType = 5; + sub_80951FC(mail); + mail->mailType = 7; + + if(puVar2->pokemon.speciesNum != MONSTER_NONE) + { + gUnknown_203B484->unk0 = puVar2->mail.unk10.unk10; + gUnknown_203B484->unk4 = puVar2->pokemon; + gUnknown_203B484->unk4.dungeonLocation.id = DUNGEON_UNKNOWN_WORLD; + gUnknown_203B484->unk4.dungeonLocation.floor = 1; + } + else + { + MemoryFill8((u8 *)gUnknown_203B484, 0, sizeof(struct unkStruct_203B484)); + gUnknown_203B484->unk4.speciesNum = MONSTER_NONE; + } +} + +void sub_8037F4C(struct unkStruct_203B480 *param_1, struct unkStruct_203B480 *param_2) +{ + struct unkStruct_203B480 *mail; + struct MainMenu *mainMenu; + + if(sub_800D588() == 0) + { + param_2 = param_1; + } + mail = GetMailatIndex(GetMailIndex(4, param_2->unk10.unk10)); + *mail = *param_2; + mail->mailType = 6; + mainMenu = GetMainMenu(); + if(mainMenu) + { + mainMenu->unk3A = 1; + } +} + +void sub_8037F9C(u32 mode, void *param_2, void *param_3) +{ + switch(mode) + { + case 0: + case 1: + sub_8037E38(param_2, param_3); + break; + case 7: + sub_8037F4C(param_2, param_3); + break; + case 3: + sub_8037E90(param_2, param_3); + break; + case 5: + sub_8037EBC(param_2, param_3); + break; + case 10: + nullsub_53(param_2, param_3); + break; + } +} + +s32 sub_8038014(struct unkStruct_8035D94 *param_1,struct unkStruct_8035D94 *param_2) +{ + s32 linkStatus; + s32 r2; + struct unkStruct_8035D94 *r3; + struct unkStruct_8035D94 *r4; + + r4 = sub_800D588() == 0 ? param_2 : param_1; + r3 = sub_800D588() == 0 ? param_1 : param_2; + + if ((r4->itemIndex).itemIndex_u8 == (r3->itemIndex).itemIndex_u8) { + r2 = gTeamInventory_203B460->teamStorage[r4->itemIndex.itemIndex_u8]; + r2 += r3->numItems; + if (r2 > 999) { + linkStatus = COMMS_NO_ROOM_STORAGE; + } + else + linkStatus = COMMS_GOOD; + } + else { + r2 = gTeamInventory_203B460->teamStorage[r3->itemIndex.itemIndex_u8]; + r2 += r3->numItems; + if (r2 > 999) { + linkStatus = COMMS_NO_ROOM_STORAGE; + } + else + linkStatus = COMMS_GOOD; + + } + return linkStatus; +} + +s32 sub_8038078(struct unkStruct_203B480 *param_1,struct unkStruct_203B480 *param_2) +{ + u32 uVar2; + u32 uVar3; + + if (sub_800D588() == 0) { + param_2 = param_1; + } + uVar3 = (param_2->unk10).unk10; + if (gUnknown_203B184 != NULL) { + uVar2 = gUnknown_203B184->unk050; + } + else { + uVar2 = sub_8011C34(); + } + if (HasMail(4,uVar3) && (param_2->unk28 == uVar2)) { + return COMMS_GOOD; + } + else { + return COMMS_NOT_ELIGIBLE_2; + } +} + +s32 sub_80380C4(struct unkStruct_203B480 *param_1,struct unkStruct_203B480 *param_2) +{ + u32 uVar2; + struct unkStruct_203B480 *mail; + + if (sub_800D588() == 0) { + mail = param_1; + } + else + mail = param_2; + + uVar2 = mail->unk10.unk10; + if (HasMail(2,uVar2) || HasMail(4,uVar2) || HasMail(6,uVar2)) + { + return COMMS_DUPLICATE_MAIL; + } + if(sub_8095298(mail->unk10.unk10)) + { + return COMMS_DUPLICATE_MAIL; + } + else if (FindOpenMailSlot() == -1) + { + return COMMS_NO_ROOM_MAIL; + } + else + { + return COMMS_GOOD; + } +} + +s32 sub_803812C(struct unkStruct_203B480 *param_1, struct unkStruct_203B480 *param_2) +{ + if (sub_800D588() == 0) { + param_2 = param_1; + } + if (HasMail(1, (param_2->unk10).unk10)) { + return COMMS_GOOD; + } + else { + return COMMS_NOT_ELIGIBLE_1; + } +} + +s32 sub_8038158(void *param_1, void *param_2) +{ + return COMMS_GOOD; +} + +s32 sub_803815C(u32 mode, void *param_2, void *param_3) +{ + s32 linkStatus; + + linkStatus = COMMS_GOOD; + switch(mode) { + case 0: + case 1: + linkStatus = sub_8038014(param_2, param_3); + break; + case 7: + linkStatus = sub_8038078(param_2, param_3); + break; + case 3: + linkStatus = sub_80380C4(param_2, param_3); + break; + case 5: + linkStatus = sub_803812C(param_2, param_3); + break; + case 10: + linkStatus = sub_8038158(param_2, param_3); + break; + } + return linkStatus; +} + +void sub_80381DC(u32 mode, void * param_2, void * param_3) +{ + sub_8037F9C(mode, param_2, param_3); +} + +s32 sub_80381E8(u32 mode, void * param_2, void * param_3) +{ + return sub_803815C(mode, param_2, param_3); +} + +// TODO: clean this up +s32 sub_80381F4(u32 mode, void * param_2, void * param_3) +{ + u32 iVar2; + s32 linkStatus; + + iVar2 = 0; + linkStatus = sub_803815C(mode, param_2, param_3); + gCommsTimeout = 0; + sub_800D494(); + sub_800D59C(&linkStatus, 4); + goto _first; +_start: + while (iVar2 - 3 > 2) { + if (99 < gCommsTimeout) { + sub_800D520(); + sub_800D510(); + return COMMS_NOT_READY; + } + gCommsTimeout++; + _first: + sub_80373C4(); + iVar2 = sub_800D33C(); + sub_800D570(); + if (iVar2 == 2) { + if (sub_800D600() != 0) { + linkStatus = sub_8037DF0(); + } + else { + sub_800D520(); + sub_800D510(); + linkStatus = 5; + } + if (linkStatus != COMMS_GOOD) { + sub_800D520(); + sub_800D510(); + } + else { + sub_8037F9C(mode, param_2, param_3); + } + goto _end; + } + else + goto _start; + } + sub_800D520(); + sub_800D510(); + return 1; +_end: + sub_800D520(); + return linkStatus; +} diff --git a/src/party_list_menu.c b/src/party_list_menu.c index 78ef0a83e..1d0754fbe 100644 --- a/src/party_list_menu.c +++ b/src/party_list_menu.c @@ -6,6 +6,7 @@ #include "memory.h" #include "pokemon.h" #include "text.h" +#include "text_util.h" #include "team_inventory.h" #include "constants/move.h" #include "code_800D090.h" @@ -171,8 +172,6 @@ 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_format_and_draw(s32, s32, const u8 *, ...); extern s32 sub_80144A4(s32 *); diff --git a/src/personality_test.c b/src/personality_test.c index 2f1919a37..828749efb 100644 --- a/src/personality_test.c +++ b/src/personality_test.c @@ -13,6 +13,7 @@ #include "text.h" #include "text_util.h" #include "menu.h" +#include "menu_input.h" enum { @@ -37,7 +38,6 @@ enum EWRAM_DATA_2 struct PersonalityTestTracker *gPersonalityTestTracker = {0}; EWRAM_DATA_2 struct PersonalityStruct_203B404 *gUnknown_203B404 = {0}; -extern void sub_801317C(u32 *); extern void sub_8001024(u32 *); extern s32 sub_8094E4C(void); extern void sub_8094D28(s32); @@ -61,16 +61,9 @@ extern void sub_800836C(u32, u8 *r0, u32); extern void SetBGPaletteBufferColorArray(s32 index, u8 *colorArray); extern void RedrawPartnerSelectionMenu(void); -extern void sub_8013818(struct MenuInputStruct *r0, s32, u32, u32); -extern u32 GetKeyPress(struct MenuInputStruct *r0); -extern u8 sub_80138B8(struct MenuInputStruct *r0, u32); extern void PlayMenuSoundEffect(u32); - -extern void sub_8013984(struct MenuInputStruct *r0); -u32 sub_8013800(struct MenuInputStruct *r0, u32); -extern void AddMenuCursorSprite(struct MenuInputStruct *r0); extern u32 sub_80095E4(s16, u32); extern struct GameOptions *gGameOptionsRef; @@ -410,7 +403,7 @@ const char personality_test_fill[] = "pksdir0"; u8 CreateTestTracker(void) { gPersonalityTestTracker = MemoryAlloc(sizeof(struct PersonalityTestTracker),8); - sub_801317C(&gPersonalityTestTracker->unkb4); + sub_801317C(&gPersonalityTestTracker->input); InitializeTestStats(); sub_8099690(1); return 1; diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c index 7c30f4a0f..17f4205a2 100644 --- a/src/pokemon_mid.c +++ b/src/pokemon_mid.c @@ -7,6 +7,7 @@ #include "constants/colors.h" #include "constants/move_id.h" #include "code_800D090.h" +#include "text_util.h" extern struct MonsterDataEntry *gMonsterParameters; extern const char gUnknown_8107600[]; @@ -29,10 +30,8 @@ extern struct LevelData gLevelCurrentData[]; extern s16 GetBaseSpecies(s16); -extern void sub_80922B4(u8 *, u8 *, s32); extern int sprintf(char *, const char *, ...); extern u32 ReturnIntFromChar(u8 r0); -extern void CopyStringtoBuffer(char *r0, char *r1); extern void CopyAndResetMoves(void*, void*); extern void sub_80943A0(void*, s32); extern void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct*, struct PokemonStruct2*); diff --git a/src/pokemon_news.c b/src/pokemon_news.c index 1dfc5a2e3..625d49946 100644 --- a/src/pokemon_news.c +++ b/src/pokemon_news.c @@ -32,8 +32,7 @@ struct unkStruct_203B2D4 u32 unk20; u32 unk24; struct UnkTextStruct2 unk28[4]; - u32 unk88; - u8 fill8C[0x94 - 0x8C]; + struct MenuInputStructSub unk88; }; extern struct unkStruct_203B2D4 *gUnknown_203B2D4; @@ -155,26 +154,18 @@ extern u16 gUnknown_203B2DC; extern s32 GetNumPKMNNews(void); extern void sub_802B880(void); extern void CreatePKMNNewsMenu(void); -extern void sub_8013818(void *, u32, u32, u32); -extern u8 sub_80138B8(void *, u32); extern void PlayMenuSoundEffect(u32); -extern s32 GetKeyPress(struct MenuInputStruct *); -extern void sub_8013660(struct MenuInputStruct *); -extern void AddMenuCursorSprite(struct MenuInputStruct *); extern void sub_802BCC4(void); extern void sub_802BB14(u32); -extern void sub_801317C(u32 *); extern u8 HasNoMailinMailbox(void); extern void sub_802BF30(void); extern void CreateMailMenu(void); extern s32 CountEmptyMailSlots(void); -extern void sub_8013848(struct MenuInputStruct*, s32, u32, u32); void sub_802BB28(void); extern void sub_802BB98(void); extern void sub_802BC08(void); extern void sub_802BB28(void); extern void sub_8013E54(void); -extern s32 sub_8012A64(u32 *, u32); extern char gUnknown_202E5D8[0x50]; extern char gAvailablePokemonNames[0x50]; extern void sub_8008C54(u32); @@ -183,8 +174,6 @@ extern void sub_802BC7C(void); extern void sub_80073E0(u32); extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); extern void sub_803B6B0(u32, u32, u32, u32); -extern s32 sub_8013800(struct MenuInputStruct *, s32); -extern void sub_8013984(struct MenuInputStruct *); extern struct PokemonStruct *sub_808D3BC(void); extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); diff --git a/src/post_office_guide.c b/src/post_office_guide.c index c70c969ec..b0a2a6d5f 100644 --- a/src/post_office_guide.c +++ b/src/post_office_guide.c @@ -7,7 +7,9 @@ #include "memory.h" #include "text.h" #include "wonder_mail.h" +#include "code_800D090.h" #include "code_8094F88.h" +#include "menu_input.h" struct PostOfficeHelper { @@ -178,7 +180,6 @@ extern u8 gAvailablePokemonNames[]; extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, struct OpenedFile **r5, u32); -extern u32 sub_8012A64(struct MenuInputStructSub *, u32); extern void PlayMenuSoundEffect(u32); extern void sub_8031A84(); extern void DisplayMissionObjectives(); @@ -189,13 +190,11 @@ extern u8 sub_8099394(volatile u8 *); extern struct WonderMail *GetJobSlotInfo(u8); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern void sprintfStatic(char *buffer, const char *text, ...); extern void sub_803B6B0(u32, u32, u32, u32); extern s16 sub_80A2688(u8 r0); extern u8 sub_80992E0(s16 *, s16 *); extern void sub_8031A2C(void); -extern void sub_801317C(void *); void UpdateHelperPelipperState(u8); void HandlePostOfficeHelpStartMenuSelection(); @@ -208,8 +207,6 @@ extern void HandlePostOfficeHelpGetHelpMenuSelection(); extern void ReturnToGetHelpMenu(); extern s32 sub_80144A4(s32 *); extern s32 CountJobsinDungeon(u8); -extern void sub_8012D08(struct UnkTextStruct2 *, s32); - u32 CreateHelperPelipperMenu(s16 speciesID) { diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index 7e4aa53f1..62c50d584 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -11,10 +11,12 @@ #include "code_8094F88.h" #include "wonder_mail.h" #include "menu_input.h" +#include "dungeon.h" +#include "main_menu.h" #define RESCUE_PASSWORD_SIZE 0x36 -EWRAM_DATA u32 gUnknown_202EC4C = {0}; +EWRAM_DATA s32 gCommsTimeout = {0}; EWRAM_DATA u8 gRescuePasswordBuffer[RESCUE_PASSWORD_SIZE] = {0}; extern struct unkStruct_203B484 *gUnknown_203B484; @@ -243,32 +245,23 @@ static const u8 fill0[] = "pksdir0"; extern s32 sub_8035D74(void); extern void sub_80151C0(u32, u8 *); extern void sub_8031D70(u32, u32); -extern u32 ConvertMenutoRescuePasswordState(u32); -extern void sub_8039174(void); extern void sub_80155F0(void); extern void sub_8031E10(void); -extern void DisplayPasswordAcceptScreen(void); - - -extern u32 sub_8039068(u32, u8 *passwordBuffer, struct unkStruct_203B480 *r0); - extern u32 sub_80154F0(void); extern u32 sub_8031DCC(void); -extern void sub_80391F8(void); -extern void sub_8031E00(); -extern void DisplayRescuePasswordError(u32); -extern struct MainMenu *GetMainMenu(void); - - +extern void sub_8031E00(void); extern void SetMenuItems(struct MenuStruct *, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32); extern void sub_8035CF4(struct MenuStruct *r0, u32, u32); -bool8 sub_8095298(s32); -bool8 sub_803D204(u8 *, struct unkStruct_203B480 *); -extern s32 GetDungeonFloorCount(u8); - extern void AddSprite(struct unkSprite *, u32, u32, u32); extern void xxx_draw_string_80144C4(void); +void DisplayRescuePasswordError(u32 error); +void sub_8039174(void); +void DisplayPasswordAcceptScreen(void); +u32 sub_8039068(u32, u8 *passwordBuffer, struct unkStruct_203B480 *r0); +void sub_80391F8(void); +bool8 sub_803D204(u8 *, struct unkStruct_203B480 *); +u32 ConvertMenutoRescuePasswordState(u32); void CreateRescuePasswordMenu(u32 currMenu) { @@ -314,7 +307,7 @@ void CreateRescuePasswordMenu(u32 currMenu) temp = GetMailatIndex(0x1F); MemoryFill8((u8 *)temp, 0, sizeof(struct unkStruct_203B480)); temp->mailType = 2; - temp->unk20.id = ITEM_NOTHING; + temp->item.id = ITEM_NOTHING; sub_8031D70(0x1F, 0); break; case MENU_RESCUE_PASSWORD_ENTRY: @@ -647,7 +640,7 @@ u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_203B480 *para if ( (!sub_803D204(passwordBuffer, param_3)) || (WONDER_MAIL_TYPE_OKD < param_3->mailType) || (param_3->dungeon.floor >= GetDungeonFloorCount(param_3->dungeon.id)) || (param_3->clientSpecies == MONSTER_NONE) || (MONSTER_RAYQUAZA_CUTSCENE < param_3->clientSpecies) || - (IsInvalidItemReward(param_3->unk20.id))) { + (IsInvalidItemReward(param_3->item.id))) { return PASSWORD_ENTRY_INCORRECT_PASSWORD; } else @@ -760,4 +753,4 @@ void sub_80391F8(void) } xxx_draw_string_80144C4(); gRescuePasswordMenu->unk210 += 1; -} \ No newline at end of file +} diff --git a/src/rescue_team_info.c b/src/rescue_team_info.c index cd3c8f02c..9d0153b5f 100644 --- a/src/rescue_team_info.c +++ b/src/rescue_team_info.c @@ -1,16 +1,16 @@ #include "global.h" #include "rescue_team_info.h" #include "code_8092334.h" +#include "text_util.h" EWRAM_DATA_2 struct RescueTeamData *gRescueTeamInfoRef = {0}; EWRAM_DATA struct RescueTeamData gRescueTeamInfo = {0}; extern bool8 sub_80023E4(u32); -extern void sub_80922B4(u8 *buffer, u8 *string, s32 size); extern void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size); extern const u8 *gRescueTeamRanks[]; -extern s32 gRescueRankMaxPoints[7]; +extern s32 gRescueRankMaxPoints[MAX_TEAM_RANKS]; extern u8 gTeamNamePlaceholder[0x8]; // Pokemon void LoadRescueTeamInfo(void) diff --git a/src/save_menu.c b/src/save_menu.c index 487a7a8a8..13281deb7 100644 --- a/src/save_menu.c +++ b/src/save_menu.c @@ -26,7 +26,7 @@ struct unkStruct_203B360 u32 unk1B0; // Sprite count? }; -extern struct unkStruct_203B360 *gUnknown_203B364; +EWRAM_DATA_2 struct unkStruct_203B360 *gUnknown_203B364 = {0}; const struct UnkTextStruct2 gUnknown_80E6F20 = { diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index f8d3866b0..86a01cd5f 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -11,6 +11,7 @@ #include "input.h" #include "rescue_password_menu.h" #include "text.h" +#include "text_util.h" #include "team_inventory.h" #include "code_800D090.h" #include "menu_input.h" @@ -218,7 +219,6 @@ extern u32 sub_80144A4(s32 *r0); extern void SetThankYouMailMenuState(u32); extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern void SetMenuItems(struct MenuStruct *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); -extern void sub_80922B4(u8 *, u8 *, u32); extern void sub_802F204(struct unkStruct_802F204 *, u32); extern void sub_80151C0(u32, u8 *); extern void xxx_call_start_bg_music(void); @@ -288,7 +288,7 @@ u32 CreateThankYouMailPelipper(void) index = GetFirstIndexofMailType(6); if (index != -1) { mail = GetMailatIndex(index); - gUnknown_203B2C4->unk41C = mail->unk20; + gUnknown_203B2C4->unk41C = mail->item; gUnknown_203B2C4->mailIndex = index; gUnknown_203B2C4->unk430 = mail->unk10.unk10; SetThankYouMailMenuState(5); @@ -957,7 +957,7 @@ void HandleConfirmItemtoSendMenu(void) mail = GetMailatIndex(gUnknown_203B2C4->mailIndex); if(gUnknown_203B2C4->unk41C.id != ITEM_NOTHING) { - mail->unk20 = gUnknown_203B2C4->unk41C; + mail->item = gUnknown_203B2C4->unk41C; } gTeamInventory_203B460->teamStorage[gUnknown_203B2C4->unk41C.id]--; SetThankYouMailMenuState(0x29); @@ -1144,7 +1144,7 @@ void HandleMailCommunicationMenu(void) { case WONDER_MAIL_MODE_SEND: mail = GetMailatIndex(GetFirstIndexofMailType(WONDER_MAIL_TYPE_THANK_YOU)); - if(mail->unk20.id != ITEM_NOTHING) + if(mail->item.id != ITEM_NOTHING) { SetThankYouMailMenuState(ITEM_EXISTS_ON_THANK_YOU_MAIL); } @@ -1409,7 +1409,7 @@ void UpdateThankYouMailText(void) gUnknown_203B2C4->unk53C.moneyReward = 0; // 0x554 mailIndex = GetMailIndex(6,gUnknown_203B2C4->unk430); mail = GetMailatIndex(mailIndex); - itemIndex = mail->unk20.id; + itemIndex = mail->item.id; if (itemIndex != ITEM_NOTHING) gUnknown_203B2C4->unk53C.itemRewards[0] = itemIndex; // unk558 else diff --git a/src/unk_menu_203B360.c b/src/unk_menu_203B360.c index eeb395af0..deb645bbe 100644 --- a/src/unk_menu_203B360.c +++ b/src/unk_menu_203B360.c @@ -26,7 +26,7 @@ struct unkStruct_203B360 u32 unk1B0; // sprite count? }; -extern struct unkStruct_203B360 *gUnknown_203B360; +EWRAM_DATA_2 struct unkStruct_203B360 *gUnknown_203B360 = {0}; const struct UnkTextStruct2 gUnknown_80E6E7C = { 0x00, 0x00, 0x00, 0x00, 0x03, diff --git a/src/wigglytuff_shop.c b/src/wigglytuff_shop.c new file mode 100644 index 000000000..86a4c30fa --- /dev/null +++ b/src/wigglytuff_shop.c @@ -0,0 +1,642 @@ +#include "global.h" +#include "constants/friend_area.h" +#include "file_system.h" +#include "menu.h" +#include "pokemon.h" +#include "input.h" +#include "team_inventory.h" +#include "text.h" +#include "memory.h" +#include "menu_input.h" +#include "friend_area.h" +#include "wigglytuff_shop.h" + +extern struct UnkTextStruct2 gUnknown_80DC534; +extern struct UnkTextStruct2 gUnknown_80DC564; +extern struct UnkTextStruct2 gUnknown_80DC54C; +extern struct UnkTextStruct2 gUnknown_80DC534; + +EWRAM_DATA_2 struct WigglytuffShop *gWigglytuffShop = {0}; + +extern u8 gUnknown_202E628[]; +extern u32 gUnknown_202DE30[2]; +extern u8 gUnknown_202E5D8[]; +extern u8 gUnknown_202E1C8[]; +extern u8 gAvailablePokemonNames[]; + +extern u8 *gWigglytuffDialogue[2][20]; +extern u8 *gWigglytuffCheck[]; +extern u8 *gUnknown_80D4920[]; +extern u8 *gUnknown_80D4928[]; +extern u8 *gUnknown_80D4934[]; +extern u8 *gUnknown_80D4970[]; +extern u8 *gUnknown_80D4978[]; + + +s32 sub_80144A4(s32 *); +u8 sub_8021700(u32); +void sub_8092578(u8 *buffer, u8 index, u8 r2); +extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u16 *, u32, u32,u8 *r5, u32); +extern void sub_80141B4(const u8 *, u32, u8*, u32); +extern void DrawTeamMoneyBox(u32); +extern void sub_80211AC(u32, u32); +extern void sub_8021354(u32); +extern void sub_8021494(); +extern void sub_803AA34(); +extern void sub_8021774(u8,u32, u32); +extern void sub_809249C(u8, u32); +extern void sub_8021830(void); +extern u32 sub_80217EC(void); +extern u8 sub_803ABC8(void); +extern u32 sub_8021274(u32); +extern u8 sub_802132C(void); +extern void sub_80213A0(void); +extern void sub_8022380(void); +extern void PlaySound(u32); +bool8 sub_8023144(s32 param_1, s32 index, struct UnkTextStruct2_sub *sub, u32 param_4); +void sub_8023354(u8 param_1); +extern bool8 sub_80023E4(u32); +extern void CreateWigglytuffConfirmFriendAreaMenu(void); +extern u8 sub_8099B94(void); +extern void sub_8099AFC(u32, u32, u32); +extern void sub_8099A5C(u32, u32, u32); + +extern u32 sub_8023278(u32); +void sub_80233A0(void); +s16 sub_802331C(void); + +void sub_8022460(void); +void sub_8022538(void); +void sub_80225C8(void); +void HandleWigglytuffConfirmFriendAreaMenu(void); +void sub_80226F0(void); +void sub_8022790(void); +void sub_8022668(void); +void sub_8022684(void); +void sub_80226CC(void); +void sub_80222C8(void); +void SetWigglytuffState(s32); +void sub_8021D5C(void); +void UpdateWigglytuffDialogue(void); + +bool8 CreateWigglytuffShop(bool32 isAsleep) +{ + char *string; + struct OpenedFile *file; + + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + gWigglytuffShop = MemoryAlloc(sizeof(struct WigglytuffShop), 8); + gWigglytuffShop->menuAction1 = 0; + gWigglytuffShop->menuAction2 = 0; + gWigglytuffShop->isAsleep = isAsleep; + CopyYellowMonsterNametoBuffer(gUnknown_202E5D8,MONSTER_WIGGLYTUFF); + CopyYellowMonsterNametoBuffer(gUnknown_202E1C8,MONSTER_WIGGLYTUFF); + string = GetMonSpecies(MONSTER_WIGGLYTUFF); + strcpy(gUnknown_202E1C8 - 0x50, string); + if (gWigglytuffShop->isAsleep == TRUE) { + gWigglytuffShop->unkCC = NULL; + } + else { + gWigglytuffShop->unkCC = (u8 *)&gWigglytuffShop->faceFile; + } + file = GetDialogueSpriteDataPtr(MONSTER_WIGGLYTUFF); + gWigglytuffShop->faceFile = file; + gWigglytuffShop->faceData = file->data; + gWigglytuffShop->unkC8 = 0; + gWigglytuffShop->unkC9 = 0; + gWigglytuffShop->unkCA = 0; + gWigglytuffShop->unkC4 = 2; + gWigglytuffShop->unkC6 = 8; + SetWigglytuffState(WIGGLYTUFF_INIT); + return TRUE; +} + +u32 sub_8021C5C(void) +{ + switch(gWigglytuffShop->state) + { + case WIGGLYTUFF_INIT: + case WIGGLYTUFF_MAIN_MENU: + sub_8022460(); + break; + case WIGGLYTUFF_UNK9: + case WIGGLYTUFF_UNKA: + sub_8022538(); + break; + case WIGGLYTUFF_UNKB: + sub_80225C8(); + break; + case BUY_FRIEND_AREA: + HandleWigglytuffConfirmFriendAreaMenu(); + break; + case WIGGLYTUFF_UNKD: + sub_80226F0(); + break; + case WIGGLYTUFF_UNKE: + sub_8022790(); + break; + case FRIEND_AREA_INFO: + sub_8022668(); + break; + case WIGGLYTUFF_UNK16: + case WIGGLYTUFF_UNK17: + sub_8022684(); + break; + case WIGGLYTUFF_EXIT: + return 3; + default: + sub_80226CC(); + break; + } + return 0; +} + +void sub_8021D1C(void) +{ + if(gWigglytuffShop) + { + CloseFile(gWigglytuffShop->faceFile); + MemoryFree(gWigglytuffShop); + gWigglytuffShop = NULL; + } +} + +void SetWigglytuffState(s32 newState) +{ + gWigglytuffShop->state = newState; + sub_8021D5C(); + UpdateWigglytuffDialogue(); +} + +void sub_8021D5C(void) +{ + s32 index; + + sub_8006518(gWigglytuffShop->unkD0); + switch(gWigglytuffShop->state) + { + case WIGGLYTUFF_UNK9: + case WIGGLYTUFF_UNKA: + gWigglytuffShop->unkD0[0] = gUnknown_80DC534; + gWigglytuffShop->unkD0[2] = gUnknown_80DC534; + gWigglytuffShop->unkD0[1] = gUnknown_80DC564; + break; + case WIGGLYTUFF_UNKB: + gWigglytuffShop->unkD0[2] = gUnknown_80DC54C; + break; + default: + for(index = 0; index < 4; index++) + { + gWigglytuffShop->unkD0[index] = gUnknown_80DC534; + } + break; + + } + ResetUnusedInputStruct(); + sub_800641C(gWigglytuffShop->unkD0, 1, 1); +} + +void UpdateWigglytuffDialogue(void) +{ + char *string; + struct unkStruct_8092638 uStack_14; + + switch(gWigglytuffShop->state) + { + case WIGGLYTUFF_INIT: + sub_80222C8(); + sub_8014248(gWigglytuffDialogue[gWigglytuffShop->isAsleep][0],0,gWigglytuffShop->menuAction1,gWigglytuffShop->unk1C,gWigglytuffShop->unk5C,4,0,gWigglytuffShop->unkCC,0xc); + break; + case WIGGLYTUFF_MAIN_MENU: + sub_80222C8(); + sub_8014248(gWigglytuffDialogue[gWigglytuffShop->isAsleep][1],0,gWigglytuffShop->menuAction1,gWigglytuffShop->unk1C,gWigglytuffShop->unk5C,4,0,gWigglytuffShop->unkCC,0xc); + break; + case FRIEND_AREA_SELECT_BUY: + gWigglytuffShop->fallbackState = WIGGLYTUFF_UNK9; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][3],0,gWigglytuffShop->unkCC,0x10d); + break; + case FRIEND_AREA_SELECT_BUY_AGAIN: + gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKA; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][4],0,gWigglytuffShop->unkCC,0x10d); + break; + case WIGGLYTUFF_INFO: + gWigglytuffShop->fallbackState = WIGGLYTUFF_MAIN_MENU; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][19],0,gWigglytuffShop->unkCC,0x10d); + break; + case WIGGLYTUFF_PRE_EXIT: + gWigglytuffShop->fallbackState = WIGGLYTUFF_EXIT; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][2],0,gWigglytuffShop->unkCC,0x30d); + break; + default: + break; + case WIGGLYTUFF_CANT_ADD_FRIEND_AREA: + gWigglytuffShop->fallbackState = WIGGLYTUFF_PRE_EXIT; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][8],0,gWigglytuffShop->unkCC,0x10d); + break; + case NO_MONEY: + gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKA; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][9],0,gWigglytuffShop->unkCC,0x10d); + break; + case NO_FRIEND_AREAS: + gWigglytuffShop->fallbackState = WIGGLYTUFF_PRE_EXIT; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][10],0,gWigglytuffShop->unkCC,0x10d); + break; + case NOT_ENOUGH_MONEY: + gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKA; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][11],0,gWigglytuffShop->unkCC,0x10d); + break; + case WIGGLYTUFF_UNK9: + sub_80211AC(2,3); + DrawTeamMoneyBox(1); + break; + case WIGGLYTUFF_UNKA: + sub_8021354(1); + DrawTeamMoneyBox(1); + break; + case WIGGLYTUFF_UNKB: + sub_8021494(); + DrawTeamMoneyBox(1); + sub_8022380(); + sub_8012D60(&gWigglytuffShop->unk6C,gWigglytuffShop->unk1C,0,gWigglytuffShop->unk5C, gWigglytuffShop->menuAction2,2); + break; + case BUY_FRIEND_AREA: + CreateWigglytuffConfirmFriendAreaMenu(); + sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0); + gUnknown_202DE30[0] = gWigglytuffShop->friendAreaPrice; + sub_8014248(gWigglytuffDialogue[gWigglytuffShop->isAsleep][5],0,5,gWigglytuffShop->unk1C,0,4,0,gWigglytuffShop->unkCC,0xc); + break; + case FRIEND_AREA_INFO: + sub_8021774(gWigglytuffShop->chosenFriendArea,0,2); + break; + case CONFIRM_BUY_FRIEND_AREA: + gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKD; + sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0); + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][6],0,gWigglytuffShop->unkCC,0x10d); + break; + case WIGGLYTUFF_UNKD: + gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKE; + PlaySound(0x25b); + gWigglytuffShop->unk130 = 1; + break; + case WIGGLYTUFF_UNKE: + gWigglytuffShop->fallbackState = FRIEND_AREA_UNLOCKED; + gWigglytuffShop->unk134 = 30; + break; + case FRIEND_AREA_UNLOCKED: + if (sub_8021700(2) != 0) { + sub_80213A0(); + gWigglytuffShop->fallbackState = NO_FRIEND_AREAS; + } + else { + gWigglytuffShop->fallbackState = FRIEND_AREA_SELECT_BUY_AGAIN; + } + PlaySound(0xce); + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][7],0,gWigglytuffShop->unkCC,0x10d); + break; + case WIGGLYTUFF_CHECK: + gWigglytuffShop->fallbackState = WIGGLYTUFF_UNK16; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][12],0,gWigglytuffShop->unkCC,0x10d); + break; + case WIGGLYTUFF_CHECK_AGAIN: + gWigglytuffShop->fallbackState = WIGGLYTUFF_UNK17; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][13],0,gWigglytuffShop->unkCC,0x10d); + break; + case WIGGLYTUFF_UNK16: + sub_8023144(0,3,0,10); + break; + case WIGGLYTUFF_UNK17: + sub_8023354(1); + break; + case DISPLAY_POKEMON_FRIEND_AREA_INFO: + sub_8092638(gWigglytuffShop->chosenFriendArea,&uStack_14,0,0); + if (uStack_14.hasFriendArea) { + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_HAS_FRIEND_AREA; + } + else + { + switch(GetFriendAreaUnlockCondition(gWigglytuffShop->chosenFriendArea)) + { + case UNLOCK_SHOP_POST_GAME: + if (sub_80023E4(6) != 0) { + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN; + } + else { + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_POST_GAME; + } + break; + case UNLOCK_WONDER_MAIL: + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_WONDER_MAIL; + break; + case UNLOCK_LEGENDARY_REQUEST: + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_LEGENDARY; + break; + default: + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN; + break; + } + } + string = GetMonSpecies(gWigglytuffShop->chosenSpecies); + strcpy(gAvailablePokemonNames,string); + sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0); + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][14],0,gWigglytuffShop->unkCC,0x10d); + break; + case WIGGLYTUFF_CHECK_HAS_FRIEND_AREA: + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][15],0,gWigglytuffShop->unkCC,0x10d); + break; + case WIGGLYTUFF_CHECK_POST_GAME: + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][16],0,gWigglytuffShop->unkCC,0x10d); + break; + case WIGGLYTUFF_CHECK_WONDER_MAIL: + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][17],0,gWigglytuffShop->unkCC,0x10d); + break; + case WIGGLYTUFF_CHECK_LEGENDARY: + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][18],0,gWigglytuffShop->unkCC,0x10d); + break; + } +} + +void sub_80222C8(void) +{ + s32 i; + s32 index = 0; + MemoryFill16(gWigglytuffShop->unk5C, 0, sizeof(gWigglytuffShop->unk5C)); + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4978; // Buy + gWigglytuffShop->unk1C[index].menuAction = 2; + index++; + gWigglytuffShop->unk1C[index].text = *gWigglytuffCheck; // Check + gWigglytuffShop->unk1C[index].menuAction = 3; + index++; + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4970; // Info + gWigglytuffShop->unk1C[index].menuAction = 4; + index++; + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4934; // Cancel + gWigglytuffShop->unk1C[index].menuAction = 1; + index++; + gWigglytuffShop->unk1C[index].text = NULL; + gWigglytuffShop->unk1C[index].menuAction = 1; + + for(i = 0; i < index; i++) + { + if(gWigglytuffShop->unk5C[i] == 0 && gWigglytuffShop->unk1C[i].menuAction == gWigglytuffShop->menuAction1) + return; + } + for(i = 0; i < index; i++) + { + if(gWigglytuffShop->unk5C[i] == 0) + { + gWigglytuffShop->menuAction1 = gWigglytuffShop->unk1C[i].menuAction; + break; + } + } +} + +void sub_8022380(void) +{ + s32 i; + s32 index = 0; + MemoryFill16(gWigglytuffShop->unk5C, 0, sizeof(gWigglytuffShop->unk5C)); + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4978; // Buy + gWigglytuffShop->unk1C[index].menuAction = 2; + index++; + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4970; // Info + gWigglytuffShop->unk1C[index].menuAction = 4; + index++; + gWigglytuffShop->unk1C[index].text = NULL; + gWigglytuffShop->unk1C[index].menuAction = 1; + + for(i = 0; i < index; i++) + { + if(gWigglytuffShop->unk5C[i] == 0 && gWigglytuffShop->unk1C[i].menuAction == gWigglytuffShop->menuAction2) + return; + } + for(i = 0; i < index; i++) + { + if(gWigglytuffShop->unk5C[i] == 0) + { + gWigglytuffShop->menuAction2 = gWigglytuffShop->unk1C[i].menuAction; + break; + } + } +} + +void CreateWigglytuffConfirmFriendAreaMenu(void) +{ + s32 index = 0; + MemoryFill16(gWigglytuffShop->unk5C, 0, sizeof(gWigglytuffShop->unk5C)); + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4920; + gWigglytuffShop->unk1C[index].menuAction = 5; + index++; + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4928; + gWigglytuffShop->unk1C[index].menuAction = 6; + index++; + gWigglytuffShop->unk1C[index].text = NULL; + gWigglytuffShop->unk1C[index].menuAction = 1; +} + +void sub_8022460(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) + { + if (menuAction != 1) { + gWigglytuffShop->menuAction1 = menuAction; + } + switch(menuAction) + { + case 2: + if (sub_8021700(2) != 0) { + SetWigglytuffState(WIGGLYTUFF_CANT_ADD_FRIEND_AREA); + } + else { + SetWigglytuffState(FRIEND_AREA_SELECT_BUY); + } + break; + case 3: + SetWigglytuffState(WIGGLYTUFF_CHECK); + break; + case 4: + SetWigglytuffState(WIGGLYTUFF_INFO); + break; + case 1: + SetWigglytuffState(WIGGLYTUFF_PRE_EXIT); + break; + } + } +} + +void HandleWigglytuffConfirmFriendAreaMenu(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + switch(menuAction) + { + case 5: + gTeamInventory_203B460->teamMoney -= gWigglytuffShop->friendAreaPrice; + UnlockFriendArea(gWigglytuffShop->chosenFriendArea); + PlaySound(0x14C); + SetWigglytuffState(CONFIRM_BUY_FRIEND_AREA); + break; + case 1: + case 6: + SetWigglytuffState(WIGGLYTUFF_UNKA); + break; + } + } +} + +void sub_8022538(void) +{ + switch(sub_8021274(1)) + { + case 3: + gWigglytuffShop->chosenFriendArea = sub_802132C(); + gWigglytuffShop->friendAreaPrice = GetFriendAreaPrice(gWigglytuffShop->chosenFriendArea); + SetWigglytuffState(WIGGLYTUFF_UNKB); + break; + case 4: + gWigglytuffShop->chosenFriendArea = sub_802132C(); + gWigglytuffShop->friendAreaPrice = GetFriendAreaPrice(gWigglytuffShop->chosenFriendArea); + SetWigglytuffState(FRIEND_AREA_INFO); + break; + case 0: + break; + case 2: + sub_80213A0(); + SetWigglytuffState(WIGGLYTUFF_MAIN_MENU); + break; + case 1: + default: + DrawTeamMoneyBox(1); + break; + } +} + +void sub_80225C8(void) +{ + s32 menuAction = 0; + sub_8021274(0); + if(sub_8012FD8(&gWigglytuffShop->unk6C) == 0) + { + sub_8013114(&gWigglytuffShop->unk6C, &menuAction); + if(menuAction != 1) gWigglytuffShop->menuAction2 = menuAction; + } + switch(menuAction) + { + case 2: + if(gTeamInventory_203B460->teamMoney == 0) + { + SetWigglytuffState(NO_MONEY); + } + else if(gWigglytuffShop->friendAreaPrice > gTeamInventory_203B460->teamMoney) + { + SetWigglytuffState(NOT_ENOUGH_MONEY); + } + else + { + SetWigglytuffState(BUY_FRIEND_AREA); + } + break; + case 4: + SetWigglytuffState(FRIEND_AREA_INFO); + break; + case 1: + SetWigglytuffState(WIGGLYTUFF_UNKA); + break; + } +} + +void sub_8022668(void) +{ + switch(sub_80217EC()) + { + case 2: + case 3: + sub_8021830(); + SetWigglytuffState(WIGGLYTUFF_UNKA); + break; + case 0: + case 1: + break; + } +} + +void sub_8022684(void) +{ + switch(sub_8023278(1)) + { + case 3: + gWigglytuffShop->chosenSpecies = sub_802331C(); + gWigglytuffShop->chosenFriendArea = GetFriendArea(gWigglytuffShop->chosenSpecies); + SetWigglytuffState(DISPLAY_POKEMON_FRIEND_AREA_INFO); + break; + case 2: + sub_80233A0(); + SetWigglytuffState(WIGGLYTUFF_MAIN_MENU); + break; + case 0: + case 1: + break; + } +} + +void sub_80226CC(void) +{ + s32 temp; + + if (sub_80144A4(&temp) == 0) + { + SetWigglytuffState(gWigglytuffShop->fallbackState); + } +} + +void sub_80226F0(void) +{ + union { + vu32 a; + vu8 b[4]; + } temp; + vu8 *ptr = temp.b; + u32 r2 = 0; + ptr[0] = 0x80; + ptr[1] = 0x80; + ptr[2] = 0x10; + ptr[3] = r2; + if(sub_8099B94() == 0) + { + switch(gWigglytuffShop->unk130) + { + case 1: + case 3: + sub_8099AFC(5, 2, temp.a); + break; + case 2: + case 4: + sub_8099A5C(5, 2, temp.a); + break; + case 0: + default: + SetWigglytuffState(gWigglytuffShop->fallbackState); + gWigglytuffShop->unk130 = 0; + break; + } + gWigglytuffShop->unk130++; + } +} + +void sub_8022790(void) +{ + if(gWigglytuffShop->unk134 != 0) + { + gWigglytuffShop->unk134--; + } + else { + SetWigglytuffState(gWigglytuffShop->fallbackState); + } +} diff --git a/src/wonder_mail_2_1.c b/src/wonder_mail_2_1.c index 381dfe63c..eca3f743e 100644 --- a/src/wonder_mail_2_1.c +++ b/src/wonder_mail_2_1.c @@ -98,22 +98,14 @@ extern void sub_802CAA4(void); extern u8 IsJobSlotEmpty(u8); extern void sub_8008C54(u32); extern void sub_80073B8(u32); -extern void sub_8013C68(struct MenuInputStruct*); extern void sub_80073E0(u32); extern struct WonderMail* GetJobSlotInfo(u8); -extern s32 sub_8013800(struct MenuInputStruct*, u32); extern void sub_803B35C(struct WonderMail *, struct unkStruct_802C39C *); extern void CreateRescueTitle(struct unkStruct_802C39C *); -extern void sub_8013984(struct MenuInputStruct*); extern void sub_802C6DC(void); extern void DrawJobListMenu(void); -extern void AddMenuCursorSprite(struct MenuInputStruct*); -extern u8 sub_80138B8(struct MenuInputStruct*, u32); -extern s32 GetKeyPress(struct MenuInputStruct*); extern void PlayMenuSoundEffect(u32); -extern void sub_8013660(void *); -extern void sub_8013848(struct MenuInputStruct*, s32, u32, u32); extern bool8 IsPelipperBoardSlotEmpty(u8); extern void SetJobListState(u32); extern void sub_802CC00(void); diff --git a/src/wonder_mail_2_mid.c b/src/wonder_mail_2_mid.c index 488a33909..967c33630 100644 --- a/src/wonder_mail_2_mid.c +++ b/src/wonder_mail_2_mid.c @@ -11,22 +11,15 @@ #include "menu_input.h" bool8 IsMailSlotEmpty(u8); -extern void sub_8013984(void *); -extern void sub_8013848(struct MenuInputStruct *, s32, u32, u32); extern s32 CountPelipperBoardSlots(void); extern void sub_802C328(void); extern void DrawPelipperBoardJobMenu(void); extern void PlayMenuSoundEffect(u32); -extern void sub_8013660(struct MenuInputStruct *); -extern s32 GetKeyPress(struct MenuInputStruct *); -extern bool8 sub_80138B8(struct MenuInputStruct *, u32); -extern void AddMenuCursorSprite(struct MenuInputStruct *); extern u8 HasNoPelipperBoardJobs(void); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern s32 sub_8013800(struct MenuInputStruct *, s32); extern struct WonderMail *GetPelipperBoardSlotInfo(u32); extern void sub_803B35C(struct WonderMail *, u32 *); extern u8 gBulletinBoardText[]; diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index dcf3c36eb..809e3541b 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -153,17 +153,10 @@ extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern void CreateRescueTitle(struct unkStruct_802C39C *); -extern s32 sub_8013800(struct MenuInputStruct *, u32); extern u8 gUnknown_80DFDBC[]; extern void sub_802CF5C(void); extern void sub_802CFD0(void); -extern void sub_8013984(struct MenuInputStruct *); -extern void AddMenuCursorSprite(struct MenuInputStruct *); -extern u8 sub_80138B8(struct MenuInputStruct *, u32); -extern void sub_8013660(struct MenuInputStruct *); -extern u32 GetKeyPress(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); -extern void sub_8013848(struct MenuInputStruct *, s32, u32, u32); extern void sub_802DF24(void); extern void SetJobListState(u32); diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index 89534d7db..920e9a9aa 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -95,12 +95,8 @@ enum FriendRewardStates { extern u8 sub_802FCF0(u32); extern void sub_802F9C0(void); extern void sub_802FA50(void); -extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); -extern u32 sub_802FBF4(void); -extern void sub_8013878(struct MenuInputStruct *, s32); +extern s32 sub_802FBF4(void); -extern void AddMenuCursorSprite(struct MenuInputStruct *); -extern void sub_8013984(struct MenuInputStruct *); extern void SetRewardSceneState(u32); extern void sub_802EFEC(u32); extern void sub_802F148(void); @@ -126,9 +122,6 @@ extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern void sub_802F6FC(void); extern void ProceedToNextRewardSceneState(void); -extern u8 sub_80138B8(struct MenuInputStruct*, u32); -extern void sub_8013660(struct MenuInputStruct *); -extern u32 GetKeyPress(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); extern void sub_802F300(void); extern void PlaySound(u32); @@ -137,7 +130,6 @@ extern void sub_80141B4(const u8 *, u32, struct OpenedFile **, u32); extern u32 sub_801B60C(u32, u8, u8); extern void sub_8092578(u8 *buffer, u8 index, u8 r2); void HandleMissionReward(void); -extern s32 sub_8013800(struct MenuInputStruct *, s32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index efc369eb5..7fd2ae1b6 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -78,16 +78,8 @@ extern bool8 HasNoWonderMailType(u32); extern s32 sub_8030A74(void); extern void sub_80308A0(void); extern void sub_803092C(void); -extern void sub_8012D08(struct UnkTextStruct2 *, s32); -extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); -extern u8 sub_80138B8(struct MenuInputStruct*, u32); -extern void sub_8013660(struct MenuInputStruct*); -extern s32 GetKeyPress(struct MenuInputStruct*); extern void PlayMenuSoundEffect(u32); -extern void sub_8013984(struct MenuInputStruct*); -extern void AddMenuCursorSprite(struct MenuInputStruct*); -extern s32 sub_8013800(struct MenuInputStruct*, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); diff --git a/src/wonder_mail_5.c b/src/wonder_mail_5.c index 668782497..3ccf667be 100644 --- a/src/wonder_mail_5.c +++ b/src/wonder_mail_5.c @@ -8,11 +8,12 @@ #include "code_8094F88.h" #include "code_800D090.h" #include "code_802C39C.h" +#include "menu_input.h" struct unkStruct_203B324 { // size: 0x78 - u8 fill0[0xC]; + struct MenuInputStructSub unk0; u8 mailIndex; u32 unk10; struct UnkTextStruct2 *unk14; @@ -47,9 +48,7 @@ const u8 gUnknown_80E0938[] = "%-4d"; static const u8 wonder_mail_fill[] = "pksdir0"; extern void sub_8030DD4(void); -extern void sub_801317C(void *); extern void PlayMenuSoundEffect(u32); -extern u32 sub_8012A64(void *, u32); extern void CreateRescueDescription(struct unkStruct_802C39C *); extern void sub_80073E0(u32); extern void sub_80073B8(u32); @@ -61,7 +60,7 @@ bool8 sub_8030D40(u8 mailIndex, s32 param_2) { gUnknown_203B324 = MemoryAlloc(sizeof(struct unkStruct_203B324), 8); gUnknown_203B324->mailIndex = mailIndex; - sub_801317C(gUnknown_203B324); + sub_801317C(&gUnknown_203B324->unk0); gUnknown_203B324->unk10 = param_2; gUnknown_203B324->unk14 = &gUnknown_203B324->unk18[param_2]; sub_8006518(gUnknown_203B324->unk18); @@ -72,7 +71,7 @@ bool8 sub_8030D40(u8 mailIndex, s32 param_2) u8 sub_8030DA0(void) { - switch(sub_8012A64(gUnknown_203B324, gUnknown_203B324->unk10)) + switch(sub_8012A64(&gUnknown_203B324->unk0, gUnknown_203B324->unk10)) { case 2: PlayMenuSoundEffect(1); @@ -127,12 +126,12 @@ void sub_8030E48(void) stack.clientSpecies = mail->clientSpecies; stack.targetSpecies = mail->clientSpecies; stack.targetItem = ITEM_NOTHING; - if (mail->unk20.id == ITEM_NOTHING) { + if (mail->item.id == ITEM_NOTHING) { stack.unk2E = 5; } else { stack.unk2E = 2; - stack.unk34 = mail->unk20.id; + stack.unk34 = mail->item.id; } switch(mail->mailType) { diff --git a/src/wonder_mail_6.c b/src/wonder_mail_6.c index 589f22a8b..6fe9f70be 100644 --- a/src/wonder_mail_6.c +++ b/src/wonder_mail_6.c @@ -323,7 +323,7 @@ void sub_80313D8(u32 state) unused = &gUnknown_203B480[index]; gUnknown_203B480[index].mailType = 0; unused = &gUnknown_203B480[index]; - gUnknown_203B480[index].unk20.id = ITEM_NOTHING; + gUnknown_203B480[index].item.id = ITEM_NOTHING; } break; } diff --git a/src/wonder_mail_802DF88.c b/src/wonder_mail_802DF88.c index c747bc2ec..f90829d78 100644 --- a/src/wonder_mail_802DF88.c +++ b/src/wonder_mail_802DF88.c @@ -4,6 +4,7 @@ #include "memory.h" #include "code_802C39C.h" #include "wonder_mail.h" +#include "menu_input.h" struct unkStruct_203B2FC { @@ -33,7 +34,7 @@ extern struct unkStruct_203B2FC *gUnknown_203B2FC; struct unkStruct_203B300 { // size: 0x7C - u8 fill0[0xC]; + struct MenuInputStructSub unk0; struct unkStruct_802C39C *unkC; u32 unk10; struct UnkTextStruct2 *unk14; @@ -104,7 +105,6 @@ extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern void CreateRescueDescription(struct unkStruct_802C39C *); extern void PlayMenuSoundEffect(u32); -extern s32 sub_8012A64(void *, u32); extern s32 sub_80144A4(s32 *); extern void sub_802DC28(u32); extern void sub_802F2C0(void); @@ -129,7 +129,6 @@ void sub_802DE60(void); void sub_802DF6C(void); void sub_802DF88(void); void sub_802DF14(void); -void sub_801317C(void); void sub_802D1A0(u32); u32 sub_802DEE0(void); void sub_802DF24(void); @@ -313,7 +312,7 @@ u32 sub_802DE84(struct unkStruct_802C39C *r0) { gUnknown_203B300 = MemoryAlloc(sizeof(struct unkStruct_203B300), 8); gUnknown_203B300->unkC = r0; - sub_801317C(); + sub_801317C(&gUnknown_203B300->unk0); gUnknown_203B300->unk10 = gUnknown_203B300->unkC->unk0[0]; gUnknown_203B300->unk14 = &gUnknown_203B300->unk18[gUnknown_203B300->unk10]; sub_8006518(gUnknown_203B300->unk18); @@ -324,7 +323,7 @@ u32 sub_802DE84(struct unkStruct_802C39C *r0) u32 sub_802DEE0(void) { - switch(sub_8012A64(gUnknown_203B300, gUnknown_203B300->unk10)) + switch(sub_8012A64(&gUnknown_203B300->unk0, gUnknown_203B300->unk10)) { case 2: PlayMenuSoundEffect(1); diff --git a/sym_ewram.txt b/sym_ewram.txt index 8d0152375..26864e82e 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -811,58 +811,16 @@ gMoveLearnsets: /* 2038C6C */ .include "src/game_options.o" .include "src/play_time.o" -gUnknown_2038C88: /* 2038C88 */ - .space 0x600 - -gUnknown_2039288: /* 2039288 */ - .space 0x60 - -gUnknown_20392E8: /* 20392E8 */ - .space 0xD8 - -gUnknown_20393C0: /* 20393C0 */ - .space 0x88 - -gUnknown_2039448: /* 2039448 */ - .space 0x330 - -.include "src/code_8097670.o" -.space 0x4 -.include "src/exclusive_pokemon.o" -.space 0x4 - -gUnknown_20398A8: /* 20398A8 */ - .space 0x4 - -gUnknown_20398AC: /* 20398AC */ - .space 0x4 - -gUnknown_20398B0: /* 20398B0 */ - .space 0x4 - -gUnknown_20398B4: /* 20398B4 */ - .space 0x4 - -gUnknown_20398B8: /* 20398B8 */ - .space 0x1 - -gUnknown_20398B9: /* 20398B9 */ - .space 0x1 - -gUnknown_20398BA: /* 20398BA */ - .space 0x2 - -gUnknown_20398BC: /* 20398BC */ - .space 0x2 - -gUnknown_20398BE: /* 20398BE */ - .space 0x2 - -gUnknown_20398C0: /* 20398C0 */ - .space 0x4 - -gUnknown_20398C4: /* 20398C4 */ - .space 0x4 + .include "src/code_8094F88.o" + .space 0x4 + .include "src/code_80958E8.o" + .space 0x4 + .include "src/code_8097670.o" + .space 0x4 + .include "src/exclusive_pokemon.o" + .space 0x4 + .include "src/ground_main.o" + .space 0x2 gUnknown_20398C8: /* 20398C8 */ .space 0x10 diff --git a/sym_ewram2.txt b/sym_ewram2.txt index 7ac427954..86b46b416 100644 --- a/sym_ewram2.txt +++ b/sym_ewram2.txt @@ -136,14 +136,8 @@ gUnknown_203B1FC: /* 203B1FC */ gUnknown_203B200: /* 203B200 */ .space 0x4 -gFelicityBankWork: /* 203B204 */ - .space 0x4 - -gUnknown_203B208: /* 203B208 */ - .space 0x4 - -gUnknown_203B20C: /* 203B20C */ - .space 0x4 +.include "src/felicity_bank.o" +.include "src/kangaskhan_storage.o" gUnknown_203B210: /* 203B210 */ .space 0x4 @@ -232,8 +226,7 @@ gUnknown_203B274: /* 203B274 */ gUnknown_203B278: /* 203B278 */ .space 0x4 -gUnknown_203B27C: /* 203B27C */ - .space 0x4 +.include "src/gulpin_shop_1.o" gUnknown_203B280: /* 203B280 */ .space 0x4 @@ -250,8 +243,7 @@ gUnknown_203B28A: /* 203B28A */ gUnknown_203B28C: /* 203B28C */ .space 0x4 -gUnknown_203B290: /* 203B290 */ - .space 0x4 +.include "src/wigglytuff_shop.o" gUnknown_203B294: /* 203B294 */ .space 0x4 @@ -372,26 +364,12 @@ gUnknown_203B328: /* 203B328 */ .include "src/code_8031D70.o" .include "src/adventure_log.o" .include "src/friend_rescue.o" - -gUnknown_203B340: /* 203B340 */ - .space 0x4 - -gUnknown_203B344: /* 203B344 */ - .space 0x4 - +.include "src/credits.o" .include "src/main_menu.o" - .include "src/trade_items_menu.o" - -gUnknown_203B35C: /* 203B35C */ - .space 0x4 - -gUnknown_203B360: /* 203B360 */ - .space 0x4 - -gUnknown_203B364: /* 203B364 */ - .space 0x4 - +.include "src/other_menus.o" +.include "src/unk_menu_203B360.o" +.include "src/save_menu.o" .include "src/rescue_password_menu.o" .include "src/load_screen.o" .include "src/wonder_mail_main_menu.o"