diff options
-rw-r--r-- | asm/pokemon_summary_screen.s | 2606 | ||||
-rw-r--r-- | include/pokemon_icon.h | 2 | ||||
-rw-r--r-- | src/pokemon_storage_system.c | 6 | ||||
-rw-r--r-- | src/pokemon_summary_screen.c | 971 |
4 files changed, 951 insertions, 2634 deletions
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index 8f4722c2b..6b007b581 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -5,2612 +5,6 @@ .text - thumb_func_start sub_8139D54 -sub_8139D54: @ 8139D54 - lsls r0, 24 - lsrs r0, 24 - ldr r3, _08139D84 @ =gSprites - ldr r1, _08139D88 @ =gMonSummaryScreen - ldr r1, [r1] - ldr r2, _08139D8C @ =0x0000300c - adds r1, r2 - ldrb r1, [r1] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r3 - adds r2, 0x3E - movs r1, 0x1 - ands r0, r1 - lsls r0, 2 - ldrb r3, [r2] - movs r1, 0x5 - negs r1, r1 - ands r1, r3 - orrs r1, r0 - strb r1, [r2] - bx lr - .align 2, 0 -_08139D84: .4byte gSprites -_08139D88: .4byte gMonSummaryScreen -_08139D8C: .4byte 0x0000300c - thumb_func_end sub_8139D54 - - thumb_func_start sub_8139D90 -sub_8139D90: @ 8139D90 - push {lr} - ldr r0, _08139DB0 @ =gMonSummaryScreen - ldr r0, [r0] - ldr r1, _08139DB4 @ =0x0000300c - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08139DB8 @ =gSprites - adds r0, r1 - bl DestroySpriteAndFreeResources2 - pop {r0} - bx r0 - .align 2, 0 -_08139DB0: .4byte gMonSummaryScreen -_08139DB4: .4byte 0x0000300c -_08139DB8: .4byte gSprites - thumb_func_end sub_8139D90 - - thumb_func_start sub_8139DBC -sub_8139DBC: @ 8139DBC - push {r4-r6,lr} - sub sp, 0xC - ldr r6, _08139E08 @ =gMonSummaryScreen - ldr r0, [r6] - ldr r4, _08139E0C @ =0x00003290 - adds r0, r4 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, [r6] - adds r0, r4 - movs r1, 0 - bl GetMonData - adds r4, r0, 0 - adds r0, r5, 0 - bl SafeLoadMonIconPalette - ldr r2, [r6] - ldr r1, _08139E10 @ =0x000032f8 - adds r0, r2, r1 - ldr r1, [r0] - ldr r0, _08139E14 @ =CB2_ReturnToTradeMenuFromSummary - cmp r1, r0 - bne _08139E2C - ldr r1, _08139E18 @ =0x00003024 - adds r0, r2, r1 - ldr r0, [r0] - cmp r0, 0x1 - bne _08139E20 - ldr r1, _08139E1C @ =SpriteCallbackDummy - movs r0, 0 - str r0, [sp] - str r4, [sp, 0x4] - b _08139E58 - .align 2, 0 -_08139E08: .4byte gMonSummaryScreen -_08139E0C: .4byte 0x00003290 -_08139E10: .4byte 0x000032f8 -_08139E14: .4byte CB2_ReturnToTradeMenuFromSummary -_08139E18: .4byte 0x00003024 -_08139E1C: .4byte SpriteCallbackDummy -_08139E20: - ldr r1, _08139E28 @ =SpriteCallbackDummy - movs r0, 0 - b _08139E52 - .align 2, 0 -_08139E28: .4byte SpriteCallbackDummy -_08139E2C: - ldr r0, _08139E48 @ =gLastViewedMonIndex - ldrb r1, [r0] - movs r0, 0x3 - bl sub_804455C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _08139E50 - ldr r1, _08139E4C @ =SpriteCallbackDummy - movs r0, 0 - str r0, [sp] - str r4, [sp, 0x4] - b _08139E58 - .align 2, 0 -_08139E48: .4byte gLastViewedMonIndex -_08139E4C: .4byte SpriteCallbackDummy -_08139E50: - ldr r1, _08139E98 @ =SpriteCallbackDummy -_08139E52: - str r0, [sp] - str r4, [sp, 0x4] - movs r0, 0x1 -_08139E58: - str r0, [sp, 0x8] - adds r0, r5, 0 - movs r2, 0x18 - movs r3, 0x20 - bl CreateMonIcon - ldr r1, [r6] - ldr r2, _08139E9C @ =0x00003014 - adds r1, r2 - strb r0, [r1] - adds r0, r5, 0 - bl IsPokeSpriteNotFlipped - lsls r0, 24 - cmp r0, 0 - bne _08139EA8 - ldr r2, _08139EA0 @ =gSprites - ldr r0, _08139EA4 @ =gMonSummaryScreen - ldr r0, [r0] - ldr r1, _08139E9C @ =0x00003014 - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3F - ldrb r1, [r0] - movs r2, 0x1 - orrs r1, r2 - b _08139EC6 - .align 2, 0 -_08139E98: .4byte SpriteCallbackDummy -_08139E9C: .4byte 0x00003014 -_08139EA0: .4byte gSprites -_08139EA4: .4byte gMonSummaryScreen -_08139EA8: - ldr r2, _08139ED8 @ =gSprites - ldr r0, _08139EDC @ =gMonSummaryScreen - ldr r0, [r0] - ldr r1, _08139EE0 @ =0x00003014 - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3F - ldrb r2, [r0] - movs r1, 0x2 - negs r1, r1 - ands r1, r2 -_08139EC6: - strb r1, [r0] - movs r0, 0x1 - bl sub_8139EE4 - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08139ED8: .4byte gSprites -_08139EDC: .4byte gMonSummaryScreen -_08139EE0: .4byte 0x00003014 - thumb_func_end sub_8139DBC - - thumb_func_start sub_8139EE4 -sub_8139EE4: @ 8139EE4 - lsls r0, 24 - lsrs r0, 24 - ldr r3, _08139F14 @ =gSprites - ldr r1, _08139F18 @ =gMonSummaryScreen - ldr r1, [r1] - ldr r2, _08139F1C @ =0x00003014 - adds r1, r2 - ldrb r1, [r1] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r3 - adds r2, 0x3E - movs r1, 0x1 - ands r0, r1 - lsls r0, 2 - ldrb r3, [r2] - movs r1, 0x5 - negs r1, r1 - ands r1, r3 - orrs r1, r0 - strb r1, [r2] - bx lr - .align 2, 0 -_08139F14: .4byte gSprites -_08139F18: .4byte gMonSummaryScreen -_08139F1C: .4byte 0x00003014 - thumb_func_end sub_8139EE4 - - thumb_func_start sub_8139F20 -sub_8139F20: @ 8139F20 - push {r4,lr} - ldr r4, _08139F54 @ =gMonSummaryScreen - ldr r0, [r4] - ldr r1, _08139F58 @ =0x00003290 - adds r0, r1 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - bl SafeFreeMonIconPalette - ldr r0, [r4] - ldr r1, _08139F5C @ =0x00003014 - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08139F60 @ =gSprites - adds r0, r1 - bl DestroyMonIcon - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08139F54: .4byte gMonSummaryScreen -_08139F58: .4byte 0x00003290 -_08139F5C: .4byte 0x00003014 -_08139F60: .4byte gSprites - thumb_func_end sub_8139F20 - - thumb_func_start sub_8139F64 -sub_8139F64: @ 8139F64 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x34 - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x30] - lsls r1, 16 - lsrs r1, 16 - mov r9, r1 - movs r6, 0x80 - lsls r6, 4 - adds r0, r6, 0 - bl AllocZeroed - str r0, [sp, 0x18] - adds r0, r6, 0 - bl AllocZeroed - add r5, sp, 0x18 - str r0, [r5, 0x4] - movs r0, 0xC - bl AllocZeroed - ldr r4, _0813A0BC @ =gUnknown_203B148 - str r0, [r4] - movs r0, 0xC - bl AllocZeroed - str r0, [r4, 0x4] - movs r0, 0xC - bl AllocZeroed - str r0, [r4, 0x8] - movs r0, 0xC - bl AllocZeroed - str r0, [r4, 0xC] - ldr r0, _0813A0C0 @ =gUnknown_8463740 - ldr r1, [sp, 0x18] - bl LZ77UnCompWram - ldr r0, _0813A0C4 @ =gUnknown_846386C - ldr r1, [r5, 0x4] - bl LZ77UnCompWram - movs r7, 0 - add r0, sp, 0x20 - mov r8, r0 - add r6, sp, 0x28 -_08139FCC: - movs r4, 0x1 - ands r4, r7 - lsls r0, r4, 2 - add r0, sp - adds r0, 0x18 - ldr r0, [r0] - str r0, [sp, 0x20] - ldr r1, [sp, 0x30] - adds r5, r1, r7 - lsls r0, r5, 16 - movs r1, 0x80 - lsls r1, 4 - orrs r0, r1 - mov r1, r8 - str r0, [r1, 0x4] - ldr r0, _0813A0C8 @ =gUnknown_8463720 - str r0, [sp, 0x28] - ldr r1, _0813A0CC @ =0xffff0000 - ldr r0, [r6, 0x4] - ands r0, r1 - mov r1, r9 - orrs r0, r1 - str r0, [r6, 0x4] - mov r0, sp - movs r1, 0 - mov r10, r1 - strh r5, [r0] - mov r1, r9 - strh r1, [r0, 0x2] - ldr r0, _0813A0D0 @ =gUnknown_846398C - str r0, [sp, 0x4] - ldr r0, _0813A0D4 @ =gUnknown_84639A4 - str r0, [sp, 0x8] - mov r0, r10 - str r0, [sp, 0xC] - ldr r0, _0813A0D8 @ =gDummySpriteAffineAnimTable - str r0, [sp, 0x10] - ldr r0, _0813A0DC @ =sub_813A124 - str r0, [sp, 0x14] - mov r0, r8 - bl LoadSpriteSheet - adds r0, r6, 0 - bl LoadSpritePalette - lsls r1, r4, 6 - adds r1, 0x98 - ldr r0, _0813A0E0 @ =gUnknown_203B16D - ldrb r0, [r0] - lsls r2, r0, 3 - subs r2, r0 - lsls r2, 18 - movs r0, 0x88 - lsls r0, 14 - adds r2, r0 - asrs r2, 16 - mov r0, sp - adds r3, r4, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0813A0BC @ =gUnknown_203B148 - lsls r1, r7, 2 - adds r3, r1, r2 - ldr r2, [r3] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0813A0E4 @ =gSprites - adds r1, r0 - str r1, [r2] - strh r7, [r2, 0x4] - ldr r0, [r3] - strh r5, [r0, 0x6] - ldr r0, [r3] - mov r1, r9 - strh r1, [r0, 0x8] - ldr r0, [r3] - ldr r0, [r0] - adds r0, 0x43 - strb r7, [r0] - cmp r7, 0x1 - bls _0813A07E - ldr r0, [r3] - ldr r0, [r0] - movs r1, 0x1 - bl StartSpriteAnim -_0813A07E: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0x3 - bls _08139FCC - movs r0, 0x1 - bl sub_813A0E8 - ldr r0, [sp, 0x18] - cmp r0, 0 - beq _0813A09C - bl Free - mov r0, r10 - str r0, [sp, 0x18] -_0813A09C: - ldr r0, [sp, 0x1C] - cmp r0, 0 - beq _0813A0AA - bl Free - mov r1, r10 - str r1, [sp, 0x1C] -_0813A0AA: - add sp, 0x34 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813A0BC: .4byte gUnknown_203B148 -_0813A0C0: .4byte gUnknown_8463740 -_0813A0C4: .4byte gUnknown_846386C -_0813A0C8: .4byte gUnknown_8463720 -_0813A0CC: .4byte 0xffff0000 -_0813A0D0: .4byte gUnknown_846398C -_0813A0D4: .4byte gUnknown_84639A4 -_0813A0D8: .4byte gDummySpriteAffineAnimTable -_0813A0DC: .4byte sub_813A124 -_0813A0E0: .4byte gUnknown_203B16D -_0813A0E4: .4byte gSprites - thumb_func_end sub_8139F64 - - thumb_func_start sub_813A0E8 -sub_813A0E8: @ 813A0E8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - movs r3, 0 - ldr r6, _0813A120 @ =gUnknown_203B148 - movs r1, 0x1 - ands r0, r1 - lsls r4, r0, 2 - movs r5, 0x5 - negs r5, r5 -_0813A0FC: - lsls r0, r3, 2 - adds r0, r6 - ldr r0, [r0] - ldr r1, [r0] - adds r1, 0x3E - ldrb r2, [r1] - adds r0, r5, 0 - ands r0, r2 - orrs r0, r4 - strb r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _0813A0FC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813A120: .4byte gUnknown_203B148 - thumb_func_end sub_813A0E8 - - thumb_func_start sub_813A124 -sub_813A124: @ 813A124 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r6, 0 - ldr r3, _0813A19C @ =gMonSummaryScreen - ldr r4, _0813A1A0 @ =gUnknown_203B148 -_0813A132: - ldr r0, [r3] - ldr r1, _0813A1A4 @ =0x00003268 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0813A142 - cmp r6, 0x1 - bhi _0813A158 -_0813A142: - lsls r0, r6, 2 - adds r0, r4 - ldr r0, [r0] - ldr r2, [r0] - ldr r0, _0813A1A8 @ =gUnknown_203B16D - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, 0x22 - strh r0, [r2, 0x22] -_0813A158: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x3 - bls _0813A132 - ldr r1, [r3] - ldr r2, _0813A1A4 @ =0x00003268 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0813A1AC - subs r2, 0x54 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x3 - bne _0813A20E - ldr r4, _0813A1A0 @ =gUnknown_203B148 - ldr r0, [r4] - ldr r1, [r0] - adds r1, 0x3E - ldrb r3, [r1] - movs r2, 0x5 - negs r2, r2 - adds r0, r2, 0 - ands r0, r3 - strb r0, [r1] - ldr r0, [r4, 0x4] - ldr r0, [r0] - adds r0, 0x3E - ldrb r1, [r0] - ands r2, r1 - strb r2, [r0] - b _0813A20E - .align 2, 0 -_0813A19C: .4byte gMonSummaryScreen -_0813A1A0: .4byte gUnknown_203B148 -_0813A1A4: .4byte 0x00003268 -_0813A1A8: .4byte gUnknown_203B16D -_0813A1AC: - movs r6, 0 - ldr r0, _0813A1F0 @ =gUnknown_203B148 - mov r9, r0 - mov r8, r6 - movs r7, 0x4 - movs r1, 0x5 - negs r1, r1 - mov r12, r1 -_0813A1BC: - lsls r0, r6, 2 - add r0, r9 - ldr r0, [r0] - ldr r3, [r0] - ldrh r0, [r3, 0x2E] - adds r1, r0, 0x1 - strh r1, [r3, 0x2E] - adds r4, r3, 0 - adds r4, 0x3E - ldrb r2, [r4] - movs r0, 0x4 - ands r0, r2 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - beq _0813A1F4 - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0x3C - ble _0813A204 - mov r0, r12 - ands r0, r2 - strb r0, [r4] - mov r2, r8 - strh r2, [r3, 0x2E] - b _0813A204 - .align 2, 0 -_0813A1F0: .4byte gUnknown_203B148 -_0813A1F4: - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0x3C - ble _0813A204 - adds r0, r2, 0 - orrs r0, r7 - strb r0, [r4] - strh r5, [r3, 0x2E] -_0813A204: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x1 - bls _0813A1BC -_0813A20E: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_813A124 - - thumb_func_start sub_813A21C -sub_813A21C: @ 813A21C - push {r4-r6,lr} - movs r5, 0 - ldr r6, _0813A250 @ =gUnknown_203B148 -_0813A222: - lsls r0, r5, 2 - adds r4, r0, r6 - ldr r0, [r4] - ldr r0, [r0] - cmp r0, 0 - beq _0813A232 - bl DestroySpriteAndFreeResources -_0813A232: - ldr r0, [r4] - cmp r0, 0 - beq _0813A240 - bl Free - movs r0, 0 - str r0, [r4] -_0813A240: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _0813A222 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813A250: .4byte gUnknown_203B148 - thumb_func_end sub_813A21C - - thumb_func_start sub_813A254 -sub_813A254: @ 813A254 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x28 - lsls r0, 16 - lsrs r7, r0, 16 - lsls r1, 16 - lsrs r6, r1, 16 - ldr r0, _0813A310 @ =gUnknown_203B158 - mov r8, r0 - movs r0, 0x8 - bl AllocZeroed - mov r1, r8 - str r0, [r1] - movs r4, 0x80 - lsls r4, 3 - adds r0, r4, 0 - bl AllocZeroed - adds r5, r0, 0 - ldr r0, _0813A314 @ =gUnknown_8E9BF48 - adds r1, r5, 0 - bl LZ77UnCompWram - mov r1, r8 - ldr r0, [r1] - cmp r0, 0 - beq _0813A2F0 - str r5, [sp, 0x18] - add r0, sp, 0x18 - lsls r1, r7, 16 - orrs r1, r4 - str r1, [r0, 0x4] - ldr r1, _0813A318 @ =gUnknown_8E9BF28 - str r1, [sp, 0x20] - ldr r2, _0813A31C @ =0xffff0000 - add r4, sp, 0x20 - ldr r1, [r4, 0x4] - ands r1, r2 - orrs r1, r6 - str r1, [r4, 0x4] - mov r1, sp - movs r2, 0 - strh r7, [r1] - strh r6, [r1, 0x2] - ldr r1, _0813A320 @ =gUnknown_84639AC - str r1, [sp, 0x4] - ldr r1, _0813A324 @ =gUnknown_84639F4 - str r1, [sp, 0x8] - str r2, [sp, 0xC] - ldr r1, _0813A328 @ =gDummySpriteAffineAnimTable - str r1, [sp, 0x10] - ldr r1, _0813A32C @ =SpriteCallbackDummy - str r1, [sp, 0x14] - bl LoadSpriteSheet - adds r0, r4, 0 - bl LoadSpritePalette - mov r0, sp - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - mov r1, r8 - ldr r2, [r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0813A330 @ =gSprites - adds r1, r0 - str r1, [r2] - strh r7, [r2, 0x4] - strh r6, [r2, 0x6] -_0813A2F0: - movs r0, 0x1 - bl sub_813A3B8 - bl sub_813A35C - cmp r5, 0 - beq _0813A304 - adds r0, r5, 0 - bl Free -_0813A304: - add sp, 0x28 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813A310: .4byte gUnknown_203B158 -_0813A314: .4byte gUnknown_8E9BF48 -_0813A318: .4byte gUnknown_8E9BF28 -_0813A31C: .4byte 0xffff0000 -_0813A320: .4byte gUnknown_84639AC -_0813A324: .4byte gUnknown_84639F4 -_0813A328: .4byte gDummySpriteAffineAnimTable -_0813A32C: .4byte SpriteCallbackDummy -_0813A330: .4byte gSprites - thumb_func_end sub_813A254 - - thumb_func_start sub_813A334 -sub_813A334: @ 813A334 - push {r4,lr} - ldr r4, _0813A358 @ =gUnknown_203B158 - ldr r0, [r4] - ldr r0, [r0] - cmp r0, 0 - beq _0813A344 - bl DestroySpriteAndFreeResources -_0813A344: - ldr r0, [r4] - cmp r0, 0 - beq _0813A352 - bl Free - movs r0, 0 - str r0, [r4] -_0813A352: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813A358: .4byte gUnknown_203B158 - thumb_func_end sub_813A334 - - thumb_func_start sub_813A35C -sub_813A35C: @ 813A35C - push {r4,lr} - ldr r4, _0813A38C @ =gMonSummaryScreen - ldr r0, [r4] - ldr r1, _0813A390 @ =0x00003290 - adds r0, r1 - movs r1, 0x37 - bl GetMonData - bl sub_8138C5C - ldr r1, [r4] - ldr r2, _0813A394 @ =0x0000326c - adds r1, r2 - strb r0, [r1] - ldr r0, [r4] - adds r0, r2 - ldrb r1, [r0] - cmp r1, 0 - bne _0813A398 - movs r0, 0x1 - bl sub_813A3B8 - b _0813A3AE - .align 2, 0 -_0813A38C: .4byte gMonSummaryScreen -_0813A390: .4byte 0x00003290 -_0813A394: .4byte 0x0000326c -_0813A398: - ldr r0, _0813A3B4 @ =gUnknown_203B158 - ldr r0, [r0] - ldr r0, [r0] - subs r1, 0x1 - lsls r1, 24 - lsrs r1, 24 - bl StartSpriteAnim - movs r0, 0 - bl sub_813A3B8 -_0813A3AE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813A3B4: .4byte gUnknown_203B158 - thumb_func_end sub_813A35C - - thumb_func_start sub_813A3B8 -sub_813A3B8: @ 813A3B8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r3, r0, 24 - ldr r1, _0813A3EC @ =gMonSummaryScreen - ldr r2, [r1] - ldr r4, _0813A3F0 @ =0x0000326c - adds r0, r2, r4 - ldrb r0, [r0] - adds r5, r1, 0 - cmp r0, 0 - beq _0813A3DA - movs r1, 0xC8 - lsls r1, 6 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _0813A3F8 -_0813A3DA: - ldr r3, _0813A3F4 @ =gUnknown_203B158 - ldr r0, [r3] - ldr r1, [r0] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - b _0813A416 - .align 2, 0 -_0813A3EC: .4byte gMonSummaryScreen -_0813A3F0: .4byte 0x0000326c -_0813A3F4: .4byte gUnknown_203B158 -_0813A3F8: - ldr r4, _0813A438 @ =gUnknown_203B158 - ldr r0, [r4] - ldr r2, [r0] - adds r2, 0x3E - movs r0, 0x1 - adds r1, r3, 0 - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] - adds r3, r4, 0 -_0813A416: - ldr r0, [r5] - ldr r4, _0813A43C @ =0x00003214 - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0x3 - bne _0813A440 - ldr r1, [r3] - ldr r2, [r1] - movs r3, 0x22 - ldrsh r0, [r2, r3] - cmp r0, 0x2D - beq _0813A456 - movs r0, 0x10 - strh r0, [r2, 0x20] - ldr r1, [r1] - movs r0, 0x2D - b _0813A454 - .align 2, 0 -_0813A438: .4byte gUnknown_203B158 -_0813A43C: .4byte 0x00003214 -_0813A440: - ldr r1, [r3] - ldr r2, [r1] - movs r4, 0x22 - ldrsh r0, [r2, r4] - cmp r0, 0x26 - beq _0813A456 - movs r0, 0x10 - strh r0, [r2, 0x20] - ldr r1, [r1] - movs r0, 0x26 -_0813A454: - strh r0, [r1, 0x22] -_0813A456: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_813A3B8 - - thumb_func_start sub_813A45C -sub_813A45C: @ 813A45C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x40 - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - lsls r1, 16 - lsrs r7, r1, 16 - movs r0, 0 - str r0, [sp, 0x38] - ldr r4, _0813A4BC @ =gUnknown_203B15C - movs r0, 0x40 - bl AllocZeroed - str r0, [r4] - movs r0, 0xC0 - lsls r0, 1 - bl AllocZeroed - mov r9, r0 - ldr r0, _0813A4C0 @ =gUnknown_8E9B4B8 - mov r1, r9 - bl LZ77UnCompWram - ldr r5, _0813A4C4 @ =gMonSummaryScreen - ldr r0, [r5] - ldr r4, _0813A4C8 @ =0x00003290 - adds r0, r4 - movs r1, 0x39 - bl GetMonData - adds r6, r0, 0 - ldr r0, [r5] - adds r0, r4 - movs r1, 0x3A - bl GetMonData - adds r1, r0, 0 - lsrs r0, r1, 2 - cmp r0, r6 - bls _0813A4CC - movs r1, 0x2 - str r1, [sp, 0x38] - b _0813A4D6 - .align 2, 0 -_0813A4BC: .4byte gUnknown_203B15C -_0813A4C0: .4byte gUnknown_8E9B4B8 -_0813A4C4: .4byte gMonSummaryScreen -_0813A4C8: .4byte 0x00003290 -_0813A4CC: - lsrs r0, r1, 1 - cmp r0, r6 - bls _0813A4D6 - movs r2, 0x1 - str r2, [sp, 0x38] -_0813A4D6: - mov r3, r9 - cmp r3, 0 - beq _0813A540 - str r3, [sp, 0x18] - movs r2, 0xC0 - lsls r2, 1 - add r0, sp, 0x18 - mov r6, r10 - lsls r1, r6, 16 - orrs r1, r2 - str r1, [r0, 0x4] - ldr r3, _0813A600 @ =gUnknown_8463FFC - ldr r1, [r3] - str r1, [sp, 0x20] - ldr r6, _0813A604 @ =0xffff0000 - add r1, sp, 0x20 - mov r8, r1 - ldr r1, [r1, 0x4] - ands r1, r6 - orrs r1, r7 - mov r2, r8 - str r1, [r2, 0x4] - ldr r1, [r3, 0x4] - str r1, [sp, 0x28] - adds r2, r7, 0x1 - lsls r2, 16 - lsrs r2, 16 - add r5, sp, 0x28 - ldr r1, [r5, 0x4] - ands r1, r6 - orrs r1, r2 - str r1, [r5, 0x4] - ldr r1, [r3, 0x8] - str r1, [sp, 0x30] - adds r2, r7, 0x2 - lsls r2, 16 - lsrs r2, 16 - add r4, sp, 0x30 - ldr r1, [r4, 0x4] - ands r1, r6 - orrs r1, r2 - str r1, [r4, 0x4] - bl LoadSpriteSheet - mov r0, r8 - bl LoadSpritePalette - adds r0, r5, 0 - bl LoadSpritePalette - adds r0, r4, 0 - bl LoadSpritePalette -_0813A540: - movs r4, 0 - ldr r3, [sp, 0x38] - adds r3, r7, r3 - str r3, [sp, 0x3C] - mov r8, r4 - ldr r5, _0813A608 @ =gUnknown_203B15C -_0813A54C: - mov r0, sp - mov r6, r10 - strh r6, [r0] - ldrh r1, [r0, 0x3C] - strh r1, [r0, 0x2] - ldr r0, _0813A60C @ =gUnknown_8463A14 - str r0, [sp, 0x4] - ldr r0, _0813A610 @ =gUnknown_8463A7C - str r0, [sp, 0x8] - mov r2, r8 - str r2, [sp, 0xC] - ldr r0, _0813A614 @ =gDummySpriteAffineAnimTable - str r0, [sp, 0x10] - ldr r0, _0813A618 @ =SpriteCallbackDummy - str r0, [sp, 0x14] - ldr r1, [r5] - lsls r0, r4, 1 - adds r1, 0x28 - adds r1, r0 - lsls r0, r4, 3 - adds r0, 0xAC - strh r0, [r1] - movs r3, 0 - ldrsh r1, [r1, r3] - mov r0, sp - movs r2, 0x24 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, [r5] - lsls r3, r4, 2 - adds r2, r3 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0813A61C @ =gSprites - adds r1, r0 - str r1, [r2] - adds r1, 0x3E - ldrb r0, [r1] - movs r6, 0x5 - negs r6, r6 - adds r2, r6, 0 - ands r0, r2 - strb r0, [r1] - ldr r0, [r5] - adds r0, r3 - ldr r2, [r0] - ldrb r1, [r2, 0x5] - subs r6, 0x8 - adds r0, r6, 0 - ands r1, r0 - movs r0, 0x8 - orrs r1, r0 - strb r1, [r2, 0x5] - ldr r0, [r5] - mov r1, r10 - strh r1, [r0, 0x3C] - strh r7, [r0, 0x3E] - adds r0, r3 - ldr r0, [r0] - movs r1, 0x8 - bl StartSpriteAnim - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x8 - bls _0813A54C - bl sub_813A620 - movs r0, 0x1 - bl sub_813A838 - mov r2, r9 - cmp r2, 0 - beq _0813A5F0 - mov r0, r9 - bl Free -_0813A5F0: - add sp, 0x40 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813A600: .4byte gUnknown_8463FFC -_0813A604: .4byte 0xffff0000 -_0813A608: .4byte gUnknown_203B15C -_0813A60C: .4byte gUnknown_8463A14 -_0813A610: .4byte gUnknown_8463A7C -_0813A614: .4byte gDummySpriteAffineAnimTable -_0813A618: .4byte SpriteCallbackDummy -_0813A61C: .4byte gSprites - thumb_func_end sub_813A45C - - thumb_func_start sub_813A620 -sub_813A620: @ 813A620 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - movs r0, 0 - mov r10, r0 - ldr r5, _0813A688 @ =gMonSummaryScreen - ldr r1, [r5] - movs r2, 0xC8 - lsls r2, 6 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _0813A642 - b _0813A7EA -_0813A642: - ldr r4, _0813A68C @ =0x00003290 - adds r0, r1, r4 - movs r1, 0x39 - bl GetMonData - mov r9, r0 - ldr r0, [r5] - adds r0, r4 - movs r1, 0x3A - bl GetMonData - adds r4, r0, 0 - movs r1, 0x5 - bl __udivsi3 - cmp r0, r9 - bcs _0813A666 - lsrs r0, r4, 1 -_0813A666: - mov r3, r9 - lsls r0, r3, 16 - asrs r0, 16 - lsls r1, r4, 16 - asrs r1, 16 - bl GetHPBarLevel - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - beq _0813A690 - cmp r0, 0x2 - bgt _0813A684 - cmp r0, 0x1 - beq _0813A694 -_0813A684: - movs r6, 0 - b _0813A696 - .align 2, 0 -_0813A688: .4byte gMonSummaryScreen -_0813A68C: .4byte 0x00003290 -_0813A690: - movs r6, 0x1 - b _0813A696 -_0813A694: - movs r6, 0x2 -_0813A696: - movs r0, 0 - mov r8, r0 -_0813A69A: - movs r0, 0x78 - bl IndexOfSpritePaletteTag - ldr r5, _0813A6FC @ =gUnknown_203B15C - ldr r1, [r5] - mov r3, r8 - lsls r2, r3, 2 - adds r1, r2 - ldr r3, [r1] - lsls r0, 24 - lsrs r0, 24 - adds r0, r6 - lsls r0, 4 - ldrb r2, [r3, 0x5] - movs r1, 0xF - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x5] - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0x8 - bls _0813A69A - cmp r9, r4 - bne _0813A700 - movs r0, 0x2 - mov r8, r0 - cmp r0, 0x7 - bls _0813A6DA - b _0813A7CA -_0813A6DA: - adds r4, r5, 0 -_0813A6DC: - ldr r0, [r4] - mov r2, r8 - lsls r1, r2, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x8 - bl StartSpriteAnim - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0x7 - bls _0813A6DC - b _0813A7CA - .align 2, 0 -_0813A6FC: .4byte gUnknown_203B15C -_0813A700: - lsls r0, r4, 2 - movs r1, 0x6 - bl __udivsi3 - adds r6, r0, 0 - movs r7, 0 - mov r3, r9 - lsls r0, r3, 2 - adds r4, r0, 0 - movs r5, 0 - b _0813A724 -_0813A716: - subs r4, r6 - sbcs r5, r7 - mov r0, r10 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 -_0813A724: - cmp r5, r7 - bgt _0813A716 - cmp r5, r7 - bne _0813A730 - cmp r4, r6 - bhi _0813A716 -_0813A730: - mov r0, r10 - adds r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - movs r0, 0x2 - mov r8, r0 - lsrs r1, r4, 31 - str r1, [sp, 0x4] - lsls r2, r5, 1 - str r2, [sp] - cmp r8, r10 - bcs _0813A76E - ldr r3, _0813A7A8 @ =gUnknown_203B15C - mov r9, r3 -_0813A74E: - mov r1, r9 - ldr r0, [r1] - mov r2, r8 - lsls r1, r2, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x8 - bl StartSpriteAnim - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r8, r10 - bcc _0813A74E -_0813A76E: - ldr r3, [sp, 0x4] - ldr r0, [sp] - orrs r3, r0 - lsls r2, r4, 1 - adds r2, r4 - adcs r3, r5 - lsrs r5, r2, 31 - lsls r4, r3, 1 - adds r1, r5, 0 - orrs r1, r4 - lsls r0, r2, 1 - adds r3, r7, 0 - adds r2, r6, 0 - bl __divdi3 - adds r2, r1, 0 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r4, _0813A7A8 @ =gUnknown_203B15C - ldr r0, [r4] - mov r2, r10 - lsls r3, r2, 2 - adds r0, r3 - ldr r0, [r0] - bl StartSpriteAnim - mov r0, r10 - b _0813A7BE - .align 2, 0 -_0813A7A8: .4byte gUnknown_203B15C -_0813A7AC: - ldr r0, [r4] - mov r3, r8 - lsls r1, r3, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0 - bl StartSpriteAnim - mov r0, r8 -_0813A7BE: - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0x7 - bls _0813A7AC -_0813A7CA: - ldr r4, _0813A7FC @ =gUnknown_203B15C - ldr r0, [r4] - ldr r0, [r0] - movs r1, 0x9 - bl StartSpriteAnim - ldr r0, [r4] - ldr r0, [r0, 0x4] - movs r1, 0xA - bl StartSpriteAnim - ldr r0, [r4] - ldr r0, [r0, 0x20] - movs r1, 0xB - bl StartSpriteAnim -_0813A7EA: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813A7FC: .4byte gUnknown_203B15C - thumb_func_end sub_813A620 - - thumb_func_start sub_813A800 -sub_813A800: @ 813A800 - push {r4,r5,lr} - movs r4, 0 -_0813A804: - ldr r5, _0813A834 @ =gUnknown_203B15C - ldr r0, [r5] - lsls r1, r4, 2 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - beq _0813A816 - bl DestroySpriteAndFreeResources -_0813A816: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x8 - bls _0813A804 - ldr r0, [r5] - cmp r0, 0 - beq _0813A82E - bl Free - movs r0, 0 - str r0, [r5] -_0813A82E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0813A834: .4byte gUnknown_203B15C - thumb_func_end sub_813A800 - - thumb_func_start sub_813A838 -sub_813A838: @ 813A838 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - movs r3, 0 - ldr r6, _0813A870 @ =gUnknown_203B15C - movs r1, 0x1 - ands r0, r1 - lsls r4, r0, 2 - movs r5, 0x5 - negs r5, r5 -_0813A84C: - ldr r0, [r6] - lsls r1, r3, 2 - adds r0, r1 - ldr r1, [r0] - adds r1, 0x3E - ldrb r2, [r1] - adds r0, r5, 0 - ands r0, r2 - orrs r0, r4 - strb r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x8 - bls _0813A84C - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813A870: .4byte gUnknown_203B15C - thumb_func_end sub_813A838 - - thumb_func_start sub_813A874 -sub_813A874: @ 813A874 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x28 - lsls r0, 16 - lsrs r7, r0, 16 - lsls r1, 16 - lsrs r6, r1, 16 - ldr r0, _0813A970 @ =gUnknown_203B160 - mov r8, r0 - movs r0, 0x48 - bl AllocZeroed - mov r1, r8 - str r0, [r1] - movs r4, 0xC0 - lsls r4, 1 - adds r0, r4, 0 - bl AllocZeroed - adds r5, r0, 0 - ldr r0, _0813A974 @ =gUnknown_8E9B3F0 - adds r1, r5, 0 - bl LZ77UnCompWram - cmp r5, 0 - beq _0813A8D0 - str r5, [sp, 0x18] - add r0, sp, 0x18 - lsls r1, r7, 16 - orrs r1, r4 - str r1, [r0, 0x4] - ldr r1, _0813A978 @ =gUnknown_8E9B578 - str r1, [sp, 0x20] - ldr r2, _0813A97C @ =0xffff0000 - add r4, sp, 0x20 - ldr r1, [r4, 0x4] - ands r1, r2 - orrs r1, r6 - str r1, [r4, 0x4] - bl LoadSpriteSheet - adds r0, r4, 0 - bl LoadSpritePalette -_0813A8D0: - movs r4, 0 - mov r9, r4 -_0813A8D4: - mov r0, sp - strh r7, [r0] - strh r6, [r0, 0x2] - ldr r0, _0813A980 @ =gUnknown_8463A14 - str r0, [sp, 0x4] - ldr r0, _0813A984 @ =gUnknown_8463A7C - str r0, [sp, 0x8] - mov r3, r9 - str r3, [sp, 0xC] - ldr r0, _0813A988 @ =gDummySpriteAffineAnimTable - str r0, [sp, 0x10] - ldr r0, _0813A98C @ =SpriteCallbackDummy - str r0, [sp, 0x14] - mov r0, r8 - ldr r1, [r0] - lsls r0, r4, 1 - adds r1, 0x2C - adds r1, r0 - lsls r0, r4, 3 - adds r0, 0x9C - strh r0, [r1] - movs r3, 0 - ldrsh r1, [r1, r3] - mov r0, sp - movs r2, 0x84 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - mov r1, r8 - ldr r2, [r1] - lsls r1, r4, 2 - adds r2, r1 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0813A990 @ =gSprites - adds r1, r0 - str r1, [r2] - ldrb r2, [r1, 0x5] - movs r3, 0xD - negs r3, r3 - adds r0, r3, 0 - ands r2, r0 - movs r0, 0x8 - orrs r2, r0 - strb r2, [r1, 0x5] - mov r1, r8 - ldr r0, [r1] - adds r1, r0, 0 - adds r1, 0x42 - strh r7, [r1] - adds r0, 0x44 - strh r6, [r0] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xA - bls _0813A8D4 - bl sub_813A994 - movs r0, 0x1 - bl sub_813AB70 - cmp r5, 0 - beq _0813A960 - adds r0, r5, 0 - bl Free -_0813A960: - add sp, 0x28 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813A970: .4byte gUnknown_203B160 -_0813A974: .4byte gUnknown_8E9B3F0 -_0813A978: .4byte gUnknown_8E9B578 -_0813A97C: .4byte 0xffff0000 -_0813A980: .4byte gUnknown_8463A14 -_0813A984: .4byte gUnknown_8463A7C -_0813A988: .4byte gDummySpriteAffineAnimTable -_0813A98C: .4byte SpriteCallbackDummy -_0813A990: .4byte gSprites - thumb_func_end sub_813A874 - - thumb_func_start sub_813A994 -sub_813A994: @ 813A994 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - movs r7, 0 - ldr r6, _0813AAD4 @ =gMonSummaryScreen - ldr r1, [r6] - movs r2, 0xC8 - lsls r2, 6 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _0813A9B4 - b _0813AB24 -_0813A9B4: - ldr r4, _0813AAD8 @ =0x00003290 - adds r0, r1, r4 - movs r1, 0x19 - bl GetMonData - mov r8, r0 - ldr r0, [r6] - adds r0, r4 - movs r1, 0x38 - bl GetMonData - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, [r6] - adds r0, r4 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - cmp r5, 0x63 - bls _0813A9E2 - b _0813AAE8 -_0813A9E2: - ldr r3, _0813AADC @ =gExperienceTables - adds r1, r5, 0x1 - lsls r1, 2 - ldr r2, _0813AAE0 @ =gBaseStats - lsls r0, r4, 3 - subs r0, r4 - lsls r0, 2 - adds r0, r2 - ldrb r2, [r0, 0x13] - movs r0, 0xCA - lsls r0, 1 - muls r2, r0 - adds r1, r2 - adds r1, r3 - lsls r0, r5, 2 - adds r0, r2 - adds r0, r3 - ldr r1, [r1] - ldr r0, [r0] - subs r1, r0 - mov r10, r1 - mov r1, r8 - subs r1, r0 - mov r9, r1 - mov r2, r10 - lsls r0, r2, 2 - lsrs r0, 3 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - lsls r0, r1, 2 - adds r4, r0, 0 - movs r5, 0 - ldr r1, [sp, 0x4] - cmp r5, r1 - ble _0813AA3E -_0813AA2A: - ldr r0, [sp] - ldr r1, [sp, 0x4] - subs r4, r0 - sbcs r5, r1 - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r5, r1 - bgt _0813AA2A - ldr r1, [sp, 0x4] -_0813AA3E: - cmp r5, r1 - bne _0813AA48 - ldr r2, [sp] - cmp r4, r2 - bhi _0813AA2A -_0813AA48: - adds r0, r7, 0x2 - lsls r0, 24 - lsrs r7, r0, 24 - movs r6, 0x2 - cmp r6, r7 - bcs _0813AA72 - ldr r0, _0813AAE4 @ =gUnknown_203B160 - mov r8, r0 -_0813AA58: - mov r1, r8 - ldr r0, [r1] - lsls r1, r6, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x8 - bl StartSpriteAnim - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, r7 - bcc _0813AA58 -_0813AA72: - cmp r7, 0x9 - bls _0813AA86 - cmp r10, r9 - beq _0813AB24 - ldr r0, _0813AAE4 @ =gUnknown_203B160 - ldr r0, [r0] - ldr r0, [r0, 0x24] - movs r1, 0x7 - bl StartSpriteAnim -_0813AA86: - lsrs r3, r4, 29 - lsls r2, r5, 3 - adds r1, r3, 0 - orrs r1, r2 - lsls r0, r4, 3 - ldr r2, [sp] - ldr r3, [sp, 0x4] - bl __divdi3 - adds r2, r1, 0 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r4, _0813AAE4 @ =gUnknown_203B160 - ldr r0, [r4] - lsls r3, r7, 2 - adds r0, r3 - ldr r0, [r0] - bl StartSpriteAnim - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x9 - bhi _0813AB04 -_0813AAB8: - ldr r0, [r4] - lsls r1, r6, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0 - bl StartSpriteAnim - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x9 - bls _0813AAB8 - b _0813AB04 - .align 2, 0 -_0813AAD4: .4byte gMonSummaryScreen -_0813AAD8: .4byte 0x00003290 -_0813AADC: .4byte gExperienceTables -_0813AAE0: .4byte gBaseStats -_0813AAE4: .4byte gUnknown_203B160 -_0813AAE8: - movs r6, 0x2 - ldr r4, _0813AB34 @ =gUnknown_203B160 -_0813AAEC: - ldr r0, [r4] - lsls r1, r6, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0 - bl StartSpriteAnim - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x9 - bls _0813AAEC -_0813AB04: - ldr r4, _0813AB34 @ =gUnknown_203B160 - ldr r0, [r4] - ldr r0, [r0] - movs r1, 0x9 - bl StartSpriteAnim - ldr r0, [r4] - ldr r0, [r0, 0x4] - movs r1, 0xA - bl StartSpriteAnim - ldr r0, [r4] - ldr r0, [r0, 0x28] - movs r1, 0xB - bl StartSpriteAnim -_0813AB24: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813AB34: .4byte gUnknown_203B160 - thumb_func_end sub_813A994 - - thumb_func_start sub_813AB38 -sub_813AB38: @ 813AB38 - push {r4,r5,lr} - movs r4, 0 -_0813AB3C: - ldr r5, _0813AB6C @ =gUnknown_203B160 - ldr r0, [r5] - lsls r1, r4, 2 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - beq _0813AB4E - bl DestroySpriteAndFreeResources -_0813AB4E: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xA - bls _0813AB3C - ldr r0, [r5] - cmp r0, 0 - beq _0813AB66 - bl Free - movs r0, 0 - str r0, [r5] -_0813AB66: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0813AB6C: .4byte gUnknown_203B160 - thumb_func_end sub_813AB38 - - thumb_func_start sub_813AB70 -sub_813AB70: @ 813AB70 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - movs r3, 0 - ldr r6, _0813ABA8 @ =gUnknown_203B160 - movs r1, 0x1 - ands r0, r1 - lsls r4, r0, 2 - movs r5, 0x5 - negs r5, r5 -_0813AB84: - ldr r0, [r6] - lsls r1, r3, 2 - adds r0, r1 - ldr r1, [r0] - adds r1, 0x3E - ldrb r2, [r1] - adds r0, r5, 0 - ands r0, r2 - orrs r0, r4 - strb r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0xA - bls _0813AB84 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813ABA8: .4byte gUnknown_203B160 - thumb_func_end sub_813AB70 - - thumb_func_start sub_813ABAC -sub_813ABAC: @ 813ABAC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x28 - lsls r0, 16 - lsrs r7, r0, 16 - lsls r1, 16 - lsrs r6, r1, 16 - ldr r0, _0813AC68 @ =gUnknown_203B164 - mov r8, r0 - movs r0, 0x8 - bl AllocZeroed - mov r1, r8 - str r0, [r1] - movs r0, 0x20 - bl AllocZeroed - adds r5, r0, 0 - ldr r0, _0813AC6C @ =gUnknown_8463B20 - adds r1, r5, 0 - bl LZ77UnCompWram - mov r1, r8 - ldr r0, [r1] - cmp r0, 0 - beq _0813AC46 - str r5, [sp, 0x18] - movs r2, 0x20 - add r0, sp, 0x18 - lsls r1, r7, 16 - orrs r1, r2 - str r1, [r0, 0x4] - ldr r1, _0813AC70 @ =gUnknown_8463B00 - str r1, [sp, 0x20] - ldr r2, _0813AC74 @ =0xffff0000 - add r4, sp, 0x20 - ldr r1, [r4, 0x4] - ands r1, r2 - orrs r1, r6 - str r1, [r4, 0x4] - mov r1, sp - movs r2, 0 - strh r7, [r1] - strh r6, [r1, 0x2] - ldr r1, _0813AC78 @ =gUnknown_8463AEC - str r1, [sp, 0x4] - ldr r1, _0813AC7C @ =gUnknown_8463AFC - str r1, [sp, 0x8] - str r2, [sp, 0xC] - ldr r1, _0813AC80 @ =gDummySpriteAffineAnimTable - str r1, [sp, 0x10] - ldr r1, _0813AC84 @ =SpriteCallbackDummy - str r1, [sp, 0x14] - bl LoadSpriteSheet - adds r0, r4, 0 - bl LoadSpritePalette - mov r0, sp - movs r1, 0x72 - movs r2, 0x5C - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - mov r1, r8 - ldr r2, [r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0813AC88 @ =gSprites - adds r1, r0 - str r1, [r2] - strh r7, [r2, 0x4] - strh r6, [r2, 0x6] -_0813AC46: - movs r0, 0x1 - bl sub_813ACF8 - bl sub_813ACB4 - cmp r5, 0 - beq _0813AC5A - adds r0, r5, 0 - bl Free -_0813AC5A: - add sp, 0x28 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813AC68: .4byte gUnknown_203B164 -_0813AC6C: .4byte gUnknown_8463B20 -_0813AC70: .4byte gUnknown_8463B00 -_0813AC74: .4byte 0xffff0000 -_0813AC78: .4byte gUnknown_8463AEC -_0813AC7C: .4byte gUnknown_8463AFC -_0813AC80: .4byte gDummySpriteAffineAnimTable -_0813AC84: .4byte SpriteCallbackDummy -_0813AC88: .4byte gSprites - thumb_func_end sub_813ABAC - - thumb_func_start sub_813AC8C -sub_813AC8C: @ 813AC8C - push {r4,lr} - ldr r4, _0813ACB0 @ =gUnknown_203B164 - ldr r0, [r4] - ldr r0, [r0] - cmp r0, 0 - beq _0813AC9C - bl DestroySpriteAndFreeResources -_0813AC9C: - ldr r0, [r4] - cmp r0, 0 - beq _0813ACAA - bl Free - movs r0, 0 - str r0, [r4] -_0813ACAA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813ACB0: .4byte gUnknown_203B164 - thumb_func_end sub_813AC8C - - thumb_func_start sub_813ACB4 -sub_813ACB4: @ 813ACB4 - push {r4,lr} - ldr r4, _0813ACE4 @ =gMonSummaryScreen - ldr r0, [r4] - ldr r1, _0813ACE8 @ =0x00003290 - adds r0, r1 - movs r1, 0 - bl CheckPartyPokerus - lsls r0, 24 - cmp r0, 0 - bne _0813ACEC - ldr r0, [r4] - ldr r1, _0813ACE8 @ =0x00003290 - adds r0, r1 - movs r1, 0 - bl CheckPartyHasHadPokerus - lsls r0, 24 - cmp r0, 0 - beq _0813ACEC - movs r0, 0 - bl sub_813ACF8 - b _0813ACF2 - .align 2, 0 -_0813ACE4: .4byte gMonSummaryScreen -_0813ACE8: .4byte 0x00003290 -_0813ACEC: - movs r0, 0x1 - bl sub_813ACF8 -_0813ACF2: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_813ACB4 - - thumb_func_start sub_813ACF8 -sub_813ACF8: @ 813ACF8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _0813AD44 @ =gMonSummaryScreen - ldr r0, [r4] - ldr r1, _0813AD48 @ =0x00003290 - adds r0, r1 - movs r1, 0 - bl CheckPartyPokerus - lsls r0, 24 - cmp r0, 0 - bne _0813AD50 - ldr r0, [r4] - ldr r1, _0813AD48 @ =0x00003290 - adds r0, r1 - movs r1, 0 - bl CheckPartyHasHadPokerus - lsls r0, 24 - cmp r0, 0 - beq _0813AD50 - ldr r0, _0813AD4C @ =gUnknown_203B164 - ldr r0, [r0] - ldr r2, [r0] - adds r2, 0x3E - movs r0, 0x1 - adds r1, r5, 0 - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] - b _0813ADA2 - .align 2, 0 -_0813AD44: .4byte gMonSummaryScreen -_0813AD48: .4byte 0x00003290 -_0813AD4C: .4byte gUnknown_203B164 -_0813AD50: - ldr r2, _0813AD88 @ =gUnknown_203B164 - ldr r0, [r2] - ldr r1, [r0] - adds r1, 0x3E - ldrb r0, [r1] - movs r3, 0x4 - orrs r0, r3 - strb r0, [r1] - ldr r0, _0813AD8C @ =gMonSummaryScreen - ldr r0, [r0] - ldr r1, _0813AD90 @ =0x00003214 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x3 - bne _0813AD94 - ldr r0, [r2] - ldr r1, [r0] - adds r1, 0x3E - ldrb r0, [r1] - orrs r0, r3 - strb r0, [r1] - ldr r2, [r2] - ldr r1, [r2] - movs r0, 0x10 - strh r0, [r1, 0x20] - ldr r1, [r2] - movs r0, 0x2C - b _0813ADA0 - .align 2, 0 -_0813AD88: .4byte gUnknown_203B164 -_0813AD8C: .4byte gMonSummaryScreen -_0813AD90: .4byte 0x00003214 -_0813AD94: - ldr r2, [r2] - ldr r1, [r2] - movs r0, 0x72 - strh r0, [r1, 0x20] - ldr r1, [r2] - movs r0, 0x5C -_0813ADA0: - strh r0, [r1, 0x22] -_0813ADA2: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_813ACF8 - - thumb_func_start sub_813ADA8 -sub_813ADA8: @ 813ADA8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x28 - lsls r0, 16 - lsrs r7, r0, 16 - lsls r1, 16 - lsrs r6, r1, 16 - ldr r0, _0813AE64 @ =gUnknown_203B168 - mov r8, r0 - movs r0, 0x8 - bl AllocZeroed - mov r1, r8 - str r0, [r1] - movs r0, 0x40 - bl AllocZeroed - adds r5, r0, 0 - ldr r0, _0813AE68 @ =gUnknown_8463B64 - adds r1, r5, 0 - bl LZ77UnCompWram - mov r1, r8 - ldr r0, [r1] - cmp r0, 0 - beq _0813AE42 - str r5, [sp, 0x18] - movs r2, 0x40 - add r0, sp, 0x18 - lsls r1, r7, 16 - orrs r1, r2 - str r1, [r0, 0x4] - ldr r1, _0813AE6C @ =gUnknown_8463B44 - str r1, [sp, 0x20] - ldr r2, _0813AE70 @ =0xffff0000 - add r4, sp, 0x20 - ldr r1, [r4, 0x4] - ands r1, r2 - orrs r1, r6 - str r1, [r4, 0x4] - mov r1, sp - movs r2, 0 - strh r7, [r1] - strh r6, [r1, 0x2] - ldr r1, _0813AE74 @ =gUnknown_8463B30 - str r1, [sp, 0x4] - ldr r1, _0813AE78 @ =gUnknown_8463B40 - str r1, [sp, 0x8] - str r2, [sp, 0xC] - ldr r1, _0813AE7C @ =gDummySpriteAffineAnimTable - str r1, [sp, 0x10] - ldr r1, _0813AE80 @ =SpriteCallbackDummy - str r1, [sp, 0x14] - bl LoadSpriteSheet - adds r0, r4, 0 - bl LoadSpritePalette - mov r0, sp - movs r1, 0x6A - movs r2, 0x28 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - mov r1, r8 - ldr r2, [r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0813AE84 @ =gSprites - adds r1, r0 - str r1, [r2] - strh r7, [r2, 0x4] - strh r6, [r2, 0x6] -_0813AE42: - movs r0, 0x1 - bl sub_813AEB0 - bl sub_813AF50 - cmp r5, 0 - beq _0813AE56 - adds r0, r5, 0 - bl Free -_0813AE56: - add sp, 0x28 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813AE64: .4byte gUnknown_203B168 -_0813AE68: .4byte gUnknown_8463B64 -_0813AE6C: .4byte gUnknown_8463B44 -_0813AE70: .4byte 0xffff0000 -_0813AE74: .4byte gUnknown_8463B30 -_0813AE78: .4byte gUnknown_8463B40 -_0813AE7C: .4byte gDummySpriteAffineAnimTable -_0813AE80: .4byte SpriteCallbackDummy -_0813AE84: .4byte gSprites - thumb_func_end sub_813ADA8 - - thumb_func_start sub_813AE88 -sub_813AE88: @ 813AE88 - push {r4,lr} - ldr r4, _0813AEAC @ =gUnknown_203B168 - ldr r0, [r4] - ldr r0, [r0] - cmp r0, 0 - beq _0813AE98 - bl DestroySpriteAndFreeResources -_0813AE98: - ldr r0, [r4] - cmp r0, 0 - beq _0813AEA6 - bl Free - movs r0, 0 - str r0, [r4] -_0813AEA6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813AEAC: .4byte gUnknown_203B168 - thumb_func_end sub_813AE88 - - thumb_func_start sub_813AEB0 -sub_813AEB0: @ 813AEB0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _0813AEF8 @ =gMonSummaryScreen - ldr r0, [r4] - ldr r1, _0813AEFC @ =0x00003290 - adds r0, r1 - bl IsMonShiny - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0813AF04 - ldr r0, [r4] - movs r1, 0xC8 - lsls r1, 6 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _0813AF04 - ldr r4, _0813AF00 @ =gUnknown_203B168 - ldr r0, [r4] - ldr r2, [r0] - adds r2, 0x3E - movs r0, 0x1 - adds r1, r5, 0 - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] - adds r3, r4, 0 - b _0813AF14 - .align 2, 0 -_0813AEF8: .4byte gMonSummaryScreen -_0813AEFC: .4byte 0x00003290 -_0813AF00: .4byte gUnknown_203B168 -_0813AF04: - ldr r3, _0813AF30 @ =gUnknown_203B168 - ldr r0, [r3] - ldr r1, [r0] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] -_0813AF14: - ldr r0, _0813AF34 @ =gMonSummaryScreen - ldr r0, [r0] - ldr r1, _0813AF38 @ =0x00003214 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x3 - bne _0813AF3C - ldr r2, [r3] - ldr r1, [r2] - movs r0, 0x8 - strh r0, [r1, 0x20] - ldr r1, [r2] - movs r0, 0x18 - b _0813AF48 - .align 2, 0 -_0813AF30: .4byte gUnknown_203B168 -_0813AF34: .4byte gMonSummaryScreen -_0813AF38: .4byte 0x00003214 -_0813AF3C: - ldr r2, [r3] - ldr r1, [r2] - movs r0, 0x6A - strh r0, [r1, 0x20] - ldr r1, [r2] - movs r0, 0x28 -_0813AF48: - strh r0, [r1, 0x22] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_813AEB0 - - thumb_func_start sub_813AF50 -sub_813AF50: @ 813AF50 - push {r4,lr} - ldr r4, _0813AF7C @ =gMonSummaryScreen - ldr r0, [r4] - ldr r1, _0813AF80 @ =0x00003290 - adds r0, r1 - bl IsMonShiny - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0813AF84 - ldr r0, [r4] - movs r1, 0xC8 - lsls r1, 6 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _0813AF84 - movs r0, 0 - bl sub_813AEB0 - b _0813AF8A - .align 2, 0 -_0813AF7C: .4byte gMonSummaryScreen -_0813AF80: .4byte 0x00003290 -_0813AF84: - movs r0, 0x1 - bl sub_813AEB0 -_0813AF8A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_813AF50 - - thumb_func_start sub_813AF90 -sub_813AF90: @ 813AF90 - push {lr} - bl sub_813A21C - bl sub_813A800 - bl sub_813AB38 - bl sub_8139C80 - bl sub_8139F20 - bl sub_8139D90 - bl sub_813B068 - bl sub_813A334 - bl sub_813AC8C - bl sub_813AE88 - bl ResetSpriteData - pop {r0} - bx r0 - thumb_func_end sub_813AF90 - - thumb_func_start sub_813AFC4 -sub_813AFC4: @ 813AFC4 - push {lr} - bl sub_8139CB0 - movs r0, 0 - bl sub_8139D54 - bl sub_8139DBC - bl sub_813995C - movs r0, 0 - bl sub_8139C44 - bl sub_813A620 - bl sub_813A994 - bl sub_813B0E4 - bl sub_813A35C - bl sub_813ACB4 - bl sub_813AF50 - pop {r0} - bx r0 - thumb_func_end sub_813AFC4 - - thumb_func_start sub_813AFFC -sub_813AFFC: @ 813AFFC - push {r4-r6,lr} - ldr r5, _0813B058 @ =gMonSummaryScreen - ldr r0, [r5] - ldr r1, _0813B05C @ =0x00003290 - adds r0, r1 - movs r1, 0x8 - bl GetMonData - adds r6, r0, 0 - ldr r0, [r5] - ldr r4, _0813B060 @ =0x000032fc - adds r0, r4 - ldr r0, [r0] - bl DestroySpriteAndFreeResources - ldr r2, _0813B064 @ =gUnknown_84636E0 - movs r0, 0x8C - movs r1, 0x8C - bl CreateMonMarkingSprite_SelectCombo - adds r2, r0, 0 - ldr r0, [r5] - adds r0, r4 - str r2, [r0] - cmp r2, 0 - beq _0813B04A - lsls r1, r6, 24 - lsrs r1, 24 - adds r0, r2, 0 - bl StartSpriteAnim - ldr r0, [r5] - adds r0, r4 - ldr r2, [r0] - movs r1, 0x14 - strh r1, [r2, 0x20] - ldr r1, [r0] - movs r0, 0x5B - strh r0, [r1, 0x22] -_0813B04A: - movs r0, 0x1 - bl sub_813B084 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813B058: .4byte gMonSummaryScreen -_0813B05C: .4byte 0x00003290 -_0813B060: .4byte 0x000032fc -_0813B064: .4byte gUnknown_84636E0 - thumb_func_end sub_813AFFC - - thumb_func_start sub_813B068 -sub_813B068: @ 813B068 - push {lr} - ldr r0, _0813B07C @ =gMonSummaryScreen - ldr r0, [r0] - ldr r1, _0813B080 @ =0x000032fc - adds r0, r1 - ldr r0, [r0] - bl DestroySpriteAndFreeResources - pop {r0} - bx r0 - .align 2, 0 -_0813B07C: .4byte gMonSummaryScreen -_0813B080: .4byte 0x000032fc - thumb_func_end sub_813B068 - - thumb_func_start sub_813B084 -sub_813B084: @ 813B084 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _0813B0B0 @ =gMonSummaryScreen - ldr r0, [r4] - ldr r1, _0813B0B4 @ =0x00003290 - adds r0, r1 - movs r1, 0x8 - bl GetMonData - cmp r0, 0 - bne _0813B0BC - ldr r0, [r4] - ldr r1, _0813B0B8 @ =0x000032fc - adds r0, r1 - ldr r1, [r0] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - b _0813B0DA - .align 2, 0 -_0813B0B0: .4byte gMonSummaryScreen -_0813B0B4: .4byte 0x00003290 -_0813B0B8: .4byte 0x000032fc -_0813B0BC: - ldr r0, [r4] - ldr r1, _0813B0E0 @ =0x000032fc - adds r0, r1 - ldr r2, [r0] - adds r2, 0x3E - movs r0, 0x1 - adds r1, r5, 0 - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] -_0813B0DA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0813B0E0: .4byte 0x000032fc - thumb_func_end sub_813B084 - - thumb_func_start sub_813B0E4 -sub_813B0E4: @ 813B0E4 - push {r4,lr} - ldr r4, _0813B114 @ =gMonSummaryScreen - ldr r0, [r4] - ldr r1, _0813B118 @ =0x00003290 - adds r0, r1 - movs r1, 0x8 - bl GetMonData - adds r1, r0, 0 - ldr r0, [r4] - ldr r2, _0813B11C @ =0x000032fc - adds r0, r2 - ldr r0, [r0] - lsls r1, 24 - lsrs r1, 24 - bl StartSpriteAnim - movs r0, 0 - bl sub_813B084 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813B114: .4byte gMonSummaryScreen -_0813B118: .4byte 0x00003290 -_0813B11C: .4byte 0x000032fc - thumb_func_end sub_813B0E4 - - thumb_func_start sub_813B120 -sub_813B120: @ 813B120 - push {r4-r6,lr} - lsls r1, 24 - lsrs r5, r1, 24 - ldr r1, _0813B154 @ =gMonSummaryScreen - ldr r2, [r1] - ldr r3, _0813B158 @ =0x0000321c - adds r0, r2, r3 - ldrb r3, [r0] - adds r6, r1, 0 - cmp r3, 0x1 - bne _0813B198 - ldr r1, _0813B15C @ =0x00003214 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _0813B160 - lsls r1, r5, 24 - asrs r1, 24 - movs r5, 0x2 - eors r1, r3 - negs r0, r1 - orrs r0, r1 - asrs r0, 31 - ands r5, r0 - b _0813B16C - .align 2, 0 -_0813B154: .4byte gMonSummaryScreen -_0813B158: .4byte 0x0000321c -_0813B15C: .4byte 0x00003214 -_0813B160: - lsls r0, r5, 24 - asrs r0, 24 - movs r5, 0x3 - cmp r0, 0x1 - bne _0813B16C - movs r5, 0x1 -_0813B16C: - ldr r0, [r6] - ldr r2, _0813B190 @ =0x000032f4 - adds r0, r2 - ldr r4, [r0] - bl GetLastViewedMonIndex - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r0, [r6] - ldr r3, _0813B194 @ =0x00003210 - adds r0, r3 - ldrb r2, [r0] - adds r3, r5, 0 - adds r0, r4, 0 - bl SeekToNextMonInBox - b _0813B1CC - .align 2, 0 -_0813B190: .4byte 0x000032f4 -_0813B194: .4byte 0x00003210 -_0813B198: - bl IsUpdateLinkStateCBActive - cmp r0, 0 - bne _0813B1C4 - ldr r0, _0813B1C0 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0x1 - bne _0813B1C4 - bl IsMultiBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0813B1C4 - lsls r0, r5, 24 - asrs r0, 24 - bl sub_813B38C - b _0813B1CC - .align 2, 0 -_0813B1C0: .4byte gReceivedRemoteLinkPlayers -_0813B1C4: - lsls r0, r5, 24 - asrs r0, 24 - bl sub_813B20C -_0813B1CC: - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 24 - asrs r0, 24 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - beq _0813B1F4 - ldr r0, _0813B1FC @ =gLastViewedMonIndex - strb r2, [r0] - ldr r0, _0813B200 @ =sub_813B3F0 - movs r1, 0 - bl CreateTask - ldr r0, _0813B204 @ =gMonSummaryScreen - ldr r0, [r0] - ldr r1, _0813B208 @ =0x0000328c - adds r0, r1 - movs r1, 0 - strb r1, [r0] -_0813B1F4: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813B1FC: .4byte gLastViewedMonIndex -_0813B200: .4byte sub_813B3F0 -_0813B204: .4byte gMonSummaryScreen -_0813B208: .4byte 0x0000328c - thumb_func_end sub_813B120 - thumb_func_start sub_813B20C sub_813B20C: @ 813B20C push {r4-r7,lr} diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h index e2eebc62b..b24f4e785 100644 --- a/include/pokemon_icon.h +++ b/include/pokemon_icon.h @@ -30,5 +30,7 @@ u8 GetMonIconPaletteIndexFromSpecies(u16 species); u16 GetIconSpecies(u16 species, u32 personality); void LoadMonIconPalettesAt(u16 offset); u8 GetValidMonIconPalIndex(u16 species); +void SafeLoadMonIconPalette(u16 species); +void SafeFreeMonIconPalette(u16 species); #endif // GUARD_POKEMON_ICON_H diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index b69fe7de4..0ce31b712 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -138,7 +138,7 @@ void SetBoxWallpaper(u8 boxId, u8 wallpaperId) gPokemonStoragePtr->boxWallpapers[boxId] = wallpaperId; } -s16 SeekToNextMonInBox(struct BoxPokemon * boxMons, s8 currIndex, u8 maxIndex, u8 flags) +s16 SeekToNextMonInBox(struct BoxPokemon * boxMons, s8 curIndex, u8 maxIndex, u8 flags) { // flags: // bit 0: Allow eggs @@ -152,7 +152,7 @@ s16 SeekToNextMonInBox(struct BoxPokemon * boxMons, s8 currIndex, u8 maxIndex, u if (flags == 1 || flags == 3) { - for (i = currIndex + adder; i >= 0 && i <= maxIndex; i += adder) + for (i = curIndex + adder; i >= 0 && i <= maxIndex; i += adder) { if (GetBoxMonData(&boxMons[i], MON_DATA_SPECIES) != SPECIES_NONE) return i; @@ -160,7 +160,7 @@ s16 SeekToNextMonInBox(struct BoxPokemon * boxMons, s8 currIndex, u8 maxIndex, u } else { - for (i = currIndex + adder; i >= 0 && i <= maxIndex; i += adder) + for (i = curIndex + adder; i >= 0 && i <= maxIndex; i += adder) { if (GetBoxMonData(&boxMons[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetBoxMonData(&boxMons[i], MON_DATA_IS_EGG)) diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index a3015ca85..83fe5ffb0 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -30,6 +30,13 @@ #include "trainer_pokemon_sprites.h" #include "battle_anim.h" #include "pokeball.h" +#include "pokemon_icon.h" +#include "battle_interface.h" +#include "mon_markings.h" +#include "pokemon_storage_system.h" + +// needs conflicting header to match (curIndex is s8 in the function, but has to be defined as u8 here) +extern s16 SeekToNextMonInBox(struct BoxPokemon * boxMons, u8 curIndex, u8 maxIndex, u8 flags); extern void sub_8138B8C(struct Pokemon * mon); void sub_8135C34(void); @@ -123,8 +130,19 @@ extern void sub_81390B0(void); extern void sub_81391EC(void); extern void sub_8139328(struct Pokemon * mon); extern void sub_8139AAC(u16 spriteId); - -struct PokemonSummaryScreenData { +extern void sub_813A124(struct Sprite * sprite); +extern void sub_813A35C(void); +extern void sub_813A620(void); +extern void sub_813A994(void); +extern void sub_813ACB4(void); +extern void sub_813AF50(void); +extern void sub_813B068(void); +extern void sub_813B0E4(void); +extern s8 sub_813B20C(s8); +extern s8 sub_813B38C(s8); + +struct PokemonSummaryScreenData +{ u16 unk0[0x800]; u16 unk1000[0x800]; u16 unk2000[0x800]; @@ -142,7 +160,8 @@ struct PokemonSummaryScreenData { bool32 isEnemyParty; /* 0x3024 */ - struct PokeSummary { + struct PokeSummary + { u8 ALIGNED(4) unk3028[POKEMON_NAME_LENGTH]; u8 ALIGNED(4) unk3034[POKEMON_NAME_LENGTH + 1]; u8 ALIGNED(4) unk3040[12]; @@ -214,7 +233,8 @@ struct PokemonSummaryScreenData { struct Pokemon currentMon; - union { + union + { struct Pokemon * mons; struct BoxPokemon * boxMons; } monList; @@ -226,7 +246,8 @@ struct PokemonSummaryScreenData { u8 ALIGNED(4) unk3304[3]; /* 0x3304 */ }; -struct Struct203B144 { +struct Struct203B144 +{ u16 unk00; u16 unk02; u16 unk04; @@ -243,30 +264,66 @@ struct Struct203B144 { u16 unk26; }; -struct Struct203B160 { - struct Sprite * sprite00[11]; /* 0x00 */ +struct Struct203B160 +{ + struct Sprite * sprites[11]; /* 0x00 */ u16 unk2C[11]; /* 0x2c */ u16 unk42; /* 0x42 */ u16 unk44; /* 0x44 */ }; -struct Struct203B15C { - struct Sprite * sprite00[10]; /* 0x00 */ +struct Struct203B15C +{ + struct Sprite * sprites[10]; /* 0x00 */ u16 unk28[10]; /* 0x28 */ u16 unk3C; /* 0x3c */ u16 unk3E; /* 0x3e */ }; -struct Struct203B170 { +struct Struct203B170 +{ u8 ALIGNED(4) unk00; /* 0x00 */ u8 ALIGNED(4) unk04; /* 0x04 */ u8 ALIGNED(4) unk08; /* 0x08 */ }; +struct Struct203B148 +{ + struct Sprite * sprite; /* 0x00 */ + u16 unk04; /* 0x04 */ + u16 unk06; /* 0x06 */ + u16 unk08; /* 0x08 */ +}; + +struct Struct203B158 +{ + struct Sprite * sprite; /* 0x00 */ + u16 unk04; /* 0x04 */ + u16 unk06; /* 0x06 */ +}; + +struct Struct203B164 +{ + struct Sprite * sprite; /* 0x00 */ + u16 unk04; /* 0x04 */ + u16 unk06; /* 0x06 */ +}; + +struct Struct203B168 +{ + struct Sprite * sprite; /* 0x00 */ + u16 unk04; /* 0x04 */ + u16 unk06; /* 0x06 */ +}; + extern struct PokemonSummaryScreenData * gMonSummaryScreen; extern struct Struct203B144 * gUnknown_203B144; +extern struct Struct203B148 * gUnknown_203B148[4]; +extern struct Struct203B158 * gUnknown_203B158; extern struct Struct203B15C * gUnknown_203B15C; extern struct Struct203B160 * gUnknown_203B160; +extern struct Struct203B164 * gUnknown_203B164; +extern struct Struct203B168 * gUnknown_203B168; extern u8 gUnknown_203B16D; extern u8 gUnknown_203B16E; extern struct Struct203B170 * gUnknown_203B170; @@ -308,6 +365,40 @@ extern const s8 gUnknown_8463FD4[11]; extern const s8 gUnknown_8463FDF[11]; extern const s8 gUnknown_8463FEA[15]; +extern const u32 gUnknown_8463740[]; +extern const u32 gUnknown_846386C[]; + +extern const u16 gUnknown_8463720[]; +extern const struct OamData gUnknown_846398C; +extern const union AnimCmd * const gUnknown_84639A4[]; + +extern const u32 gUnknown_8E9BF48[]; +extern const u16 gUnknown_8E9BF28[]; + +extern const struct OamData gUnknown_84639AC; +extern const union AnimCmd * const gUnknown_84639F4[]; + +extern const u32 gUnknown_8E9B4B8[]; +extern const u16 * const gUnknown_8463FFC[]; +extern const struct OamData gUnknown_8463A14; +extern const union AnimCmd * const gUnknown_8463A7C[]; + +extern const u32 gUnknown_8E9B3F0[]; +extern const u16 gUnknown_8E9B578[]; + +extern const u32 gUnknown_8463B20[]; +extern const u16 gUnknown_8463B00[]; + +extern const struct OamData gUnknown_8463AEC; +extern const union AnimCmd * const gUnknown_8463AFC[]; + +extern const u32 gUnknown_8463B64[]; +extern const u16 gUnknown_8463B44[]; +extern const struct OamData gUnknown_8463B30; +extern const union AnimCmd * const gUnknown_8463B40[]; + +extern const u16 gUnknown_84636E0[]; + #define FREE_AND_SET_NULL_IF_SET(ptr) \ { \ if (ptr != NULL) \ @@ -876,12 +967,12 @@ void sub_813546C(void) for (i = 0; i < 11; i++) { gUnknown_203B160->unk2C[i] = (8 * i) + 396; - gUnknown_203B160->sprite00[i]->pos1.x = gUnknown_203B160->unk2C[i]; + gUnknown_203B160->sprites[i]->pos1.x = gUnknown_203B160->unk2C[i]; if (i >= 9) continue; gUnknown_203B15C->unk28[i] = (8 * i) + 412; - gUnknown_203B15C->sprite00[i]->pos1.x = gUnknown_203B15C->unk28[i]; + gUnknown_203B15C->sprites[i]->pos1.x = gUnknown_203B15C->unk28[i]; } } @@ -891,11 +982,11 @@ void sub_81354C4(void) for (i = 0; i < 11; i++) { gUnknown_203B160->unk2C[i] = (8 * i) + 156; - gUnknown_203B160->sprite00[i]->pos1.x = gUnknown_203B160->unk2C[i]; + gUnknown_203B160->sprites[i]->pos1.x = gUnknown_203B160->unk2C[i]; if (i >= 9) continue; gUnknown_203B15C->unk28[i] = (8 * i) + 172; - gUnknown_203B15C->sprite00[i]->pos1.x = gUnknown_203B15C->unk28[i]; + gUnknown_203B15C->sprites[i]->pos1.x = gUnknown_203B15C->unk28[i]; } } @@ -1151,17 +1242,17 @@ void sub_81358DC(u8 a0, u8 a1) for (i = 0; i < 11; i++) { if (gMonSummaryScreen->curPageIndex == PSS_PAGE_SKILLS && gMonSummaryScreen->unk3224 == 1) - gUnknown_203B160->sprite00[i]->oam.priority = bg0Priority; + gUnknown_203B160->sprites[i]->oam.priority = bg0Priority; else - gUnknown_203B160->sprite00[i]->oam.priority = bg1Priority; + gUnknown_203B160->sprites[i]->oam.priority = bg1Priority; if (i >= 9) continue; if (gMonSummaryScreen->curPageIndex == PSS_PAGE_SKILLS && gMonSummaryScreen->unk3224 == 1) - gUnknown_203B15C->sprite00[i]->oam.priority = bg0Priority; + gUnknown_203B15C->sprites[i]->oam.priority = bg0Priority; else - gUnknown_203B15C->sprite00[i]->oam.priority = bg1Priority; + gUnknown_203B15C->sprites[i]->oam.priority = bg1Priority; } SetGpuReg(REG_OFFSET_BG0CNT, (GetGpuReg(REG_OFFSET_BG0CNT) & 0xfffc) | bg0Priority); @@ -2408,7 +2499,7 @@ void sub_8137F00(void) if (gUnknown_203B160->unk2C[i] < 240) { gUnknown_203B160->unk2C[i] += 60; - gUnknown_203B160->sprite00[i]->pos1.x = gUnknown_203B160->unk2C[i] + 60; + gUnknown_203B160->sprites[i]->pos1.x = gUnknown_203B160->unk2C[i] + 60; } if (i >= 9) @@ -2417,7 +2508,7 @@ void sub_8137F00(void) if (gUnknown_203B15C->unk28[i] < 240) { gUnknown_203B15C->unk28[i] += 60; - gUnknown_203B15C->sprite00[i]->pos1.x = gUnknown_203B15C->unk28[i] + 60; + gUnknown_203B15C->sprites[i]->pos1.x = gUnknown_203B15C->unk28[i] + 60; } } } @@ -2435,7 +2526,7 @@ void sub_8137F68(void) if (gUnknown_203B160->unk2C[i] < 156 + (8 * i)) gUnknown_203B160->unk2C[i] = 156 + (8 * i); - gUnknown_203B160->sprite00[i]->pos1.x = gUnknown_203B160->unk2C[i]; + gUnknown_203B160->sprites[i]->pos1.x = gUnknown_203B160->unk2C[i]; } if (i >= 9) @@ -2448,7 +2539,7 @@ void sub_8137F68(void) if (gUnknown_203B15C->unk28[i] < 172 + (8 * i)) gUnknown_203B15C->unk28[i] = 172 + (8 * i); - gUnknown_203B15C->sprite00[i]->pos1.x = gUnknown_203B15C->unk28[i]; + gUnknown_203B15C->sprites[i]->pos1.x = gUnknown_203B15C->unk28[i]; } } } @@ -3221,7 +3312,7 @@ void sub_81393D4(u8 taskId) gMonSummaryScreen->unk3288 = 3; - if (gMonSummaryScreen->unk3268 == 1) + if (gMonSummaryScreen->unk3268 == TRUE) v0--; for (i = gUnknown_203B16D; i < v0; i++) @@ -3232,7 +3323,7 @@ void sub_81393D4(u8 taskId) return; } - if (gMonSummaryScreen->unk3268 == 0) + if (!gMonSummaryScreen->unk3268) { PlaySE(SE_SELECT); gUnknown_203B16D = i; @@ -3508,7 +3599,7 @@ void sub_8139CB0(void) u16 ballItemId; u8 ballId; - if (gMonSummaryScreen->isEgg == 0) + if (!gMonSummaryScreen->isEgg) ballItemId = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_POKEBALL); else ballItemId = 0; @@ -3522,3 +3613,833 @@ void sub_8139CB0(void) sub_8139D54(1); } + +void sub_8139D54(u8 invisible) +{ + gSprites[gMonSummaryScreen->unk300C].invisible = invisible; +} + +void sub_8139D90(void) +{ + DestroySpriteAndFreeResources2(&gSprites[gMonSummaryScreen->unk300C]); +} + +void sub_8139DBC(void) +{ + u16 species; + u32 personality; + + species = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_SPECIES2); + personality = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_PERSONALITY); + + SafeLoadMonIconPalette(species); + + if (gMonSummaryScreen->savedCallback == CB2_ReturnToTradeMenuFromSummary) + { + if (gMonSummaryScreen->isEnemyParty == TRUE) + gMonSummaryScreen->unk3014 = CreateMonIcon(species, SpriteCallbackDummy, 24, 32, 0, personality, 0); + else + gMonSummaryScreen->unk3014 = CreateMonIcon(species, SpriteCallbackDummy, 24, 32, 0, personality, 1); + } + else + { + if (sub_804455C(3, gLastViewedMonIndex)) + gMonSummaryScreen->unk3014 = CreateMonIcon(species, SpriteCallbackDummy, 24, 32, 0, personality, 0); + else + gMonSummaryScreen->unk3014 = CreateMonIcon(species, SpriteCallbackDummy, 24, 32, 0, personality, 1); + } + + if (!IsPokeSpriteNotFlipped(species)) + gSprites[gMonSummaryScreen->unk3014].hFlip = TRUE; + else + gSprites[gMonSummaryScreen->unk3014].hFlip = FALSE; + + sub_8139EE4(1); +} + +void sub_8139EE4(u8 invisible) +{ + gSprites[gMonSummaryScreen->unk3014].invisible = invisible; +} + +void sub_8139F20(void) +{ + u16 species; + species = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_SPECIES2); + SafeFreeMonIconPalette(species); + DestroyMonIcon(&gSprites[gMonSummaryScreen->unk3014]); +} + +void sub_8139F64(u16 tileTag, u16 palTag) +{ + u8 i; + u8 spriteId; + void * gfxBufferPtrs[2]; + gfxBufferPtrs[0] = AllocZeroed(0x20 * 64); + gfxBufferPtrs[1] = AllocZeroed(0x20 * 64); + + gUnknown_203B148[0] = AllocZeroed(sizeof(struct Struct203B148)); + gUnknown_203B148[1] = AllocZeroed(sizeof(struct Struct203B148)); + gUnknown_203B148[2] = AllocZeroed(sizeof(struct Struct203B148)); + gUnknown_203B148[3] = AllocZeroed(sizeof(struct Struct203B148)); + + LZ77UnCompWram(gUnknown_8463740, gfxBufferPtrs[0]); + LZ77UnCompWram(gUnknown_846386C, gfxBufferPtrs[1]); + + for (i = 0; i < 4; i++) + { + struct SpriteSheet sheet = { + .data = gfxBufferPtrs[i % 2], + .size = 0x20 * 64, + .tag = tileTag + i + }; + + struct SpritePalette palette = {.data = gUnknown_8463720, .tag = palTag}; + struct SpriteTemplate template = { + .tileTag = tileTag + i, + .paletteTag = palTag, + .oam = &gUnknown_846398C, + .anims = gUnknown_84639A4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_813A124, + }; + + LoadSpriteSheet(&sheet); + LoadSpritePalette(&palette); + + spriteId = CreateSprite(&template, 64 * (i % 2) + 152, gUnknown_203B16D * 28 + 34, i % 2); + gUnknown_203B148[i]->sprite = &gSprites[spriteId]; + gUnknown_203B148[i]->unk04 = i; + gUnknown_203B148[i]->unk06 = tileTag + i; + gUnknown_203B148[i]->unk08 = palTag; + gUnknown_203B148[i]->sprite->subpriority = i; + + if (i > 1) + StartSpriteAnim(gUnknown_203B148[i]->sprite, 1); + } + + sub_813A0E8(1); + + FREE_AND_SET_NULL_IF_SET(gfxBufferPtrs[0]); + FREE_AND_SET_NULL_IF_SET(gfxBufferPtrs[1]); +} + +void sub_813A0E8(u8 invisible) +{ + u8 i; + for (i = 0; i < 4; i++) + gUnknown_203B148[i]->sprite->invisible = invisible; +} + +void sub_813A124(struct Sprite * sprite) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + if (gMonSummaryScreen->unk3268 == TRUE && i > 1) + continue; + + gUnknown_203B148[i]->sprite->pos1.y = gUnknown_203B16D * 28 + 34; + } + + if (gMonSummaryScreen->unk3268 != TRUE) + { + if (gMonSummaryScreen->curPageIndex == PSS_PAGE_MOVES_INFO) + { + gUnknown_203B148[0]->sprite->invisible = FALSE; + gUnknown_203B148[1]->sprite->invisible = FALSE; + } + return; + } + + for (i = 0; i < 2; i++) + { + sprite = gUnknown_203B148[i]->sprite; + sprite->data[0]++; + + if (sprite->invisible) + { + if (sprite->data[0] > 60) + { + sprite->invisible = FALSE; + sprite->data[0] = 0; + } + } + else if (sprite->data[0] > 60) + { + sprite->invisible = TRUE; + sprite->data[0] = 0; + } + } +} + +void sub_813A21C(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + if (gUnknown_203B148[i]->sprite != NULL) + DestroySpriteAndFreeResources(gUnknown_203B148[i]->sprite); + + FREE_AND_SET_NULL_IF_SET(gUnknown_203B148[i]); + } +} + +void sub_813A254(u16 tileTag, u16 palTag) +{ + u16 spriteId; + void * gfxBufferPtr; + + gUnknown_203B158 = AllocZeroed(sizeof(struct Struct203B158)); + gfxBufferPtr = AllocZeroed(0x20 * 32); + + LZ77UnCompWram(gUnknown_8E9BF48, gfxBufferPtr); + + if (gUnknown_203B158 != NULL) + { + struct SpriteSheet sheet = { + .data = gfxBufferPtr, + .size = 0x20 * 32, + .tag = tileTag + }; + + struct SpritePalette palette = {.data = gUnknown_8E9BF28, .tag = palTag}; + struct SpriteTemplate template = { + .tileTag = tileTag, + .paletteTag = palTag, + .oam = &gUnknown_84639AC, + .anims = gUnknown_84639F4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + + LoadSpriteSheet(&sheet); + LoadSpritePalette(&palette); + + spriteId = CreateSprite(&template, 0, 0, 0); + gUnknown_203B158->sprite = &gSprites[spriteId]; + gUnknown_203B158->unk04 = tileTag; + gUnknown_203B158->unk06 = palTag; + } + + sub_813A3B8(1); + sub_813A35C(); + FREE_AND_SET_NULL_IF_SET(gfxBufferPtr); +} + +void sub_813A334(void) +{ + if (gUnknown_203B158->sprite != NULL) + DestroySpriteAndFreeResources(gUnknown_203B158->sprite); + + FREE_AND_SET_NULL_IF_SET(gUnknown_203B158); +} + +void sub_813A35C(void) +{ + gMonSummaryScreen->unk326C = sub_8138C5C(GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_STATUS)); + + if (gMonSummaryScreen->unk326C == AILMENT_NONE) + { + sub_813A3B8(1); + return; + } + + StartSpriteAnim(gUnknown_203B158->sprite, gMonSummaryScreen->unk326C - 1); + sub_813A3B8(0); +} + +void sub_813A3B8(u8 invisible) +{ + if (gMonSummaryScreen->unk326C == AILMENT_NONE || gMonSummaryScreen->isEgg) + gUnknown_203B158->sprite->invisible = TRUE; + else + gUnknown_203B158->sprite->invisible = invisible; + + if (gMonSummaryScreen->curPageIndex == PSS_PAGE_MOVES_INFO) + { + if (gUnknown_203B158->sprite->pos1.y != 45) + { + gUnknown_203B158->sprite->pos1.x = 16; + gUnknown_203B158->sprite->pos1.y = 45; + return; + } + } + else if (gUnknown_203B158->sprite->pos1.y != 38) + { + gUnknown_203B158->sprite->pos1.x = 16; + gUnknown_203B158->sprite->pos1.y = 38; + return; + } +} + +void sub_813A45C(u16 tileTag, u16 palTag) +{ + u8 i; + u8 spriteId; + void * gfxBufferPtr; + u32 curHp; + u32 maxHp; + u8 hpBarPalTagOffset = 0; + + gUnknown_203B15C = AllocZeroed(sizeof(struct Struct203B15C)); + gfxBufferPtr = AllocZeroed(0x20 * 12); + LZ77UnCompWram(gUnknown_8E9B4B8, gfxBufferPtr); + + curHp = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_HP); + maxHp = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_MAX_HP); + + if (maxHp / 4 > curHp) + hpBarPalTagOffset = 2; + else if (maxHp / 2 > curHp) + hpBarPalTagOffset = 1; + + if (gfxBufferPtr != NULL) + { + struct SpriteSheet sheet = { + .data = gfxBufferPtr, + .size = 0x20 * 12, + .tag = tileTag + }; + + struct SpritePalette palette1 = {.data = gUnknown_8463FFC[0], .tag = palTag}; + struct SpritePalette palette2 = {.data = gUnknown_8463FFC[1], .tag = palTag + 1}; + struct SpritePalette palette3 = {.data = gUnknown_8463FFC[2], .tag = palTag + 2}; + + LoadSpriteSheet(&sheet); + LoadSpritePalette(&palette1); + LoadSpritePalette(&palette2); + LoadSpritePalette(&palette3); + } + + for (i = 0; i < 9; i++) + { + struct SpriteTemplate template = { + .tileTag = tileTag, + .paletteTag = palTag + hpBarPalTagOffset, + .oam = &gUnknown_8463A14, + .anims = gUnknown_8463A7C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + + gUnknown_203B15C->unk28[i] = i * 8 + 172; + spriteId = CreateSprite(&template, gUnknown_203B15C->unk28[i], 36, 0); + gUnknown_203B15C->sprites[i] = &gSprites[spriteId]; + gUnknown_203B15C->sprites[i]->invisible = FALSE; + gUnknown_203B15C->sprites[i]->oam.priority = 2; + gUnknown_203B15C->unk3C = tileTag; + gUnknown_203B15C->unk3E = palTag; + StartSpriteAnim(gUnknown_203B15C->sprites[i], 8); + } + + sub_813A620(); + sub_813A838(1); + + FREE_AND_SET_NULL_IF_SET(gfxBufferPtr); +} + +void sub_813A620(void) +{ + u8 numWholeHpBarTiles = 0; + u8 i; + u8 animNum; + u8 two = 2; + u8 hpBarPalOffset = 0; + u32 curHp; + u32 maxHp; + s64 v0; + s64 v1; + + if (gMonSummaryScreen->isEgg) + return; + + curHp = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_HP); + maxHp = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_MAX_HP); + + if (maxHp / 5 >= curHp) + hpBarPalOffset = 2; + else if (maxHp / 2 >= curHp) + hpBarPalOffset = 1; + + switch (GetHPBarLevel(curHp, maxHp)) + { + case 3: + default: + hpBarPalOffset = 0; + break; + case 2: + hpBarPalOffset = 1; + break; + case 1: + hpBarPalOffset = 2; + break; + } + + for (i = 0; i < 9; i++) + gUnknown_203B15C->sprites[i]->oam.paletteNum = IndexOfSpritePaletteTag(TAG_PSS_UNK_78) + hpBarPalOffset; + + if (curHp == maxHp) + for (i = two; i < 8; i++) + StartSpriteAnim(gUnknown_203B15C->sprites[i], 8); + + else + { + v0 = (maxHp << 2) / 6; + v1 = (curHp << 2); + + while (TRUE) + { + if (v1 <= v0) + break; + v1 -= v0; + numWholeHpBarTiles++; + } + + numWholeHpBarTiles += two; + + for (i = two; i < numWholeHpBarTiles; i++) + StartSpriteAnim(gUnknown_203B15C->sprites[i], 8); + + animNum = (v1 * 6) / v0; + StartSpriteAnim(gUnknown_203B15C->sprites[numWholeHpBarTiles], animNum); + + for (i = numWholeHpBarTiles + 1; i < 8; i++) + StartSpriteAnim(gUnknown_203B15C->sprites[i], 0); + } + + StartSpriteAnim(gUnknown_203B15C->sprites[0], 9); + StartSpriteAnim(gUnknown_203B15C->sprites[1], 10); + StartSpriteAnim(gUnknown_203B15C->sprites[8], 11); +} + +void sub_813A800(void) +{ + u8 i; + + for (i = 0; i < 9; i++) + if (gUnknown_203B15C->sprites[i] != NULL) + DestroySpriteAndFreeResources(gUnknown_203B15C->sprites[i]); + + FREE_AND_SET_NULL_IF_SET(gUnknown_203B15C); +} + +void sub_813A838(u8 invisible) +{ + u8 i; + + for (i = 0; i < 9; i++) + gUnknown_203B15C->sprites[i]->invisible = invisible; +} + +void sub_813A874(u16 tileTag, u16 palTag) +{ + u8 i; + u8 spriteId; + void * gfxBufferPtr; + + gUnknown_203B160 = AllocZeroed(sizeof(struct Struct203B160)); + gfxBufferPtr = AllocZeroed(0x20 * 12); + + LZ77UnCompWram(gUnknown_8E9B3F0, gfxBufferPtr); + if (gfxBufferPtr != NULL) + { + struct SpriteSheet sheet = { + .data = gfxBufferPtr, + .size = 0x20 * 12, + .tag = tileTag + }; + + struct SpritePalette palette = {.data = gUnknown_8E9B578, .tag = palTag}; + LoadSpriteSheet(&sheet); + LoadSpritePalette(&palette); + } + + for (i = 0; i < 11; i++) + { + struct SpriteTemplate template = { + .tileTag = tileTag, + .paletteTag = palTag, + .oam = &gUnknown_8463A14, + .anims = gUnknown_8463A7C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + + gUnknown_203B160->unk2C[i] = i * 8 + 156; + spriteId = CreateSprite(&template, gUnknown_203B160->unk2C[i], 132, 0); + gUnknown_203B160->sprites[i] = &gSprites[spriteId]; + gUnknown_203B160->sprites[i]->oam.priority = 2; + gUnknown_203B160->unk42 = tileTag; + gUnknown_203B160->unk44 = palTag; + } + + sub_813A994(); + sub_813AB70(1); + + FREE_AND_SET_NULL_IF_SET(gfxBufferPtr); +} + +void sub_813A994(void) +{ + u8 numWholeExpBarTiles = 0; + u8 i; + u8 level; + u32 exp; + u32 totalExpToNextLevel; + u32 curExpToNextLevel; + u16 species; + s64 v0; + s64 v1; + u8 animNum; + u8 two = 2; + + if (gMonSummaryScreen->isEgg) + return; + + exp = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_EXP); + level = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_LEVEL); + species = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_SPECIES); + + if (level < 100) + { + totalExpToNextLevel = gExperienceTables[gBaseStats[species].growthRate][level + 1] - gExperienceTables[gBaseStats[species].growthRate][level]; + curExpToNextLevel = exp - gExperienceTables[gBaseStats[species].growthRate][level]; + v0 = ((totalExpToNextLevel << 2) / 8); + v1 = (curExpToNextLevel << 2); + + while (TRUE) + { + if (v1 <= v0) + break; + v1 -= v0; + numWholeExpBarTiles++; + } + + numWholeExpBarTiles += two; + + for (i = two; i < numWholeExpBarTiles; i++) + StartSpriteAnim(gUnknown_203B160->sprites[i], 8); + + if (numWholeExpBarTiles >= 10) + { + if (totalExpToNextLevel == curExpToNextLevel) + return; + else + StartSpriteAnim(gUnknown_203B160->sprites[9], 7); + } + + animNum = (v1 * 8) / v0; + StartSpriteAnim(gUnknown_203B160->sprites[numWholeExpBarTiles], animNum); + + for (i = numWholeExpBarTiles + 1; i < 10; i++) + StartSpriteAnim(gUnknown_203B160->sprites[i], 0); + } + else + for (i = two; i < 10; i++) + StartSpriteAnim(gUnknown_203B160->sprites[i], 0); + + StartSpriteAnim(gUnknown_203B160->sprites[0], 9); + StartSpriteAnim(gUnknown_203B160->sprites[1], 10); + StartSpriteAnim(gUnknown_203B160->sprites[10], 11); +} + +void sub_813AB38(void) +{ + u8 i; + + for (i = 0; i < 11; i++) + if (gUnknown_203B160->sprites[i] != NULL) + DestroySpriteAndFreeResources(gUnknown_203B160->sprites[i]); + + FREE_AND_SET_NULL_IF_SET(gUnknown_203B160); +} + +void sub_813AB70(u8 invisible) +{ + u8 i; + + for (i = 0; i < 11; i++) + gUnknown_203B160->sprites[i]->invisible = invisible; +} + +void sub_813ABAC(u16 tileTag, u16 palTag) +{ + u16 spriteId; + void * gfxBufferPtr; + + gUnknown_203B164 = AllocZeroed(sizeof(struct Struct203B164)); + gfxBufferPtr = AllocZeroed(0x20 * 1); + + LZ77UnCompWram(gUnknown_8463B20, gfxBufferPtr); + + if (gUnknown_203B164 != NULL) + { + struct SpriteSheet sheet = { + .data = gfxBufferPtr, + .size = 0x20 * 1, + .tag = tileTag + }; + + struct SpritePalette palette = {.data = gUnknown_8463B00, .tag = palTag}; + struct SpriteTemplate template = { + .tileTag = tileTag, + .paletteTag = palTag, + .oam = &gUnknown_8463AEC, + .anims = gUnknown_8463AFC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + + LoadSpriteSheet(&sheet); + LoadSpritePalette(&palette); + + spriteId = CreateSprite(&template, 114, 92, 0); + gUnknown_203B164->sprite = &gSprites[spriteId]; + gUnknown_203B164->unk04 = tileTag; + gUnknown_203B164->unk06 = palTag; + } + + sub_813ACF8(1); + sub_813ACB4(); + + FREE_AND_SET_NULL_IF_SET(gfxBufferPtr); +} + +void sub_813AC8C(void) +{ + if (gUnknown_203B164->sprite != NULL) + DestroySpriteAndFreeResources(gUnknown_203B164->sprite); + + FREE_AND_SET_NULL_IF_SET(gUnknown_203B164); +} + +void sub_813ACB4(void) +{ + if (!CheckPartyPokerus(&gMonSummaryScreen->currentMon, 0) + && CheckPartyHasHadPokerus(&gMonSummaryScreen->currentMon, 0)) + sub_813ACF8(0); + else + sub_813ACF8(1); +} + +void sub_813ACF8(u8 invisible) +{ + if (!CheckPartyPokerus(&gMonSummaryScreen->currentMon, 0) + && CheckPartyHasHadPokerus(&gMonSummaryScreen->currentMon, 0)) + { + gUnknown_203B164->sprite->invisible = invisible; + return; + } + else + gUnknown_203B164->sprite->invisible = TRUE; + + if (gMonSummaryScreen->curPageIndex == PSS_PAGE_MOVES_INFO) + { + gUnknown_203B164->sprite->invisible = TRUE; + gUnknown_203B164->sprite->pos1.x = 16; + gUnknown_203B164->sprite->pos1.y = 44; + } + else + { + gUnknown_203B164->sprite->pos1.x = 114; + gUnknown_203B164->sprite->pos1.y = 92; + } +} + +void sub_813ADA8(u16 tileTag, u16 palTag) +{ + u16 spriteId; + void * gfxBufferPtr; + + gUnknown_203B168 = AllocZeroed(sizeof(struct Struct203B168)); + gfxBufferPtr = AllocZeroed(0x20 * 2); + + LZ77UnCompWram(gUnknown_8463B64, gfxBufferPtr); + + if (gUnknown_203B168 != NULL) + { + struct SpriteSheet sheet = { + .data = gfxBufferPtr, + .size = 0x20 * 2, + .tag = tileTag + }; + + struct SpritePalette palette = {.data = gUnknown_8463B44, .tag = palTag}; + struct SpriteTemplate template = { + .tileTag = tileTag, + .paletteTag = palTag, + .oam = &gUnknown_8463B30, + .anims = gUnknown_8463B40, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + + LoadSpriteSheet(&sheet); + LoadSpritePalette(&palette); + spriteId = CreateSprite(&template, 106, 40, 0); + gUnknown_203B168->sprite = &gSprites[spriteId]; + gUnknown_203B168->unk04 = tileTag; + gUnknown_203B168->unk06 = palTag; + } + + sub_813AEB0(1); + sub_813AF50(); + + FREE_AND_SET_NULL_IF_SET(gfxBufferPtr); +} + +void sub_813AE88(void) +{ + if (gUnknown_203B168->sprite != NULL) + DestroySpriteAndFreeResources(gUnknown_203B168->sprite); + + FREE_AND_SET_NULL_IF_SET(gUnknown_203B168); +} + +void sub_813AEB0(u8 invisible) +{ + if (IsMonShiny(&gMonSummaryScreen->currentMon) == TRUE + && !gMonSummaryScreen->isEgg) + gUnknown_203B168->sprite->invisible = invisible; + else + gUnknown_203B168->sprite->invisible = TRUE; + + if (gMonSummaryScreen->curPageIndex == PSS_PAGE_MOVES_INFO) + { + gUnknown_203B168->sprite->pos1.x = 8; + gUnknown_203B168->sprite->pos1.y = 24; + } + else + { + gUnknown_203B168->sprite->pos1.x = 106; + gUnknown_203B168->sprite->pos1.y = 40; + } +} + +void sub_813AF50(void) +{ + if (IsMonShiny(&gMonSummaryScreen->currentMon) == TRUE && !gMonSummaryScreen->isEgg) + sub_813AEB0(0); + else + sub_813AEB0(1); +} + +void sub_813AF90(void) +{ + sub_813A21C(); + sub_813A800(); + sub_813AB38(); + sub_8139C80(); + sub_8139F20(); + sub_8139D90(); + sub_813B068(); + sub_813A334(); + sub_813AC8C(); + sub_813AE88(); + ResetSpriteData(); +} + +void sub_813AFC4(void) +{ + sub_8139CB0(); + sub_8139D54(0); + sub_8139DBC(); + sub_813995C(); + sub_8139C44(0); + sub_813A620(); + sub_813A994(); + sub_813B0E4(); + sub_813A35C(); + sub_813ACB4(); + sub_813AF50(); +} + +void sub_813AFFC(void) +{ + u32 markings = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_MARKINGS); + + DestroySpriteAndFreeResources(gMonSummaryScreen->markingSprite); + gMonSummaryScreen->markingSprite = CreateMonMarkingSprite_SelectCombo(TAG_PSS_UNK_8C, TAG_PSS_UNK_8C, gUnknown_84636E0); + + if (gMonSummaryScreen->markingSprite != NULL) + { + StartSpriteAnim(gMonSummaryScreen->markingSprite, markings); + gMonSummaryScreen->markingSprite->pos1.x = 20; + gMonSummaryScreen->markingSprite->pos1.y = 91; + } + + sub_813B084(1); +} + +void sub_813B068(void) +{ + DestroySpriteAndFreeResources(gMonSummaryScreen->markingSprite); +} + +void sub_813B084(u8 invisible) +{ + u32 markings = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_MARKINGS); + + if (markings == 0) + gMonSummaryScreen->markingSprite->invisible = TRUE; + else + gMonSummaryScreen->markingSprite->invisible = invisible; +} + +void sub_813B0E4(void) +{ + u32 markings = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_MARKINGS); + + StartSpriteAnim(gMonSummaryScreen->markingSprite, markings); + sub_813B084(0); +} + +void sub_813B120(u8 taskId, s8 a1) +{ + s8 v0 = -1; + + if (gMonSummaryScreen->isBoxMon == TRUE) + { + if (gMonSummaryScreen->curPageIndex != 0) + { + if (a1 == 1) + a1 = 0; + else + a1 = 2; + } + else + { + if (a1 == 1) + a1 = 1; + else + a1 = 3; + } + + v0 = SeekToNextMonInBox(gMonSummaryScreen->monList.boxMons, GetLastViewedMonIndex(), gMonSummaryScreen->lastIndex, (u8)a1); + } + else + { + if (IsUpdateLinkStateCBActive() == FALSE + && gReceivedRemoteLinkPlayers == 1 + && IsMultiBattle() == TRUE) + v0 = sub_813B38C(a1); + else + v0 = sub_813B20C(a1); + } + + if (v0 == -1) + return; + + gLastViewedMonIndex = v0; + CreateTask(sub_813B3F0, 0); + gMonSummaryScreen->unk328C = 0; +} |