diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-11-22 06:46:04 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-11-23 08:09:23 +0800 |
commit | 499c09a49f4e587c6f3135afe609a057f3dbd4d8 (patch) | |
tree | 326ebec6a2330cb5500e95c2d14e8fbcc26f4bcb | |
parent | 1d96920da05f7b5c25aef42931576f3e61099f66 (diff) |
party_menu first quarter
-rw-r--r-- | asm/item_menu.s | 2 | ||||
-rw-r--r-- | asm/party_menu.s | 4839 | ||||
-rw-r--r-- | asm/pokemon_jump_2.s | 8 | ||||
-rw-r--r-- | asm/pokemon_special_anim.s | 2 | ||||
-rw-r--r-- | asm/shop.s | 4 | ||||
-rw-r--r-- | data/strings.s | 4 | ||||
-rw-r--r-- | include/constants/global.h | 2 | ||||
-rw-r--r-- | include/constants/party_menu.h | 8 | ||||
-rw-r--r-- | include/fldeff.h | 2 | ||||
-rw-r--r-- | include/graphics.h | 3 | ||||
-rw-r--r-- | include/item_use.h | 1 | ||||
-rw-r--r-- | include/menu_helpers.h | 7 | ||||
-rw-r--r-- | include/new_menu_helpers.h | 2 | ||||
-rw-r--r-- | include/party_menu.h | 8 | ||||
-rw-r--r-- | include/pokemon_jump.h | 1 | ||||
-rw-r--r-- | include/strings.h | 9 | ||||
-rw-r--r-- | src/berry_pouch.c | 2 | ||||
-rw-r--r-- | src/data/party_menu.h | 18 | ||||
-rw-r--r-- | src/fldeff_softboiled.c | 2 | ||||
-rw-r--r-- | src/item_pc.c | 2 | ||||
-rw-r--r-- | src/item_use.c | 137 | ||||
-rw-r--r-- | src/menu.c | 8 | ||||
-rw-r--r-- | src/menu_helpers.c | 4 | ||||
-rw-r--r-- | src/new_menu_helpers.c | 2 | ||||
-rw-r--r-- | src/party_menu.c | 1787 | ||||
-rw-r--r-- | src/tm_case.c | 2 |
26 files changed, 1911 insertions, 4955 deletions
diff --git a/asm/item_menu.s b/asm/item_menu.s index 9774cbe90..6967a7876 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -2514,7 +2514,7 @@ sub_8109140: @ 8109140 movs r1, 0 movs r2, 0xE movs r3, 0x1E - bl SetBgRectPal + bl SetBgTilemapPalette movs r0, 0x1 bl ScheduleBgCopyTilemapToVram add sp, 0x8 diff --git a/asm/party_menu.s b/asm/party_menu.s index 955fba24e..c394b4917 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -5,4843 +5,6 @@ .text - thumb_func_start InitPartyMenu -InitPartyMenu: @ 811EA44 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r4, [sp, 0x24] - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - lsls r3, 24 - lsrs r3, 24 - str r3, [sp] - lsls r4, 24 - lsrs r7, r4, 24 - bl ResetPartyMenu - ldr r6, _0811EA8C @ =sPartyMenuInternal - movs r0, 0x8E - lsls r0, 2 - bl Alloc - adds r5, r0, 0 - str r5, [r6] - cmp r5, 0 - bne _0811EA90 - ldr r0, [sp, 0x2C] - bl SetMainCallback2 - b _0811EB80 - .align 2, 0 -_0811EA8C: .4byte sPartyMenuInternal -_0811EA90: - ldr r3, _0811EAE0 @ =gPartyMenu - movs r1, 0xF - mov r0, r9 - ands r1, r0 - ldrb r2, [r3, 0x8] - movs r0, 0x10 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x8] - ldr r1, [sp, 0x2C] - str r1, [r3] - movs r4, 0 - mov r0, r8 - strb r0, [r3, 0xB] - lsls r2, r7, 2 - ldrh r1, [r5, 0xA] - movs r0, 0x3 - ands r0, r1 - orrs r0, r2 - strh r0, [r5, 0xA] - ldr r0, [sp, 0x28] - str r0, [r5] - str r4, [r5, 0x4] - ldrb r1, [r5, 0x8] - movs r0, 0xF - negs r0, r0 - ands r0, r1 - strb r0, [r5, 0x8] - adds r7, r3, 0 - mov r1, r9 - cmp r1, 0x4 - bne _0811EAE4 - ldr r0, [r6] - ldrb r1, [r0, 0x8] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0, 0x8] - b _0811EAF0 - .align 2, 0 -_0811EAE0: .4byte gPartyMenu -_0811EAE4: - ldr r2, [r6] - ldrb r1, [r2, 0x8] - movs r0, 0x2 - negs r0, r0 - ands r0, r1 - strb r0, [r2, 0x8] -_0811EAF0: - mov r5, r10 - cmp r5, 0xFF - beq _0811EB08 - movs r0, 0x3 - ands r0, r5 - lsls r0, 4 - ldrb r2, [r7, 0x8] - movs r1, 0x31 - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r7, 0x8] -_0811EB08: - movs r2, 0 - ldr r5, _0811EB90 @ =sPartyMenuInternal - movs r4, 0x86 - lsls r4, 2 - movs r3, 0 -_0811EB12: - ldr r0, [r5] - lsls r1, r2, 1 - adds r0, r4 - adds r0, r1 - strh r3, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0xF - bls _0811EB12 - movs r2, 0 - ldr r4, _0811EB90 @ =sPartyMenuInternal - movs r3, 0xFF -_0811EB2C: - ldr r0, [r4] - adds r0, 0xC - adds r0, r2 - ldrb r1, [r0] - orrs r1, r3 - strb r1, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x2 - bls _0811EB2C - ldr r0, [sp] - cmp r0, 0 - beq _0811EB68 - adds r1, r7, 0 - movs r0, 0x9 - ldrsb r0, [r1, r0] - cmp r0, 0x5 - bgt _0811EB66 - adds r1, r0, 0 - movs r0, 0x64 - muls r0, r1 - ldr r1, _0811EB94 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - bne _0811EB6A -_0811EB66: - movs r0, 0 -_0811EB68: - strb r0, [r7, 0x9] -_0811EB6A: - ldr r2, _0811EB98 @ =gTextFlags - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - bl CalculatePlayerPartyCount - ldr r0, _0811EB9C @ =CB2_InitPartyMenu - bl SetMainCallback2 -_0811EB80: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0811EB90: .4byte sPartyMenuInternal -_0811EB94: .4byte gPlayerParty -_0811EB98: .4byte gTextFlags -_0811EB9C: .4byte CB2_InitPartyMenu - thumb_func_end InitPartyMenu - - thumb_func_start CB2_UpdatePartyMenu -CB2_UpdatePartyMenu: @ 811EBA0 - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl DoScheduledBgTilemapCopiesToVram - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end CB2_UpdatePartyMenu - - thumb_func_start VBlankCB_PartyMenu -VBlankCB_PartyMenu: @ 811EBBC - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end VBlankCB_PartyMenu - - thumb_func_start CB2_InitPartyMenu -CB2_InitPartyMenu: @ 811EBD0 - push {lr} -_0811EBD2: - bl sub_80BF748 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0811EBF6 - bl ShowPartyMenu - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0811EBF6 - bl MenuHelpers_LinkSomething - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0811EBD2 -_0811EBF6: - pop {r0} - bx r0 - thumb_func_end CB2_InitPartyMenu - - thumb_func_start ShowPartyMenu -ShowPartyMenu: @ 811EBFC - push {r4,lr} - sub sp, 0x4 - ldr r0, _0811EC1C @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x16 - bls _0811EC10 - b _0811EE14 -_0811EC10: - lsls r0, 2 - ldr r1, _0811EC20 @ =_0811EC24 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0811EC1C: .4byte gMain -_0811EC20: .4byte _0811EC24 - .align 2, 0 -_0811EC24: - .4byte _0811EC80 - .4byte _0811EC8E - .4byte _0811EC94 - .4byte _0811ECA8 - .4byte _0811ECAE - .4byte _0811ECB4 - .4byte _0811ECC6 - .4byte _0811ECCC - .4byte _0811ECF4 - .4byte _0811ED02 - .4byte _0811ED14 - .4byte _0811ED38 - .4byte _0811ED3E - .4byte _0811ED44 - .4byte _0811ED4A - .4byte _0811ED50 - .4byte _0811ED70 - .4byte _0811ED90 - .4byte _0811ED96 - .4byte _0811EDAC - .4byte _0811EDB4 - .4byte _0811EDD0 - .4byte _0811EDDE -_0811EC80: - bl SetVBlankHBlankCallbacksToNull - bl ClearVramOamPltt - bl ClearScheduledBgCopiesToVram - b _0811EDFC -_0811EC8E: - bl ScanlineEffect_Stop - b _0811EDFC -_0811EC94: - bl ResetPaletteFade - ldr r2, _0811ECA4 @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - b _0811EDFA - .align 2, 0 -_0811ECA4: .4byte gPaletteFade -_0811ECA8: - bl ResetSpriteData - b _0811EDFC -_0811ECAE: - bl FreeAllSpritePalettes - b _0811EDFC -_0811ECB4: - bl MenuHelpers_LinkSomething - lsls r0, 24 - cmp r0, 0 - beq _0811ECC0 - b _0811EDFC -_0811ECC0: - bl ResetTasks - b _0811EDFC -_0811ECC6: - bl SetPartyMonsAllowedInMinigame - b _0811EDFC -_0811ECCC: - bl AllocPartyMenuBg - lsls r0, 24 - cmp r0, 0 - bne _0811ECDE - bl ExitPartyMenu - movs r0, 0x1 - b _0811EE2E -_0811ECDE: - ldr r0, _0811ECF0 @ =sPartyMenuInternal - ldr r0, [r0] - movs r1, 0x86 - lsls r1, 2 - adds r0, r1 - movs r1, 0 - strh r1, [r0] - b _0811EDFC - .align 2, 0 -_0811ECF0: .4byte sPartyMenuInternal -_0811ECF4: - bl AllocPartyMenuBgGfx - lsls r0, 24 - cmp r0, 0 - bne _0811ED00 - b _0811EE2C -_0811ED00: - b _0811EDFC -_0811ED02: - ldr r0, _0811ED10 @ =gPartyMenu - ldrb r0, [r0, 0x8] - lsls r0, 26 - lsrs r0, 30 - bl InitPartyMenuWindows - b _0811EDFC - .align 2, 0 -_0811ED10: .4byte gPartyMenu -_0811ED14: - ldr r0, _0811ED30 @ =gPartyMenu - ldrb r0, [r0, 0x8] - lsls r0, 26 - lsrs r0, 30 - bl InitPartyMenuBoxes - ldr r0, _0811ED34 @ =sPartyMenuInternal - ldr r0, [r0] - movs r1, 0x86 - lsls r1, 2 - adds r0, r1 - movs r1, 0 - strh r1, [r0] - b _0811EDFC - .align 2, 0 -_0811ED30: .4byte gPartyMenu -_0811ED34: .4byte sPartyMenuInternal -_0811ED38: - bl LoadHeldItemIcons - b _0811EDFC -_0811ED3E: - bl LoadPartyMenuPokeballGfx - b _0811EDFC -_0811ED44: - bl LoadPartyMenuAilmentGfx - b _0811EDFC -_0811ED4A: - bl LoadMonIconPalettes - b _0811EDFC -_0811ED50: - bl CreatePartyMonSpritesLoop - lsls r0, 24 - cmp r0, 0 - beq _0811EE2C - ldr r0, _0811ED6C @ =sPartyMenuInternal - ldr r0, [r0] - movs r1, 0x86 - lsls r1, 2 - adds r0, r1 - movs r1, 0 - strh r1, [r0] - b _0811EDFC - .align 2, 0 -_0811ED6C: .4byte sPartyMenuInternal -_0811ED70: - bl RenderPartyMenuBoxes - lsls r0, 24 - cmp r0, 0 - beq _0811EE2C - ldr r0, _0811ED8C @ =sPartyMenuInternal - ldr r0, [r0] - movs r1, 0x86 - lsls r1, 2 - adds r0, r1 - movs r1, 0 - strh r1, [r0] - b _0811EDFC - .align 2, 0 -_0811ED8C: .4byte sPartyMenuInternal -_0811ED90: - bl CreateCancelConfirmPokeballSprites - b _0811EDFC -_0811ED96: - ldr r0, _0811EDA8 @ =sPartyMenuInternal - ldr r0, [r0] - ldrb r0, [r0, 0x8] - lsls r0, 31 - lsrs r0, 31 - bl CreateCancelConfirmWindows - b _0811EDFC - .align 2, 0 -_0811EDA8: .4byte sPartyMenuInternal -_0811EDAC: - movs r0, 0x5 - bl HelpSystem_SetSomeVariable2 - b _0811EDFC -_0811EDB4: - ldr r4, _0811EDCC @ =sPartyMenuInternal - ldr r0, [r4] - ldr r0, [r0] - movs r1, 0 - bl CreateTask - ldr r0, [r4] - ldrh r0, [r0, 0xA] - lsrs r0, 2 - bl DisplayPartyMenuStdMessage - b _0811EDFC - .align 2, 0 -_0811EDCC: .4byte sPartyMenuInternal -_0811EDD0: - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - b _0811EDFC -_0811EDDE: - movs r0, 0x1 - negs r0, r0 - movs r1, 0x2 - negs r1, r1 - movs r2, 0 - str r2, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r2, _0811EE0C @ =gPaletteFade - ldrb r1, [r2, 0x8] - movs r0, 0x7F - ands r0, r1 -_0811EDFA: - strb r0, [r2, 0x8] -_0811EDFC: - ldr r1, _0811EE10 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0811EE2C - .align 2, 0 -_0811EE0C: .4byte gPaletteFade -_0811EE10: .4byte gMain -_0811EE14: - ldr r0, _0811EE24 @ =VBlankCB_PartyMenu - bl SetVBlankCallback - ldr r0, _0811EE28 @ =CB2_UpdatePartyMenu - bl SetMainCallback2 - movs r0, 0x1 - b _0811EE2E - .align 2, 0 -_0811EE24: .4byte VBlankCB_PartyMenu -_0811EE28: .4byte CB2_UpdatePartyMenu -_0811EE2C: - movs r0, 0 -_0811EE2E: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end ShowPartyMenu - - thumb_func_start ExitPartyMenu -ExitPartyMenu: @ 811EE38 - push {lr} - sub sp, 0x4 - movs r0, 0x1 - negs r0, r0 - movs r1, 0x2 - negs r1, r1 - movs r2, 0 - str r2, [sp] - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _0811EE68 @ =Task_ExitPartyMenu - movs r1, 0 - bl CreateTask - ldr r0, _0811EE6C @ =VBlankCB_PartyMenu - bl SetVBlankCallback - ldr r0, _0811EE70 @ =CB2_UpdatePartyMenu - bl SetMainCallback2 - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0811EE68: .4byte Task_ExitPartyMenu -_0811EE6C: .4byte VBlankCB_PartyMenu -_0811EE70: .4byte CB2_UpdatePartyMenu - thumb_func_end ExitPartyMenu - - thumb_func_start Task_ExitPartyMenu -Task_ExitPartyMenu: @ 811EE74 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0811EEA0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0811EE98 - ldr r0, _0811EEA4 @ =gPartyMenu - ldr r0, [r0] - bl SetMainCallback2 - bl FreePartyPointers - adds r0, r4, 0 - bl DestroyTask -_0811EE98: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0811EEA0: .4byte gPaletteFade -_0811EEA4: .4byte gPartyMenu - thumb_func_end Task_ExitPartyMenu - - thumb_func_start ResetPartyMenu -ResetPartyMenu: @ 811EEA8 - ldr r0, _0811EEBC @ =sPartyMenuInternal - movs r1, 0 - str r1, [r0] - ldr r0, _0811EEC0 @ =sPartyBgTilemapBuffer - str r1, [r0] - ldr r0, _0811EEC4 @ =sPartyMenuBoxes - str r1, [r0] - ldr r0, _0811EEC8 @ =sPartyBgGfxTilemap - str r1, [r0] - bx lr - .align 2, 0 -_0811EEBC: .4byte sPartyMenuInternal -_0811EEC0: .4byte sPartyBgTilemapBuffer -_0811EEC4: .4byte sPartyMenuBoxes -_0811EEC8: .4byte sPartyBgGfxTilemap - thumb_func_end ResetPartyMenu - - thumb_func_start AllocPartyMenuBg -AllocPartyMenuBg: @ 811EECC - push {r4,r5,lr} - bl ResetAllBgsCoordinatesAndBgCntRegs - ldr r5, _0811EF34 @ =sPartyBgTilemapBuffer - movs r4, 0x80 - lsls r4, 4 - adds r0, r4, 0 - bl Alloc - str r0, [r5] - cmp r0, 0 - beq _0811EF3C - movs r1, 0 - adds r2, r4, 0 - bl memset - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _0811EF38 @ =sPartyMenuBgTemplates - movs r0, 0 - movs r2, 0x3 - bl InitBgsFromTemplates - ldr r1, [r5] - movs r0, 0x1 - bl SetBgTilemapBuffer - movs r0, 0x1 - bl ScheduleBgCopyTilemapToVram - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x1 - b _0811EF3E - .align 2, 0 -_0811EF34: .4byte sPartyBgTilemapBuffer -_0811EF38: .4byte sPartyMenuBgTemplates -_0811EF3C: - movs r0, 0 -_0811EF3E: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end AllocPartyMenuBg - - thumb_func_start AllocPartyMenuBgGfx -AllocPartyMenuBgGfx: @ 811EF44 - push {r4,lr} - sub sp, 0x4 - ldr r0, _0811EF64 @ =sPartyMenuInternal - ldr r0, [r0] - movs r1, 0x86 - lsls r1, 2 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0x7 - bhi _0811F02C - lsls r0, 2 - ldr r1, _0811EF68 @ =_0811EF6C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0811EF64: .4byte sPartyMenuInternal -_0811EF68: .4byte _0811EF6C - .align 2, 0 -_0811EF6C: - .4byte _0811EF8C - .4byte _0811EFB4 - .4byte _0811EFD4 - .4byte _0811F000 - .4byte _0811F004 - .4byte _0811F008 - .4byte _0811F00C - .4byte _0811F010 -_0811EF8C: - ldr r4, _0811EFAC @ =sPartyBgGfxTilemap - ldr r0, _0811EFB0 @ =gPartyMenuBg_Gfx - mov r1, sp - bl MallocAndDecompress - adds r1, r0, 0 - str r1, [r4] - ldr r2, [sp] - lsls r2, 16 - lsrs r2, 16 - movs r0, 0x1 - movs r3, 0 - bl LoadBgTiles - b _0811F016 - .align 2, 0 -_0811EFAC: .4byte sPartyBgGfxTilemap -_0811EFB0: .4byte gPartyMenuBg_Gfx -_0811EFB4: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0811F030 - ldr r0, _0811EFCC @ =gPartyMenuBg_Tilemap - ldr r1, _0811EFD0 @ =sPartyBgTilemapBuffer - ldr r1, [r1] - bl LZDecompressWram - b _0811F016 - .align 2, 0 -_0811EFCC: .4byte gPartyMenuBg_Tilemap -_0811EFD0: .4byte sPartyBgTilemapBuffer -_0811EFD4: - ldr r0, _0811EFF4 @ =gPartyMenuBg_Pal - movs r2, 0xB0 - lsls r2, 1 - movs r1, 0 - bl LoadCompressedPalette - ldr r0, _0811EFF8 @ =gPlttBufferUnfaded - ldr r4, _0811EFFC @ =sPartyMenuInternal - ldr r1, [r4] - adds r1, 0x18 - movs r2, 0xB0 - bl CpuSet - ldr r1, [r4] - b _0811F01A - .align 2, 0 -_0811EFF4: .4byte gPartyMenuBg_Pal -_0811EFF8: .4byte gPlttBufferUnfaded -_0811EFFC: .4byte sPartyMenuInternal -_0811F000: - movs r0, 0x4 - b _0811F012 -_0811F004: - movs r0, 0x5 - b _0811F012 -_0811F008: - movs r0, 0x6 - b _0811F012 -_0811F00C: - movs r0, 0x7 - b _0811F012 -_0811F010: - movs r0, 0x8 -_0811F012: - bl PartyPaletteBufferCopy -_0811F016: - ldr r0, _0811F028 @ =sPartyMenuInternal - ldr r1, [r0] -_0811F01A: - movs r0, 0x86 - lsls r0, 2 - adds r1, r0 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _0811F030 - .align 2, 0 -_0811F028: .4byte sPartyMenuInternal -_0811F02C: - movs r0, 0x1 - b _0811F032 -_0811F030: - movs r0, 0 -_0811F032: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end AllocPartyMenuBgGfx - - thumb_func_start PartyPaletteBufferCopy -PartyPaletteBufferCopy: @ 811F03C - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 28 - ldr r5, _0811F068 @ =gPlttBufferUnfaded + 0x60 - lsrs r4, 23 - adds r1, r5, 0 - subs r1, 0x60 - adds r1, r4, r1 - adds r0, r5, 0 - movs r2, 0x10 - bl CpuSet - ldr r0, _0811F06C @ =gPlttBufferFaded - adds r4, r0 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x10 - bl CpuSet - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811F068: .4byte gPlttBufferUnfaded + 0x60 -_0811F06C: .4byte gPlttBufferFaded - thumb_func_end PartyPaletteBufferCopy - - thumb_func_start FreePartyPointers -FreePartyPointers: @ 811F070 - push {lr} - ldr r0, _0811F0AC @ =sPartyMenuInternal - ldr r0, [r0] - cmp r0, 0 - beq _0811F07E - bl Free -_0811F07E: - ldr r0, _0811F0B0 @ =sPartyBgTilemapBuffer - ldr r0, [r0] - cmp r0, 0 - beq _0811F08A - bl Free -_0811F08A: - ldr r0, _0811F0B4 @ =sPartyBgGfxTilemap - ldr r0, [r0] - cmp r0, 0 - beq _0811F096 - bl Free -_0811F096: - ldr r0, _0811F0B8 @ =sPartyMenuBoxes - ldr r0, [r0] - cmp r0, 0 - beq _0811F0A2 - bl Free -_0811F0A2: - bl FreeAllWindowBuffers - pop {r0} - bx r0 - .align 2, 0 -_0811F0AC: .4byte sPartyMenuInternal -_0811F0B0: .4byte sPartyBgTilemapBuffer -_0811F0B4: .4byte sPartyBgGfxTilemap -_0811F0B8: .4byte sPartyMenuBoxes - thumb_func_end FreePartyPointers - - thumb_func_start InitPartyMenuBoxes -InitPartyMenuBoxes: @ 811F0BC - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _0811F108 @ =sPartyMenuBoxes - movs r0, 0x60 - bl Alloc - str r0, [r4] - movs r2, 0 - ldr r7, _0811F10C @ =sPartyBoxInfoRects + 0x20 - lsls r0, r5, 1 - adds r0, r5 - lsls r3, r0, 4 - mov r12, r4 - ldr r6, _0811F110 @ =sPartyMenuSpriteCoords -_0811F0DA: - ldr r0, [r4] - lsls r1, r2, 4 - adds r1, r0 - str r7, [r1] - lsls r0, r2, 3 - adds r0, r6 - adds r0, r3, r0 - str r0, [r1, 0x4] - strb r2, [r1, 0x8] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x5 - bls _0811F0DA - mov r1, r12 - ldr r0, [r1] - ldr r1, _0811F114 @ =sPartyBoxInfoRects - str r1, [r0] - cmp r5, 0x3 - bne _0811F118 - str r1, [r0, 0x30] - b _0811F11E - .align 2, 0 -_0811F108: .4byte sPartyMenuBoxes -_0811F10C: .4byte sPartyBoxInfoRects + 0x20 -_0811F110: .4byte sPartyMenuSpriteCoords -_0811F114: .4byte sPartyBoxInfoRects -_0811F118: - cmp r5, 0 - beq _0811F11E - str r1, [r0, 0x10] -_0811F11E: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end InitPartyMenuBoxes - - thumb_func_start RenderPartyMenuBox -RenderPartyMenuBox: @ 811F124 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0811F16C @ =gPartyMenu - ldrb r1, [r0, 0x8] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x5 - bne _0811F174 - cmp r4, 0x2 - bls _0811F174 - adds r0, r4, 0 - bl DisplayPartyPokemonDataForMultiBattle - ldr r5, _0811F170 @ =sPartyMenuBoxes - lsls r4, 4 - ldr r0, [r5] - adds r0, r4 - movs r1, 0x8 - bl LoadPartyBoxPalette - ldr r0, [r5] - adds r0, r4, r0 - ldrb r0, [r0, 0x8] - movs r1, 0x2 - bl CopyWindowToVram - ldr r0, [r5] - adds r4, r0 - ldrb r0, [r4, 0x8] - bl PutWindowTilemap - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - b _0811F22A - .align 2, 0 -_0811F16C: .4byte gPartyMenu -_0811F170: .4byte sPartyMenuBoxes -_0811F174: - movs r0, 0x64 - muls r0, r4 - ldr r1, _0811F1A4 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - bne _0811F1AC - ldr r5, _0811F1A8 @ =sPartyMenuBoxes - ldr r0, [r5] - lsls r4, 4 - adds r0, r4, r0 - ldrb r0, [r0, 0x8] - bl DrawEmptySlot - ldr r0, [r5] - adds r0, r4, r0 - ldrb r0, [r0, 0x8] - movs r1, 0x2 - bl CopyWindowToVram - b _0811F218 - .align 2, 0 -_0811F1A4: .4byte gPlayerParty -_0811F1A8: .4byte sPartyMenuBoxes -_0811F1AC: - ldr r0, _0811F1C0 @ =gPartyMenu - ldrb r0, [r0, 0x8] - movs r1, 0xF - ands r1, r0 - cmp r1, 0x4 - bne _0811F1C4 - adds r0, r4, 0 - bl DisplayPartyPokemonDataForChooseHalf - b _0811F1E2 - .align 2, 0 -_0811F1C0: .4byte gPartyMenu -_0811F1C4: - cmp r1, 0xB - bne _0811F1D0 - adds r0, r4, 0 - bl DisplayPartyPokemonDataForWirelessMinigame - b _0811F1E2 -_0811F1D0: - adds r0, r4, 0 - bl DisplayPartyPokemonDataForMoveTutorOrEvolutionItem - lsls r0, 24 - cmp r0, 0 - bne _0811F1E2 - adds r0, r4, 0 - bl DisplayPartyPokemonData -_0811F1E2: - ldr r2, _0811F1F8 @ =gPartyMenu - ldrb r1, [r2, 0x8] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x5 - bne _0811F1FC - adds r0, r4, 0 - movs r1, 0 - bl AnimatePartySlot - b _0811F216 - .align 2, 0 -_0811F1F8: .4byte gPartyMenu -_0811F1FC: - movs r0, 0x9 - ldrsb r0, [r2, r0] - cmp r0, r4 - bne _0811F20E - adds r0, r4, 0 - movs r1, 0x1 - bl AnimatePartySlot - b _0811F216 -_0811F20E: - adds r0, r4, 0 - movs r1, 0 - bl AnimatePartySlot -_0811F216: - lsls r4, 4 -_0811F218: - ldr r0, _0811F230 @ =sPartyMenuBoxes - ldr r0, [r0] - adds r0, r4, r0 - ldrb r0, [r0, 0x8] - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram -_0811F22A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811F230: .4byte sPartyMenuBoxes - thumb_func_end RenderPartyMenuBox - - thumb_func_start DisplayPartyPokemonData -DisplayPartyPokemonData: @ 811F234 - push {r4-r7,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0x64 - adds r1, r4, 0 - muls r1, r0 - ldr r0, _0811F284 @ =gPlayerParty - adds r7, r1, r0 - adds r0, r7, 0 - movs r1, 0x2D - bl GetMonData - adds r2, r0, 0 - cmp r2, 0 - beq _0811F28C - ldr r6, _0811F288 @ =sPartyMenuBoxes - ldr r0, [r6] - lsls r5, r4, 4 - adds r0, r5, r0 - ldr r2, [r0] - ldrb r0, [r0, 0x8] - movs r1, 0 - str r1, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - ldr r4, [r2] - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl _call_via_r4 - ldr r1, [r6] - adds r1, r5 - adds r0, r7, 0 - movs r2, 0 - bl DisplayPartyPokemonNickname - b _0811F2EE - .align 2, 0 -_0811F284: .4byte gPlayerParty -_0811F288: .4byte sPartyMenuBoxes -_0811F28C: - ldr r5, _0811F2F8 @ =sPartyMenuBoxes - ldr r0, [r5] - lsls r4, 4 - adds r0, r4, r0 - ldr r1, [r0] - ldrb r0, [r0, 0x8] - str r2, [sp] - str r2, [sp, 0x4] - ldr r6, [r1] - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl _call_via_r6 - ldr r1, [r5] - adds r1, r4 - adds r0, r7, 0 - movs r2, 0 - bl DisplayPartyPokemonNickname - ldr r1, [r5] - adds r1, r4 - adds r0, r7, 0 - movs r2, 0 - bl DisplayPartyPokemonLevelCheck - ldr r1, [r5] - adds r1, r4 - adds r0, r7, 0 - movs r2, 0 - bl DisplayPartyPokemonGenderNidoranCheck - ldr r1, [r5] - adds r1, r4 - adds r0, r7, 0 - movs r2, 0 - bl DisplayPartyPokemonHPCheck - ldr r1, [r5] - adds r1, r4 - adds r0, r7, 0 - movs r2, 0 - bl DisplayPartyPokemonMaxHPCheck - ldr r1, [r5] - adds r1, r4 - adds r0, r7, 0 - bl DisplayPartyPokemonHPBarCheck -_0811F2EE: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0811F2F8: .4byte sPartyMenuBoxes - thumb_func_end DisplayPartyPokemonData - - thumb_func_start DisplayPartyPokemonDescriptionData -DisplayPartyPokemonDescriptionData: @ 811F2FC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - movs r1, 0x64 - adds r2, r0, 0 - muls r2, r1 - ldr r1, _0811F380 @ =gPlayerParty - adds r6, r2, r1 - ldr r7, _0811F384 @ =sPartyMenuBoxes - ldr r1, [r7] - lsls r5, r0, 4 - adds r1, r5, r1 - ldr r2, [r1] - ldrb r0, [r1, 0x8] - movs r1, 0 - str r1, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - ldr r4, [r2] - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl _call_via_r4 - ldr r1, [r7] - adds r1, r5 - adds r0, r6, 0 - movs r2, 0 - bl DisplayPartyPokemonNickname - adds r0, r6, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _0811F368 - ldr r1, [r7] - adds r1, r5 - adds r0, r6, 0 - movs r2, 0 - bl DisplayPartyPokemonLevelCheck - ldr r1, [r7] - adds r1, r5 - adds r0, r6, 0 - movs r2, 0 - bl DisplayPartyPokemonGenderNidoranCheck -_0811F368: - ldr r1, [r7] - adds r1, r5 - mov r0, r8 - movs r2, 0 - bl DisplayPartyPokemonDescriptionText - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0811F380: .4byte gPlayerParty -_0811F384: .4byte sPartyMenuBoxes - thumb_func_end DisplayPartyPokemonDescriptionData - - thumb_func_start DisplayPartyPokemonDataForChooseHalf -DisplayPartyPokemonDataForChooseHalf: @ 811F388 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0x64 - muls r0, r4 - ldr r1, _0811F3AC @ =gPlayerParty - adds r0, r1 - ldr r5, _0811F3B0 @ =gSelectedOrderFromParty - bl GetBattleEntryEligibility - lsls r0, 24 - cmp r0, 0 - bne _0811F3C2 - adds r0, r4, 0 - movs r1, 0x6 - bl DisplayPartyPokemonDescriptionData - b _0811F3F8 - .align 2, 0 -_0811F3AC: .4byte gPlayerParty -_0811F3B0: .4byte gSelectedOrderFromParty -_0811F3B4: - adds r1, 0x2 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl DisplayPartyPokemonDescriptionData - b _0811F3F8 -_0811F3C2: - ldr r0, _0811F400 @ =gPartyMenu - ldrb r1, [r0, 0x8] - movs r0, 0xC0 - ands r0, r1 - movs r3, 0x3 - cmp r0, 0x80 - bne _0811F3D2 - movs r3, 0x2 -_0811F3D2: - movs r1, 0 - cmp r1, r3 - bcs _0811F3F0 -_0811F3D8: - adds r2, r5, r1 - ldrb r0, [r2] - cmp r0, 0 - beq _0811F3E6 - subs r0, 0x1 - cmp r0, r4 - beq _0811F3B4 -_0811F3E6: - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, r3 - bcc _0811F3D8 -_0811F3F0: - adds r0, r4, 0 - movs r1, 0x1 - bl DisplayPartyPokemonDescriptionData -_0811F3F8: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811F400: .4byte gPartyMenu - thumb_func_end DisplayPartyPokemonDataForChooseHalf - - thumb_func_start DisplayPartyPokemonDataForWirelessMinigame -DisplayPartyPokemonDataForWirelessMinigame: @ 811F404 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl IsMonAllowedInMinigame - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0811F422 - adds r0, r4, 0 - movs r1, 0x5 - bl DisplayPartyPokemonDescriptionData - b _0811F42A -_0811F422: - adds r0, r4, 0 - movs r1, 0x6 - bl DisplayPartyPokemonDescriptionData -_0811F42A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end DisplayPartyPokemonDataForWirelessMinigame - - thumb_func_start DisplayPartyPokemonDataForMoveTutorOrEvolutionItem -DisplayPartyPokemonDataForMoveTutorOrEvolutionItem: @ 811F430 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _0811F468 @ =gPlayerParty - adds r6, r1, r0 - ldr r0, _0811F46C @ =gSpecialVar_ItemId - ldrh r4, [r0] - ldr r0, _0811F470 @ =gPartyMenu - ldrb r0, [r0, 0xB] - cmp r0, 0xC - bne _0811F47C - ldr r0, _0811F474 @ =gSpecialVar_Result - movs r1, 0 - strh r1, [r0] - ldr r0, _0811F478 @ =gSpecialVar_0x8005 - ldrh r0, [r0] - cmp r0, 0xE - bhi _0811F492 - lsls r2, r0, 24 - lsrs r2, 24 - adds r0, r5, 0 - movs r1, 0 - bl DisplayPartyPokemonDataToTeachMove - b _0811F4C6 - .align 2, 0 -_0811F468: .4byte gPlayerParty -_0811F46C: .4byte gSpecialVar_ItemId -_0811F470: .4byte gPartyMenu -_0811F474: .4byte gSpecialVar_Result -_0811F478: .4byte gSpecialVar_0x8005 -_0811F47C: - cmp r0, 0x3 - bne _0811F492 - adds r0, r4, 0 - bl GetItemCompatibilityRule - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0811F496 - cmp r0, 0x2 - beq _0811F4A2 -_0811F492: - movs r0, 0 - b _0811F4C8 -_0811F496: - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0 - bl DisplayPartyPokemonDataToTeachMove - b _0811F4C6 -_0811F4A2: - adds r0, r6, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _0811F4BE - adds r0, r6, 0 - movs r1, 0x3 - adds r2, r4, 0 - bl GetEvolutionTargetSpecies - lsls r0, 16 - cmp r0, 0 - bne _0811F492 -_0811F4BE: - adds r0, r5, 0 - movs r1, 0 - bl DisplayPartyPokemonDescriptionData -_0811F4C6: - movs r0, 0x1 -_0811F4C8: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end DisplayPartyPokemonDataForMoveTutorOrEvolutionItem - - thumb_func_start DisplayPartyPokemonDataToTeachMove -DisplayPartyPokemonDataToTeachMove: @ 811F4D0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 24 - lsrs r2, 24 - movs r0, 0x64 - muls r0, r4 - ldr r3, _0811F4FC @ =gPlayerParty - adds r0, r3 - bl CanMonLearnTMTutor - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - beq _0811F50E - cmp r0, 0x2 - bgt _0811F500 - cmp r0, 0x1 - beq _0811F504 - b _0811F518 - .align 2, 0 -_0811F4FC: .4byte gPlayerParty -_0811F500: - cmp r0, 0x3 - bne _0811F518 -_0811F504: - adds r0, r4, 0 - movs r1, 0x8 - bl DisplayPartyPokemonDescriptionData - b _0811F520 -_0811F50E: - adds r0, r4, 0 - movs r1, 0x9 - bl DisplayPartyPokemonDescriptionData - b _0811F520 -_0811F518: - adds r0, r4, 0 - movs r1, 0x7 - bl DisplayPartyPokemonDescriptionData -_0811F520: - pop {r4} - pop {r0} - bx r0 - thumb_func_end DisplayPartyPokemonDataToTeachMove - - thumb_func_start DisplayPartyPokemonDataForMultiBattle -DisplayPartyPokemonDataForMultiBattle: @ 811F528 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0811F558 @ =sPartyMenuBoxes - lsls r2, r0, 4 - ldr r1, [r1] - adds r5, r1, r2 - subs r0, 0x3 - lsls r0, 24 - ldr r1, _0811F55C @ =gMultiPartnerParty - mov r8, r1 - lsrs r7, r0, 19 - adds r6, r7, r1 - ldrh r0, [r6] - cmp r0, 0 - bne _0811F560 - ldrb r0, [r5, 0x8] - bl DrawEmptySlot - b _0811F5DC - .align 2, 0 -_0811F558: .4byte sPartyMenuBoxes -_0811F55C: .4byte gMultiPartnerParty -_0811F560: - ldr r2, [r5] - ldrb r0, [r5, 0x8] - movs r1, 0 - str r1, [sp] - str r1, [sp, 0x4] - ldr r4, [r2] - movs r2, 0 - movs r3, 0 - bl _call_via_r4 - ldr r4, _0811F5E8 @ =gStringVar1 - mov r0, r8 - adds r0, 0x4 - adds r7, r0 - adds r0, r4, 0 - adds r1, r7, 0 - bl StringCopy - adds r0, r4, 0 - bl StringGetEnd10 - adds r0, r4, 0 - bl StringLength - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x5 - bhi _0811F5A0 - adds r0, r4, 0 - movs r1, 0x1 - bl ConvertInternationalString -_0811F5A0: - ldrb r0, [r5, 0x8] - ldr r3, [r5] - adds r3, 0x4 - adds r1, r4, 0 - movs r2, 0 - bl DisplayPartyPokemonBarDetail - ldrb r0, [r6, 0xF] - adds r1, r5, 0 - bl DisplayPartyPokemonLevel - ldrb r0, [r6, 0x1C] - ldrh r1, [r6] - adds r2, r7, 0 - adds r3, r5, 0 - bl DisplayPartyPokemonGender - ldrh r0, [r6, 0x10] - adds r1, r5, 0 - bl DisplayPartyPokemonHP - ldrh r0, [r6, 0x12] - adds r1, r5, 0 - bl DisplayPartyPokemonMaxHP - ldrh r0, [r6, 0x10] - ldrh r1, [r6, 0x12] - adds r2, r5, 0 - bl DisplayPartyPokemonHPBar -_0811F5DC: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0811F5E8: .4byte gStringVar1 - thumb_func_end DisplayPartyPokemonDataForMultiBattle - - thumb_func_start RenderPartyMenuBoxes -RenderPartyMenuBoxes: @ 811F5EC - push {r4,r5,lr} - ldr r5, _0811F614 @ =sPartyMenuInternal - ldr r0, [r5] - movs r4, 0x86 - lsls r4, 2 - adds r0, r4 - ldrb r0, [r0] - bl RenderPartyMenuBox - ldr r1, [r5] - adds r1, r4 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - beq _0811F618 - movs r0, 0 - b _0811F61A - .align 2, 0 -_0811F614: .4byte sPartyMenuInternal -_0811F618: - movs r0, 0x1 -_0811F61A: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end RenderPartyMenuBoxes - - thumb_func_start GetPartyMenuBgTile -GetPartyMenuBgTile: @ 811F620 - lsls r0, 16 - ldr r1, _0811F630 @ =sPartyBgGfxTilemap - lsrs r0, 11 - ldr r1, [r1] - adds r1, r0 - adds r0, r1, 0 - bx lr - .align 2, 0 -_0811F630: .4byte sPartyBgGfxTilemap - thumb_func_end GetPartyMenuBgTile - - thumb_func_start CreatePartyMonSprites -CreatePartyMonSprites: @ 811F634 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _0811F6A8 @ =gPartyMenu - ldrb r1, [r0, 0x8] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x5 - bne _0811F6E4 - cmp r7, 0x2 - bls _0811F6E4 - subs r0, r7, 0x3 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - ldr r0, _0811F6AC @ =gMultiPartnerParty - mov r9, r0 - mov r2, r10 - lsls r2, 5 - mov r8, r2 - mov r6, r8 - add r6, r9 - ldrh r0, [r6] - cmp r0, 0 - beq _0811F728 - mov r1, r9 - adds r1, 0x18 - add r1, r8 - ldr r1, [r1] - ldr r4, _0811F6B0 @ =sPartyMenuBoxes - lsls r5, r7, 4 - ldr r2, [r4] - adds r2, r5 - movs r3, 0 - str r3, [sp] - bl CreatePartyMonIconSpriteParameterized - ldrh r0, [r6] - ldrh r1, [r6, 0x2] - ldr r2, [r4] - adds r2, r5 - bl CreatePartyMonHeldItemSpriteParameterized - ldrh r0, [r6] - ldr r1, [r4] - adds r1, r5 - bl CreatePartyMonPokeballSpriteParameterized - ldrh r0, [r6, 0x10] - cmp r0, 0 - bne _0811F6B4 - movs r3, 0x7 - b _0811F6C4 - .align 2, 0 -_0811F6A8: .4byte gPartyMenu -_0811F6AC: .4byte gMultiPartnerParty -_0811F6B0: .4byte sPartyMenuBoxes -_0811F6B4: - mov r0, r9 - adds r0, 0x14 - add r0, r8 - ldr r0, [r0] - bl GetAilmentFromStatus - lsls r0, 24 - lsrs r3, r0, 24 -_0811F6C4: - ldr r1, _0811F6DC @ =gMultiPartnerParty - mov r2, r10 - lsls r0, r2, 5 - adds r0, r1 - ldrh r0, [r0] - ldr r1, _0811F6E0 @ =sPartyMenuBoxes - ldr r2, [r1] - adds r2, r5 - adds r1, r3, 0 - bl CreatePartyMonStatusSpriteParameterized - b _0811F728 - .align 2, 0 -_0811F6DC: .4byte gMultiPartnerParty -_0811F6E0: .4byte sPartyMenuBoxes -_0811F6E4: - movs r0, 0x64 - adds r1, r7, 0 - muls r1, r0 - ldr r0, _0811F738 @ =gPlayerParty - adds r6, r1, r0 - adds r0, r6, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0811F728 - ldr r4, _0811F73C @ =sPartyMenuBoxes - lsls r5, r7, 4 - ldr r1, [r4] - adds r1, r5 - adds r0, r6, 0 - adds r2, r7, 0 - bl CreatePartyMonIconSprite - ldr r1, [r4] - adds r1, r5 - adds r0, r6, 0 - bl CreatePartyMonHeldItemSprite - ldr r1, [r4] - adds r1, r5 - adds r0, r6, 0 - bl CreatePartyMonPokeballSprite - ldr r1, [r4] - adds r1, r5 - adds r0, r6, 0 - bl CreatePartyMonStatusSprite -_0811F728: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0811F738: .4byte gPlayerParty -_0811F73C: .4byte sPartyMenuBoxes - thumb_func_end CreatePartyMonSprites - - thumb_func_start CreatePartyMonSpritesLoop -CreatePartyMonSpritesLoop: @ 811F740 - push {r4,r5,lr} - ldr r5, _0811F768 @ =sPartyMenuInternal - ldr r0, [r5] - movs r4, 0x86 - lsls r4, 2 - adds r0, r4 - ldrb r0, [r0] - bl CreatePartyMonSprites - ldr r1, [r5] - adds r1, r4 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - beq _0811F76C - movs r0, 0 - b _0811F76E - .align 2, 0 -_0811F768: .4byte sPartyMenuInternal -_0811F76C: - movs r0, 0x1 -_0811F76E: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end CreatePartyMonSpritesLoop - - thumb_func_start CreateCancelConfirmPokeballSprites -CreateCancelConfirmPokeballSprites: @ 811F774 - push {r4,lr} - sub sp, 0xC - ldr r0, _0811F79C @ =gPartyMenu - ldrb r1, [r0, 0x8] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x5 - bne _0811F7A0 - movs r0, 0x7 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r1, 0xE - movs r2, 0x17 - movs r3, 0x11 - bl FillBgTilemapBufferRect - b _0811F808 - .align 2, 0 -_0811F79C: .4byte gPartyMenu -_0811F7A0: - ldr r4, _0811F7D8 @ =sPartyMenuInternal - ldr r0, [r4] - ldrb r0, [r0, 0x8] - lsls r0, 31 - cmp r0, 0 - beq _0811F7E0 - movs r0, 0xBF - movs r1, 0x88 - bl CreateSmallPokeballButtonSprite - ldr r3, [r4] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x7F - ands r0, r1 - lsls r0, 4 - ldrh r2, [r3, 0x8] - ldr r1, _0811F7DC @ =0xfffff80f - ands r1, r2 - orrs r1, r0 - strh r1, [r3, 0x8] - bl DrawCancelConfirmButtons - movs r0, 0xBF - movs r1, 0x98 - bl CreateSmallPokeballButtonSprite - b _0811F7E8 - .align 2, 0 -_0811F7D8: .4byte sPartyMenuInternal -_0811F7DC: .4byte 0xfffff80f -_0811F7E0: - movs r0, 0xC6 - movs r1, 0x94 - bl CreatePokeballButtonSprite -_0811F7E8: - ldr r3, [r4] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x7F - ands r0, r1 - lsls r0, 11 - ldr r1, [r3, 0x8] - ldr r2, _0811F810 @ =0xfffc07ff - ands r1, r2 - orrs r1, r0 - str r1, [r3, 0x8] - ldr r0, _0811F814 @ =gPartyMenu - ldrb r0, [r0, 0x9] - movs r1, 0x1 - bl AnimatePartySlot -_0811F808: - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0811F810: .4byte 0xfffc07ff -_0811F814: .4byte gPartyMenu - thumb_func_end CreateCancelConfirmPokeballSprites - - thumb_func_start AnimatePartySlot -AnimatePartySlot: @ 811F818 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r7, r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - cmp r7, 0x6 - beq _0811F884 - cmp r7, 0x7 - beq _0811F8C0 - movs r0, 0x64 - muls r0, r7 - ldr r1, _0811F87C @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0811F934 - ldr r6, _0811F880 @ =sPartyMenuBoxes - lsls r5, r7, 4 - ldr r4, [r6] - adds r4, r5 - adds r0, r7, 0 - mov r1, r8 - bl GetPartyBoxPaletteFlags - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl LoadPartyBoxPalette - ldr r0, [r6] - adds r0, r5, r0 - ldrb r0, [r0, 0x9] - mov r1, r8 - bl AnimateSelectedPartyIcon - ldr r0, [r6] - adds r5, r0 - ldrb r0, [r5, 0xB] - mov r1, r8 - bl PartyMenuStartSpriteAnim - b _0811F934 - .align 2, 0 -_0811F87C: .4byte gPlayerParty -_0811F880: .4byte sPartyMenuBoxes -_0811F884: - mov r0, r8 - cmp r0, 0 - bne _0811F89E - movs r0, 0x2 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r1, 0x17 - movs r2, 0x10 - movs r3, 0x7 - bl SetBgRectPal - b _0811F8B0 -_0811F89E: - movs r0, 0x2 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0x17 - movs r2, 0x10 - movs r3, 0x7 - bl SetBgRectPal -_0811F8B0: - ldr r0, _0811F8BC @ =sPartyMenuInternal - ldr r0, [r0] - ldrh r0, [r0, 0x8] - lsls r0, 21 - b _0811F926 - .align 2, 0 -_0811F8BC: .4byte sPartyMenuInternal -_0811F8C0: - ldr r0, _0811F8E0 @ =sPartyMenuInternal - ldr r0, [r0] - ldrb r0, [r0, 0x8] - lsls r0, 31 - cmp r0, 0 - bne _0811F8F2 - mov r0, r8 - cmp r0, 0 - bne _0811F8E4 - movs r0, 0x2 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r1, 0x17 - movs r2, 0x11 - b _0811F904 - .align 2, 0 -_0811F8E0: .4byte sPartyMenuInternal -_0811F8E4: - movs r0, 0x2 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0x17 - movs r2, 0x11 - b _0811F904 -_0811F8F2: - mov r0, r8 - cmp r0, 0 - bne _0811F90C - movs r0, 0x2 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r1, 0x17 - movs r2, 0x12 -_0811F904: - movs r3, 0x7 - bl SetBgRectPal - b _0811F91E -_0811F90C: - movs r0, 0x2 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0x17 - movs r2, 0x12 - movs r3, 0x7 - bl SetBgRectPal -_0811F91E: - ldr r0, _0811F940 @ =sPartyMenuInternal - ldr r0, [r0] - ldr r0, [r0, 0x8] - lsls r0, 14 -_0811F926: - lsrs r0, 25 - mov r1, r8 - bl PartyMenuStartSpriteAnim - movs r0, 0x1 - bl ScheduleBgCopyTilemapToVram -_0811F934: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0811F940: .4byte sPartyMenuInternal - thumb_func_end AnimatePartySlot - - thumb_func_start GetPartyBoxPaletteFlags -GetPartyBoxPaletteFlags: @ 811F944 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r1, 24 - movs r4, 0 - cmp r1, 0x1 - bne _0811F956 - movs r4, 0x1 -_0811F956: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811F9D4 @ =gPlayerParty - adds r0, r1 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - bne _0811F96C - movs r0, 0x2 - orrs r4, r0 -_0811F96C: - ldr r2, _0811F9D8 @ =gPartyMenu - ldrb r1, [r2, 0x8] - movs r0, 0x30 - ands r0, r1 - cmp r0, 0x20 - bne _0811F98C - cmp r5, 0x1 - beq _0811F984 - cmp r5, 0x4 - beq _0811F984 - cmp r5, 0x5 - bne _0811F98C -_0811F984: - movs r0, 0x8 - orrs r4, r0 - lsls r0, r4, 24 - lsrs r4, r0, 24 -_0811F98C: - ldrb r1, [r2, 0xB] - cmp r1, 0x9 - bne _0811F99A - movs r0, 0x10 - orrs r4, r0 - lsls r0, r4, 24 - lsrs r4, r0, 24 -_0811F99A: - cmp r1, 0x8 - bne _0811F9B6 - movs r0, 0x9 - ldrsb r0, [r2, r0] - cmp r5, r0 - beq _0811F9AE - movs r0, 0xA - ldrsb r0, [r2, r0] - cmp r5, r0 - bne _0811F9B6 -_0811F9AE: - movs r0, 0x4 - orrs r4, r0 - lsls r0, r4, 24 - lsrs r4, r0, 24 -_0811F9B6: - ldrb r0, [r2, 0xB] - cmp r0, 0xA - bne _0811F9CC - movs r0, 0x9 - ldrsb r0, [r2, r0] - cmp r5, r0 - bne _0811F9CC - movs r0, 0x20 - orrs r4, r0 - lsls r0, r4, 24 - lsrs r4, r0, 24 -_0811F9CC: - adds r0, r4, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0811F9D4: .4byte gPlayerParty -_0811F9D8: .4byte gPartyMenu - thumb_func_end GetPartyBoxPaletteFlags - - thumb_func_start DrawCancelConfirmButtons -DrawCancelConfirmButtons: @ 811F9DC - push {r4-r6,lr} - sub sp, 0xC - ldr r1, _0811FA18 @ =sConfirmButton_Tilemap - movs r6, 0x7 - str r6, [sp] - movs r5, 0x2 - str r5, [sp, 0x4] - movs r4, 0x11 - str r4, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x17 - movs r3, 0x10 - bl CopyToBgTilemapBufferRect_ChangePalette - ldr r1, _0811FA1C @ =sCancelButton_Tilemap - str r6, [sp] - str r5, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x17 - movs r3, 0x12 - bl CopyToBgTilemapBufferRect_ChangePalette - movs r0, 0x1 - bl ScheduleBgCopyTilemapToVram - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811FA18: .4byte sConfirmButton_Tilemap -_0811FA1C: .4byte sCancelButton_Tilemap - thumb_func_end DrawCancelConfirmButtons - - thumb_func_start IsMultiBattle -IsMultiBattle: @ 811FA20 - push {lr} - ldr r0, _0811FA34 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x4B - ands r0, r1 - cmp r0, 0x4B - beq _0811FA38 - movs r0, 0 - b _0811FA3A - .align 2, 0 -_0811FA34: .4byte gBattleTypeFlags -_0811FA38: - movs r0, 0x1 -_0811FA3A: - pop {r1} - bx r1 - thumb_func_end IsMultiBattle - - thumb_func_start SwapPartyPokemon -SwapPartyPokemon: @ 811FA40 - push {r4-r6,lr} - adds r4, r0, 0 - adds r6, r1, 0 - movs r0, 0x64 - bl Alloc - adds r5, r0, 0 - adds r1, r4, 0 - movs r2, 0x64 - bl memcpy - adds r0, r4, 0 - adds r1, r6, 0 - movs r2, 0x64 - bl memcpy - adds r0, r6, 0 - adds r1, r5, 0 - movs r2, 0x64 - bl memcpy - adds r0, r5, 0 - bl Free - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end SwapPartyPokemon - - thumb_func_start Task_ClosePartyMenu -Task_ClosePartyMenu: @ 811FA78 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - negs r0, r0 - movs r1, 0x2 - negs r1, r1 - movs r2, 0 - str r2, [sp] - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0811FAAC @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0811FAB0 @ =Task_ClosePartyMenuAndSetCB2 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0811FAAC: .4byte gTasks -_0811FAB0: .4byte Task_ClosePartyMenuAndSetCB2 - thumb_func_end Task_ClosePartyMenu - - thumb_func_start Task_ClosePartyMenuAndSetCB2 -Task_ClosePartyMenuAndSetCB2: @ 811FAB4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _0811FAE8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0811FB04 - ldr r4, _0811FAEC @ =gPartyMenu - ldrb r1, [r4, 0x8] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x1 - bne _0811FAD6 - bl UpdatePartyToFieldOrder -_0811FAD6: - ldr r0, _0811FAF0 @ =sPartyMenuInternal - ldr r0, [r0] - ldr r0, [r0, 0x4] - cmp r0, 0 - beq _0811FAF4 - bl SetMainCallback2 - b _0811FAFA - .align 2, 0 -_0811FAE8: .4byte gPaletteFade -_0811FAEC: .4byte gPartyMenu -_0811FAF0: .4byte sPartyMenuInternal -_0811FAF4: - ldr r0, [r4] - bl SetMainCallback2 -_0811FAFA: - bl FreePartyPointers - adds r0, r5, 0 - bl DestroyTask -_0811FB04: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end Task_ClosePartyMenuAndSetCB2 - - thumb_func_start GetCursorSelectionMonId -GetCursorSelectionMonId: @ 811FB0C - ldr r0, _0811FB14 @ =gPartyMenu - ldrb r0, [r0, 0x9] - bx lr - .align 2, 0 -_0811FB14: .4byte gPartyMenu - thumb_func_end GetCursorSelectionMonId - - thumb_func_start GetPartyMenuType -GetPartyMenuType: @ 811FB18 - ldr r0, _0811FB24 @ =gPartyMenu - ldrb r0, [r0, 0x8] - lsls r0, 28 - lsrs r0, 28 - bx lr - .align 2, 0 -_0811FB24: .4byte gPartyMenu - thumb_func_end GetPartyMenuType - - thumb_func_start Task_HandleChooseMonInput -Task_HandleChooseMonInput: @ 811FB28 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r6, r5, 0 - ldr r0, _0811FB64 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0811FB98 - bl sub_80BF748 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0811FB98 - bl GetCurrentPartySlotPtr - adds r4, r0, 0 - bl PartyMenuButtonHandler - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x2 - beq _0811FB78 - cmp r0, 0x2 - bgt _0811FB68 - cmp r0, 0x1 - beq _0811FB6E - b _0811FB98 - .align 2, 0 -_0811FB64: .4byte gPaletteFade -_0811FB68: - cmp r0, 0x8 - beq _0811FB82 - b _0811FB98 -_0811FB6E: - adds r0, r5, 0 - adds r1, r4, 0 - bl HandleChooseMonSelection - b _0811FB98 -_0811FB78: - adds r0, r6, 0 - adds r1, r4, 0 - bl HandleChooseMonCancel - b _0811FB98 -_0811FB82: - ldr r0, _0811FBA0 @ =sPartyMenuInternal - ldr r0, [r0] - ldrb r0, [r0, 0x8] - lsls r0, 31 - cmp r0, 0 - beq _0811FB98 - movs r0, 0x5 - bl PlaySE - bl MoveCursorToConfirm -_0811FB98: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811FBA0: .4byte sPartyMenuInternal - thumb_func_end Task_HandleChooseMonInput - - thumb_func_start GetCurrentPartySlotPtr -GetCurrentPartySlotPtr: @ 811FBA4 - push {lr} - ldr r0, _0811FBB8 @ =gPartyMenu - ldrb r1, [r0, 0xB] - cmp r1, 0x8 - beq _0811FBB2 - cmp r1, 0xA - bne _0811FBBC -_0811FBB2: - adds r0, 0xA - b _0811FBBE - .align 2, 0 -_0811FBB8: .4byte gPartyMenu -_0811FBBC: - adds r0, 0x9 -_0811FBBE: - pop {r1} - bx r1 - thumb_func_end GetCurrentPartySlotPtr - - thumb_func_start HandleChooseMonSelection -HandleChooseMonSelection: @ 811FBC4 - push {r4-r6,lr} - adds r5, r1, 0 - lsls r0, 24 - lsrs r6, r0, 24 - movs r0, 0 - ldrsb r0, [r5, r0] - cmp r0, 0x6 - bne _0811FBE4 - ldr r0, _0811FBE0 @ =gPartyMenu - ldr r1, [r0, 0x4] - adds r0, r6, 0 - bl _call_via_r1 - b _0811FD56 - .align 2, 0 -_0811FBE0: .4byte gPartyMenu -_0811FBE4: - ldr r0, _0811FBFC @ =gPartyMenu - ldrb r0, [r0, 0xB] - subs r0, 0x3 - cmp r0, 0xA - bls _0811FBF0 - b _0811FD4A -_0811FBF0: - lsls r0, 2 - ldr r1, _0811FC00 @ =_0811FC04 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0811FBFC: .4byte gPartyMenu -_0811FC00: .4byte _0811FC04 - .align 2, 0 -_0811FC04: - .4byte _0811FC46 - .4byte _0811FD4A - .4byte _0811FCC0 - .4byte _0811FCC0 - .4byte _0811FCA6 - .4byte _0811FCDA - .4byte _0811FD4A - .4byte _0811FC30 - .4byte _0811FCE8 - .4byte _0811FC8C - .4byte _0811FD34 -_0811FC30: - adds r0, r5, 0 - bl IsSelectedMonNotEgg - lsls r0, 24 - cmp r0, 0 - bne _0811FC3E - b _0811FD56 -_0811FC3E: - adds r0, r6, 0 - bl sub_80E5724 - b _0811FD56 -_0811FC46: - adds r0, r5, 0 - bl IsSelectedMonNotEgg - lsls r0, 24 - cmp r0, 0 - bne _0811FC54 - b _0811FD56 -_0811FC54: - ldr r0, _0811FC78 @ =gPartyMenu - ldrb r1, [r0, 0x8] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x1 - bne _0811FC68 - ldr r0, _0811FC7C @ =sPartyMenuInternal - ldr r1, [r0] - ldr r0, _0811FC80 @ =CB2_SetUpExitToBattleScreen - str r0, [r1, 0x4] -_0811FC68: - ldr r0, _0811FC84 @ =gItemUseCB - ldr r1, _0811FC88 @ =Task_ClosePartyMenuAfterText - ldr r2, [r0] - adds r0, r6, 0 - bl _call_via_r2 - b _0811FD56 - .align 2, 0 -_0811FC78: .4byte gPartyMenu -_0811FC7C: .4byte sPartyMenuInternal -_0811FC80: .4byte CB2_SetUpExitToBattleScreen -_0811FC84: .4byte gItemUseCB -_0811FC88: .4byte Task_ClosePartyMenuAfterText -_0811FC8C: - adds r0, r5, 0 - bl IsSelectedMonNotEgg - lsls r0, 24 - cmp r0, 0 - beq _0811FD56 - movs r0, 0x5 - bl PlaySE - adds r0, r6, 0 - bl TryTutorSelectedMon - b _0811FD56 -_0811FCA6: - adds r0, r5, 0 - bl IsSelectedMonNotEgg - lsls r0, 24 - cmp r0, 0 - beq _0811FD56 - movs r0, 0x5 - bl PlaySE - adds r0, r6, 0 - bl TryGiveMailToSelectedMon - b _0811FD56 -_0811FCC0: - adds r0, r5, 0 - bl IsSelectedMonNotEgg - lsls r0, 24 - cmp r0, 0 - beq _0811FD56 - movs r0, 0x5 - bl PlaySE - adds r0, r6, 0 - bl TryGiveItemOrMailToSelectedMon - b _0811FD56 -_0811FCDA: - movs r0, 0x5 - bl PlaySE - adds r0, r6, 0 - bl SwitchSelectedMons - b _0811FD56 -_0811FCE8: - movs r0, 0x5 - bl PlaySE - ldr r1, _0811FD24 @ =gSpecialVar_0x8004 - movs r0, 0 - ldrsb r0, [r5, r0] - strh r0, [r1] - ldr r0, _0811FD28 @ =gPartyMenu - ldrb r1, [r0, 0x8] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x7 - bne _0811FD1A - ldr r4, _0811FD2C @ =gSpecialVar_0x8005 - movs r1, 0 - ldrsb r1, [r5, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0811FD30 @ =gPlayerParty - adds r0, r1 - bl GetNumberOfRelearnableMoves - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4] -_0811FD1A: - adds r0, r6, 0 - bl Task_ClosePartyMenu - b _0811FD56 - .align 2, 0 -_0811FD24: .4byte gSpecialVar_0x8004 -_0811FD28: .4byte gPartyMenu -_0811FD2C: .4byte gSpecialVar_0x8005 -_0811FD30: .4byte gPlayerParty -_0811FD34: - adds r0, r5, 0 - bl IsSelectedMonNotEgg - lsls r0, 24 - cmp r0, 0 - beq _0811FD56 - ldrb r1, [r5] - adds r0, r6, 0 - bl TryEnterMonForMinigame - b _0811FD56 -_0811FD4A: - movs r0, 0x5 - bl PlaySE - adds r0, r6, 0 - bl Task_TryCreateSelectionWindow -_0811FD56: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end HandleChooseMonSelection - - thumb_func_start IsSelectedMonNotEgg -IsSelectedMonNotEgg: @ 811FD5C - push {lr} - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0811FD78 @ =gPlayerParty - adds r0, r1 - movs r1, 0x2D - bl GetMonData - cmp r0, 0x1 - beq _0811FD7C - movs r0, 0x1 - b _0811FD84 - .align 2, 0 -_0811FD78: .4byte gPlayerParty -_0811FD7C: - movs r0, 0x1A - bl PlaySE - movs r0, 0 -_0811FD84: - pop {r1} - bx r1 - thumb_func_end IsSelectedMonNotEgg - - thumb_func_start HandleChooseMonCancel -HandleChooseMonCancel: @ 811FD88 - push {r4,r5,lr} - adds r5, r1, 0 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0811FDA4 @ =gPartyMenu - ldrb r0, [r0, 0xB] - cmp r0, 0x8 - beq _0811FDBA - cmp r0, 0x8 - bgt _0811FDA8 - cmp r0, 0x1 - beq _0811FDB2 - b _0811FDD6 - .align 2, 0 -_0811FDA4: .4byte gPartyMenu -_0811FDA8: - cmp r0, 0xA - beq _0811FDBA - cmp r0, 0xD - beq _0811FDC8 - b _0811FDD6 -_0811FDB2: - movs r0, 0x1A - bl PlaySE - b _0811FE14 -_0811FDBA: - movs r0, 0x5 - bl PlaySE - adds r0, r4, 0 - bl FinishTwoMonAction - b _0811FE14 -_0811FDC8: - movs r0, 0x5 - bl PlaySE - adds r0, r4, 0 - bl CancelParticipationPrompt - b _0811FE14 -_0811FDD6: - movs r0, 0x5 - bl PlaySE - ldr r0, _0811FDF0 @ =gPartyMenu - ldrb r1, [r0, 0x8] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x4 - bne _0811FDF4 - adds r0, r4, 0 - bl DisplayCancelChooseMonYesNo - b _0811FE14 - .align 2, 0 -_0811FDF0: .4byte gPartyMenu -_0811FDF4: - bl MenuHelpers_LinkSomething - lsls r0, 24 - cmp r0, 0 - bne _0811FE04 - ldr r1, _0811FE1C @ =gSpecialVar_0x8004 - movs r0, 0x7 - strh r0, [r1] -_0811FE04: - ldr r0, _0811FE20 @ =gPartyMenuUseExitCallback - movs r1, 0 - strb r1, [r0] - movs r0, 0x7 - strb r0, [r5] - adds r0, r4, 0 - bl Task_ClosePartyMenu -_0811FE14: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811FE1C: .4byte gSpecialVar_0x8004 -_0811FE20: .4byte gPartyMenuUseExitCallback - thumb_func_end HandleChooseMonCancel - - thumb_func_start DisplayCancelChooseMonYesNo -DisplayCancelChooseMonYesNo: @ 811FE24 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0811FE5C @ =sPartyMenuInternal - ldr r0, [r0] - adds r0, 0xD - bl PartyMenuRemoveWindow - ldr r5, _0811FE60 @ =gStringVar4 - ldr r1, _0811FE64 @ =gUnknown_84176CF - adds r0, r5, 0 - bl StringExpandPlaceholders - adds r0, r5, 0 - movs r1, 0x1 - bl DisplayPartyMenuMessage - ldr r1, _0811FE68 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0811FE6C @ =Task_CancelChooseMonYesNo - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811FE5C: .4byte sPartyMenuInternal -_0811FE60: .4byte gStringVar4 -_0811FE64: .4byte gUnknown_84176CF -_0811FE68: .4byte gTasks -_0811FE6C: .4byte Task_CancelChooseMonYesNo - thumb_func_end DisplayCancelChooseMonYesNo - - thumb_func_start Task_CancelChooseMonYesNo -Task_CancelChooseMonYesNo: @ 811FE70 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsPartyMenuTextPrinterActive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0811FE94 - bl PartyMenuDisplayYesNoMenu - ldr r0, _0811FE9C @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _0811FEA0 @ =Task_HandleCancelChooseMonYesNoInput - str r0, [r1] -_0811FE94: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0811FE9C: .4byte gTasks -_0811FEA0: .4byte Task_HandleCancelChooseMonYesNoInput - thumb_func_end Task_CancelChooseMonYesNo - - thumb_func_start Task_HandleCancelChooseMonYesNoInput -Task_HandleCancelChooseMonYesNoInput: @ 811FEA4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _0811FECA - cmp r1, 0 - bgt _0811FEC4 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0811FEE8 - b _0811FEF4 -_0811FEC4: - cmp r1, 0x1 - beq _0811FEEE - b _0811FEF4 -_0811FECA: - ldr r0, _0811FEE0 @ =gPartyMenuUseExitCallback - strb r1, [r0] - ldr r1, _0811FEE4 @ =gPartyMenu - movs r0, 0x7 - strb r0, [r1, 0x9] - bl ClearSelectedPartyOrder - adds r0, r4, 0 - bl Task_ClosePartyMenu - b _0811FEF4 - .align 2, 0 -_0811FEE0: .4byte gPartyMenuUseExitCallback -_0811FEE4: .4byte gPartyMenu -_0811FEE8: - movs r0, 0x5 - bl PlaySE -_0811FEEE: - adds r0, r4, 0 - bl Task_ReturnToChooseMonAfterText -_0811FEF4: - pop {r4} - pop {r0} - bx r0 - thumb_func_end Task_HandleCancelChooseMonYesNoInput - - thumb_func_start PartyMenuButtonHandler -PartyMenuButtonHandler: @ 811FEFC - push {r4,lr} - adds r4, r0, 0 - ldr r0, _0811FF14 @ =gMain - ldrh r1, [r0, 0x30] - adds r3, r0, 0 - cmp r1, 0x20 - beq _0811FF2A - cmp r1, 0x20 - bgt _0811FF18 - cmp r1, 0x10 - beq _0811FF2E - b _0811FF32 - .align 2, 0 -_0811FF14: .4byte gMain -_0811FF18: - cmp r1, 0x40 - beq _0811FF22 - cmp r1, 0x80 - beq _0811FF26 - b _0811FF32 -_0811FF22: - movs r1, 0xFF - b _0811FF4E -_0811FF26: - movs r1, 0x1 - b _0811FF4E -_0811FF2A: - movs r1, 0xFE - b _0811FF4E -_0811FF2E: - movs r1, 0x2 - b _0811FF4E -_0811FF32: - bl sub_80BF66C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0811FF46 - cmp r0, 0x2 - beq _0811FF4A - movs r1, 0 - b _0811FF4C -_0811FF46: - movs r1, 0xFF - b _0811FF4C -_0811FF4A: - movs r1, 0x1 -_0811FF4C: - ldr r3, _0811FF5C @ =gMain -_0811FF4E: - ldrh r2, [r3, 0x2E] - movs r0, 0x8 - ands r0, r2 - cmp r0, 0 - beq _0811FF60 - movs r0, 0x8 - b _0811FF8C - .align 2, 0 -_0811FF5C: .4byte gMain -_0811FF60: - lsls r0, r1, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _0811FF72 - adds r0, r4, 0 - bl UpdateCurrentPartySelection - movs r0, 0 - b _0811FF8C -_0811FF72: - movs r0, 0x1 - ands r0, r2 - cmp r0, 0 - beq _0811FF86 - movs r0, 0 - ldrsb r0, [r4, r0] - cmp r0, 0x7 - bne _0811FF86 - movs r0, 0x2 - b _0811FF8C -_0811FF86: - ldrh r1, [r3, 0x2E] - movs r0, 0x3 - ands r0, r1 -_0811FF8C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end PartyMenuButtonHandler - - thumb_func_start UpdateCurrentPartySelection -UpdateCurrentPartySelection: @ 811FF94 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldrb r4, [r5] - ldr r0, _0811FFB8 @ =gPartyMenu - ldrb r0, [r0, 0x8] - lsls r0, 26 - lsrs r0, 30 - cmp r0, 0 - bne _0811FFBC - lsls r1, 24 - asrs r1, 24 - adds r0, r5, 0 - bl UpdatePartySelectionSingleLayout - b _0811FFC6 - .align 2, 0 -_0811FFB8: .4byte gPartyMenu -_0811FFBC: - lsls r1, 24 - asrs r1, 24 - adds r0, r5, 0 - bl UpdatePartySelectionDoubleLayout -_0811FFC6: - movs r1, 0 - ldrsb r1, [r5, r1] - lsls r4, 24 - asrs r0, r4, 24 - cmp r1, r0 - beq _0811FFE8 - movs r0, 0x5 - bl PlaySE - lsrs r0, r4, 24 - movs r1, 0 - bl AnimatePartySlot - ldrb r0, [r5] - movs r1, 0x1 - bl AnimatePartySlot -_0811FFE8: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end UpdateCurrentPartySelection - - thumb_func_start UpdatePartySelectionSingleLayout -UpdatePartySelectionSingleLayout: @ 811FFF0 - push {r4,lr} - adds r4, r0, 0 - lsls r1, 24 - asrs r1, 24 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08120016 - cmp r1, r0 - bgt _0812000C - subs r0, 0x1 - cmp r1, r0 - beq _081200C0 - b _081200EE -_0812000C: - cmp r1, 0x1 - beq _0812005C - cmp r1, 0x2 - beq _08120094 - b _081200EE -_08120016: - ldrb r0, [r4] - movs r1, 0 - ldrsb r1, [r4, r1] - cmp r1, 0 - bne _08120024 - movs r0, 0x7 - b _081200EC -_08120024: - cmp r1, 0x6 - bne _08120034 - ldr r0, _08120030 @ =gPlayerPartyCount - ldrb r0, [r0] - subs r0, 0x1 - b _081200EC - .align 2, 0 -_08120030: .4byte gPlayerPartyCount -_08120034: - cmp r1, 0x7 - bne _08120058 - ldr r0, _08120048 @ =sPartyMenuInternal - ldr r0, [r0] - ldrb r0, [r0, 0x8] - lsls r0, 31 - cmp r0, 0 - beq _0812004C - movs r0, 0x6 - b _081200EC - .align 2, 0 -_08120048: .4byte sPartyMenuInternal -_0812004C: - ldr r0, _08120054 @ =gPlayerPartyCount - ldrb r0, [r0] - subs r0, 0x1 - b _081200EC - .align 2, 0 -_08120054: .4byte gPlayerPartyCount -_08120058: - subs r0, 0x1 - b _081200EC -_0812005C: - ldrb r2, [r4] - movs r0, 0 - ldrsb r0, [r4, r0] - cmp r0, 0x7 - beq _081200EA - movs r1, 0 - ldrsb r1, [r4, r1] - ldr r0, _08120084 @ =gPlayerPartyCount - ldrb r0, [r0] - subs r0, 0x1 - cmp r1, r0 - bne _08120090 - ldr r0, _08120088 @ =sPartyMenuInternal - ldr r0, [r0] - ldrb r0, [r0, 0x8] - lsls r0, 31 - cmp r0, 0 - beq _0812008C - movs r0, 0x6 - b _081200EC - .align 2, 0 -_08120084: .4byte gPlayerPartyCount -_08120088: .4byte sPartyMenuInternal -_0812008C: - movs r0, 0x7 - b _081200EC -_08120090: - adds r0, r2, 0x1 - b _081200EC -_08120094: - ldr r0, _081200B8 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r0, 0x1 - beq _081200EE - movs r0, 0 - ldrsb r0, [r4, r0] - cmp r0, 0 - bne _081200EE - ldr r0, _081200BC @ =sPartyMenuInternal - ldr r0, [r0] - ldrb r0, [r0, 0x8] - lsls r0, 28 - lsrs r0, 29 - cmp r0, 0 - bne _081200EC - movs r0, 0x1 - b _081200EC - .align 2, 0 -_081200B8: .4byte gPlayerPartyCount -_081200BC: .4byte sPartyMenuInternal -_081200C0: - movs r0, 0 - ldrsb r0, [r4, r0] - cmp r0, 0 - beq _081200EE - cmp r0, 0x6 - beq _081200EE - cmp r0, 0x7 - beq _081200EE - ldr r0, _081200F4 @ =sPartyMenuInternal - ldr r3, [r0] - movs r1, 0 - ldrsb r1, [r4, r1] - movs r0, 0x7 - ands r1, r0 - lsls r1, 1 - ldrb r2, [r3, 0x8] - movs r0, 0xF - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x8] -_081200EA: - movs r0, 0 -_081200EC: - strb r0, [r4] -_081200EE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081200F4: .4byte sPartyMenuInternal - thumb_func_end UpdatePartySelectionSingleLayout - - thumb_func_start UpdatePartySelectionDoubleLayout -UpdatePartySelectionDoubleLayout: @ 81200F8 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r1, 24 - lsrs r2, r1, 24 - asrs r5, r1, 24 - movs r6, 0x1 - negs r6, r6 - cmp r5, r6 - beq _08120124 - cmp r5, r6 - bgt _0812011A - movs r0, 0x2 - negs r0, r0 - cmp r5, r0 - bne _08120118 - b _08120238 -_08120118: - b _08120290 -_0812011A: - cmp r5, 0x1 - beq _08120180 - cmp r5, 0x2 - beq _081201C0 - b _08120290 -_08120124: - ldrb r1, [r4] - movs r0, 0 - ldrsb r0, [r4, r0] - cmp r0, 0 - bne _08120132 - movs r0, 0x7 - b _0812028E -_08120132: - cmp r0, 0x6 - bne _08120144 - ldr r0, _08120140 @ =gPlayerPartyCount - ldrb r0, [r0] - subs r0, 0x1 - b _0812028E - .align 2, 0 -_08120140: .4byte gPlayerPartyCount -_08120144: - cmp r0, 0x7 - bne _08120160 - ldr r0, _08120158 @ =sPartyMenuInternal - ldr r0, [r0] - ldrb r0, [r0, 0x8] - lsls r0, 31 - cmp r0, 0 - beq _0812015C - movs r0, 0x6 - b _0812028E - .align 2, 0 -_08120158: .4byte sPartyMenuInternal -_0812015C: - subs r0, r1, 0x1 - strb r0, [r4] -_08120160: - movs r0, 0 - ldrsb r0, [r4, r0] - lsls r1, r2, 24 - asrs r1, 24 - bl GetNewSlotDoubleLayout - lsls r0, 24 - lsrs r2, r0, 24 - asrs r0, 24 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _0812017C - b _08120290 -_0812017C: - strb r2, [r4] - b _08120290 -_08120180: - movs r0, 0 - ldrsb r0, [r4, r0] - cmp r0, 0x6 - bne _0812018C - movs r0, 0x7 - b _0812028E -_0812018C: - cmp r0, 0x7 - bne _08120194 - movs r0, 0 - b _0812028E -_08120194: - movs r0, 0 - ldrsb r0, [r4, r0] - movs r1, 0x1 - bl GetNewSlotDoubleLayout - lsls r0, 24 - lsrs r2, r0, 24 - asrs r0, 24 - cmp r0, r6 - bne _0812017C - ldr r0, _081201B8 @ =sPartyMenuInternal - ldr r0, [r0] - ldrb r0, [r0, 0x8] - lsls r0, 31 - cmp r0, 0 - beq _081201BC - movs r0, 0x6 - b _0812028E - .align 2, 0 -_081201B8: .4byte sPartyMenuInternal -_081201BC: - movs r0, 0x7 - b _0812028E -_081201C0: - movs r0, 0 - ldrsb r0, [r4, r0] - cmp r0, 0 - bne _081201F8 - ldr r0, _081201E8 @ =sPartyMenuInternal - ldr r0, [r0] - ldrb r0, [r0, 0x8] - lsls r0, 28 - lsrs r6, r0, 29 - cmp r6, 0x3 - bne _081201F0 - ldr r0, _081201EC @ =gPlayerParty + 300 @ &gPlayerParty[3] - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _08120290 - strb r6, [r4] - b _08120290 - .align 2, 0 -_081201E8: .4byte sPartyMenuInternal -_081201EC: .4byte gPlayerParty + 300 @ &gPlayerParty[3] -_081201F0: - ldr r0, _081201F4 @ =gPlayerParty + 200 @ &gPlayerParty[2] - b _0812020C - .align 2, 0 -_081201F4: .4byte gPlayerParty + 200 @ &gPlayerParty[2] -_081201F8: - cmp r0, 0x1 - bne _08120290 - ldr r0, _0812021C @ =sPartyMenuInternal - ldr r0, [r0] - ldrb r0, [r0, 0x8] - lsls r0, 28 - lsrs r5, r0, 29 - cmp r5, 0x5 - bne _08120224 - ldr r0, _08120220 @ =gPlayerParty + 500 @ &gPlayerParty[5] -_0812020C: - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _08120290 - strb r5, [r4] - b _08120290 - .align 2, 0 -_0812021C: .4byte sPartyMenuInternal -_08120220: .4byte gPlayerParty + 500 @ &gPlayerParty[5] -_08120224: - ldr r0, _08120234 @ =gPlayerParty + 400 @ &gPlayerParty[4] - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _08120290 - movs r0, 0x4 - b _0812028E - .align 2, 0 -_08120234: .4byte gPlayerParty + 400 @ &gPlayerParty[4] -_08120238: - ldrb r1, [r4] - subs r0, r1, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08120268 - ldr r0, _08120264 @ =sPartyMenuInternal - ldr r3, [r0] - movs r1, 0 - ldrsb r1, [r4, r1] - movs r0, 0x7 - ands r1, r0 - lsls r1, 1 - ldrb r2, [r3, 0x8] - movs r0, 0xF - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x8] - movs r0, 0 - b _0812028E - .align 2, 0 -_08120264: .4byte sPartyMenuInternal -_08120268: - subs r0, r1, 0x4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08120290 - ldr r0, _08120298 @ =sPartyMenuInternal - ldr r3, [r0] - movs r1, 0 - ldrsb r1, [r4, r1] - movs r0, 0x7 - ands r1, r0 - lsls r1, 1 - ldrb r2, [r3, 0x8] - movs r0, 0xF - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x8] - movs r0, 0x1 -_0812028E: - strb r0, [r4] -_08120290: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08120298: .4byte sPartyMenuInternal - thumb_func_end UpdatePartySelectionDoubleLayout - - thumb_func_start GetNewSlotDoubleLayout -GetNewSlotDoubleLayout: @ 812029C - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - asrs r6, r1, 24 -_081202A6: - lsls r0, r5, 24 - asrs r0, 24 - adds r0, r6 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, r5, 24 - lsrs r0, r1, 24 - cmp r0, 0x5 - bhi _081202D4 - asrs r4, r1, 24 - movs r0, 0x64 - muls r0, r4 - ldr r1, _081202D0 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _081202A6 - adds r0, r4, 0 - b _081202D8 - .align 2, 0 -_081202D0: .4byte gPlayerParty -_081202D4: - movs r0, 0x1 - negs r0, r0 -_081202D8: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end GetNewSlotDoubleLayout - - thumb_func_start GetMonNickname -GetMonNickname: @ 81202E0 - push {r4,lr} - adds r4, r1, 0 - movs r1, 0x2 - adds r2, r4, 0 - bl GetMonData - adds r0, r4, 0 - bl StringGetEnd10 - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetMonNickname - - thumb_func_start DisplayPartyMenuMessage -DisplayPartyMenuMessage: @ 81202F8 - push {r4,lr} - lsls r4, r1, 24 - lsrs r4, 24 - bl PartyMenuPrintText - ldr r0, _08120320 @ =Task_PrintAndWaitForText - movs r1, 0x1 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08120324 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0x8] - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08120320: .4byte Task_PrintAndWaitForText -_08120324: .4byte gTasks - thumb_func_end DisplayPartyMenuMessage - - thumb_func_start Task_PrintAndWaitForText -Task_PrintAndWaitForText: @ 8120328 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - movs r0, 0x6 - bl RunTextPrinters_CheckActive - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - beq _08120364 - ldr r0, _0812036C @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - movs r2, 0x8 - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _0812035E - movs r0, 0x6 - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - movs r0, 0x6 - bl ClearWindowTilemap -_0812035E: - adds r0, r5, 0 - bl DestroyTask -_08120364: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812036C: .4byte gTasks - thumb_func_end Task_PrintAndWaitForText - - thumb_func_start IsPartyMenuTextPrinterActive -IsPartyMenuTextPrinterActive: @ 8120370 - push {lr} - ldr r0, _08120380 @ =Task_PrintAndWaitForText - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08120380: .4byte Task_PrintAndWaitForText - thumb_func_end IsPartyMenuTextPrinterActive - - thumb_func_start Task_WaitForLinkAndReturnToChooseMon -Task_WaitForLinkAndReturnToChooseMon: @ 8120384 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_80BF748 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _081203AA - movs r0, 0 - bl DisplayPartyMenuStdMessage - ldr r0, _081203B0 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _081203B4 @ =Task_HandleChooseMonInput - str r0, [r1] -_081203AA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081203B0: .4byte gTasks -_081203B4: .4byte Task_HandleChooseMonInput - thumb_func_end Task_WaitForLinkAndReturnToChooseMon - - thumb_func_start Task_ReturnToChooseMonAfterText -Task_ReturnToChooseMonAfterText: @ 81203B8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - bl IsPartyMenuTextPrinterActive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08120410 - movs r0, 0x6 - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - movs r0, 0x6 - bl ClearWindowTilemap - bl MenuHelpers_LinkSomething - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _081203FC - ldr r0, _081203F4 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _081203F8 @ =Task_WaitForLinkAndReturnToChooseMon - b _0812040E - .align 2, 0 -_081203F4: .4byte gTasks -_081203F8: .4byte Task_WaitForLinkAndReturnToChooseMon -_081203FC: - movs r0, 0 - bl DisplayPartyMenuStdMessage - ldr r0, _08120418 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _0812041C @ =Task_HandleChooseMonInput -_0812040E: - str r0, [r1] -_08120410: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08120418: .4byte gTasks -_0812041C: .4byte Task_HandleChooseMonInput - thumb_func_end Task_ReturnToChooseMonAfterText - - thumb_func_start DisplayGaveHeldItemMessage -DisplayGaveHeldItemMessage: @ 8120420 - push {r4-r6,lr} - adds r5, r0, 0 - lsls r1, 16 - lsrs r4, r1, 16 - lsls r2, 24 - lsrs r6, r2, 24 - lsls r3, 24 - cmp r3, 0 - bne _0812043C - ldr r3, _08120438 @ =0x0000ffff - movs r0, 0x5 - b _08120448 - .align 2, 0 -_08120438: .4byte 0x0000ffff -_0812043C: - ldr r0, _08120454 @ =gPartyMenu - ldrb r0, [r0, 0xB] - cmp r0, 0x6 - bne _0812045C - ldr r3, _08120458 @ =0x0000ffff - movs r0, 0x7 -_08120448: - adds r1, r5, 0 - adds r2, r4, 0 - bl ItemUse_SetQuestLogEvent - b _08120468 - .align 2, 0 -_08120454: .4byte gPartyMenu -_08120458: .4byte 0x0000ffff -_0812045C: - ldr r3, _08120498 @ =0x0000ffff - movs r0, 0x6 - adds r1, r5, 0 - adds r2, r4, 0 - bl ItemUse_SetQuestLogEvent -_08120468: - ldr r1, _0812049C @ =gStringVar1 - adds r0, r5, 0 - bl GetMonNickname - ldr r1, _081204A0 @ =gStringVar2 - adds r0, r4, 0 - bl CopyItemName - ldr r4, _081204A4 @ =gStringVar4 - ldr r1, _081204A8 @ =gText_PkmnWasGivenItem - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - adds r1, r6, 0 - bl DisplayPartyMenuMessage - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08120498: .4byte 0x0000ffff -_0812049C: .4byte gStringVar1 -_081204A0: .4byte gStringVar2 -_081204A4: .4byte gStringVar4 -_081204A8: .4byte gText_PkmnWasGivenItem - thumb_func_end DisplayGaveHeldItemMessage - - thumb_func_start DisplayTookHeldItemMessage -DisplayTookHeldItemMessage: @ 81204AC - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - ldr r3, _081204F8 @ =0x0000ffff - movs r0, 0x8 - adds r1, r6, 0 - adds r2, r4, 0 - bl ItemUse_SetQuestLogEvent - ldr r1, _081204FC @ =gStringVar1 - adds r0, r6, 0 - bl GetMonNickname - ldr r1, _08120500 @ =gStringVar2 - adds r0, r4, 0 - bl CopyItemName - ldr r4, _08120504 @ =gStringVar4 - ldr r1, _08120508 @ =gText_ReceivedItemFromPkmn - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - adds r1, r5, 0 - bl DisplayPartyMenuMessage - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081204F8: .4byte 0x0000ffff -_081204FC: .4byte gStringVar1 -_08120500: .4byte gStringVar2 -_08120504: .4byte gStringVar4 -_08120508: .4byte gText_ReceivedItemFromPkmn - thumb_func_end DisplayTookHeldItemMessage - - thumb_func_start DisplayAlreadyHoldingItemSwitchMessage -DisplayAlreadyHoldingItemSwitchMessage: @ 812050C - push {r4,r5,lr} - adds r4, r1, 0 - adds r5, r2, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - ldr r1, _08120548 @ =gStringVar1 - bl GetMonNickname - ldr r1, _0812054C @ =gStringVar2 - adds r0, r4, 0 - bl CopyItemName - ldr r4, _08120550 @ =gStringVar4 - ldr r1, _08120554 @ =gText_PkmnAlreadyHoldingItemSwitch - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - adds r1, r5, 0 - bl DisplayPartyMenuMessage - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08120548: .4byte gStringVar1 -_0812054C: .4byte gStringVar2 -_08120550: .4byte gStringVar4 -_08120554: .4byte gText_PkmnAlreadyHoldingItemSwitch - thumb_func_end DisplayAlreadyHoldingItemSwitchMessage - - thumb_func_start DisplaySwitchedHeldItemMessage -DisplaySwitchedHeldItemMessage: @ 8120558 - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 24 - lsrs r6, 24 - ldr r0, _081205B0 @ =gPartyMenu - movs r1, 0x9 - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _081205B4 @ =gPlayerParty - adds r0, r1 - adds r1, r5, 0 - adds r2, r4, 0 - bl sub_8124B60 - ldr r1, _081205B8 @ =gStringVar1 - adds r0, r4, 0 - bl CopyItemName - ldr r1, _081205BC @ =gStringVar2 - adds r0, r5, 0 - bl CopyItemName - ldr r4, _081205C0 @ =gStringVar4 - ldr r1, _081205C4 @ =gText_SwitchedPkmnItem - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - adds r1, r6, 0 - bl DisplayPartyMenuMessage - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081205B0: .4byte gPartyMenu -_081205B4: .4byte gPlayerParty -_081205B8: .4byte gStringVar1 -_081205BC: .4byte gStringVar2 -_081205C0: .4byte gStringVar4 -_081205C4: .4byte gText_SwitchedPkmnItem - thumb_func_end DisplaySwitchedHeldItemMessage - - thumb_func_start GiveItemToMon -GiveItemToMon: @ 81205C8 - push {r4-r7,lr} - sub sp, 0x4 - adds r6, r0, 0 - lsls r5, r1, 16 - lsrs r4, r5, 16 - adds r7, r4, 0 - adds r0, r4, 0 - bl ItemIsMail - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _081205F2 - adds r0, r6, 0 - adds r1, r4, 0 - bl GiveMailToMon - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _08120606 -_081205F2: - mov r0, sp - strb r7, [r0] - mov r1, sp - lsrs r0, r5, 24 - strb r0, [r1, 0x1] - adds r0, r6, 0 - movs r1, 0xC - mov r2, sp - bl SetMonData -_08120606: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end GiveItemToMon - - thumb_func_start TryTakeMonItem -TryTakeMonItem: @ 8120610 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r1, 0xC - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - mov r1, sp - strh r0, [r1] - cmp r0, 0 - bne _0812062C - movs r0, 0 - b _0812064E -_0812062C: - movs r1, 0x1 - bl AddBagItem - lsls r0, 24 - cmp r0, 0 - beq _0812064C - movs r1, 0 - mov r0, sp - strh r1, [r0] - adds r0, r4, 0 - movs r1, 0xC - mov r2, sp - bl SetMonData - movs r0, 0x2 - b _0812064E -_0812064C: - movs r0, 0x1 -_0812064E: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end TryTakeMonItem - - thumb_func_start BufferBagFullCantTakeItemMessage -BufferBagFullCantTakeItemMessage: @ 8120658 - push {lr} - lsls r0, 16 - lsrs r0, 16 - bl ItemId_GetPocket - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - beq _08120678 - cmp r0, 0x5 - beq _0812067E - ldr r1, _08120674 @ =gStartMenuText_Bag - b _08120686 - .align 2, 0 -_08120674: .4byte gStartMenuText_Bag -_08120678: - movs r0, 0xB6 - lsls r0, 1 - b _08120680 -_0812067E: - ldr r0, _08120698 @ =0x0000016d -_08120680: - bl ItemId_GetName - adds r1, r0, 0 -_08120686: - ldr r0, _0812069C @ =gStringVar1 - bl StringCopy - ldr r0, _081206A0 @ =gStringVar4 - ldr r1, _081206A4 @ =gText_BagFullCouldNotRemoveItem - bl StringExpandPlaceholders - pop {r0} - bx r0 - .align 2, 0 -_08120698: .4byte 0x0000016d -_0812069C: .4byte gStringVar1 -_081206A0: .4byte gStringVar4 -_081206A4: .4byte gText_BagFullCouldNotRemoveItem - thumb_func_end BufferBagFullCantTakeItemMessage - - thumb_func_start Task_PartyMenuModifyHP -Task_PartyMenuModifyHP: @ 81206A8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r0, 2 - add r0, r8 - lsls r0, 3 - ldr r1, _08120750 @ =gTasks+0x8 - adds r7, r0, r1 - ldrh r0, [r7, 0x4] - ldrh r1, [r7] - adds r0, r1 - strh r0, [r7] - ldrh r0, [r7, 0x6] - subs r0, 0x1 - strh r0, [r7, 0x6] - movs r2, 0x8 - ldrsh r0, [r7, r2] - movs r5, 0x64 - muls r0, r5 - ldr r4, _08120754 @ =gPlayerParty - adds r0, r4 - movs r1, 0x39 - adds r2, r7, 0 - bl SetMonData - movs r3, 0x8 - ldrsh r2, [r7, r3] - adds r0, r2, 0 - muls r0, r5 - adds r0, r4 - ldr r6, _08120758 @ =sPartyMenuBoxes - lsls r2, 4 - ldr r1, [r6] - adds r1, r2 - movs r2, 0x1 - bl DisplayPartyPokemonHPCheck - movs r0, 0x8 - ldrsh r2, [r7, r0] - adds r0, r2, 0 - muls r0, r5 - adds r0, r4 - lsls r2, 4 - ldr r1, [r6] - adds r1, r2 - bl DisplayPartyPokemonHPBarCheck - movs r1, 0x6 - ldrsh r0, [r7, r1] - cmp r0, 0 - beq _08120724 - movs r2, 0 - ldrsh r1, [r7, r2] - cmp r1, 0 - beq _08120724 - movs r3, 0x2 - ldrsh r0, [r7, r3] - cmp r1, r0 - bne _08120746 -_08120724: - movs r0, 0 - ldrsh r1, [r7, r0] - movs r2, 0xA - ldrsh r0, [r7, r2] - cmp r1, r0 - ble _08120740 - ldr r0, _0812075C @ =gStringVar2 - movs r3, 0xA - ldrsh r2, [r7, r3] - subs r1, r2 - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN -_08120740: - mov r0, r8 - bl SwitchTaskToFollowupFunc -_08120746: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08120750: .4byte gTasks+0x8 -_08120754: .4byte gPlayerParty -_08120758: .4byte sPartyMenuBoxes -_0812075C: .4byte gStringVar2 - thumb_func_end Task_PartyMenuModifyHP - - thumb_func_start PartyMenuModifyHP -PartyMenuModifyHP: @ 8120760 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - mov r8, r0 - mov r9, r1 - adds r5, r2, 0 - mov r10, r3 - ldr r7, [sp, 0x20] - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - mov r0, r9 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r5, 24 - lsrs r5, 24 - mov r0, r10 - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - movs r0, 0x64 - mov r6, r9 - muls r6, r0 - ldr r0, _081207E4 @ =gPlayerParty - adds r6, r0 - mov r0, r8 - lsls r4, r0, 2 - add r4, r8 - lsls r4, 3 - ldr r0, _081207E8 @ =gTasks+0x8 - adds r4, r0 - adds r0, r6, 0 - movs r1, 0x39 - bl GetMonData - strh r0, [r4] - adds r0, r6, 0 - movs r1, 0x3A - bl GetMonData - strh r0, [r4, 0x2] - lsls r5, 24 - asrs r5, 24 - strh r5, [r4, 0x4] - mov r0, r10 - strh r0, [r4, 0x6] - mov r0, r9 - strh r0, [r4, 0x8] - ldrh r0, [r4] - strh r0, [r4, 0xA] - ldr r1, _081207EC @ =Task_PartyMenuModifyHP - mov r0, r8 - adds r2, r7, 0 - bl SetTaskFuncWithFollowupFunc - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081207E4: .4byte gPlayerParty -_081207E8: .4byte gTasks+0x8 -_081207EC: .4byte Task_PartyMenuModifyHP - thumb_func_end PartyMenuModifyHP - - thumb_func_start ResetHPTaskData -ResetHPTaskData: @ 81207F0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _08120814 @ =gTasks+0x8 - adds r3, r0, r1 - cmp r5, 0x5 - bhi _08120852 - lsls r0, r5, 2 - ldr r1, _08120818 @ =_0812081C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08120814: .4byte gTasks+0x8 -_08120818: .4byte _0812081C - .align 2, 0 -_0812081C: - .4byte _08120834 - .4byte _0812083A - .4byte _0812083E - .4byte _08120842 - .4byte _08120846 - .4byte _0812084A -_08120834: - strh r2, [r3] - strh r2, [r3, 0xA] - b _08120852 -_0812083A: - strh r2, [r3, 0x2] - b _08120852 -_0812083E: - strh r2, [r3, 0x4] - b _08120852 -_08120842: - strh r2, [r3, 0x6] - b _08120852 -_08120846: - strh r2, [r3, 0x8] - b _08120852 -_0812084A: - ldr r1, _08120858 @ =Task_PartyMenuModifyHP - adds r0, r4, 0 - bl SetTaskFuncWithFollowupFunc -_08120852: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08120858: .4byte Task_PartyMenuModifyHP - thumb_func_end ResetHPTaskData - - thumb_func_start GetAilmentFromStatus -GetAilmentFromStatus: @ 812085C - push {lr} - adds r1, r0, 0 - movs r0, 0x88 - ands r0, r1 - cmp r0, 0 - beq _0812086C - movs r0, 0x1 - b _0812089E -_0812086C: - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08120878 - movs r0, 0x2 - b _0812089E -_08120878: - movs r0, 0x7 - ands r0, r1 - cmp r0, 0 - beq _08120884 - movs r0, 0x3 - b _0812089E -_08120884: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _08120890 - movs r0, 0x4 - b _0812089E -_08120890: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0812089C - movs r0, 0 - b _0812089E -_0812089C: - movs r0, 0x5 -_0812089E: - pop {r1} - bx r1 - thumb_func_end GetAilmentFromStatus - - thumb_func_start GetMonAilment -GetMonAilment: @ 81208A4 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - bne _081208B6 - movs r0, 0x7 - b _081208DE -_081208B6: - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData - bl GetAilmentFromStatus - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _081208DE - adds r0, r4, 0 - movs r1, 0 - bl CheckPartyPokerus - lsls r0, 24 - cmp r0, 0 - bne _081208DC - movs r0, 0 - b _081208DE -_081208DC: - movs r0, 0x6 -_081208DE: - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetMonAilment - - thumb_func_start SetPartyMonsAllowedInMinigame -SetPartyMonsAllowedInMinigame: @ 81208E4 - push {r4,r5,lr} - ldr r2, _08120934 @ =gPartyMenu - ldrb r1, [r2, 0x8] - movs r0, 0xF - ands r0, r1 - cmp r0, 0xB - bne _0812096E - adds r5, r2, 0 - adds r5, 0xE - movs r0, 0 - strh r0, [r2, 0xE] - ldr r0, _08120938 @ =gSpecialVar_0x8005 - ldrh r0, [r0] - cmp r0, 0 - bne _08120944 - movs r4, 0 - ldr r0, _0812093C @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r4, r0 - bcs _0812096E -_0812090C: - movs r0, 0x64 - muls r0, r4 - ldr r1, _08120940 @ =gPlayerParty - adds r0, r1 - bl IsMonAllowedInPokemonJump - lsls r0, 16 - lsrs r0, 16 - lsls r0, r4 - ldrh r1, [r5] - adds r0, r1 - strh r0, [r5] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0812093C @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r4, r0 - bcc _0812090C - b _0812096E - .align 2, 0 -_08120934: .4byte gPartyMenu -_08120938: .4byte gSpecialVar_0x8005 -_0812093C: .4byte gPlayerPartyCount -_08120940: .4byte gPlayerParty -_08120944: - movs r4, 0 - b _08120966 -_08120948: - movs r0, 0x64 - muls r0, r4 - ldr r1, _08120974 @ =gPlayerParty - adds r0, r1 - bl IsMonAllowedInDodrioBerryPicking - lsls r0, 16 - lsrs r0, 16 - lsls r0, r4 - ldrh r1, [r5] - adds r0, r1 - strh r0, [r5] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_08120966: - ldr r0, _08120978 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r4, r0 - bcc _08120948 -_0812096E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08120974: .4byte gPlayerParty -_08120978: .4byte gPlayerPartyCount - thumb_func_end SetPartyMonsAllowedInMinigame - - thumb_func_start IsMonAllowedInPokemonJump -IsMonAllowedInPokemonJump: @ 812097C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0x1 - beq _081209A2 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - bl sub_8149A00 - cmp r0, 0 - beq _081209A2 - movs r0, 0x1 - b _081209A4 -_081209A2: - movs r0, 0 -_081209A4: - pop {r4} - pop {r1} - bx r1 - thumb_func_end IsMonAllowedInPokemonJump - - thumb_func_start IsMonAllowedInDodrioBerryPicking -IsMonAllowedInDodrioBerryPicking: @ 81209AC - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0x1 - beq _081209CA - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0x55 - bne _081209CA - movs r0, 0x1 - b _081209CC -_081209CA: - movs r0, 0 -_081209CC: - pop {r4} - pop {r1} - bx r1 - thumb_func_end IsMonAllowedInDodrioBerryPicking - - thumb_func_start IsMonAllowedInMinigame -IsMonAllowedInMinigame: @ 81209D4 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _081209F0 @ =gPartyMenu - movs r2, 0xE - ldrsh r1, [r1, r2] - asrs r1, r0 - movs r0, 0x1 - ands r1, r0 - cmp r1, 0 - bne _081209EC - movs r0, 0 -_081209EC: - pop {r1} - bx r1 - .align 2, 0 -_081209F0: .4byte gPartyMenu - thumb_func_end IsMonAllowedInMinigame - - thumb_func_start TryEnterMonForMinigame -TryEnterMonForMinigame: @ 81209F4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - adds r0, r5, 0 - bl IsMonAllowedInMinigame - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08120A24 - movs r0, 0x5 - bl PlaySE - ldr r0, _08120A20 @ =gSpecialVar_0x8004 - strh r5, [r0] - adds r0, r4, 0 - bl Task_ClosePartyMenu - b _08120A46 - .align 2, 0 -_08120A20: .4byte gSpecialVar_0x8004 -_08120A24: - movs r0, 0x1A - bl PlaySE - ldr r0, _08120A4C @ =gUnknown_8417696 - movs r1, 0 - bl DisplayPartyMenuMessage - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - ldr r1, _08120A50 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08120A54 @ =Task_ReturnToChooseMonAfterText - str r1, [r0] -_08120A46: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08120A4C: .4byte gUnknown_8417696 -_08120A50: .4byte gTasks -_08120A54: .4byte Task_ReturnToChooseMonAfterText - thumb_func_end TryEnterMonForMinigame - - thumb_func_start CancelParticipationPrompt -CancelParticipationPrompt: @ 8120A58 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08120A84 @ =gUnknown_84176B8 - movs r1, 0x1 - bl DisplayPartyMenuMessage - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - ldr r1, _08120A88 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08120A8C @ =Task_CancelParticipationYesNo - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08120A84: .4byte gUnknown_84176B8 -_08120A88: .4byte gTasks -_08120A8C: .4byte Task_CancelParticipationYesNo - thumb_func_end CancelParticipationPrompt - - thumb_func_start Task_CancelParticipationYesNo -Task_CancelParticipationYesNo: @ 8120A90 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsPartyMenuTextPrinterActive - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08120AB4 - bl PartyMenuDisplayYesNoMenu - ldr r0, _08120ABC @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08120AC0 @ =Task_HandleCancelParticipationYesNoInput - str r0, [r1] -_08120AB4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08120ABC: .4byte gTasks -_08120AC0: .4byte Task_HandleCancelParticipationYesNoInput - thumb_func_end Task_CancelParticipationYesNo - - thumb_func_start Task_HandleCancelParticipationYesNoInput -Task_HandleCancelParticipationYesNoInput: @ 8120AC4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _08120AEA - cmp r1, 0 - bgt _08120AE4 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08120AFC - b _08120B10 -_08120AE4: - cmp r1, 0x1 - beq _08120B02 - b _08120B10 -_08120AEA: - ldr r1, _08120AF8 @ =gSpecialVar_0x8004 - movs r0, 0x7 - strh r0, [r1] - adds r0, r4, 0 - bl Task_ClosePartyMenu - b _08120B10 - .align 2, 0 -_08120AF8: .4byte gSpecialVar_0x8004 -_08120AFC: - movs r0, 0x5 - bl PlaySE -_08120B02: - ldr r0, _08120B18 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08120B1C @ =Task_ReturnToChooseMonAfterText - str r0, [r1] -_08120B10: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08120B18: .4byte gTasks -_08120B1C: .4byte Task_ReturnToChooseMonAfterText - thumb_func_end Task_HandleCancelParticipationYesNoInput - - thumb_func_start CanMonLearnTMTutor -CanMonLearnTMTutor: @ 8120B20 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r0, 0 - lsls r1, 16 - lsrs r4, r1, 16 - adds r7, r4, 0 - lsls r2, 24 - lsrs r6, r2, 24 - mov r8, r6 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - beq _08120B42 - movs r0, 0x3 - b _08120B9E -_08120B42: - movs r0, 0x90 - lsls r0, 1 - cmp r4, r0 - bls _08120B64 - adds r1, r4, 0 - subs r1, 0x21 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl CanMonLearnTMHM - cmp r0, 0 - beq _08120B7C - adds r0, r7, 0 - bl ItemIdToBattleMoveId - b _08120B86 -_08120B64: - adds r0, r5, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - adds r1, r6, 0 - bl CanLearnTutorMove - lsls r0, 24 - cmp r0, 0 - bne _08120B80 -_08120B7C: - movs r0, 0x1 - b _08120B9E -_08120B80: - mov r0, r8 - bl GetTutorMove -_08120B86: - lsls r0, 16 - lsrs r1, r0, 16 - adds r0, r5, 0 - bl MonKnowsMove - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08120B9C - movs r0, 0 - b _08120B9E -_08120B9C: - movs r0, 0x2 -_08120B9E: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end CanMonLearnTMTutor - - thumb_func_start GetTutorMove -GetTutorMove: @ 8120BA8 - push {lr} - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x10 - beq _08120BC8 - cmp r1, 0x10 - bgt _08120BBC - cmp r1, 0xF - beq _08120BC2 - b _08120BD6 -_08120BBC: - cmp r1, 0x11 - beq _08120BD0 - b _08120BD6 -_08120BC2: - movs r0, 0xA9 - lsls r0, 1 @ MOVE_FRENZY_PLANT - b _08120BDE -_08120BC8: - ldr r0, _08120BCC @ =0x00000133 @ MOVE_BLAST_BURN - b _08120BDE - .align 2, 0 -_08120BCC: .4byte 0x00000133 -_08120BD0: - movs r0, 0x9A - lsls r0, 1 @ MOVE_HYDRO_CANNON - b _08120BDE -_08120BD6: - ldr r0, _08120BE4 @ =sTutorMoves - lsls r1, 1 - adds r1, r0 - ldrh r0, [r1] -_08120BDE: - pop {r1} - bx r1 - .align 2, 0 -_08120BE4: .4byte sTutorMoves - thumb_func_end GetTutorMove - - thumb_func_start CanLearnTutorMove -CanLearnTutorMove: @ 8120BE8 - push {lr} - lsls r0, 16 - lsrs r0, 16 - lsls r1, 24 - lsrs r2, r1, 24 - cmp r2, 0x10 - beq _08120C0C - cmp r2, 0x10 - bgt _08120C00 - cmp r2, 0xF - beq _08120C06 - b _08120C18 -_08120C00: - cmp r2, 0x11 - beq _08120C12 - b _08120C18 -_08120C06: - cmp r0, 3 @ SPECIES_VENUSAUR - beq _08120C34 - b _08120C2A -_08120C0C: - cmp r0, 6 @ SPECIES_CHARIZARD - beq _08120C34 - b _08120C2A -_08120C12: - cmp r0, 9 @ SPECIES_BLASTOISE - beq _08120C34 - b _08120C2A -_08120C18: - ldr r1, _08120C30 @ =sTutorLearnsets - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - asrs r0, r2 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08120C34 -_08120C2A: - movs r0, 0 - b _08120C36 - .align 2, 0 -_08120C30: .4byte sTutorLearnsets -_08120C34: - movs r0, 0x1 -_08120C36: - pop {r1} - bx r1 - thumb_func_end CanLearnTutorMove - - thumb_func_start sub_8120C3C -sub_8120C3C: @ 8120C3C - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _08120C60 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08120C5C - ldr r0, _08120C64 @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldr r0, _08120C68 @ =sub_8120C6C - str r0, [r1] -_08120C5C: - pop {r0} - bx r0 - .align 2, 0 -_08120C60: .4byte gPaletteFade -_08120C64: .4byte gTasks -_08120C68: .4byte sub_8120C6C - thumb_func_end sub_8120C3C - - thumb_func_start sub_8120C6C -sub_8120C6C: @ 8120C6C - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08120C9C @ =0xffff1fff - movs r1, 0 - str r1, [sp] - movs r1, 0x4 - movs r2, 0 - movs r3, 0x6 - bl BeginNormalPaletteFade - ldr r1, _08120CA0 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08120CA4 @ =sub_8120CA8 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08120C9C: .4byte 0xffff1fff -_08120CA0: .4byte gTasks -_08120CA4: .4byte sub_8120CA8 - thumb_func_end sub_8120C6C - - thumb_func_start sub_8120CA8 -sub_8120CA8: @ 8120CA8 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _08120CCC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08120CC8 - ldr r0, _08120CD0 @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldr r0, _08120CD4 @ =sub_8120CD8 - str r0, [r1] -_08120CC8: - pop {r0} - bx r0 - .align 2, 0 -_08120CCC: .4byte gPaletteFade -_08120CD0: .4byte gTasks -_08120CD4: .4byte sub_8120CD8 - thumb_func_end sub_8120CA8 - - thumb_func_start sub_8120CD8 -sub_8120CD8: @ 8120CD8 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_81220D4 - ldr r2, _08120D00 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r2 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x8] - ldr r0, _08120D04 @ =sub_8120D08 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08120D00: .4byte gTasks -_08120D04: .4byte sub_8120D08 - thumb_func_end sub_8120CD8 - - thumb_func_start sub_8120D08 -sub_8120D08: @ 8120D08 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r4, r1, 3 - ldr r5, _08120D38 @ =gTasks+0x8 - adds r0, r4, r5 - ldrb r0, [r0] - bl RunTextPrinters_CheckActive - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - beq _08120D30 - adds r0, r5, 0 - subs r0, 0x8 - adds r0, r4, r0 - ldr r1, _08120D3C @ =sub_8120D40 - str r1, [r0] -_08120D30: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08120D38: .4byte gTasks+0x8 -_08120D3C: .4byte sub_8120D40 - thumb_func_end sub_8120D08 - - thumb_func_start sub_8120D40 -sub_8120D40: @ 8120D40 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08120D70 @ =0xffff0008 - movs r1, 0 - str r1, [sp] - movs r1, 0x4 - movs r2, 0x6 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r1, _08120D74 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08120D78 @ =sub_8120D7C - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08120D70: .4byte 0xffff0008 -_08120D74: .4byte gTasks -_08120D78: .4byte sub_8120D7C - thumb_func_end sub_8120D40 - - thumb_func_start sub_8120D7C -sub_8120D7C: @ 8120D7C - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _08120DA0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08120D9C - ldr r0, _08120DA4 @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldr r0, _08120DA8 @ =sub_8120DAC - str r0, [r1] -_08120D9C: - pop {r0} - bx r0 - .align 2, 0 -_08120DA0: .4byte gPaletteFade -_08120DA4: .4byte gTasks -_08120DA8: .4byte sub_8120DAC - thumb_func_end sub_8120D7C - - thumb_func_start sub_8120DAC -sub_8120DAC: @ 8120DAC - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r5, _08120DD4 @ =gTasks+0x8 - adds r0, r4, r5 - ldrb r0, [r0] - ldr r1, _08120DD8 @ =gUnknown_8417494 - bl sub_8122084 - subs r5, 0x8 - adds r4, r5 - ldr r0, _08120DDC @ =sub_8120DE0 - str r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08120DD4: .4byte gTasks+0x8 -_08120DD8: .4byte gUnknown_8417494 -_08120DDC: .4byte sub_8120DE0 - thumb_func_end sub_8120DAC - - thumb_func_start sub_8120DE0 -sub_8120DE0: @ 8120DE0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r5, r1, 3 - ldr r6, _08120E14 @ =gTasks+0x8 - adds r4, r5, r6 - ldrb r0, [r4] - bl RunTextPrinters_CheckActive - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - beq _08120E0E - ldrb r0, [r4] - bl sub_8122110 - adds r0, r6, 0 - subs r0, 0x8 - adds r0, r5, r0 - ldr r1, _08120E18 @ =sub_8120E1C - str r1, [r0] -_08120E0E: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08120E14: .4byte gTasks+0x8 -_08120E18: .4byte sub_8120E1C - thumb_func_end sub_8120DE0 - - thumb_func_start sub_8120E1C -sub_8120E1C: @ 8120E1C - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08120E4C @ =0x0000fff7 - movs r1, 0 - str r1, [sp] - movs r1, 0x4 - movs r2, 0x6 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r1, _08120E50 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08120E54 @ =sub_8120E58 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08120E4C: .4byte 0x0000fff7 -_08120E50: .4byte gTasks -_08120E54: .4byte sub_8120E58 - thumb_func_end sub_8120E1C - - thumb_func_start sub_8120E58 -sub_8120E58: @ 8120E58 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08120E90 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08120EAC - movs r0, 0 - movs r1, 0x4F - movs r2, 0xD0 - bl TextWindow_SetUserSelectedFrame - movs r0, 0 - movs r1, 0x58 - movs r2, 0xF0 - bl TextWindow_SetStdFrame0_WithPal - ldr r0, _08120E94 @ =gPartyMenu - ldrb r0, [r0, 0xB] - cmp r0, 0x3 - bne _08120E98 - movs r0, 0x5 - bl DisplayPartyMenuStdMessage - b _08120E9E - .align 2, 0 -_08120E90: .4byte gPaletteFade -_08120E94: .4byte gPartyMenu -_08120E98: - movs r0, 0 - bl DisplayPartyMenuStdMessage -_08120E9E: - ldr r0, _08120EB4 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08120EB8 @ =Task_HandleChooseMonInput - str r0, [r1] -_08120EAC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08120EB4: .4byte gTasks -_08120EB8: .4byte Task_HandleChooseMonInput - thumb_func_end sub_8120E58 - - thumb_func_start sub_8120EBC -sub_8120EBC: @ 8120EBC - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08120ED8 @ =gTasks+0x8 - adds r3, r1, r0 - movs r2, 0 - strh r2, [r3] - subs r0, 0x8 - adds r1, r0 - ldr r0, _08120EDC @ =sub_8120EE0 - str r0, [r1] - bx lr - .align 2, 0 -_08120ED8: .4byte gTasks+0x8 -_08120EDC: .4byte sub_8120EE0 - thumb_func_end sub_8120EBC - - thumb_func_start sub_8120EE0 -sub_8120EE0: @ 8120EE0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08120F1C @ =gTasks+0x8 - adds r6, r0, r1 - ldr r0, _08120F20 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08120F68 - adds r0, r5, 0 - bl sub_8120F78 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08120F68 - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0xA0 - beq _08120F38 - cmp r0, 0xA0 - bgt _08120F24 - cmp r0, 0x50 - beq _08120F2A - b _08120F62 - .align 2, 0 -_08120F1C: .4byte gTasks+0x8 -_08120F20: .4byte gPaletteFade -_08120F24: - cmp r0, 0xF0 - beq _08120F44 - b _08120F62 -_08120F2A: - ldr r0, _08120F34 @ =gPartyMenu + 9 - movs r1, 0x2 - bl UpdateCurrentPartySelection - b _08120F62 - .align 2, 0 -_08120F34: .4byte gPartyMenu + 9 -_08120F38: - movs r0, 0x5 - bl PlaySE - bl CreateSelectionWindow - b _08120F62 -_08120F44: - ldr r4, _08120F70 @ =sPartyMenuInternal - ldr r0, [r4] - adds r0, 0xE - bl PartyMenuRemoveWindow - ldr r1, _08120F74 @ =sCursorOptions - ldr r0, [r4] - ldrb r0, [r0, 0xF] - lsls r0, 3 - adds r1, 0x4 - adds r0, r1 - ldr r1, [r0] - adds r0, r5, 0 - bl _call_via_r1 -_08120F62: - ldrh r0, [r6] - adds r0, 0x1 - strh r0, [r6] -_08120F68: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08120F70: .4byte sPartyMenuInternal -_08120F74: .4byte sCursorOptions - thumb_func_end sub_8120EE0 - thumb_func_start sub_8120F78 sub_8120F78: @ 8120F78 push {lr} @@ -12644,7 +7807,7 @@ sub_8124DE0: @ 8124DE0 push {r4,lr} ldr r4, _08124E0C @ =gSpecialVar_ItemId ldrh r0, [r4] - bl GetItemCompatibilityRule + bl CheckIfItemIsTMHMOrEvolutionStone lsls r0, 24 lsrs r0, 24 cmp r0, 0x2 diff --git a/asm/pokemon_jump_2.s b/asm/pokemon_jump_2.s index 44598a330..8ae94ce5e 100644 --- a/asm/pokemon_jump_2.s +++ b/asm/pokemon_jump_2.s @@ -4230,8 +4230,8 @@ sub_81499E0: @ 81499E0 _081499FC: .4byte gUnknown_203F3D4 thumb_func_end sub_81499E0 - thumb_func_start sub_8149A00 -sub_8149A00: @ 8149A00 + thumb_func_start IsSpeciesAllowedInPokemonJump +IsSpeciesAllowedInPokemonJump: @ 8149A00 push {lr} lsls r0, 16 lsrs r0, 16 @@ -4242,7 +4242,7 @@ sub_8149A00: @ 8149A00 lsrs r0, 31 pop {r1} bx r1 - thumb_func_end sub_8149A00 + thumb_func_end IsSpeciesAllowedInPokemonJump thumb_func_start sub_8149A18 sub_8149A18: @ 8149A18 @@ -4264,7 +4264,7 @@ _08149A1C: bl GetMonData lsls r0, 16 lsrs r0, 16 - bl sub_8149A00 + bl IsSpeciesAllowedInPokemonJump cmp r0, 0 beq _08149A54 ldr r1, _08149A50 @ =gSpecialVar_Result diff --git a/asm/pokemon_special_anim.s b/asm/pokemon_special_anim.s index 9092a38aa..c757216fd 100644 --- a/asm/pokemon_special_anim.s +++ b/asm/pokemon_special_anim.s @@ -558,7 +558,7 @@ _0811C9AA: adds r0, r4, 0 adds r0, 0x96 ldrh r0, [r0] - bl GetItemCompatibilityRule + bl CheckIfItemIsTMHMOrEvolutionStone lsls r0, 24 lsrs r0, 24 cmp r0, 0x2 diff --git a/asm/shop.s b/asm/shop.s index 7df8f037a..ca92ff4b7 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -793,7 +793,7 @@ _0809B118: movs r1, 0 movs r2, 0xE movs r3, 0x1E - bl SetBgRectPal + bl SetBgTilemapPalette b _0809B14E .align 2, 0 _0809B138: .4byte gUnknown_2039934 @@ -805,7 +805,7 @@ _0809B13C: movs r1, 0 movs r2, 0xC movs r3, 0x1E - bl SetBgRectPal + bl SetBgTilemapPalette _0809B14E: movs r0, 0x1 bl ScheduleBgCopyTilemapToVram diff --git a/data/strings.s b/data/strings.s index a0454c12b..547005fd6 100644 --- a/data/strings.s +++ b/data/strings.s @@ -1259,10 +1259,10 @@ gText_Speed2:: @ 841768D gUnknown_8417693:: @ 0x8417693 .string "HP$" -gUnknown_8417696:: @ 8417696 +gText_PkmnCantParticipate:: @ 8417696 .string "That POKéMON can't participate.{PAUSE_UNTIL_PRESS}$" -gUnknown_84176B8:: @ 84176B8 +gText_CancelParticipation:: @ 84176B8 .string "Cancel participation?$" gUnknown_84176CE:: @ 0x84176CE diff --git a/include/constants/global.h b/include/constants/global.h index d7508c940..68c4f8246 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -80,4 +80,6 @@ enum #define NUM_BAG_POCKETS 5 +#define MULTI_PARTY_SIZE PARTY_SIZE / 2 + #endif //GUARD_CONSTANTS_GLOBAL_H diff --git a/include/constants/party_menu.h b/include/constants/party_menu.h index f8f77f466..5c084ee6e 100644 --- a/include/constants/party_menu.h +++ b/include/constants/party_menu.h @@ -25,7 +25,11 @@ #define TUTOR_MOVE_EXPLOSION 12 #define TUTOR_MOVE_ROCK_SLIDE 13 #define TUTOR_MOVE_SUBSTITUTE 14 -#define TUTOR_MOVE_COUNT 15 +#define TUTOR_MOVE_COUNT 15 // regular tutor move count + +#define TUTOR_MOVE_FRENZY_PLANT 15 +#define TUTOR_MOVE_BLAST_BURN 16 +#define TUTOR_MOVE_HYDRO_CANNON 17 #define PARTY_LAYOUT_SINGLE 0 #define PARTY_LAYOUT_DOUBLE 1 @@ -54,7 +58,7 @@ #define PARTY_ACTION_USE_ITEM 3 #define PARTY_ACTION_ABILITY_PREVENTS 4 #define PARTY_ACTION_GIVE_ITEM 5 -#define PARTY_ACTION_GIVE_PC_ITEM 6 // Unused. Not possible to give non-mail items directly from PC +#define PARTY_ACTION_GIVE_PC_ITEM 6 // TODO: rename this one if necessary. Used for quest log. #define PARTY_ACTION_GIVE_MAILBOX_MAIL 7 #define PARTY_ACTION_SWITCH 8 #define PARTY_ACTION_SWITCHING 9 diff --git a/include/fldeff.h b/include/fldeff.h index 8dcb42500..d44ce75a2 100644 --- a/include/fldeff.h +++ b/include/fldeff.h @@ -47,7 +47,7 @@ bool8 FldEff_UseTeleport(void); // softboiled bool8 SetUpFieldMove_SoftBoiled(void); void ChooseMonForSoftboiled(u8 taskId); -void sub_80E5724(u8 taskId); +void Task_TryUseSoftboiledOnPartyMon(u8 taskId); // sweetscent bool8 SetUpFieldMove_SweetScent(void); diff --git a/include/graphics.h b/include/graphics.h index 930201403..e04f7b564 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -3746,6 +3746,9 @@ extern const u32 gPartyMenuPokeball_Pal[]; extern const u32 gPartyMenuPokeballSmall_Gfx[]; extern const u32 gStatusGfx_Icons[]; extern const u32 gStatusPal_Icons[]; +extern const u32 gPartyMenuBg_Gfx[]; +extern const u32 gPartyMenuBg_Tilemap[]; +extern const u32 gPartyMenuBg_Pal[]; // credits extern const u32 gCreditsPokeballBgGfxTiles[]; diff --git a/include/item_use.h b/include/item_use.h index db98533f1..7e9f7a61d 100644 --- a/include/item_use.h +++ b/include/item_use.h @@ -40,5 +40,6 @@ void ItemUseInBattle_EnigmaBerry(u8 taskId); void ItemUseOutOfBattle_Itemfinder(u8 taskId); void sub_80A1C44(u8 taskId); u8 CanUseEscapeRopeOnCurrMap(void); +u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId); #endif //GUARD_ITEM_USE_H diff --git a/include/menu_helpers.h b/include/menu_helpers.h index 8d042825c..1e75b336c 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -5,6 +5,9 @@ #include "task.h" #include "window.h" +#define MENU_L_PRESSED 1 +#define MENU_R_PRESSED 2 + struct YesNoFuncTable { TaskFunc yesFunc; @@ -22,9 +25,9 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1); void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 tileNum, u8 paletteNum, u8 fontId, u8 textSpeed, const u8 *string, void *taskFunc); void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 fontId, u8 left, u8 top, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo); u8 GetLRKeysState(void); -u8 sub_80BF66C(void); +u8 GetLRKeysPressedAndHeld(void); bool8 itemid_link_can_give_berry(u16 itemId); bool8 itemid_80BF6D8_mail_related(u16 itemId); -void ClearVramOamPltt(void); +void ResetVramOamAndBgCntRegs(void); #endif //GUARD_MENU_HELPERS_H diff --git a/include/new_menu_helpers.h b/include/new_menu_helpers.h index 644e65289..fdc835625 100644 --- a/include/new_menu_helpers.h +++ b/include/new_menu_helpers.h @@ -15,7 +15,7 @@ void *DecompressAndCopyTileDataToVram2(u8 bgId, const void *src, u32 size, u16 o void DecompressAndLoadBgGfxUsingHeap(u8 bgId, const void *src, u32 size, u16 offset, u8 mode); void DecompressAndLoadBgGfxUsingHeap2(u8 bgId, const void *src, u32 size, u16 offset, u8 mode); void * MallocAndDecompress(const void * src, u32 * size); -void SetBgRectPal(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette); +void SetBgTilemapPalette(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette); void CopyRectIntoAltRect(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height); void ResetBgPositions(void); void InitStandardTextBoxWindows(void); diff --git a/include/party_menu.h b/include/party_menu.h index f5b4bd827..d3eb0181f 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -11,6 +11,7 @@ struct PartyMenu TaskFunc task; u8 menuType:4; u8 layout:2; + u8 unk_8_6:2; s8 slotId; s8 slotId2; u8 action; @@ -39,11 +40,11 @@ void CB2_GiveHoldItem(void); u8 GetCursorSelectionMonId(void); void ChooseMonForDaycare(void); void AnimatePartySlot(u8 monId, u8 a1); -void DisplayPartyMenuStdMessage(u8); +void DisplayPartyMenuStdMessage(u32); void Task_HandleChooseMonInput(u8 taskId); void PartyMenuModifyHP(u8 taskId, u8 a1, s8 a2, s16 amount, TaskFunc followupFunc); -void GetMonNickname(const struct Pokemon * mon, u8 * dest); -void DisplayPartyMenuMessage(const u8 * src, u8 a1); +u8 *GetMonNickname(struct Pokemon *mon, u8 *dest); +u8 DisplayPartyMenuMessage(const u8 * src, u8 a1); bool8 IsPartyMenuTextPrinterActive(void); void InitPartyMenu(u8 a, u8 b, u8 c, u8 d, u8 messageId, TaskFunc task, MainCallback callback); void sub_81252D0(u8 taskId, TaskFunc followUpFunc); @@ -69,5 +70,6 @@ void ShowPartyMenuToShowcaseMultiBattleParty(void); void SwitchPartyMonSlots(u8 slot, u8 slot2); void LoadHeldItemIcons(void); void OpenPartyMenuInTutorialBattle(u8 partyAction); +void ClearSelectedPartyOrder(void); #endif // GUARD_PARTY_MENU_H diff --git a/include/pokemon_jump.h b/include/pokemon_jump.h index 62d0e610f..8623b223a 100644 --- a/include/pokemon_jump.h +++ b/include/pokemon_jump.h @@ -4,5 +4,6 @@ #include "main.h" void ResetPokeJumpResults(void); +bool32 IsSpeciesAllowedInPokemonJump(u16 species); #endif // GUARD_POKEMON_JUMP_H diff --git a/include/strings.h b/include/strings.h index 9242c7eaa..b60a5d568 100644 --- a/include/strings.h +++ b/include/strings.h @@ -335,6 +335,15 @@ extern const u8 gText_OtherTrainersPkmnCantBeTraded[]; extern const u8 gText_EggCantBeTradedNow[]; extern const u8 gText_OtherTrainerCantAcceptPkmn[]; extern const u8 gText_CantTradeWithTrainer[]; +extern const u8 gUnknown_84176CF[]; +extern const u8 gText_PkmnWasGivenItem[]; +extern const u8 gText_ReceivedItemFromPkmn[]; +extern const u8 gText_PkmnAlreadyHoldingItemSwitch[]; +extern const u8 gText_SwitchedPkmnItem[]; +extern const u8 gText_BagFullCouldNotRemoveItem[]; +extern const u8 gText_PkmnCantParticipate[]; +extern const u8 gText_CancelParticipation[]; +extern const u8 gUnknown_8417494[]; // credits extern const u8 gString_Dummy[]; diff --git a/src/berry_pouch.c b/src/berry_pouch.c index 466fe7927..bb1b106af 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -765,7 +765,7 @@ static void PrintSelectedBerryDescription(s32 itemIdx) static void SetDescriptionWindowBorderPalette(s32 pal) { - SetBgRectPal(1, 0, 16, 30, 4, pal + 1); + SetBgTilemapPalette(1, 0, 16, 30, 4, pal + 1); ScheduleBgCopyTilemapToVram(1); } diff --git a/src/data/party_menu.h b/src/data/party_menu.h index fde1a80f8..c00fe3613 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -110,24 +110,6 @@ const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] = const u32 sConfirmButton_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_confirm_button.bin"); const u32 sCancelButton_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_cancel_button.bin"); -// NOTE TO MYSELF: remove these after #159 gets merged -#define TEXT_COLOR_TRANSPARENT 0x0 -#define TEXT_COLOR_WHITE 0x1 -#define TEXT_COLOR_DARK_GREY 0x2 -#define TEXT_COLOR_LIGHT_GREY 0x3 -#define TEXT_COLOR_RED 0x4 -#define TEXT_COLOR_LIGHT_RED 0x5 -#define TEXT_COLOR_GREEN 0x6 -#define TEXT_COLOR_LIGHT_GREEN 0x7 -#define TEXT_COLOR_BLUE 0x8 -#define TEXT_COLOR_LIGHT_BLUE 0x9 -#define TEXT_DYNAMIC_COLOR_1 0xA // Usually white -#define TEXT_DYNAMIC_COLOR_2 0xB // Usually white w/ tinge of green -#define TEXT_DYNAMIC_COLOR_3 0xC // Usually white -#define TEXT_DYNAMIC_COLOR_4 0xD // Usually aquamarine -#define TEXT_DYNAMIC_COLOR_5 0xE // Usually blue-green -#define TEXT_DYNAMIC_COLOR_6 0xF // Usually cerulean - const u8 sFontColorTable[][3] = { {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_DARK_GREY}, // Default diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c index d68d66d08..60437c125 100644 --- a/src/fldeff_softboiled.c +++ b/src/fldeff_softboiled.c @@ -35,7 +35,7 @@ void ChooseMonForSoftboiled(u8 taskId) gTasks[taskId].func = Task_HandleChooseMonInput; } -void sub_80E5724(u8 taskId) +void Task_TryUseSoftboiledOnPartyMon(u8 taskId) { u8 r8 = gPartyMenu.slotId; u8 r5 = gPartyMenu.slotId2; diff --git a/src/item_pc.c b/src/item_pc.c index f4320cd41..f30cf1381 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -709,7 +709,7 @@ static void ItemPc_SetScrollPosition(void) static void ItemPc_SetMessageWindowPalette(int a0) { - SetBgRectPal(1, 0, 14, 30, 6, a0 + 1); + SetBgTilemapPalette(1, 0, 14, 30, 6, a0 + 1); ScheduleBgCopyTilemapToVram(1); } diff --git a/src/item_use.c b/src/item_use.c index 73ad9a284..70673d681 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -44,37 +44,36 @@ #include "constants/songs.h" #include "constants/map_types.h" -EWRAM_DATA void (*sItemUseOnFieldCB)(u8 taskId) = NULL; - -void sub_80A1084(void); -void sub_80A109C(u8 taskId); -void sub_80A112C(u8 taskId); -void sub_80A11C0(u8 taskId); -bool8 sub_80A1194(void); -void sub_80A1208(void); -void ItemUseOnFieldCB_Bicycle(u8 taskId); -bool8 ItemUseCheckFunc_Rod(void); -void ItemUseOnFieldCB_Rod(u8 taskId); -void FieldUseFunc_EvoItem(u8 taskId); -void sub_80A1648(u8 taskId); -void sub_80A1674(u8 taskId); -void InitTMCaseFromBag(void); -void Task_InitTMCaseFromField(u8 taskId); -void InitBerryPouchFromBag(void); -void Task_InitBerryPouchFromField(u8 taskId); -void InitBerryPouchFromBattle(void); -void InitTeachyTvFromBag(void); -void Task_InitTeachyTvFromField(u8 taskId); -void sub_80A19E8(u8 taskId); -void sub_80A1A44(void); -void sub_80A1B48(u8 taskId); -void sub_80A1C08(u8 taskId); -void sub_80A1CAC(void); -void sub_80A1CC0(u8 taskId); -void sub_80A1D58(void); -void sub_80A1D68(u8 taskId); -void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId); -void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId); +static EWRAM_DATA void (*sItemUseOnFieldCB)(u8 taskId) = NULL; + +static void sub_80A1084(void); +static void sub_80A109C(u8 taskId); +static void sub_80A112C(u8 taskId); +static void sub_80A11C0(u8 taskId); +static bool8 sub_80A1194(void); +static void sub_80A1208(void); +static void ItemUseOnFieldCB_Bicycle(u8 taskId); +static bool8 ItemUseCheckFunc_Rod(void); +static void ItemUseOnFieldCB_Rod(u8 taskId); +static void sub_80A1648(u8 taskId); +static void sub_80A1674(u8 taskId); +static void InitTMCaseFromBag(void); +static void Task_InitTMCaseFromField(u8 taskId); +static void InitBerryPouchFromBag(void); +static void Task_InitBerryPouchFromField(u8 taskId); +static void InitBerryPouchFromBattle(void); +static void InitTeachyTvFromBag(void); +static void Task_InitTeachyTvFromField(u8 taskId); +static void sub_80A19E8(u8 taskId); +static void sub_80A1A44(void); +static void sub_80A1B48(u8 taskId); +static void sub_80A1C08(u8 taskId); +static void sub_80A1CAC(void); +static void sub_80A1CC0(u8 taskId); +static void sub_80A1D58(void); +static void sub_80A1D68(u8 taskId); +static void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId); +static void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId); // No clue what this is static const u8 sUnref_83E27B4[] = { @@ -132,14 +131,14 @@ static const u8 sUnref_83E27B4[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -void (*const gUnknown_83E2954[])(void) = { +static void (*const gUnknown_83E2954[])(void) = { CB2_ShowPartyMenuForItemUse, CB2_ReturnToField, NULL, NULL }; -void sub_80A0FBC(u8 taskId) +static void sub_80A0FBC(u8 taskId) { u8 itemType; if (gSpecialVar_ItemId == ITEM_ENIGMA_BERRY) @@ -160,7 +159,7 @@ void sub_80A0FBC(u8 taskId) } } -void sub_80A103C(u8 taskId) +static void sub_80A103C(u8 taskId) { if (gTasks[taskId].data[3] != 1) { @@ -171,13 +170,13 @@ void sub_80A103C(u8 taskId) sItemUseOnFieldCB(taskId); } -void sub_80A1084(void) +static void sub_80A1084(void) { sub_807DC00(); CreateTask(sub_80A109C, 8); } -void sub_80A109C(u8 taskId) +static void sub_80A109C(u8 taskId) { if (IsWeatherNotFadingIn() == TRUE) { @@ -185,7 +184,7 @@ void sub_80A109C(u8 taskId) } } -void sub_80A10C4(u8 taskId, bool8 a1, u8 a2, const u8 * str) +static void sub_80A10C4(u8 taskId, bool8 a1, u8 a2, const u8 * str) { StringExpandPlaceholders(gStringVar4, str); if (a1 == FALSE) @@ -194,12 +193,12 @@ void sub_80A10C4(u8 taskId, bool8 a1, u8 a2, const u8 * str) DisplayItemMessageOnField(taskId, a2, gStringVar4, sub_80A112C); } -void sub_80A1110(u8 taskId, bool8 a1) +static void sub_80A1110(u8 taskId, bool8 a1) { sub_80A10C4(taskId, a1, 4, gUnknown_8416425); } -void sub_80A112C(u8 taskId) +static void sub_80A112C(u8 taskId) { ClearDialogWindowAndFrame(0, 1); DestroyTask(taskId); @@ -207,7 +206,7 @@ void sub_80A112C(u8 taskId) ScriptContext2_Disable(); } -u8 GetItemCompatibilityRule(u16 itemId) +u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId) { if (ItemId_GetPocket(itemId) == POCKET_TM_CASE) return 1; @@ -217,12 +216,12 @@ u8 GetItemCompatibilityRule(u16 itemId) return 0; } -void sub_80A1184(void) +static void sub_80A1184(void) { gFieldCallback2 = sub_80A1194; } -bool8 sub_80A1194(void) +static bool8 sub_80A1194(void) { FreezeEventObjects(); ScriptContext2_Enable(); @@ -232,7 +231,7 @@ bool8 sub_80A1194(void) return TRUE; } -void sub_80A11C0(u8 taskId) +static void sub_80A11C0(u8 taskId) { if (IsWeatherNotFadingIn() == TRUE) { @@ -248,7 +247,7 @@ void FieldUseFunc_OrangeMail(u8 taskId) ItemMenu_StartFadeToExitCallback(taskId); } -void sub_80A1208(void) +static void sub_80A1208(void) { struct MailStruct mail; @@ -279,7 +278,7 @@ void FieldUseFunc_MachBike(u8 taskId) sub_80A1110(taskId, gTasks[taskId].data[3]); } -void ItemUseOnFieldCB_Bicycle(u8 taskId) +static void ItemUseOnFieldCB_Bicycle(u8 taskId) { if (!TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) PlaySE(SE_JITENSYA); @@ -300,7 +299,7 @@ void FieldUseFunc_OldRod(u8 taskId) sub_80A1110(taskId, gTasks[taskId].data[3]); } -bool8 ItemUseCheckFunc_Rod(void) +static bool8 ItemUseCheckFunc_Rod(void) { s16 x, y; u16 behavior; @@ -327,7 +326,7 @@ bool8 ItemUseCheckFunc_Rod(void) return FALSE; } -void ItemUseOnFieldCB_Rod(u8 taskId) +static void ItemUseOnFieldCB_Rod(u8 taskId) { sub_805D2C0(ItemId_GetSecondaryId(gSpecialVar_ItemId)); DestroyTask(taskId); @@ -391,13 +390,13 @@ void FieldUseFunc_PokeFlute(u8 taskId) } } -void sub_80A1648(u8 taskId) +static void sub_80A1648(u8 taskId) { PlayFanfareByFanfareNum(FANFARE_POKEFLUTE); gTasks[taskId].func = sub_80A1674; } -void sub_80A1674(u8 taskId) +static void sub_80A1674(u8 taskId) { if (WaitFanfare(FALSE)) { @@ -408,7 +407,7 @@ void sub_80A1674(u8 taskId) } } -void sub_80A16D0(u8 taskId) +static void sub_80A16D0(u8 taskId) { sub_80A0FBC(taskId); } @@ -464,12 +463,12 @@ void FieldUseFunc_TmCase(u8 taskId) } } -void InitTMCaseFromBag(void) +static void InitTMCaseFromBag(void) { InitTMCase(0, CB2_BagMenuFromStartMenu, 0); } -void Task_InitTMCaseFromField(u8 taskId) +static void Task_InitTMCaseFromField(u8 taskId) { if (!gPaletteFade.active) { @@ -495,12 +494,12 @@ void FieldUseFunc_BerryPouch(u8 taskId) } } -void InitBerryPouchFromBag(void) +static void InitBerryPouchFromBag(void) { InitBerryPouch(BERRYPOUCH_FROMFIELD, CB2_BagMenuFromStartMenu, 0); } -void Task_InitBerryPouchFromField(u8 taskId) +static void Task_InitBerryPouchFromField(u8 taskId) { if (!gPaletteFade.active) { @@ -517,7 +516,7 @@ void BattleUseFunc_BerryPouch(u8 taskId) ItemMenu_StartFadeToExitCallback(taskId); } -void InitBerryPouchFromBattle(void) +static void InitBerryPouchFromBattle(void) { InitBerryPouch(BERRYPOUCH_FROMBATTLE, sub_8107ECC, 0); } @@ -538,12 +537,12 @@ void FieldUseFunc_TeachyTv(u8 taskId) } } -void InitTeachyTvFromBag(void) +static void InitTeachyTvFromBag(void) { InitTeachyTvController(0, CB2_BagMenuFromStartMenu); } -void Task_InitTeachyTvFromField(u8 taskId) +static void Task_InitTeachyTvFromField(u8 taskId) { if (!gPaletteFade.active) { @@ -566,7 +565,7 @@ void FieldUseFunc_SuperRepel(u8 taskId) DisplayItemMessageInBag(taskId, 2, gUnknown_841659E, sub_810A1F8); } -void sub_80A19E8(u8 taskId) +static void sub_80A19E8(u8 taskId) { if (!IsSEPlaying()) { @@ -577,7 +576,7 @@ void sub_80A19E8(u8 taskId) } } -void sub_80A1A44(void) +static void sub_80A1A44(void) { RemoveBagItem(gSpecialVar_ItemId, 1); sub_8108DC8(ItemId_GetPocket(gSpecialVar_ItemId)); @@ -609,7 +608,7 @@ void FieldUseFunc_BlackFlute(u8 taskId) } } -void sub_80A1B48(u8 taskId) +static void sub_80A1B48(u8 taskId) { if (++gTasks[taskId].data[8] > 7) { @@ -638,7 +637,7 @@ void ItemUseOutOfBattle_EscapeRope(u8 taskId) sub_80A1110(taskId, gTasks[taskId].data[3]); } -void sub_80A1C08(u8 taskId) +static void sub_80A1C08(u8 taskId) { Overworld_ResetStateAfterDigEscRope(); sub_80A1A44(); @@ -668,12 +667,12 @@ void FieldUseFunc_TownMap(u8 taskId) } } -void sub_80A1CAC(void) +static void sub_80A1CAC(void) { sub_80BFF50(0, CB2_BagMenuFromStartMenu); } -void sub_80A1CC0(u8 taskId) +static void sub_80A1CC0(u8 taskId) { if (!gPaletteFade.active) { @@ -700,12 +699,12 @@ void FieldUseFunc_FameChecker(u8 taskId) } } -void sub_80A1D58(void) +static void sub_80A1D58(void) { UseFameChecker(CB2_BagMenuFromStartMenu); } -void sub_80A1D68(u8 taskId) +static void sub_80A1D68(u8 taskId) { if (!gPaletteFade.active) { @@ -774,7 +773,7 @@ void BattleUseFunc_GuardSpec(u8 taskId) } } -void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId) +static void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId) { s16 * data = gTasks[taskId].data; @@ -787,7 +786,7 @@ void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId) } } -void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId) +static void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId) { if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { @@ -796,7 +795,7 @@ void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId) } } -void ItemUse_SwitchToPartyMenuInBattle(u8 taskId) +static void ItemUse_SwitchToPartyMenuInBattle(u8 taskId) { if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH) { @@ -816,7 +815,7 @@ void BattleUseFunc_Medicine(u8 taskId) ItemUse_SwitchToPartyMenuInBattle(taskId); } -void sub_80A1FD8(u8 taskId) +static void sub_80A1FD8(u8 taskId) { gItemUseCB = ItemUseCB_SacredAsh; ItemUse_SwitchToPartyMenuInBattle(taskId); diff --git a/src/menu.c b/src/menu.c index b8a68145c..5a0da28b9 100644 --- a/src/menu.c +++ b/src/menu.c @@ -815,13 +815,13 @@ static s8 sub_81106F4(void) MultichoiceGrid_MoveCursor(0, 1); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || sub_80BF66C() == 1) + else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == 1) { PlaySE(SE_SELECT); MultichoiceGrid_MoveCursor(-1, 0); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || sub_80BF66C() == 2) + else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == 2) { PlaySE(SE_SELECT); MultichoiceGrid_MoveCursor(1, 0); @@ -857,13 +857,13 @@ static s8 sub_81107A0(void) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || sub_80BF66C() == 1) + else if (JOY_REPT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == 1) { if (oldPos != MultichoiceGrid_MoveCursorIfValid(-1, 0)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || sub_80BF66C() == 2) + else if (JOY_REPT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == 2) { if (oldPos != MultichoiceGrid_MoveCursorIfValid(1, 0)) PlaySE(SE_SELECT); diff --git a/src/menu_helpers.c b/src/menu_helpers.c index f17bff0d0..905e3c1ea 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -83,7 +83,7 @@ u8 GetLRKeysState(void) return 0; } -u8 sub_80BF66C(void) +u8 GetLRKeysPressedAndHeld(void) { if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { @@ -149,7 +149,7 @@ void SetVBlankHBlankCallbacksToNull(void) SetHBlankCallback(NULL); } -void ClearVramOamPltt(void) +void ResetVramOamAndBgCntRegs(void) { ResetAllBgsCoordinatesAndBgCntRegs(); CpuFill16(0, (void*) VRAM, VRAM_SIZE); diff --git a/src/new_menu_helpers.c b/src/new_menu_helpers.c index f879e6810..decd000d6 100644 --- a/src/new_menu_helpers.c +++ b/src/new_menu_helpers.c @@ -343,7 +343,7 @@ static u16 CopyDecompressedTileDataToVram(u8 bgId, const void *src, u16 size, u1 return LoadBgTilemap(bgId, src, size, offset); } -void SetBgRectPal(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette) +void SetBgTilemapPalette(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette) { u8 i, j; u16 *ptr = GetBgTilemapBuffer(bgId); diff --git a/src/party_menu.c b/src/party_menu.c index 674b329c2..73965c4ae 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -21,12 +21,14 @@ #include "fldeff.h" #include "gpu_regs.h" #include "graphics.h" +#include "help_system.h" #include "item.h" #include "item_menu.h" #include "item_use.h" #include "link.h" #include "link_rfu.h" #include "mail.h" +#include "mail_data.h" #include "main.h" #include "menu.h" #include "menu_helpers.h" @@ -150,6 +152,117 @@ void CursorCB_FieldMove(u8 taskId); bool8 SetUpFieldMove_Fly(void); bool8 SetUpFieldMove_Waterfall(void); bool8 SetUpFieldMove_Surf(void); +void CB2_InitPartyMenu(void); +void ResetPartyMenu(void); +bool8 ShowPartyMenu(void); +void SetPartyMonsAllowedInMinigame(void); +void ExitPartyMenu(void); +bool8 CreatePartyMonSpritesLoop(void); +bool8 AllocPartyMenuBg(void); +bool8 AllocPartyMenuBgGfx(void); +void InitPartyMenuWindows(u8 layout); +void InitPartyMenuBoxes(u8 layout); +void LoadPartyMenuPokeballGfx(void); +void LoadPartyMenuAilmentGfx(void); +bool8 RenderPartyMenuBoxes(void); +void CreateCancelConfirmPokeballSprites(void); +void CreateCancelConfirmWindows(bool8 chooseHalf); +void Task_ExitPartyMenu(u8 taskId); +void FreePartyPointers(void); +void PartyPaletteBufferCopy(u8 offset); +void DisplayPartyPokemonDataForMultiBattle(u8 slot); +void DisplayPartyPokemonDataForChooseHalf(u8 slot); +bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8 slot); +void DisplayPartyPokemonData(u8 slot); +void DisplayPartyPokemonDataForWirelessMinigame(u8 slot); +void LoadPartyBoxPalette(struct PartyMenuBox *menuBox, u8 palFlags); +void DrawEmptySlot(u8 windowId); +void DisplayPartyPokemonNickname(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c); +void DisplayPartyPokemonLevelCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c); +void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c); +void DisplayPartyPokemonHPCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c); +void DisplayPartyPokemonMaxHPCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c); +void DisplayPartyPokemonHPBarCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox); +void DisplayPartyPokemonDescriptionText(u8 stringId, struct PartyMenuBox *menuBox, u8 c); +bool8 GetBattleEntryEligibility(struct Pokemon *mon); +bool8 IsMonAllowedInMinigame(u8 slot); +void DisplayPartyPokemonDataToTeachMove(u8 slot, u16 item, u8 tutor); +u8 CanMonLearnTMTutor(struct Pokemon *mon, u16 item, u8 tutor); +void DisplayPartyPokemonBarDetail(u8 windowId, const u8 *str, u8 color, const u8 *align); +void DisplayPartyPokemonLevel(u8 level, struct PartyMenuBox *menuBox); +void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, struct PartyMenuBox *menuBox); +void DisplayPartyPokemonHP(u16 hp, struct PartyMenuBox *menuBox); +void DisplayPartyPokemonMaxHP(u16 maxhp, struct PartyMenuBox *menuBox); +void DisplayPartyPokemonHPBar(u16 hp, u16 maxhp, struct PartyMenuBox *menuBox); +void CreatePartyMonIconSpriteParameterized(u16 species, u32 pid, struct PartyMenuBox *menuBox, u8 priority, bool32 handleDeoxys); +void CreatePartyMonHeldItemSpriteParameterized(u16 species, u16 item, struct PartyMenuBox *menuBox); +void CreatePartyMonPokeballSpriteParameterized(u16 species, struct PartyMenuBox *menuBox); +void CreatePartyMonStatusSpriteParameterized(u16 species, u8 status, struct PartyMenuBox *menuBox); +void CreatePartyMonIconSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox, u32 slot); +void CreatePartyMonHeldItemSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox); +void CreatePartyMonPokeballSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox); +void CreatePartyMonStatusSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox); +void CreateCancelConfirmPokeballSprites(void); +void DrawCancelConfirmButtons(void); +u8 CreatePokeballButtonSprite(u8 x, u8 y); +u8 CreateSmallPokeballButtonSprite(u8 x, u8 y); +u8 GetPartyBoxPaletteFlags(u8 slot, u8 animNum); +void AnimateSelectedPartyIcon(u8 spriteId, u8 animNum); +void PartyMenuStartSpriteAnim(u8 spriteId, u8 animNum); +void Task_ClosePartyMenuAndSetCB2(u8 taskId); +void UpdatePartyToFieldOrder(void); +s8 *GetCurrentPartySlotPtr(void); +u16 PartyMenuButtonHandler(s8 *slotPtr); +void HandleChooseMonSelection(u8 taskId, s8 *slotPtr); +void HandleChooseMonCancel(u8 taskId, s8 *slotPtr); +void MoveCursorToConfirm(void); +bool8 IsSelectedMonNotEgg(u8 *slotPtr); +void TryTutorSelectedMon(u8 taskId); +void TryGiveMailToSelectedMon(u8 taskId); +void SwitchSelectedMons(u8 taskId); +void TryEnterMonForMinigame(u8 taskId, u8 slot); +void Task_TryCreateSelectionWindow(u8 taskId); +void TryGiveItemOrMailToSelectedMon(u8 taskId); +void PartyMenuRemoveWindow(u8 *ptr); +void CB2_SetUpExitToBattleScreen(void); +void Task_ClosePartyMenuAfterText(u8 taskId); +void FinishTwoMonAction(u8 taskId); +void CancelParticipationPrompt(u8 taskId); +void DisplayCancelChooseMonYesNo(u8 taskId); +void Task_CancelChooseMonYesNo(u8 taskId); +void Task_HandleCancelChooseMonYesNoInput(u8 taskId); +void PartyMenuDisplayYesNoMenu(void); +void Task_ReturnToChooseMonAfterText(u8 taskId); +void UpdateCurrentPartySelection(s8 *slotPtr, s8 movementDir); +void UpdatePartySelectionSingleLayout(s8 *slotPtr, s8 movementDir); +void UpdatePartySelectionDoubleLayout(s8 *slotPtr, s8 movementDir); +s8 GetNewSlotDoubleLayout(s8 slotId, s8 movementDir); +void Task_PrintAndWaitForText(u8 taskId); +void PartyMenuPrintText(const u8 *text); +void sub_8124B60(struct Pokemon *mon, u16 item, u16 item2); +bool16 IsMonAllowedInPokemonJump(struct Pokemon *mon); +bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon *mon); +void Task_CancelParticipationYesNo(u8 taskId); +void Task_HandleCancelParticipationYesNoInput(u8 taskId); +void Task_TryCreateSelectionWindow(u8 taskId); +u16 GetTutorMove(u8 tutor); +bool8 CanLearnTutorMove(u16 species, u8 tutor); +void sub_8120C6C(u8 taskId); +void sub_8120CA8(u8 taskId); +void sub_8120CD8(u8 taskId); +void sub_8120D08(u8 taskId); +void sub_8120D40(u8 taskId); +void sub_8120D7C(u8 taskId); +void sub_8120DAC(u8 taskId); +void sub_8120DE0(u8 taskId); +void sub_8120E1C(u8 taskId); +void sub_8120E58(u8 taskId); +void sub_8120EE0(u8 taskId); +bool8 sub_8120F78(u8 taskId); +bool8 sub_81220D4(void); +void sub_8122084(u8 windowId, const u8 *str); +void sub_8122110(u8 windowId); +void CreateSelectionWindow(void); EWRAM_DATA struct PartyMenuInternal *sPartyMenuInternal = NULL; EWRAM_DATA struct PartyMenu gPartyMenu = {0}; @@ -170,3 +283,1677 @@ void (*gItemUseCB)(u8, TaskFunc); #include "data/pokemon/tutor_learnsets.h" #include "data/party_menu.h" + +void InitPartyMenu(u8 menuType, u8 layout, u8 partyAction, bool8 keepCursorPos, u8 messageId, TaskFunc task, MainCallback callback) +{ + u16 i; + + ResetPartyMenu(); + sPartyMenuInternal = Alloc(sizeof(struct PartyMenuInternal)); + if (sPartyMenuInternal == NULL) + { + SetMainCallback2(callback); + } + else + { + gPartyMenu.menuType = menuType; + gPartyMenu.exitCallback = callback; + gPartyMenu.action = partyAction; + sPartyMenuInternal->messageId = messageId; + sPartyMenuInternal->task = task; + sPartyMenuInternal->exitCallback = NULL; + sPartyMenuInternal->lastSelectedSlot = 0; + if (menuType == PARTY_MENU_TYPE_CHOOSE_HALF) + sPartyMenuInternal->chooseHalf = TRUE; + else + sPartyMenuInternal->chooseHalf = FALSE; + if (layout != KEEP_PARTY_LAYOUT) + gPartyMenu.layout = layout; + for (i = 0; i < NELEMS(sPartyMenuInternal->data); ++i) + sPartyMenuInternal->data[i] = 0; + for (i = 0; i < NELEMS(sPartyMenuInternal->windowId); ++i) + sPartyMenuInternal->windowId[i] = 0xFF; + if (!keepCursorPos) + gPartyMenu.slotId = 0; + else if (gPartyMenu.slotId > PARTY_SIZE - 1 || GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES) == SPECIES_NONE) + gPartyMenu.slotId = 0; + gTextFlags.autoScroll = FALSE; + CalculatePlayerPartyCount(); + SetMainCallback2(CB2_InitPartyMenu); + } +} + +void CB2_UpdatePartyMenu(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + DoScheduledBgTilemapCopiesToVram(); + UpdatePaletteFade(); +} + +void VBlankCB_PartyMenu(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void CB2_InitPartyMenu(void) +{ + while (TRUE) + { + if (sub_80BF748() == TRUE || ShowPartyMenu() == TRUE || MenuHelpers_LinkSomething() == TRUE) + break; + } +} + +bool8 ShowPartyMenu(void) +{ + switch (gMain.state) + { + case 0: + SetVBlankHBlankCallbacksToNull(); + ResetVramOamAndBgCntRegs(); + ClearScheduledBgCopiesToVram(); + ++gMain.state; + break; + case 1: + ScanlineEffect_Stop(); + ++gMain.state; + break; + case 2: + ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = TRUE; + ++gMain.state; + break; + case 3: + ResetSpriteData(); + ++gMain.state; + break; + case 4: + FreeAllSpritePalettes(); + ++gMain.state; + break; + case 5: + if (!MenuHelpers_LinkSomething()) + ResetTasks(); + ++gMain.state; + break; + case 6: + SetPartyMonsAllowedInMinigame(); + ++gMain.state; + break; + case 7: + if (!AllocPartyMenuBg()) + { + ExitPartyMenu(); + return TRUE; + } + else + { + sPartyMenuInternal->data[0] = 0; + ++gMain.state; + } + break; + case 8: + if (AllocPartyMenuBgGfx()) + ++gMain.state; + break; + case 9: + InitPartyMenuWindows(gPartyMenu.layout); + ++gMain.state; + break; + case 10: + InitPartyMenuBoxes(gPartyMenu.layout); + sPartyMenuInternal->data[0] = 0; + ++gMain.state; + break; + case 11: + LoadHeldItemIcons(); + ++gMain.state; + break; + case 12: + LoadPartyMenuPokeballGfx(); + ++gMain.state; + break; + case 13: + LoadPartyMenuAilmentGfx(); + ++gMain.state; + break; + case 14: + LoadMonIconPalettes(); + ++gMain.state; + break; + case 15: + if (CreatePartyMonSpritesLoop()) + { + sPartyMenuInternal->data[0] = 0; + ++gMain.state; + } + break; + case 16: + if (RenderPartyMenuBoxes()) + { + sPartyMenuInternal->data[0] = 0; + ++gMain.state; + } + break; + case 17: + CreateCancelConfirmPokeballSprites(); + ++gMain.state; + break; + case 18: + CreateCancelConfirmWindows(sPartyMenuInternal->chooseHalf); + ++gMain.state; + break; + case 19: + HelpSystem_SetSomeVariable2(5); + ++gMain.state; + break; + case 20: + CreateTask(sPartyMenuInternal->task, 0); + DisplayPartyMenuStdMessage(sPartyMenuInternal->messageId); + ++gMain.state; + break; + case 21: + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + ++gMain.state; + break; + case 22: + BeginNormalPaletteFade(0xFFFFFFFF, -2, 16, 0, RGB_BLACK); + gPaletteFade.bufferTransferDisabled = FALSE; + ++gMain.state; + break; + default: + SetVBlankCallback(VBlankCB_PartyMenu); + SetMainCallback2(CB2_UpdatePartyMenu); + return TRUE; + } + return FALSE; +} + +void ExitPartyMenu(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); + CreateTask(Task_ExitPartyMenu, 0); + SetVBlankCallback(VBlankCB_PartyMenu); + SetMainCallback2(CB2_UpdatePartyMenu); +} + +void Task_ExitPartyMenu(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(gPartyMenu.exitCallback); + FreePartyPointers(); + DestroyTask(taskId); + } +} + +void ResetPartyMenu(void) +{ + sPartyMenuInternal = NULL; + sPartyBgTilemapBuffer = NULL; + sPartyMenuBoxes = NULL; + sPartyBgGfxTilemap = NULL; +} + +bool8 AllocPartyMenuBg(void) +{ + ResetAllBgsCoordinatesAndBgCntRegs(); + sPartyBgTilemapBuffer = Alloc(0x800); + if (sPartyBgTilemapBuffer == NULL) + return FALSE; + memset(sPartyBgTilemapBuffer, 0, 0x800); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, sPartyMenuBgTemplates, NELEMS(sPartyMenuBgTemplates)); + SetBgTilemapBuffer(1, sPartyBgTilemapBuffer); + ScheduleBgCopyTilemapToVram(1); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + ShowBg(0); + ShowBg(1); + ShowBg(2); + return TRUE; +} + +bool8 AllocPartyMenuBgGfx(void) +{ + u32 sizeout; + + switch (sPartyMenuInternal->data[0]) + { + case 0: + sPartyBgGfxTilemap = MallocAndDecompress(gPartyMenuBg_Gfx, &sizeout); + LoadBgTiles(1, sPartyBgGfxTilemap, sizeout, 0); + ++sPartyMenuInternal->data[0]; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + LZDecompressWram(gPartyMenuBg_Tilemap, sPartyBgTilemapBuffer); + ++sPartyMenuInternal->data[0]; + } + break; + case 2: + LoadCompressedPalette(gPartyMenuBg_Pal, 0, 0x160); + CpuCopy16(gPlttBufferUnfaded, sPartyMenuInternal->palBuffer, 0x160); + ++sPartyMenuInternal->data[0]; + break; + case 3: + PartyPaletteBufferCopy(4); + ++sPartyMenuInternal->data[0]; + break; + case 4: + PartyPaletteBufferCopy(5); + ++sPartyMenuInternal->data[0]; + break; + case 5: + PartyPaletteBufferCopy(6); + ++sPartyMenuInternal->data[0]; + break; + case 6: + PartyPaletteBufferCopy(7); + ++sPartyMenuInternal->data[0]; + break; + case 7: + PartyPaletteBufferCopy(8); + ++sPartyMenuInternal->data[0]; + break; + default: + return TRUE; + } + return FALSE; +} + +void PartyPaletteBufferCopy(u8 offset) +{ + offset *= 16; + CpuCopy16(&gPlttBufferUnfaded[0x30], &gPlttBufferUnfaded[offset], 32); + CpuCopy16(&gPlttBufferUnfaded[0x30], &gPlttBufferFaded[offset], 32); +} + +void FreePartyPointers(void) +{ + if (sPartyMenuInternal) + Free(sPartyMenuInternal); + if (sPartyBgTilemapBuffer) + Free(sPartyBgTilemapBuffer); + if (sPartyBgGfxTilemap) + Free(sPartyBgGfxTilemap); + if (sPartyMenuBoxes) + Free(sPartyMenuBoxes); + FreeAllWindowBuffers(); +} + +void InitPartyMenuBoxes(u8 layout) +{ + u8 i; + + sPartyMenuBoxes = Alloc(sizeof(struct PartyMenuBox[PARTY_SIZE])); + for (i = 0; i < PARTY_SIZE; ++i) + { + sPartyMenuBoxes[i].infoRects = &sPartyBoxInfoRects[PARTY_BOX_RIGHT_COLUMN]; + sPartyMenuBoxes[i].spriteCoords = sPartyMenuSpriteCoords[layout][i]; + sPartyMenuBoxes[i].windowId = i; + } + // The first party mon goes in the left column + sPartyMenuBoxes[0].infoRects = &sPartyBoxInfoRects[PARTY_BOX_LEFT_COLUMN]; + if (layout == PARTY_LAYOUT_MULTI_SHOWCASE) + sPartyMenuBoxes[3].infoRects = &sPartyBoxInfoRects[PARTY_BOX_LEFT_COLUMN]; + else if (layout != PARTY_LAYOUT_SINGLE) + sPartyMenuBoxes[1].infoRects = &sPartyBoxInfoRects[PARTY_BOX_LEFT_COLUMN]; +} + +void RenderPartyMenuBox(u8 slot) +{ + if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE && slot >= MULTI_PARTY_SIZE) + { + DisplayPartyPokemonDataForMultiBattle(slot); + LoadPartyBoxPalette(&sPartyMenuBoxes[slot], PARTY_PAL_MULTI_ALT); + CopyWindowToVram(sPartyMenuBoxes[slot].windowId, 2); + PutWindowTilemap(sPartyMenuBoxes[slot].windowId); + ScheduleBgCopyTilemapToVram(2); + } + else + { + if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) == SPECIES_NONE) + { + DrawEmptySlot(sPartyMenuBoxes[slot].windowId); + CopyWindowToVram(sPartyMenuBoxes[slot].windowId, 2); + } + else + { + if (gPartyMenu.menuType == PARTY_MENU_TYPE_CHOOSE_HALF) + DisplayPartyPokemonDataForChooseHalf(slot); + else if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME) + DisplayPartyPokemonDataForWirelessMinigame(slot); + else if (!DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(slot)) + DisplayPartyPokemonData(slot); + if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE) + AnimatePartySlot(slot, 0); + else if (gPartyMenu.slotId == slot) + AnimatePartySlot(slot, 1); + else + AnimatePartySlot(slot, 0); + } + PutWindowTilemap(sPartyMenuBoxes[slot].windowId); + ScheduleBgCopyTilemapToVram(0); + } +} + +void DisplayPartyPokemonData(u8 slot) +{ + if (GetMonData(&gPlayerParty[slot], MON_DATA_IS_EGG)) + { + sPartyMenuBoxes[slot].infoRects->blitFunc(sPartyMenuBoxes[slot].windowId, 0, 0, 0, 0, TRUE); + DisplayPartyPokemonNickname(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0); + } + else + { + sPartyMenuBoxes[slot].infoRects->blitFunc(sPartyMenuBoxes[slot].windowId, 0, 0, 0, 0, FALSE); + DisplayPartyPokemonNickname(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0); + DisplayPartyPokemonLevelCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0); + DisplayPartyPokemonGenderNidoranCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0); + DisplayPartyPokemonHPCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0); + DisplayPartyPokemonMaxHPCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0); + DisplayPartyPokemonHPBarCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot]); + } +} + +void DisplayPartyPokemonDescriptionData(u8 slot, u8 stringId) +{ + struct Pokemon *mon = &gPlayerParty[slot]; + + sPartyMenuBoxes[slot].infoRects->blitFunc(sPartyMenuBoxes[slot].windowId, 0, 0, 0, 0, TRUE); + DisplayPartyPokemonNickname(mon, &sPartyMenuBoxes[slot], 0); + if (!GetMonData(mon, MON_DATA_IS_EGG)) + { + DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[slot], 0); + DisplayPartyPokemonGenderNidoranCheck(mon, &sPartyMenuBoxes[slot], 0); + } + DisplayPartyPokemonDescriptionText(stringId, &sPartyMenuBoxes[slot], 0); +} + +void DisplayPartyPokemonDataForChooseHalf(u8 slot) +{ + u8 i; + struct Pokemon *mon = &gPlayerParty[slot]; + u8 *order = gSelectedOrderFromParty; + u8 r3; + + if (!GetBattleEntryEligibility(mon)) + { + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE); + } + else + { + if (gPartyMenu.unk_8_6 == 2) + r3 = 2; + else + r3 = 3; + for (i = 0; i < r3; ++i) + { + if (order[i] != 0 && (order[i] - 1) == slot) + { + DisplayPartyPokemonDescriptionData(slot, i + PARTYBOX_DESC_FIRST); + return; + } + } + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE_3); + } +} + +void DisplayPartyPokemonDataForWirelessMinigame(u8 slot) +{ + if (IsMonAllowedInMinigame(slot) == TRUE) + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE); + else + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE); +} + +// Returns TRUE if teaching move or cant evolve with item (i.e. description data is shown), FALSE otherwise +bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8 slot) +{ + struct Pokemon *currentPokemon = &gPlayerParty[slot]; + u16 item = gSpecialVar_ItemId; + + if (gPartyMenu.action == PARTY_ACTION_MOVE_TUTOR) + { + gSpecialVar_Result = FALSE; + if (gSpecialVar_0x8005 > 14) + return FALSE; + DisplayPartyPokemonDataToTeachMove(slot, 0, gSpecialVar_0x8005); + } + else + { + if (gPartyMenu.action != PARTY_ACTION_USE_ITEM) + return FALSE; + switch (CheckIfItemIsTMHMOrEvolutionStone(item)) + { + default: + return FALSE; + case 1: // TM/HM + DisplayPartyPokemonDataToTeachMove(slot, item, 0); + break; + case 2: // Evolution stone + if (!GetMonData(currentPokemon, MON_DATA_IS_EGG) && GetEvolutionTargetSpecies(currentPokemon, 3, item) != SPECIES_NONE) + return FALSE; + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NO_USE); + break; + } + } + return TRUE; +} + +void DisplayPartyPokemonDataToTeachMove(u8 slot, u16 item, u8 tutor) +{ + switch (CanMonLearnTMTutor(&gPlayerParty[slot], item, tutor)) + { + case CANNOT_LEARN_MOVE: + case CANNOT_LEARN_MOVE_IS_EGG: + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE_2); + break; + case ALREADY_KNOWS_MOVE: + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_LEARNED); + break; + default: + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE_2); + break; + } +} + +void DisplayPartyPokemonDataForMultiBattle(u8 slot) +{ + struct PartyMenuBox *menuBox = &sPartyMenuBoxes[slot]; + u8 actualSlot = slot - (3); + + if (gMultiPartnerParty[actualSlot].species == SPECIES_NONE) + { + DrawEmptySlot(menuBox->windowId); + } + else + { + menuBox->infoRects->blitFunc(menuBox->windowId, 0, 0, 0, 0, FALSE); + StringCopy(gStringVar1, gMultiPartnerParty[actualSlot].nickname); + StringGetEnd10(gStringVar1); + if (StringLength(gStringVar1) <= 5) + ConvertInternationalString(gStringVar1, 1); + DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, menuBox->infoRects->dimensions); + DisplayPartyPokemonLevel(gMultiPartnerParty[actualSlot].level, menuBox); + DisplayPartyPokemonGender(gMultiPartnerParty[actualSlot].gender, gMultiPartnerParty[actualSlot].species, gMultiPartnerParty[actualSlot].nickname, menuBox); + DisplayPartyPokemonHP(gMultiPartnerParty[actualSlot].hp, menuBox); + DisplayPartyPokemonMaxHP(gMultiPartnerParty[actualSlot].maxhp, menuBox); + DisplayPartyPokemonHPBar(gMultiPartnerParty[actualSlot].hp, gMultiPartnerParty[actualSlot].maxhp, menuBox); + } +} + +bool8 RenderPartyMenuBoxes(void) +{ + RenderPartyMenuBox(sPartyMenuInternal->data[0]); + if (++sPartyMenuInternal->data[0] == PARTY_SIZE) + return TRUE; + else + return FALSE; +} + +u8 *GetPartyMenuBgTile(u16 tileId) +{ + return &sPartyBgGfxTilemap[tileId << 5]; +} + +void CreatePartyMonSprites(u8 slot) +{ + u8 actualSlot; + + if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE && slot >= MULTI_PARTY_SIZE) + { + u8 status; + + actualSlot = slot - MULTI_PARTY_SIZE; + if (gMultiPartnerParty[actualSlot].species != SPECIES_NONE) + { + CreatePartyMonIconSpriteParameterized(gMultiPartnerParty[actualSlot].species, gMultiPartnerParty[actualSlot].personality, &sPartyMenuBoxes[slot], 0, FALSE); + CreatePartyMonHeldItemSpriteParameterized(gMultiPartnerParty[actualSlot].species, gMultiPartnerParty[actualSlot].heldItem, &sPartyMenuBoxes[slot]); + CreatePartyMonPokeballSpriteParameterized(gMultiPartnerParty[actualSlot].species, &sPartyMenuBoxes[slot]); + if (gMultiPartnerParty[actualSlot].hp == 0) + status = AILMENT_FNT; + else + status = GetAilmentFromStatus(gMultiPartnerParty[actualSlot].status); + CreatePartyMonStatusSpriteParameterized(gMultiPartnerParty[actualSlot].species, status, &sPartyMenuBoxes[slot]); + } + } + else if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) != SPECIES_NONE) + { + CreatePartyMonIconSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot], slot); + CreatePartyMonHeldItemSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]); + CreatePartyMonPokeballSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]); + CreatePartyMonStatusSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]); + } +} + +bool8 CreatePartyMonSpritesLoop(void) +{ + CreatePartyMonSprites(sPartyMenuInternal->data[0]); + if (++sPartyMenuInternal->data[0] == PARTY_SIZE) + return TRUE; + else + return FALSE; +} + +void CreateCancelConfirmPokeballSprites(void) +{ + if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE) + { + // The showcase has no Cancel/Confirm buttons + FillBgTilemapBufferRect(1, 14, 23, 17, 7, 2, 1); + } + else + { + if (sPartyMenuInternal->chooseHalf) + { + sPartyMenuInternal->spriteIdConfirmPokeball = CreateSmallPokeballButtonSprite(0xBF, 0x88); + DrawCancelConfirmButtons(); + sPartyMenuInternal->spriteIdCancelPokeball = CreateSmallPokeballButtonSprite(0xBF, 0x98); + } + else + { + sPartyMenuInternal->spriteIdCancelPokeball = CreatePokeballButtonSprite(198, 148); + } + AnimatePartySlot(gPartyMenu.slotId, 1); + } +} + +void AnimatePartySlot(u8 slot, u8 animNum) +{ + u8 spriteId; + + switch (slot) + { + default: + if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) != SPECIES_NONE) + { + LoadPartyBoxPalette(&sPartyMenuBoxes[slot], GetPartyBoxPaletteFlags(slot, animNum)); + AnimateSelectedPartyIcon(sPartyMenuBoxes[slot].monSpriteId, animNum); + PartyMenuStartSpriteAnim(sPartyMenuBoxes[slot].pokeballSpriteId, animNum); + } + return; + case PARTY_SIZE: // Confirm + if (animNum == 0) + SetBgTilemapPalette(1, 23, 16, 7, 2, 1); + else + SetBgTilemapPalette(1, 23, 16, 7, 2, 2); + spriteId = sPartyMenuInternal->spriteIdConfirmPokeball; + break; + case PARTY_SIZE + 1: // Cancel + // The position of the Cancel button changes if Confirm is present + if (!sPartyMenuInternal->chooseHalf) + { + if (animNum == 0) + SetBgTilemapPalette(1, 23, 17, 7, 2, 1); + else + SetBgTilemapPalette(1, 23, 17, 7, 2, 2); + } + else if (animNum == 0) + { + SetBgTilemapPalette(1, 23, 18, 7, 2, 1); + } + else + { + SetBgTilemapPalette(1, 23, 18, 7, 2, 2); + } + spriteId = sPartyMenuInternal->spriteIdCancelPokeball; + break; + } + PartyMenuStartSpriteAnim(spriteId, animNum); + ScheduleBgCopyTilemapToVram(1); +} + +u8 GetPartyBoxPaletteFlags(u8 slot, u8 animNum) +{ + u8 palFlags = 0; + + if (animNum == 1) + palFlags |= PARTY_PAL_SELECTED; + if (GetMonData(&gPlayerParty[slot], MON_DATA_HP) == 0) + palFlags |= PARTY_PAL_FAINTED; + if (gPartyMenu.layout == PARTY_LAYOUT_MULTI + && (slot == 1 || slot == 4 || slot == 5)) + palFlags |= PARTY_PAL_MULTI_ALT; + if (gPartyMenu.action == PARTY_ACTION_SWITCHING) + palFlags |= PARTY_PAL_SWITCHING; + if (gPartyMenu.action == PARTY_ACTION_SWITCH) + { + if (slot == gPartyMenu.slotId || slot == gPartyMenu.slotId2) + palFlags |= PARTY_PAL_TO_SWITCH; + } + if (gPartyMenu.action == PARTY_ACTION_SOFTBOILED && slot == gPartyMenu.slotId ) + palFlags |= PARTY_PAL_TO_SOFTBOIL; + return palFlags; +} + +void DrawCancelConfirmButtons(void) +{ + CopyToBgTilemapBufferRect_ChangePalette(1, sConfirmButton_Tilemap, 23, 16, 7, 2, 17); + CopyToBgTilemapBufferRect_ChangePalette(1, sCancelButton_Tilemap, 23, 18, 7, 2, 17); + ScheduleBgCopyTilemapToVram(1); +} + +bool8 IsMultiBattle(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattleTypeFlags & BATTLE_TYPE_LINK) + return TRUE; + else + return FALSE; +} + +void SwapPartyPokemon(struct Pokemon *mon1, struct Pokemon *mon2) +{ + struct Pokemon *buffer = Alloc(sizeof(struct Pokemon)); + + *buffer = *mon1; + *mon1 = *mon2; + *mon2 = *buffer; + Free(buffer); +} + +void Task_ClosePartyMenu(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); + gTasks[taskId].func = Task_ClosePartyMenuAndSetCB2; +} + +void Task_ClosePartyMenuAndSetCB2(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE) + UpdatePartyToFieldOrder(); + if (sPartyMenuInternal->exitCallback != NULL) + SetMainCallback2(sPartyMenuInternal->exitCallback); + else + SetMainCallback2(gPartyMenu.exitCallback); + FreePartyPointers(); + DestroyTask(taskId); + } +} + +u8 GetCursorSelectionMonId(void) +{ + return gPartyMenu.slotId; +} + +u8 GetPartyMenuType(void) +{ + return gPartyMenu.menuType; +} + +void Task_HandleChooseMonInput(u8 taskId) +{ + if (!gPaletteFade.active && sub_80BF748() != TRUE) + { + s8 *slotPtr = GetCurrentPartySlotPtr(); + + switch (PartyMenuButtonHandler(slotPtr)) + { + case 1: // Selected mon + HandleChooseMonSelection(taskId, slotPtr); + break; + case 2: // Selected Cancel + HandleChooseMonCancel(taskId, slotPtr); + break; + case 8: // Start button + if (sPartyMenuInternal->chooseHalf) + { + PlaySE(SE_SELECT); + MoveCursorToConfirm(); + } + break; + } + } +} + +s8 *GetCurrentPartySlotPtr(void) +{ + if (gPartyMenu.action == PARTY_ACTION_SWITCH || gPartyMenu.action == PARTY_ACTION_SOFTBOILED) + return &gPartyMenu.slotId2; + else + return &gPartyMenu.slotId; +} + +void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) +{ + if (*slotPtr == PARTY_SIZE) + { + gPartyMenu.task(taskId); + } + else + { + switch (gPartyMenu.action - 3) + { + case PARTY_ACTION_SOFTBOILED - 3: + if (IsSelectedMonNotEgg((u8 *)slotPtr)) + Task_TryUseSoftboiledOnPartyMon(taskId); + break; + case PARTY_ACTION_USE_ITEM - 3: + if (IsSelectedMonNotEgg((u8 *)slotPtr)) + { + if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE) + sPartyMenuInternal->exitCallback = CB2_SetUpExitToBattleScreen; + gItemUseCB(taskId, Task_ClosePartyMenuAfterText); + } + break; + case PARTY_ACTION_MOVE_TUTOR - 3: + if (IsSelectedMonNotEgg((u8 *)slotPtr)) + { + PlaySE(SE_SELECT); + TryTutorSelectedMon(taskId); + } + break; + case PARTY_ACTION_GIVE_MAILBOX_MAIL - 3: + if (IsSelectedMonNotEgg((u8 *)slotPtr)) + { + PlaySE(SE_SELECT); + TryGiveMailToSelectedMon(taskId); + } + break; + case PARTY_ACTION_GIVE_ITEM - 3: + case PARTY_ACTION_GIVE_PC_ITEM - 3: + if (IsSelectedMonNotEgg((u8 *)slotPtr)) + { + PlaySE(SE_SELECT); + TryGiveItemOrMailToSelectedMon(taskId); + } + break; + case PARTY_ACTION_SWITCH - 3: + PlaySE(SE_SELECT); + SwitchSelectedMons(taskId); + break; + case PARTY_ACTION_CHOOSE_AND_CLOSE - 3: + PlaySE(SE_SELECT); + gSpecialVar_0x8004 = *slotPtr; + if (gPartyMenu.menuType == PARTY_MENU_TYPE_MOVE_RELEARNER) + gSpecialVar_0x8005 = GetNumberOfRelearnableMoves(&gPlayerParty[*slotPtr]); + Task_ClosePartyMenu(taskId); + break; + case PARTY_ACTION_MINIGAME - 3: + if (IsSelectedMonNotEgg((u8 *)slotPtr)) + TryEnterMonForMinigame(taskId, (u8)*slotPtr); + break; + default: + case PARTY_ACTION_ABILITY_PREVENTS - 3: + case PARTY_ACTION_SWITCHING - 3: + PlaySE(SE_SELECT); + Task_TryCreateSelectionWindow(taskId); + break; + } + } +} + +bool8 IsSelectedMonNotEgg(u8 *slotPtr) +{ + if (GetMonData(&gPlayerParty[*slotPtr], MON_DATA_IS_EGG) == TRUE) + { + PlaySE(SE_HAZURE); + return FALSE; + } + return TRUE; +} + +void HandleChooseMonCancel(u8 taskId, s8 *slotPtr) +{ + switch (gPartyMenu.action) + { + case PARTY_ACTION_SEND_OUT: + PlaySE(SE_HAZURE); + break; + case PARTY_ACTION_SWITCH: + case PARTY_ACTION_SOFTBOILED: + PlaySE(SE_SELECT); + FinishTwoMonAction(taskId); + break; + case PARTY_ACTION_MINIGAME: + PlaySE(SE_SELECT); + CancelParticipationPrompt(taskId); + break; + default: + PlaySE(SE_SELECT); + if (gPartyMenu.menuType == PARTY_MENU_TYPE_CHOOSE_HALF) + { + DisplayCancelChooseMonYesNo(taskId); + } + else + { + if (!MenuHelpers_LinkSomething()) + gSpecialVar_0x8004 = PARTY_SIZE + 1; + gPartyMenuUseExitCallback = FALSE; + *slotPtr = PARTY_SIZE + 1; + Task_ClosePartyMenu(taskId); + } + break; + } +} + +void DisplayCancelChooseMonYesNo(u8 taskId) +{ + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + StringExpandPlaceholders(gStringVar4, gUnknown_84176CF); + DisplayPartyMenuMessage(gStringVar4, TRUE); + gTasks[taskId].func = Task_CancelChooseMonYesNo; +} + +void Task_CancelChooseMonYesNo(u8 taskId) +{ + if (IsPartyMenuTextPrinterActive() != TRUE) + { + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleCancelChooseMonYesNoInput; + } +} + +void Task_HandleCancelChooseMonYesNoInput(u8 taskId) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + gPartyMenuUseExitCallback = FALSE; + gPartyMenu.slotId = PARTY_SIZE + 1; + ClearSelectedPartyOrder(); + Task_ClosePartyMenu(taskId); + break; + case MENU_B_PRESSED: + PlaySE(SE_SELECT); + // fallthrough + case 1: + Task_ReturnToChooseMonAfterText(taskId); + break; + } +} + +u16 PartyMenuButtonHandler(s8 *slotPtr) +{ + s8 movementDir; + + switch (gMain.newAndRepeatedKeys) + { + case DPAD_UP: + movementDir = MENU_DIR_UP; + break; + case DPAD_DOWN: + movementDir = MENU_DIR_DOWN; + break; + case DPAD_LEFT: + movementDir = MENU_DIR_LEFT; + break; + case DPAD_RIGHT: + movementDir = MENU_DIR_RIGHT; + break; + default: + switch (GetLRKeysPressedAndHeld()) + { + case MENU_L_PRESSED: + movementDir = MENU_DIR_UP; + break; + case MENU_R_PRESSED: + movementDir = MENU_DIR_DOWN; + break; + default: + movementDir = 0; + break; + } + break; + } + if (JOY_NEW(START_BUTTON)) + return 8; + if (movementDir) + { + UpdateCurrentPartySelection(slotPtr, movementDir); + return 0; + } + // Pressed Cancel + if (JOY_NEW(A_BUTTON) && *slotPtr == PARTY_SIZE + 1) + return 2; + return JOY_NEW(A_BUTTON | B_BUTTON); +} + +void UpdateCurrentPartySelection(s8 *slotPtr, s8 movementDir) +{ + s8 newSlotId = *slotPtr; + u8 layout = gPartyMenu.layout; + + if (layout == PARTY_LAYOUT_SINGLE) + UpdatePartySelectionSingleLayout(slotPtr, movementDir); + else + UpdatePartySelectionDoubleLayout(slotPtr, movementDir); + if (*slotPtr != newSlotId) + { + PlaySE(SE_SELECT); + AnimatePartySlot(newSlotId, 0); + AnimatePartySlot(*slotPtr, 1); + } +} + +void UpdatePartySelectionSingleLayout(s8 *slotPtr, s8 movementDir) +{ + // PARTY_SIZE + 1 is Cancel, PARTY_SIZE is Confirm + switch (movementDir) + { + case MENU_DIR_UP: + if (*slotPtr == 0) + { + *slotPtr = PARTY_SIZE + 1; + } + else if (*slotPtr == PARTY_SIZE) + { + *slotPtr = gPlayerPartyCount - 1; + } + else if (*slotPtr == PARTY_SIZE + 1) + { + if (sPartyMenuInternal->chooseHalf) + *slotPtr = PARTY_SIZE; + else + *slotPtr = gPlayerPartyCount - 1; + } + else + { + --*slotPtr; + } + break; + case MENU_DIR_DOWN: + if (*slotPtr == PARTY_SIZE + 1) + { + *slotPtr = 0; + } + else + { + if (*slotPtr == gPlayerPartyCount - 1) + { + if (sPartyMenuInternal->chooseHalf) + *slotPtr = PARTY_SIZE; + else + *slotPtr = PARTY_SIZE + 1; + } + else + { + ++*slotPtr; + } + } + break; + case MENU_DIR_RIGHT: + if (gPlayerPartyCount != 1 && *slotPtr == 0) + { + if (sPartyMenuInternal->lastSelectedSlot == 0) + *slotPtr = 1; + else + *slotPtr = sPartyMenuInternal->lastSelectedSlot; + } + break; + case MENU_DIR_LEFT: + if (*slotPtr != 0 && *slotPtr != PARTY_SIZE && *slotPtr != PARTY_SIZE + 1) + { + sPartyMenuInternal->lastSelectedSlot = *slotPtr; + *slotPtr = 0; + } + break; + } +} + +void UpdatePartySelectionDoubleLayout(s8 *slotPtr, s8 movementDir) +{ + // PARTY_SIZE + 1 is Cancel, PARTY_SIZE is Confirm + // newSlot is used temporarily as a movement direction during its later assignment + s8 newSlot = movementDir; + + switch (movementDir) + { + case MENU_DIR_UP: + if (*slotPtr == 0) + { + *slotPtr = PARTY_SIZE + 1; + break; + } + else if (*slotPtr == PARTY_SIZE) + { + *slotPtr = gPlayerPartyCount - 1; + break; + } + else if (*slotPtr == PARTY_SIZE + 1) + { + if (sPartyMenuInternal->chooseHalf) + { + *slotPtr = PARTY_SIZE; + break; + } + --*slotPtr; + } + newSlot = GetNewSlotDoubleLayout(*slotPtr, newSlot); + if (newSlot != -1) + *slotPtr = newSlot; + break; + case MENU_DIR_DOWN: + if (*slotPtr == PARTY_SIZE) + { + *slotPtr = PARTY_SIZE + 1; + } + else if (*slotPtr == PARTY_SIZE + 1) + { + *slotPtr = 0; + } + else + { + newSlot = GetNewSlotDoubleLayout(*slotPtr, MENU_DIR_DOWN); + if (newSlot == -1) + { + if (sPartyMenuInternal->chooseHalf) + *slotPtr = PARTY_SIZE; + else + *slotPtr = PARTY_SIZE + 1; + } + else + { + *slotPtr = newSlot; + } + } + break; + case MENU_DIR_RIGHT: + if (*slotPtr == 0) + { + if (sPartyMenuInternal->lastSelectedSlot == 3) + { + if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES) != SPECIES_NONE) + *slotPtr = 3; + } + else if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES) != SPECIES_NONE) + { + *slotPtr = 2; + } + } + else if (*slotPtr == 1) + { + if (sPartyMenuInternal->lastSelectedSlot == 5) + { + if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES) != SPECIES_NONE) + *slotPtr = 5; + } + else if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES) != SPECIES_NONE) + { + *slotPtr = 4; + } + } + break; + case MENU_DIR_LEFT: + if (*slotPtr == 2 || *slotPtr == 3) + { + sPartyMenuInternal->lastSelectedSlot = *slotPtr; + *slotPtr = 0; + } + else if (*slotPtr == 4 || *slotPtr == 5) + { + sPartyMenuInternal->lastSelectedSlot = *slotPtr; + *slotPtr = 1; + } + break; + } +} + +s8 GetNewSlotDoubleLayout(s8 slotId, s8 movementDir) +{ + while (TRUE) + { + slotId += movementDir; + if ((u8)slotId >= PARTY_SIZE) + return -1; + if (GetMonData(&gPlayerParty[slotId], MON_DATA_SPECIES) != SPECIES_NONE) + return slotId; + } +} + +u8 *GetMonNickname(struct Pokemon *mon, u8 *dest) +{ + GetMonData(mon, MON_DATA_NICKNAME, dest); + return StringGetEnd10(dest); +} + +#define tKeepOpen data[0] + +u8 DisplayPartyMenuMessage(const u8 *str, bool8 keepOpen) +{ + u8 taskId; + + PartyMenuPrintText(str); + taskId = CreateTask(Task_PrintAndWaitForText, 1); + gTasks[taskId].tKeepOpen = keepOpen; + return taskId; +} + +void Task_PrintAndWaitForText(u8 taskId) +{ + if (RunTextPrinters_CheckActive(6) != TRUE) + { + if (gTasks[taskId].tKeepOpen == FALSE) + { + ClearStdWindowAndFrameToTransparent(6, 0); + ClearWindowTilemap(6); + } + DestroyTask(taskId); + } +} + +#undef tKeepOpen + +bool8 IsPartyMenuTextPrinterActive(void) +{ + return FuncIsActiveTask(Task_PrintAndWaitForText); +} + +void Task_WaitForLinkAndReturnToChooseMon(u8 taskId) +{ + if (sub_80BF748() != TRUE) + { + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); + gTasks[taskId].func = Task_HandleChooseMonInput; + } +} + +void Task_ReturnToChooseMonAfterText(u8 taskId) +{ + if (IsPartyMenuTextPrinterActive() != TRUE) + { + ClearStdWindowAndFrameToTransparent(6, 0); + ClearWindowTilemap(6); + if (MenuHelpers_LinkSomething() == TRUE) + { + gTasks[taskId].func = Task_WaitForLinkAndReturnToChooseMon; + } + else + { + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); + gTasks[taskId].func = Task_HandleChooseMonInput; + } + } +} + +void DisplayGaveHeldItemMessage(struct Pokemon *mon, u16 item, bool8 keepOpen, u8 a4) +{ + if (!a4) + ItemUse_SetQuestLogEvent(5, mon, item, 0xFFFF); + else if (gPartyMenu.action == PARTY_ACTION_GIVE_PC_ITEM) + ItemUse_SetQuestLogEvent(7, mon, item, 0xFFFF); + else + ItemUse_SetQuestLogEvent(6, mon, item, 0xFFFF); + GetMonNickname(mon, gStringVar1); + CopyItemName(item, gStringVar2); + StringExpandPlaceholders(gStringVar4, gText_PkmnWasGivenItem); + DisplayPartyMenuMessage(gStringVar4, keepOpen); + ScheduleBgCopyTilemapToVram(2); +} + +void DisplayTookHeldItemMessage(struct Pokemon *mon, u16 item, bool8 keepOpen) +{ + ItemUse_SetQuestLogEvent(8, mon, item, 0xFFFF); + GetMonNickname(mon, gStringVar1); + CopyItemName(item, gStringVar2); + StringExpandPlaceholders(gStringVar4, gText_ReceivedItemFromPkmn); + DisplayPartyMenuMessage(gStringVar4, keepOpen); + ScheduleBgCopyTilemapToVram(2); +} + +void DisplayAlreadyHoldingItemSwitchMessage(struct Pokemon *mon, u16 item, bool8 keepOpen) +{ + GetMonNickname(mon, gStringVar1); + CopyItemName(item, gStringVar2); + StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadyHoldingItemSwitch); + DisplayPartyMenuMessage(gStringVar4, keepOpen); + ScheduleBgCopyTilemapToVram(2); +} + +void DisplaySwitchedHeldItemMessage(u16 item, u16 item2, bool8 keepOpen) +{ + sub_8124B60(&gPlayerParty[gPartyMenu.slotId], item2, item); + CopyItemName(item, gStringVar1); + CopyItemName(item2, gStringVar2); + StringExpandPlaceholders(gStringVar4, gText_SwitchedPkmnItem); + DisplayPartyMenuMessage(gStringVar4, keepOpen); + ScheduleBgCopyTilemapToVram(2); +} + +void GiveItemToMon(struct Pokemon *mon, u16 item) +{ + u8 itemBytes[2]; + + if (ItemIsMail(item) == TRUE) + { + if (GiveMailToMon(mon, item) == 0xFF) + return; + } + itemBytes[0] = item; + itemBytes[1] = item >> 8; + SetMonData(mon, MON_DATA_HELD_ITEM, itemBytes); +} + +u8 TryTakeMonItem(struct Pokemon *mon) +{ + u16 item = GetMonData(mon, MON_DATA_HELD_ITEM); + + if (item == ITEM_NONE) + return 0; + if (AddBagItem(item, 1) == FALSE) + return 1; + item = ITEM_NONE; + SetMonData(mon, MON_DATA_HELD_ITEM, &item); + return 2; +} + +void BufferBagFullCantTakeItemMessage(u16 itemId) +{ + const u8 *string; + + switch (ItemId_GetPocket(itemId)) + { + default: + string = gStartMenuText_Bag; + break; + case POCKET_TM_CASE: + string = ItemId_GetName(ITEM_TM_CASE); + break; + case POCKET_BERRY_POUCH: + string = ItemId_GetName(ITEM_BERRY_POUCH); + break; + } + StringCopy(gStringVar1, string); + StringExpandPlaceholders(gStringVar4, gText_BagFullCouldNotRemoveItem); +} + +#define tHP data[0] +#define tMaxHP data[1] +#define tHPIncrement data[2] +#define tHPToAdd data[3] +#define tPartyId data[4] +#define tStartHP data[5] + +void Task_PartyMenuModifyHP(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + tHP += tHPIncrement; + --tHPToAdd; + SetMonData(&gPlayerParty[tPartyId], MON_DATA_HP, &tHP); + DisplayPartyPokemonHPCheck(&gPlayerParty[tPartyId], &sPartyMenuBoxes[tPartyId], 1); + DisplayPartyPokemonHPBarCheck(&gPlayerParty[tPartyId], &sPartyMenuBoxes[tPartyId]); + if (tHPToAdd == 0 || tHP == 0 || tHP == tMaxHP) + { + // If HP was recovered, buffer the amount recovered + if (tHP > tStartHP) + ConvertIntToDecimalStringN(gStringVar2, tHP - tStartHP, STR_CONV_MODE_LEFT_ALIGN, 3); + SwitchTaskToFollowupFunc(taskId); + } +} + +void PartyMenuModifyHP(u8 taskId, u8 slot, s8 hpIncrement, s16 hpDifference, TaskFunc task) +{ + struct Pokemon *mon = &gPlayerParty[slot]; + s16 *data = gTasks[taskId].data; + + tHP = GetMonData(mon, MON_DATA_HP); + tMaxHP = GetMonData(mon, MON_DATA_MAX_HP); + tHPIncrement = hpIncrement; + tHPToAdd = hpDifference; + tPartyId = slot; + tStartHP = tHP; + SetTaskFuncWithFollowupFunc(taskId, Task_PartyMenuModifyHP, task); +} + +void ResetHPTaskData(u8 taskId, u8 caseId, u32 hp) +{ + s16 *data = gTasks[taskId].data; + + switch (caseId) // always zero + { + case 0: + tHP = hp; + tStartHP = hp; + break; + case 1: + tMaxHP = hp; + break; + case 2: + tHPIncrement = hp; + break; + case 3: + tHPToAdd = hp; + break; + case 4: + tPartyId = hp; + break; + case 5: + SetTaskFuncWithFollowupFunc(taskId, Task_PartyMenuModifyHP, (TaskFunc)hp); // >casting hp as a taskfunc + break; + } +} + +#undef tHP +#undef tMaxHP +#undef tHPIncrement +#undef tHPToAdd +#undef tPartyId +#undef tStartHP + +u8 GetAilmentFromStatus(u32 status) +{ + if (status & STATUS1_PSN_ANY) + return AILMENT_PSN; + if (status & STATUS1_PARALYSIS) + return AILMENT_PRZ; + if (status & STATUS1_SLEEP) + return AILMENT_SLP; + if (status & STATUS1_FREEZE) + return AILMENT_FRZ; + if (status & STATUS1_BURN) + return AILMENT_BRN; + return AILMENT_NONE; +} + +u8 GetMonAilment(struct Pokemon *mon) +{ + u8 ailment; + + if (GetMonData(mon, MON_DATA_HP) == 0) + return AILMENT_FNT; + ailment = GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)); + if (ailment != AILMENT_NONE) + return ailment; + if (CheckPartyPokerus(mon, 0)) + return AILMENT_PKRS; + return AILMENT_NONE; +} + +void SetPartyMonsAllowedInMinigame(void) +{ + u16 *ptr; + + if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME) + { + u8 i; + + ptr = &gPartyMenu.data1; + gPartyMenu.data1 = 0; + if (gSpecialVar_0x8005 == 0) + { + for (i = 0; i < gPlayerPartyCount; ++i) + *ptr += IsMonAllowedInPokemonJump(&gPlayerParty[i]) << i; + } + else + { + for (i = 0; i < gPlayerPartyCount; ++i) + *ptr += IsMonAllowedInDodrioBerryPicking(&gPlayerParty[i]) << i; + } + } +} + +bool16 IsMonAllowedInPokemonJump(struct Pokemon *mon) +{ + if (GetMonData(mon, MON_DATA_IS_EGG) != TRUE && IsSpeciesAllowedInPokemonJump(GetMonData(mon, MON_DATA_SPECIES))) + return TRUE; + return FALSE; +} + + +bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon *mon) +{ + if (GetMonData(mon, MON_DATA_IS_EGG) != TRUE && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_DODRIO) + return TRUE; + return FALSE; +} + +bool8 IsMonAllowedInMinigame(u8 slot) +{ + if (!((gPartyMenu.data1 >> slot) & 1)) + return FALSE; + return TRUE; +} + +void TryEnterMonForMinigame(u8 taskId, u8 slot) +{ + if (IsMonAllowedInMinigame(slot) == TRUE) + { + PlaySE(SE_SELECT); + gSpecialVar_0x8004 = slot; + Task_ClosePartyMenu(taskId); + } + else + { + PlaySE(SE_HAZURE); + DisplayPartyMenuMessage(gText_PkmnCantParticipate, FALSE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + } +} + +void CancelParticipationPrompt(u8 taskId) +{ + DisplayPartyMenuMessage(gText_CancelParticipation, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = Task_CancelParticipationYesNo; +} + +void Task_CancelParticipationYesNo(u8 taskId) +{ + if (IsPartyMenuTextPrinterActive() != TRUE) + { + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleCancelParticipationYesNoInput; + } +} + +void Task_HandleCancelParticipationYesNoInput(u8 taskId) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + gSpecialVar_0x8004 = PARTY_SIZE + 1; + Task_ClosePartyMenu(taskId); + break; + case MENU_B_PRESSED: + PlaySE(SE_SELECT); + // fallthrough + case 1: + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; + break; + } +} + +u8 CanMonLearnTMTutor(struct Pokemon *mon, u16 item, u8 tutor) +{ + u16 move; + + if (GetMonData(mon, MON_DATA_IS_EGG)) + return CANNOT_LEARN_MOVE_IS_EGG; + + if (item >= ITEM_TM01_FOCUS_PUNCH) + { + if (CanMonLearnTMHM(mon, item - ITEM_TM01_FOCUS_PUNCH)) + move = ItemIdToBattleMoveId(item); + else + return CANNOT_LEARN_MOVE; + do + { + } while (0); + } + else if (CanLearnTutorMove(GetMonData(mon, MON_DATA_SPECIES), tutor) == FALSE) + { + return CANNOT_LEARN_MOVE; + } + else + { + move = GetTutorMove(tutor); + } + if (MonKnowsMove(mon, move) == TRUE) + return ALREADY_KNOWS_MOVE; + else + return CAN_LEARN_MOVE; +} + +u16 GetTutorMove(u8 tutor) +{ + switch (tutor) + { + case TUTOR_MOVE_FRENZY_PLANT: + return MOVE_FRENZY_PLANT; + case TUTOR_MOVE_BLAST_BURN: + return MOVE_BLAST_BURN; + case TUTOR_MOVE_HYDRO_CANNON: + return MOVE_HYDRO_CANNON; + default: + return sTutorMoves[tutor]; + } +} + +bool8 CanLearnTutorMove(u16 species, u8 tutor) +{ + switch (tutor) + { + case TUTOR_MOVE_FRENZY_PLANT: + if (species == SPECIES_VENUSAUR) + return TRUE; + else + return FALSE; + case TUTOR_MOVE_BLAST_BURN: + if (species == SPECIES_CHARIZARD) + return TRUE; + else + return FALSE; + case TUTOR_MOVE_HYDRO_CANNON: + if (species == SPECIES_BLASTOISE) + return TRUE; + else + return FALSE; + default: + if (sTutorLearnsets[species] & (1 << tutor)) + return TRUE; + else + return FALSE; + } +} + +void sub_8120C3C(u8 taskId) +{ + if (!gPaletteFade.active) + gTasks[taskId].func = sub_8120C6C; +} + +void sub_8120C6C(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFF1FFF, 4, 0, 6, RGB_BLACK); + gTasks[taskId].func = sub_8120CA8; +} + +void sub_8120CA8(u8 taskId) +{ + if (!gPaletteFade.active) + gTasks[taskId].func = sub_8120CD8; +} + +void sub_8120CD8(u8 taskId) +{ + gTasks[taskId].data[0] = sub_81220D4(); + gTasks[taskId].func = sub_8120D08; +} + +void sub_8120D08(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (RunTextPrinters_CheckActive((u8)data[0]) != TRUE) + gTasks[taskId].func = sub_8120D40; +} + +void sub_8120D40(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFF0008, 4, 6, 0, RGB_BLACK); + gTasks[taskId].func = sub_8120D7C; +} + +void sub_8120D7C(u8 taskId) +{ + if (!gPaletteFade.active) + gTasks[taskId].func = sub_8120DAC; +} + +void sub_8120DAC(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + sub_8122084(data[0], gUnknown_8417494); + gTasks[taskId].func = sub_8120DE0; +} + +void sub_8120DE0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (RunTextPrinters_CheckActive((u8)data[0]) != TRUE) + { + sub_8122110((u8)data[0]); + gTasks[taskId].func = sub_8120E1C; + } +} + +void sub_8120E1C(u8 taskId) +{ + BeginNormalPaletteFade(0x0000FFF7, 4, 6, 0, RGB_BLACK); + gTasks[taskId].func = sub_8120E58; +} + +void sub_8120E58(u8 taskId) +{ + if (!gPaletteFade.active) + { + TextWindow_SetUserSelectedFrame(0, 0x4F, 0xD0); + TextWindow_SetStdFrame0_WithPal(0, 0x58, 0xF0); + if (gPartyMenu.action == PARTY_ACTION_USE_ITEM) + DisplayPartyMenuStdMessage(PARTY_MSG_USE_ON_WHICH_MON); + else + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); + gTasks[taskId].func = Task_HandleChooseMonInput; + } +} + +void sub_8120EBC(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + data[0] = 0; + gTasks[taskId].func = sub_8120EE0; +} + +void sub_8120EE0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (!gPaletteFade.active && sub_8120F78(taskId) != TRUE) + { + switch (data[0]) + { + case 80: + #ifndef NONMATCHING + asm("":::"r5"); + #endif + UpdateCurrentPartySelection(&gPartyMenu.slotId, 2); + ++data[0]; + break; + case 160: + PlaySE(SE_SELECT); + CreateSelectionWindow(); + ++data[0]; + break; + case 240: + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[2]); + sCursorOptions[sPartyMenuInternal->actions[0]].func(taskId); + // fall through + default: + ++data[0]; + break; + } + } +} diff --git a/src/tm_case.c b/src/tm_case.c index 0734c6d24..a9af2332e 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -595,7 +595,7 @@ static void TMCase_MoveCursor_UpdatePrintedDescription(s32 itemIndex) static void FillBG2RowWithPalette_2timesNplus1(s32 a0) { - SetBgRectPal(2, 0, 12, 30, 8, 2 * a0 + 1); + SetBgTilemapPalette(2, 0, 12, 30, 8, 2 * a0 + 1); ScheduleBgCopyTilemapToVram(2); } |