summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCameron Hall <camthesaxman@users.noreply.github.com>2017-07-21 12:15:21 -0500
committerGitHub <noreply@github.com>2017-07-21 12:15:21 -0500
commit989877283f0f09e424ad3f3925e8eee9dbbb7b71 (patch)
tree1ee4f8732e4de236e952a6274e1c1b005470702f
parent7d960d219fae9d0a14ef1974c11231f8de55b89c (diff)
parent9eca72fc7f34c4f1b860fca1b6b9d6b8cd96aefd (diff)
Merge pull request #373 from drifloony/pokemon_icon
decompile pokemon_icon
-rw-r--r--asm/pokemon_icon.s788
-rw-r--r--data/graphics/pokemon/icon_palette_indices.inc442
-rw-r--r--data/graphics/pokemon/icon_palette_table.inc11
-rw-r--r--data/graphics/pokemon/icon_table.inc442
-rw-r--r--data/pokemon_icon.s92
-rw-r--r--include/graphics.h4
-rw-r--r--ld_script.txt4
-rw-r--r--src/pokemon_icon.c1276
8 files changed, 1282 insertions, 1777 deletions
diff --git a/asm/pokemon_icon.s b/asm/pokemon_icon.s
deleted file mode 100644
index 5aa8b5901..000000000
--- a/asm/pokemon_icon.s
+++ /dev/null
@@ -1,788 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start unref_sub_809D26C
-unref_sub_809D26C: @ 809D26C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x18
- adds r6, r3, 0
- ldr r3, [sp, 0x2C]
- lsls r0, 16
- lsrs r0, 16
- lsls r3, 24
- lsrs r3, 24
- mov r8, sp
- ldr r4, _0809D2E0 @ =gOamData_83BC5E8
- str r4, [sp]
- ldr r5, _0809D2E4 @ =gMonIconTable
- lsls r4, r0, 2
- adds r4, r5
- ldr r4, [r4]
- str r4, [sp, 0x4]
- ldr r4, _0809D2E8 @ =gSpriteAnimTable_83BC62C
- str r4, [sp, 0x8]
- ldr r4, _0809D2EC @ =gSpriteAffineAnimTable_83BC660
- str r4, [sp, 0xC]
- str r1, [sp, 0x10]
- ldr r1, _0809D2F0 @ =gMonIconPaletteIndices
- adds r0, r1
- ldr r4, _0809D2F4 @ =0x0000dac0
- adds r1, r4, 0
- ldrb r0, [r0]
- adds r1, r0
- mov r0, r8
- strh r1, [r0, 0x14]
- lsls r2, 16
- asrs r2, 16
- lsls r6, 16
- asrs r6, 16
- mov r0, sp
- adds r1, r2, 0
- adds r2, r6, 0
- bl CreateMonIconSprite
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _0809D2F8 @ =gSprites
- adds r0, r1
- bl UpdateMonIconFrame
- adds r0, r4, 0
- add sp, 0x18
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0809D2E0: .4byte gOamData_83BC5E8
-_0809D2E4: .4byte gMonIconTable
-_0809D2E8: .4byte gSpriteAnimTable_83BC62C
-_0809D2EC: .4byte gSpriteAffineAnimTable_83BC660
-_0809D2F0: .4byte gMonIconPaletteIndices
-_0809D2F4: .4byte 0x0000dac0
-_0809D2F8: .4byte gSprites
- thumb_func_end unref_sub_809D26C
-
- thumb_func_start CreateMonIcon
-CreateMonIcon: @ 809D2FC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x30
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r0, [sp, 0x48]
- ldr r1, [sp, 0x4C]
- lsls r4, 16
- lsrs r4, 16
- lsls r2, 16
- lsrs r7, r2, 16
- lsls r3, 16
- lsrs r6, r3, 16
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, _0809D38C @ =gOamData_83BC5E8
- str r0, [sp, 0x18]
- adds r0, r4, 0
- bl GetMonIconPtr
- str r0, [sp, 0x1C]
- ldr r0, _0809D390 @ =gSpriteAnimTable_83BC62C
- str r0, [sp, 0x20]
- ldr r0, _0809D394 @ =gSpriteAffineAnimTable_83BC660
- str r0, [sp, 0x24]
- str r5, [sp, 0x28]
- ldr r0, _0809D398 @ =gMonIconPaletteIndices
- adds r0, r4, r0
- ldr r1, _0809D39C @ =0x0000dac0
- adds r5, r1, 0
- ldrb r0, [r0]
- adds r1, r5, r0
- add r0, sp, 0x2C
- strh r1, [r0]
- add r1, sp, 0x18
- mov r0, sp
- movs r2, 0x18
- bl memcpy
- movs r0, 0xCE
- lsls r0, 1
- cmp r4, r0
- bls _0809D35A
- mov r0, sp
- strh r5, [r0, 0x14]
-_0809D35A:
- lsls r1, r7, 16
- asrs r1, 16
- lsls r2, r6, 16
- asrs r2, 16
- mov r0, sp
- mov r3, r8
- bl CreateMonIconSprite
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _0809D3A0 @ =gSprites
- adds r0, r1
- bl UpdateMonIconFrame
- adds r0, r4, 0
- add sp, 0x30
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0809D38C: .4byte gOamData_83BC5E8
-_0809D390: .4byte gSpriteAnimTable_83BC62C
-_0809D394: .4byte gSpriteAffineAnimTable_83BC660
-_0809D398: .4byte gMonIconPaletteIndices
-_0809D39C: .4byte 0x0000dac0
-_0809D3A0: .4byte gSprites
- thumb_func_end CreateMonIcon
-
- thumb_func_start sub_809D3A4
-sub_809D3A4: @ 809D3A4
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x18
- adds r6, r3, 0
- ldr r3, [sp, 0x2C]
- lsls r0, 16
- lsrs r0, 16
- lsls r3, 24
- lsrs r3, 24
- mov r8, sp
- ldr r4, _0809D418 @ =gOamData_83BC5E8
- str r4, [sp]
- ldr r5, _0809D41C @ =gMonIconTable
- lsls r4, r0, 2
- adds r4, r5
- ldr r4, [r4]
- str r4, [sp, 0x4]
- ldr r4, _0809D420 @ =gSpriteAnimTable_83BC62C
- str r4, [sp, 0x8]
- ldr r4, _0809D424 @ =gSpriteAffineAnimTable_83BC660
- str r4, [sp, 0xC]
- str r1, [sp, 0x10]
- ldr r1, _0809D428 @ =gMonIconPaletteIndices
- adds r0, r1
- ldr r4, _0809D42C @ =0x0000dac0
- adds r1, r4, 0
- ldrb r0, [r0]
- adds r1, r0
- mov r0, r8
- strh r1, [r0, 0x14]
- lsls r2, 16
- asrs r2, 16
- lsls r6, 16
- asrs r6, 16
- mov r0, sp
- adds r1, r2, 0
- adds r2, r6, 0
- bl CreateMonIconSprite
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _0809D430 @ =gSprites
- adds r0, r1
- bl UpdateMonIconFrame
- adds r0, r4, 0
- add sp, 0x18
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0809D418: .4byte gOamData_83BC5E8
-_0809D41C: .4byte gMonIconTable
-_0809D420: .4byte gSpriteAnimTable_83BC62C
-_0809D424: .4byte gSpriteAffineAnimTable_83BC660
-_0809D428: .4byte gMonIconPaletteIndices
-_0809D42C: .4byte 0x0000dac0
-_0809D430: .4byte gSprites
- thumb_func_end sub_809D3A4
-
- thumb_func_start mon_icon_convert_unown_species_id
-mon_icon_convert_unown_species_id: @ 809D434
- push {lr}
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, SPECIES_UNOWN
- bne _0809D45E
- adds r0, r1, 0
- bl GetUnownLetterByPersonality
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _0809D450
- movs r0, SPECIES_UNOWN
- b _0809D45A
-_0809D450:
- movs r1, 0xCE
- lsls r1, 1
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
-_0809D45A:
- adds r1, r0, 0
- b _0809D46C
-_0809D45E:
- movs r0, 0xCE
- lsls r0, 1
- adds r1, r2, 0
- cmp r1, r0
- bls _0809D46C
- movs r1, 0x82
- lsls r1, 1
-_0809D46C:
- adds r0, r1, 0
- pop {r1}
- bx r1
- thumb_func_end mon_icon_convert_unown_species_id
-
- thumb_func_start GetUnownLetterByPersonality
-GetUnownLetterByPersonality: @ 809D474
- push {lr}
- adds r2, r0, 0
- movs r0, 0xC0
- lsls r0, 18
- ands r0, r2
- lsrs r0, 18
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r2
- lsrs r1, 12
- orrs r0, r1
- movs r1, 0xC0
- lsls r1, 2
- ands r1, r2
- lsrs r1, 6
- orrs r0, r1
- movs r1, 0x3
- ands r1, r2
- orrs r0, r1
- movs r1, 0x1C
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- thumb_func_end GetUnownLetterByPersonality
-
- thumb_func_start sub_809D4A8
-sub_809D4A8: @ 809D4A8
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- mov r1, sp
- bl MailSpeciesToSpecies
- lsls r0, 16
- lsrs r0, 16
- cmp r0, SPECIES_UNOWN
- bne _0809D4DE
- mov r0, sp
- ldrh r0, [r0]
- cmp r0, 0
- bne _0809D4CE
- mov r1, sp
- adds r0, SPECIES_UNOWN
- b _0809D4D6
-_0809D4CE:
- mov r1, sp
- movs r2, 0xCE
- lsls r2, 1
- adds r0, r2
-_0809D4D6:
- strh r0, [r1]
- mov r0, sp
- ldrh r0, [r0]
- b _0809D4EA
-_0809D4DE:
- adds r0, r4, 0
- movs r1, 0
- bl mon_icon_convert_unown_species_id
- lsls r0, 16
- lsrs r0, 16
-_0809D4EA:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_809D4A8
-
- thumb_func_start GetMonIconPtr
-GetMonIconPtr: @ 809D4F4
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- bl mon_icon_convert_unown_species_id
- lsls r0, 16
- ldr r1, _0809D50C @ =gMonIconTable
- lsrs r0, 14
- adds r0, r1
- ldr r0, [r0]
- pop {r1}
- bx r1
- .align 2, 0
-_0809D50C: .4byte gMonIconTable
- thumb_func_end GetMonIconPtr
-
- thumb_func_start sub_809D510
-sub_809D510: @ 809D510
- push {lr}
- bl sub_809D7E8
- pop {r0}
- bx r0
- thumb_func_end sub_809D510
-
- thumb_func_start sub_809D51C
-sub_809D51C: @ 809D51C
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, _0809D53C @ =gMonIconPaletteTable
-_0809D522:
- lsls r0, r4, 3
- adds r0, r5
- bl LoadSpritePalette
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _0809D522
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0809D53C: .4byte gMonIconPaletteTable
- thumb_func_end sub_809D51C
-
- thumb_func_start unref_sub_809D540
-unref_sub_809D540: @ 809D540
- push {r4,lr}
- lsls r0, 16
- lsrs r1, r0, 16
- movs r0, 0xCE
- lsls r0, 1
- cmp r1, r0
- bls _0809D552
- movs r1, 0x82
- lsls r1, 1
-_0809D552:
- ldr r0, _0809D578 @ =gMonIconPaletteIndices
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r1, _0809D57C @ =gMonIconPaletteTable
- lsls r0, 3
- adds r4, r0, r1
- ldrh r0, [r4, 0x4]
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _0809D572
- adds r0, r4, 0
- bl LoadSpritePalette
-_0809D572:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809D578: .4byte gMonIconPaletteIndices
-_0809D57C: .4byte gMonIconPaletteTable
- thumb_func_end unref_sub_809D540
-
- thumb_func_start sub_809D580
-sub_809D580: @ 809D580
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _0809D5AC @ =gMonIconPaletteIndices
- adds r0, r1
- ldrb r0, [r0]
- ldr r1, _0809D5B0 @ =gMonIconPaletteTable
- lsls r0, 3
- adds r4, r0, r1
- ldrh r0, [r4, 0x4]
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _0809D5A6
- adds r0, r4, 0
- bl LoadSpritePalette
-_0809D5A6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809D5AC: .4byte gMonIconPaletteIndices
-_0809D5B0: .4byte gMonIconPaletteTable
- thumb_func_end sub_809D580
-
- thumb_func_start unref_sub_809D5B4
-unref_sub_809D5B4: @ 809D5B4
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, _0809D5D4 @ =gMonIconPaletteTable
-_0809D5BA:
- lsls r0, r4, 3
- adds r0, r5
- ldrh r0, [r0, 0x4]
- bl FreeSpritePaletteByTag
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _0809D5BA
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0809D5D4: .4byte gMonIconPaletteTable
- thumb_func_end unref_sub_809D5B4
-
- thumb_func_start unref_sub_809D5D8
-unref_sub_809D5D8: @ 809D5D8
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- movs r0, 0xCE
- lsls r0, 1
- cmp r1, r0
- bls _0809D5EA
- movs r1, 0x82
- lsls r1, 1
-_0809D5EA:
- ldr r0, _0809D600 @ =gMonIconPaletteIndices
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r1, _0809D604 @ =gMonIconPaletteTable
- lsls r0, 3
- adds r0, r1
- ldrh r0, [r0, 0x4]
- bl FreeSpritePaletteByTag
- pop {r0}
- bx r0
- .align 2, 0
-_0809D600: .4byte gMonIconPaletteIndices
-_0809D604: .4byte gMonIconPaletteTable
- thumb_func_end unref_sub_809D5D8
-
- thumb_func_start sub_809D608
-sub_809D608: @ 809D608
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _0809D624 @ =gMonIconPaletteIndices
- adds r0, r1
- ldrb r0, [r0]
- ldr r1, _0809D628 @ =gMonIconPaletteTable
- lsls r0, 3
- adds r0, r1
- ldrh r0, [r0, 0x4]
- bl FreeSpritePaletteByTag
- pop {r0}
- bx r0
- .align 2, 0
-_0809D624: .4byte gMonIconPaletteIndices
-_0809D628: .4byte gMonIconPaletteTable
- thumb_func_end sub_809D608
-
- thumb_func_start sub_809D62C
-sub_809D62C: @ 809D62C
- push {lr}
- bl UpdateMonIconFrame
- pop {r0}
- bx r0
- thumb_func_end sub_809D62C
-
- thumb_func_start UpdateMonIconFrame
-UpdateMonIconFrame: @ 809D638
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r4, r0, 0
- movs r7, 0
- adds r6, r4, 0
- adds r6, 0x2C
- ldrb r2, [r6]
- movs r0, 0x3F
- mov r9, r0
- ands r0, r2
- cmp r0, 0
- bne _0809D6EC
- movs r1, 0x2A
- adds r1, r4
- mov r8, r1
- ldrb r1, [r1]
- ldr r0, [r4, 0x8]
- lsls r1, 2
- adds r1, r0
- adds r5, r4, 0
- adds r5, 0x2B
- ldrb r0, [r5]
- ldr r1, [r1]
- lsls r0, 2
- adds r0, r1
- movs r1, 0
- ldrsh r3, [r0, r1]
- movs r0, 0x2
- negs r0, r0
- cmp r3, r0
- beq _0809D682
- adds r0, 0x1
- cmp r3, r0
- bne _0809D686
- b _0809D700
-_0809D682:
- strb r7, [r5]
- b _0809D700
-_0809D686:
- ldr r2, _0809D6E4 @ =gSpriteImageSizes
- ldrb r1, [r4, 0x3]
- lsrs r1, 6
- lsls r1, 1
- ldrb r0, [r4, 0x1]
- lsrs r0, 6
- lsls r0, 3
- adds r1, r0
- adds r1, r2
- ldrh r2, [r1]
- adds r1, r2, 0
- muls r1, r3
- ldr r0, [r4, 0xC]
- adds r0, r1
- ldrh r1, [r4, 0x4]
- lsls r1, 22
- lsrs r1, 17
- ldr r3, _0809D6E8 @ =0x06010000
- adds r1, r3
- bl RequestSpriteCopy
- mov r0, r8
- ldrb r1, [r0]
- ldr r0, [r4, 0x8]
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r5]
- ldr r1, [r1]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- lsls r0, 10
- lsrs r0, 26
- mov r1, r9
- ands r1, r0
- ldrb r2, [r6]
- movs r0, 0x40
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r6]
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- ldrb r7, [r5]
- b _0809D700
- .align 2, 0
-_0809D6E4: .4byte gSpriteImageSizes
-_0809D6E8: .4byte 0x06010000
-_0809D6EC:
- lsls r0, r2, 26
- lsrs r0, 26
- subs r0, 0x1
- movs r1, 0x3F
- ands r0, r1
- movs r1, 0x40
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r6]
-_0809D700:
- adds r0, r7, 0
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end UpdateMonIconFrame
-
- thumb_func_start CreateMonIconSprite
-CreateMonIconSprite: @ 809D710
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x38
- mov r9, r0
- adds r4, r1, 0
- adds r5, r2, 0
- mov r8, r3
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r0, 0
- str r0, [sp, 0x30]
- ldr r2, _0809D7D8 @ =gSpriteImageSizes
- mov r0, r9
- ldr r6, [r0]
- ldrb r1, [r6, 0x3]
- lsrs r1, 6
- lsls r1, 1
- ldrb r0, [r6, 0x1]
- lsrs r0, 6
- lsls r0, 3
- adds r1, r0
- adds r1, r2
- ldrh r2, [r1]
- ldr r1, _0809D7DC @ =0xffff0000
- add r3, sp, 0x30
- ldr r0, [r3, 0x4]
- ands r0, r1
- orrs r0, r2
- str r0, [r3, 0x4]
- add r1, sp, 0x18
- ldr r0, _0809D7E0 @ =0x0000ffff
- strh r0, [r1]
- mov r0, r9
- ldrh r2, [r0, 0x14]
- mov r0, sp
- adds r0, 0x1A
- strh r2, [r0]
- str r6, [sp, 0x1C]
- mov r2, r9
- ldr r0, [r2, 0x8]
- str r0, [sp, 0x20]
- str r3, [sp, 0x24]
- ldr r0, [r2, 0xC]
- str r0, [sp, 0x28]
- ldr r0, [r2, 0x10]
- str r0, [sp, 0x2C]
- mov r0, sp
- movs r2, 0x18
- bl memcpy
- lsls r4, 16
- asrs r4, 16
- lsls r5, 16
- asrs r5, 16
- mov r0, sp
- adds r1, r4, 0
- adds r2, r5, 0
- mov r3, r8
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r6, _0809D7E4 @ =gSprites
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- adds r4, r3, r6
- adds r5, r4, 0
- adds r5, 0x2C
- ldrb r1, [r5]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r5]
- adds r4, 0x3F
- ldrb r2, [r4]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- strb r1, [r4]
- adds r6, 0xC
- adds r3, r6
- mov r2, r9
- ldr r1, [r2, 0x4]
- str r1, [r3]
- add sp, 0x38
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0809D7D8: .4byte gSpriteImageSizes
-_0809D7DC: .4byte 0xffff0000
-_0809D7E0: .4byte 0x0000ffff
-_0809D7E4: .4byte gSprites
- thumb_func_end CreateMonIconSprite
-
- thumb_func_start sub_809D7E8
-sub_809D7E8: @ 809D7E8
- push {lr}
- sub sp, 0x8
- movs r1, 0
- str r1, [sp]
- ldr r3, _0809D81C @ =gSpriteImageSizes
- ldrb r2, [r0, 0x3]
- lsrs r2, 6
- lsls r2, 1
- ldrb r1, [r0, 0x1]
- lsrs r1, 6
- lsls r1, 3
- adds r2, r1
- adds r2, r3
- ldrh r3, [r2]
- ldr r2, _0809D820 @ =0xffff0000
- ldr r1, [sp, 0x4]
- ands r1, r2
- orrs r1, r3
- str r1, [sp, 0x4]
- mov r1, sp
- str r1, [r0, 0xC]
- bl DestroySprite
- add sp, 0x8
- pop {r0}
- bx r0
- .align 2, 0
-_0809D81C: .4byte gSpriteImageSizes
-_0809D820: .4byte 0xffff0000
- thumb_func_end sub_809D7E8
-
- thumb_func_start sub_809D824
-sub_809D824: @ 809D824
- mov r12, r0
- adds r0, 0x2A
- movs r3, 0
- strb r1, [r0]
- mov r2, r12
- adds r2, 0x2C
- ldrb r1, [r2]
- movs r0, 0x40
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- mov r0, r12
- adds r0, 0x2B
- strb r3, [r0]
- bx lr
- thumb_func_end sub_809D824
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/graphics/pokemon/icon_palette_indices.inc b/data/graphics/pokemon/icon_palette_indices.inc
deleted file mode 100644
index f37ec2a7a..000000000
--- a/data/graphics/pokemon/icon_palette_indices.inc
+++ /dev/null
@@ -1,442 +0,0 @@
- .align 2
-gMonIconPaletteIndices:: @ 83BC400
- .byte 0 @ ??????????
- .byte 1 @ Bulbasaur
- .byte 1 @ Ivysaur
- .byte 1 @ Venusaur
- .byte 0 @ Charmander
- .byte 0 @ Charmeleon
- .byte 0 @ Charizard
- .byte 0 @ Squirtle
- .byte 2 @ Wartortle
- .byte 2 @ Blastoise
- .byte 1 @ Caterpie
- .byte 1 @ Metapod
- .byte 0 @ Butterfree
- .byte 1 @ Weedle
- .byte 2 @ Kakuna
- .byte 2 @ Beedrill
- .byte 0 @ Pidgey
- .byte 0 @ Pidgeotto
- .byte 0 @ Pidgeot
- .byte 2 @ Rattata
- .byte 1 @ Raticate
- .byte 0 @ Spearow
- .byte 0 @ Fearow
- .byte 2 @ Ekans
- .byte 2 @ Arbok
- .byte 2 @ Pikachu
- .byte 0 @ Raichu
- .byte 2 @ Sandshrew
- .byte 2 @ Sandslash
- .byte 2 @ Nidoran♀
- .byte 2 @ Nidorina
- .byte 2 @ Nidoqueen
- .byte 2 @ Nidoran♂
- .byte 2 @ Nidorino
- .byte 2 @ Nidoking
- .byte 0 @ Clefairy
- .byte 0 @ Clefable
- .byte 2 @ Vulpix
- .byte 1 @ Ninetales
- .byte 0 @ Jigglypuff
- .byte 0 @ Wigglytuff
- .byte 2 @ Zubat
- .byte 2 @ Golbat
- .byte 1 @ Oddish
- .byte 0 @ Gloom
- .byte 0 @ Vileplume
- .byte 0 @ Paras
- .byte 0 @ Parasect
- .byte 0 @ Venonat
- .byte 2 @ Venomoth
- .byte 2 @ Diglett
- .byte 2 @ Dugtrio
- .byte 1 @ Meowth
- .byte 1 @ Persian
- .byte 1 @ Psyduck
- .byte 2 @ Golduck
- .byte 1 @ Mankey
- .byte 2 @ Primeape
- .byte 0 @ Growlithe
- .byte 0 @ Arcanine
- .byte 0 @ Poliwag
- .byte 0 @ Poliwhirl
- .byte 0 @ Poliwrath
- .byte 2 @ Abra
- .byte 2 @ Kadabra
- .byte 2 @ Alakazam
- .byte 0 @ Machop
- .byte 2 @ Machoke
- .byte 0 @ Machamp
- .byte 1 @ Bellsprout
- .byte 1 @ Weepinbell
- .byte 1 @ Victreebel
- .byte 2 @ Tentacool
- .byte 2 @ Tentacruel
- .byte 1 @ Geodude
- .byte 1 @ Graveler
- .byte 1 @ Golem
- .byte 0 @ Ponyta
- .byte 0 @ Rapidash
- .byte 0 @ Slowpoke
- .byte 0 @ Slowbro
- .byte 0 @ Magnemite
- .byte 0 @ Magneton
- .byte 1 @ Farfetch'd
- .byte 2 @ Doduo
- .byte 2 @ Dodrio
- .byte 2 @ Seel
- .byte 2 @ Dewgong
- .byte 2 @ Grimer
- .byte 2 @ Muk
- .byte 2 @ Shellder
- .byte 2 @ Cloyster
- .byte 2 @ Gastly
- .byte 2 @ Haunter
- .byte 2 @ Gengar
- .byte 2 @ Onix
- .byte 2 @ Drowzee
- .byte 1 @ Hypno
- .byte 2 @ Krabby
- .byte 2 @ Kingler
- .byte 0 @ Voltorb
- .byte 0 @ Electrode
- .byte 0 @ Exeggcute
- .byte 1 @ Exeggutor
- .byte 1 @ Cubone
- .byte 1 @ Marowak
- .byte 2 @ Hitmonlee
- .byte 2 @ Hitmonchan
- .byte 1 @ Lickitung
- .byte 2 @ Koffing
- .byte 2 @ Weezing
- .byte 1 @ Rhyhorn
- .byte 1 @ Rhydon
- .byte 0 @ Chansey
- .byte 0 @ Tangela
- .byte 1 @ Kangaskhan
- .byte 0 @ Horsea
- .byte 0 @ Seadra
- .byte 0 @ Goldeen
- .byte 0 @ Seaking
- .byte 2 @ Staryu
- .byte 2 @ Starmie
- .byte 0 @ Mr. mime
- .byte 1 @ Scyther
- .byte 2 @ Jynx
- .byte 1 @ Electabuzz
- .byte 0 @ Magmar
- .byte 2 @ Pinsir
- .byte 2 @ Tauros
- .byte 0 @ Magikarp
- .byte 0 @ Gyarados
- .byte 2 @ Lapras
- .byte 2 @ Ditto
- .byte 2 @ Eevee
- .byte 0 @ Vaporeon
- .byte 0 @ Jolteon
- .byte 0 @ Flareon
- .byte 0 @ Porygon
- .byte 0 @ Omanyte
- .byte 0 @ Omastar
- .byte 2 @ Kabuto
- .byte 2 @ Kabutops
- .byte 0 @ Aerodactyl
- .byte 1 @ Snorlax
- .byte 0 @ Articuno
- .byte 0 @ Zapdos
- .byte 0 @ Moltres
- .byte 0 @ Dratini
- .byte 0 @ Dragonair
- .byte 2 @ Dragonite
- .byte 2 @ Mewtwo
- .byte 0 @ Mew
- .byte 1 @ Chikorita
- .byte 1 @ Bayleef
- .byte 1 @ Meganium
- .byte 1 @ Cyndaquil
- .byte 1 @ Quilava
- .byte 1 @ Typhlosion
- .byte 2 @ Totodile
- .byte 2 @ Croconaw
- .byte 2 @ Feraligatr
- .byte 2 @ Sentret
- .byte 2 @ Furret
- .byte 2 @ Hoothoot
- .byte 2 @ Noctowl
- .byte 0 @ Ledyba
- .byte 0 @ Ledian
- .byte 1 @ Spinarak
- .byte 0 @ Ariados
- .byte 2 @ Crobat
- .byte 2 @ Chinchou
- .byte 0 @ Lanturn
- .byte 0 @ Pichu
- .byte 0 @ Cleffa
- .byte 1 @ Igglybuff
- .byte 2 @ Togepi
- .byte 2 @ Togetic
- .byte 0 @ Natu
- .byte 0 @ Xatu
- .byte 2 @ Mareep
- .byte 0 @ Flaaffy
- .byte 0 @ Ampharos
- .byte 1 @ Bellossom
- .byte 2 @ Marill
- .byte 2 @ Azumarill
- .byte 1 @ Sudowoodo
- .byte 1 @ Politoed
- .byte 1 @ Hoppip
- .byte 1 @ Skiploom
- .byte 2 @ Jumpluff
- .byte 2 @ Aipom
- .byte 1 @ Sunkern
- .byte 1 @ Sunflora
- .byte 1 @ Yanma
- .byte 0 @ Wooper
- .byte 0 @ Quagsire
- .byte 2 @ Espeon
- .byte 2 @ Umbreon
- .byte 2 @ Murkrow
- .byte 0 @ Slowking
- .byte 0 @ Misdreavus
- .byte 0 @ Unown A
- .byte 0 @ Wobbuffet
- .byte 1 @ Girafarig
- .byte 0 @ Pineco
- .byte 2 @ Forretress
- .byte 2 @ Dunsparce
- .byte 2 @ Gligar
- .byte 0 @ Steelix
- .byte 0 @ Snubbull
- .byte 2 @ Granbull
- .byte 0 @ Qwilfish
- .byte 0 @ Scizor
- .byte 1 @ Shuckle
- .byte 2 @ Heracross
- .byte 0 @ Sneasel
- .byte 0 @ Teddiursa
- .byte 2 @ Ursaring
- .byte 0 @ Slugma
- .byte 0 @ Magcargo
- .byte 2 @ Swinub
- .byte 2 @ Piloswine
- .byte 0 @ Corsola
- .byte 0 @ Remoraid
- .byte 0 @ Octillery
- .byte 0 @ Delibird
- .byte 2 @ Mantine
- .byte 0 @ Skarmory
- .byte 0 @ Houndour
- .byte 0 @ Houndoom
- .byte 0 @ Kingdra
- .byte 0 @ Phanpy
- .byte 0 @ Donphan
- .byte 0 @ Porygon2
- .byte 2 @ Stantler
- .byte 1 @ Smeargle
- .byte 2 @ Tyrogue
- .byte 2 @ Hitmontop
- .byte 1 @ Smoochum
- .byte 1 @ Elekid
- .byte 1 @ Magby
- .byte 1 @ Miltank
- .byte 1 @ Blissey
- .byte 0 @ Raikou
- .byte 2 @ Entei
- .byte 0 @ Suicune
- .byte 1 @ Larvitar
- .byte 0 @ Pupitar
- .byte 1 @ Tyranitar
- .byte 0 @ Lugia
- .byte 1 @ Ho-Oh
- .byte 1 @ Celebi
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 0 @ ?
- .byte 1 @ Treecko
- .byte 0 @ Grovyle
- .byte 1 @ Sceptile
- .byte 0 @ Torchic
- .byte 0 @ Combusken
- .byte 0 @ Blaziken
- .byte 0 @ Mudkip
- .byte 0 @ Marshtomp
- .byte 0 @ Swampert
- .byte 2 @ Poochyena
- .byte 2 @ Mightyena
- .byte 2 @ Zigzagoon
- .byte 2 @ Linoone
- .byte 0 @ Wurmple
- .byte 2 @ Silcoon
- .byte 0 @ Beautifly
- .byte 2 @ Cascoon
- .byte 1 @ Dustox
- .byte 1 @ Lotad
- .byte 1 @ Lombre
- .byte 1 @ Ludicolo
- .byte 1 @ Seedot
- .byte 1 @ Nuzleaf
- .byte 0 @ Shiftry
- .byte 1 @ Nincada
- .byte 1 @ Ninjask
- .byte 1 @ Shedinja
- .byte 2 @ Taillow
- .byte 2 @ Swellow
- .byte 1 @ Shroomish
- .byte 1 @ Breloom
- .byte 1 @ Spinda
- .byte 0 @ Wingull
- .byte 0 @ Pelipper
- .byte 2 @ Surskit
- .byte 0 @ Masquerain
- .byte 2 @ Wailmer
- .byte 0 @ Wailord
- .byte 0 @ Skitty
- .byte 2 @ Delcatty
- .byte 1 @ Kecleon
- .byte 1 @ Baltoy
- .byte 0 @ Claydol
- .byte 0 @ Nosepass
- .byte 1 @ Torkoal
- .byte 2 @ Sableye
- .byte 0 @ Barboach
- .byte 0 @ Whiscash
- .byte 0 @ Luvdisc
- .byte 0 @ Corphish
- .byte 0 @ Crawdaunt
- .byte 2 @ Feebas
- .byte 0 @ Milotic
- .byte 0 @ Carvanha
- .byte 0 @ Sharpedo
- .byte 1 @ Trapinch
- .byte 1 @ Vibrava
- .byte 1 @ Flygon
- .byte 2 @ Makuhita
- .byte 1 @ Hariyama
- .byte 1 @ Electrike
- .byte 0 @ Manectric
- .byte 1 @ Numel
- .byte 0 @ Camerupt
- .byte 2 @ Spheal
- .byte 2 @ Sealeo
- .byte 0 @ Walrein
- .byte 1 @ Cacnea
- .byte 1 @ Cacturne
- .byte 2 @ Snorunt
- .byte 0 @ Glalie
- .byte 1 @ Lunatone
- .byte 0 @ Solrock
- .byte 2 @ Azurill
- .byte 0 @ Spoink
- .byte 2 @ Grumpig
- .byte 0 @ Plusle
- .byte 0 @ Minun
- .byte 2 @ Mawile
- .byte 0 @ Meditite
- .byte 0 @ Medicham
- .byte 0 @ Swablu
- .byte 0 @ Altaria
- .byte 0 @ Wynaut
- .byte 0 @ Duskull
- .byte 0 @ Dusclops
- .byte 0 @ Roselia
- .byte 2 @ Slakoth
- .byte 2 @ Vigoroth
- .byte 1 @ Slaking
- .byte 1 @ Gulpin
- .byte 2 @ Swalot
- .byte 1 @ Tropius
- .byte 0 @ Whismur
- .byte 2 @ Loudred
- .byte 2 @ Exploud
- .byte 0 @ Clamperl
- .byte 0 @ Huntail
- .byte 0 @ Gorebyss
- .byte 0 @ Absol
- .byte 0 @ Shuppet
- .byte 0 @ Banette
- .byte 2 @ Seviper
- .byte 0 @ Zangoose
- .byte 1 @ Relicanth
- .byte 2 @ Aron
- .byte 2 @ Lairon
- .byte 2 @ Aggron
- .byte 0 @ Castform
- .byte 0 @ Volbeat
- .byte 2 @ Illumise
- .byte 2 @ Lileep
- .byte 0 @ Cradily
- .byte 0 @ Anorith
- .byte 0 @ Armaldo
- .byte 1 @ Ralts
- .byte 1 @ Kirlia
- .byte 1 @ Gardevoir
- .byte 2 @ Bagon
- .byte 2 @ Shelgon
- .byte 0 @ Salamence
- .byte 0 @ Beldum
- .byte 0 @ Metang
- .byte 0 @ Metagross
- .byte 2 @ Regirock
- .byte 2 @ Regice
- .byte 2 @ Registeel
- .byte 2 @ Kyogre
- .byte 0 @ Groudon
- .byte 1 @ Rayquaza
- .byte 0 @ Latias
- .byte 2 @ Latios
- .byte 0 @ Jirachi
- .byte 0 @ Deoxys
- .byte 0 @ Chimecho
- .byte 1 @ Egg
- .byte 0 @ Unown B
- .byte 0 @ Unown C
- .byte 0 @ Unown D
- .byte 0 @ Unown E
- .byte 0 @ Unown F
- .byte 0 @ Unown G
- .byte 0 @ Unown H
- .byte 0 @ Unown I
- .byte 0 @ Unown J
- .byte 0 @ Unown K
- .byte 0 @ Unown L
- .byte 0 @ Unown M
- .byte 0 @ Unown N
- .byte 0 @ Unown O
- .byte 0 @ Unown P
- .byte 0 @ Unown Q
- .byte 0 @ Unown R
- .byte 0 @ Unown S
- .byte 0 @ Unown T
- .byte 0 @ Unown U
- .byte 0 @ Unown V
- .byte 0 @ Unown W
- .byte 0 @ Unown X
- .byte 0 @ Unown Y
- .byte 0 @ Unown Z
- .byte 0 @ Unown Exclamation Mark
- .byte 0 @ Unown Question Mark
diff --git a/data/graphics/pokemon/icon_palette_table.inc b/data/graphics/pokemon/icon_palette_table.inc
deleted file mode 100644
index d9da61ab2..000000000
--- a/data/graphics/pokemon/icon_palette_table.inc
+++ /dev/null
@@ -1,11 +0,0 @@
- .align 2
-gMonIconPaletteTable:: @ 83BC5B8
- obj_pal gMonIconPalettes + 0 * 32, 56000
- obj_pal gMonIconPalettes + 1 * 32, 56001
- obj_pal gMonIconPalettes + 2 * 32, 56002
-
-@ These palettes are actually part of the title screen BG palette and are not
-@ used for Pokémon icons.
- obj_pal gMonIconPalettes + 3 * 32, 56003
- obj_pal gMonIconPalettes + 4 * 32, 56004
- obj_pal gMonIconPalettes + 5 * 32, 56005
diff --git a/data/graphics/pokemon/icon_table.inc b/data/graphics/pokemon/icon_table.inc
deleted file mode 100644
index eeb064208..000000000
--- a/data/graphics/pokemon/icon_table.inc
+++ /dev/null
@@ -1,442 +0,0 @@
- .align 2
-gMonIconTable:: @ 83BBD20
- .4byte gMonIcon_Bulbasaur
- .4byte gMonIcon_Bulbasaur
- .4byte gMonIcon_Ivysaur
- .4byte gMonIcon_Venusaur
- .4byte gMonIcon_Charmander
- .4byte gMonIcon_Charmeleon
- .4byte gMonIcon_Charizard
- .4byte gMonIcon_Squirtle
- .4byte gMonIcon_Wartortle
- .4byte gMonIcon_Blastoise
- .4byte gMonIcon_Caterpie
- .4byte gMonIcon_Metapod
- .4byte gMonIcon_Butterfree
- .4byte gMonIcon_Weedle
- .4byte gMonIcon_Kakuna
- .4byte gMonIcon_Beedrill
- .4byte gMonIcon_Pidgey
- .4byte gMonIcon_Pidgeotto
- .4byte gMonIcon_Pidgeot
- .4byte gMonIcon_Rattata
- .4byte gMonIcon_Raticate
- .4byte gMonIcon_Spearow
- .4byte gMonIcon_Fearow
- .4byte gMonIcon_Ekans
- .4byte gMonIcon_Arbok
- .4byte gMonIcon_Pikachu
- .4byte gMonIcon_Raichu
- .4byte gMonIcon_Sandshrew
- .4byte gMonIcon_Sandslash
- .4byte gMonIcon_NidoranF
- .4byte gMonIcon_Nidorina
- .4byte gMonIcon_Nidoqueen
- .4byte gMonIcon_NidoranM
- .4byte gMonIcon_Nidorino
- .4byte gMonIcon_Nidoking
- .4byte gMonIcon_Clefairy
- .4byte gMonIcon_Clefable
- .4byte gMonIcon_Vulpix
- .4byte gMonIcon_Ninetales
- .4byte gMonIcon_Jigglypuff
- .4byte gMonIcon_Wigglytuff
- .4byte gMonIcon_Zubat
- .4byte gMonIcon_Golbat
- .4byte gMonIcon_Oddish
- .4byte gMonIcon_Gloom
- .4byte gMonIcon_Vileplume
- .4byte gMonIcon_Paras
- .4byte gMonIcon_Parasect
- .4byte gMonIcon_Venonat
- .4byte gMonIcon_Venomoth
- .4byte gMonIcon_Diglett
- .4byte gMonIcon_Dugtrio
- .4byte gMonIcon_Meowth
- .4byte gMonIcon_Persian
- .4byte gMonIcon_Psyduck
- .4byte gMonIcon_Golduck
- .4byte gMonIcon_Mankey
- .4byte gMonIcon_Primeape
- .4byte gMonIcon_Growlithe
- .4byte gMonIcon_Arcanine
- .4byte gMonIcon_Poliwag
- .4byte gMonIcon_Poliwhirl
- .4byte gMonIcon_Poliwrath
- .4byte gMonIcon_Abra
- .4byte gMonIcon_Kadabra
- .4byte gMonIcon_Alakazam
- .4byte gMonIcon_Machop
- .4byte gMonIcon_Machoke
- .4byte gMonIcon_Machamp
- .4byte gMonIcon_Bellsprout
- .4byte gMonIcon_Weepinbell
- .4byte gMonIcon_Victreebel
- .4byte gMonIcon_Tentacool
- .4byte gMonIcon_Tentacruel
- .4byte gMonIcon_Geodude
- .4byte gMonIcon_Graveler
- .4byte gMonIcon_Golem
- .4byte gMonIcon_Ponyta
- .4byte gMonIcon_Rapidash
- .4byte gMonIcon_Slowpoke
- .4byte gMonIcon_Slowbro
- .4byte gMonIcon_Magnemite
- .4byte gMonIcon_Magneton
- .4byte gMonIcon_Farfetchd
- .4byte gMonIcon_Doduo
- .4byte gMonIcon_Dodrio
- .4byte gMonIcon_Seel
- .4byte gMonIcon_Dewgong
- .4byte gMonIcon_Grimer
- .4byte gMonIcon_Muk
- .4byte gMonIcon_Shellder
- .4byte gMonIcon_Cloyster
- .4byte gMonIcon_Gastly
- .4byte gMonIcon_Haunter
- .4byte gMonIcon_Gengar
- .4byte gMonIcon_Onix
- .4byte gMonIcon_Drowzee
- .4byte gMonIcon_Hypno
- .4byte gMonIcon_Krabby
- .4byte gMonIcon_Kingler
- .4byte gMonIcon_Voltorb
- .4byte gMonIcon_Electrode
- .4byte gMonIcon_Exeggcute
- .4byte gMonIcon_Exeggutor
- .4byte gMonIcon_Cubone
- .4byte gMonIcon_Marowak
- .4byte gMonIcon_Hitmonlee
- .4byte gMonIcon_Hitmonchan
- .4byte gMonIcon_Lickitung
- .4byte gMonIcon_Koffing
- .4byte gMonIcon_Weezing
- .4byte gMonIcon_Rhyhorn
- .4byte gMonIcon_Rhydon
- .4byte gMonIcon_Chansey
- .4byte gMonIcon_Tangela
- .4byte gMonIcon_Kangaskhan
- .4byte gMonIcon_Horsea
- .4byte gMonIcon_Seadra
- .4byte gMonIcon_Goldeen
- .4byte gMonIcon_Seaking
- .4byte gMonIcon_Staryu
- .4byte gMonIcon_Starmie
- .4byte gMonIcon_Mrmime
- .4byte gMonIcon_Scyther
- .4byte gMonIcon_Jynx
- .4byte gMonIcon_Electabuzz
- .4byte gMonIcon_Magmar
- .4byte gMonIcon_Pinsir
- .4byte gMonIcon_Tauros
- .4byte gMonIcon_Magikarp
- .4byte gMonIcon_Gyarados
- .4byte gMonIcon_Lapras
- .4byte gMonIcon_Ditto
- .4byte gMonIcon_Eevee
- .4byte gMonIcon_Vaporeon
- .4byte gMonIcon_Jolteon
- .4byte gMonIcon_Flareon
- .4byte gMonIcon_Porygon
- .4byte gMonIcon_Omanyte
- .4byte gMonIcon_Omastar
- .4byte gMonIcon_Kabuto
- .4byte gMonIcon_Kabutops
- .4byte gMonIcon_Aerodactyl
- .4byte gMonIcon_Snorlax
- .4byte gMonIcon_Articuno
- .4byte gMonIcon_Zapdos
- .4byte gMonIcon_Moltres
- .4byte gMonIcon_Dratini
- .4byte gMonIcon_Dragonair
- .4byte gMonIcon_Dragonite
- .4byte gMonIcon_Mewtwo
- .4byte gMonIcon_Mew
- .4byte gMonIcon_Chikorita
- .4byte gMonIcon_Bayleef
- .4byte gMonIcon_Meganium
- .4byte gMonIcon_Cyndaquil
- .4byte gMonIcon_Quilava
- .4byte gMonIcon_Typhlosion
- .4byte gMonIcon_Totodile
- .4byte gMonIcon_Croconaw
- .4byte gMonIcon_Feraligatr
- .4byte gMonIcon_Sentret
- .4byte gMonIcon_Furret
- .4byte gMonIcon_Hoothoot
- .4byte gMonIcon_Noctowl
- .4byte gMonIcon_Ledyba
- .4byte gMonIcon_Ledian
- .4byte gMonIcon_Spinarak
- .4byte gMonIcon_Ariados
- .4byte gMonIcon_Crobat
- .4byte gMonIcon_Chinchou
- .4byte gMonIcon_Lanturn
- .4byte gMonIcon_Pichu
- .4byte gMonIcon_Cleffa
- .4byte gMonIcon_Igglybuff
- .4byte gMonIcon_Togepi
- .4byte gMonIcon_Togetic
- .4byte gMonIcon_Natu
- .4byte gMonIcon_Xatu
- .4byte gMonIcon_Mareep
- .4byte gMonIcon_Flaaffy
- .4byte gMonIcon_Ampharos
- .4byte gMonIcon_Bellossom
- .4byte gMonIcon_Marill
- .4byte gMonIcon_Azumarill
- .4byte gMonIcon_Sudowoodo
- .4byte gMonIcon_Politoed
- .4byte gMonIcon_Hoppip
- .4byte gMonIcon_Skiploom
- .4byte gMonIcon_Jumpluff
- .4byte gMonIcon_Aipom
- .4byte gMonIcon_Sunkern
- .4byte gMonIcon_Sunflora
- .4byte gMonIcon_Yanma
- .4byte gMonIcon_Wooper
- .4byte gMonIcon_Quagsire
- .4byte gMonIcon_Espeon
- .4byte gMonIcon_Umbreon
- .4byte gMonIcon_Murkrow
- .4byte gMonIcon_Slowking
- .4byte gMonIcon_Misdreavus
- .4byte gMonIcon_UnownA
- .4byte gMonIcon_Wobbuffet
- .4byte gMonIcon_Girafarig
- .4byte gMonIcon_Pineco
- .4byte gMonIcon_Forretress
- .4byte gMonIcon_Dunsparce
- .4byte gMonIcon_Gligar
- .4byte gMonIcon_Steelix
- .4byte gMonIcon_Snubbull
- .4byte gMonIcon_Granbull
- .4byte gMonIcon_Qwilfish
- .4byte gMonIcon_Scizor
- .4byte gMonIcon_Shuckle
- .4byte gMonIcon_Heracross
- .4byte gMonIcon_Sneasel
- .4byte gMonIcon_Teddiursa
- .4byte gMonIcon_Ursaring
- .4byte gMonIcon_Slugma
- .4byte gMonIcon_Magcargo
- .4byte gMonIcon_Swinub
- .4byte gMonIcon_Piloswine
- .4byte gMonIcon_Corsola
- .4byte gMonIcon_Remoraid
- .4byte gMonIcon_Octillery
- .4byte gMonIcon_Delibird
- .4byte gMonIcon_Mantine
- .4byte gMonIcon_Skarmory
- .4byte gMonIcon_Houndour
- .4byte gMonIcon_Houndoom
- .4byte gMonIcon_Kingdra
- .4byte gMonIcon_Phanpy
- .4byte gMonIcon_Donphan
- .4byte gMonIcon_Porygon2
- .4byte gMonIcon_Stantler
- .4byte gMonIcon_Smeargle
- .4byte gMonIcon_Tyrogue
- .4byte gMonIcon_Hitmontop
- .4byte gMonIcon_Smoochum
- .4byte gMonIcon_Elekid
- .4byte gMonIcon_Magby
- .4byte gMonIcon_Miltank
- .4byte gMonIcon_Blissey
- .4byte gMonIcon_Raikou
- .4byte gMonIcon_Entei
- .4byte gMonIcon_Suicune
- .4byte gMonIcon_Larvitar
- .4byte gMonIcon_Pupitar
- .4byte gMonIcon_Tyranitar
- .4byte gMonIcon_Lugia
- .4byte gMonIcon_HoOh
- .4byte gMonIcon_Celebi
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_QuestionMark
- .4byte gMonIcon_Treecko
- .4byte gMonIcon_Grovyle
- .4byte gMonIcon_Sceptile
- .4byte gMonIcon_Torchic
- .4byte gMonIcon_Combusken
- .4byte gMonIcon_Blaziken
- .4byte gMonIcon_Mudkip
- .4byte gMonIcon_Marshtomp
- .4byte gMonIcon_Swampert
- .4byte gMonIcon_Poochyena
- .4byte gMonIcon_Mightyena
- .4byte gMonIcon_Zigzagoon
- .4byte gMonIcon_Linoone
- .4byte gMonIcon_Wurmple
- .4byte gMonIcon_Silcoon
- .4byte gMonIcon_Beautifly
- .4byte gMonIcon_Cascoon
- .4byte gMonIcon_Dustox
- .4byte gMonIcon_Lotad
- .4byte gMonIcon_Lombre
- .4byte gMonIcon_Ludicolo
- .4byte gMonIcon_Seedot
- .4byte gMonIcon_Nuzleaf
- .4byte gMonIcon_Shiftry
- .4byte gMonIcon_Nincada
- .4byte gMonIcon_Ninjask
- .4byte gMonIcon_Shedinja
- .4byte gMonIcon_Taillow
- .4byte gMonIcon_Swellow
- .4byte gMonIcon_Shroomish
- .4byte gMonIcon_Breloom
- .4byte gMonIcon_Spinda
- .4byte gMonIcon_Wingull
- .4byte gMonIcon_Pelipper
- .4byte gMonIcon_Surskit
- .4byte gMonIcon_Masquerain
- .4byte gMonIcon_Wailmer
- .4byte gMonIcon_Wailord
- .4byte gMonIcon_Skitty
- .4byte gMonIcon_Delcatty
- .4byte gMonIcon_Kecleon
- .4byte gMonIcon_Baltoy
- .4byte gMonIcon_Claydol
- .4byte gMonIcon_Nosepass
- .4byte gMonIcon_Torkoal
- .4byte gMonIcon_Sableye
- .4byte gMonIcon_Barboach
- .4byte gMonIcon_Whiscash
- .4byte gMonIcon_Luvdisc
- .4byte gMonIcon_Corphish
- .4byte gMonIcon_Crawdaunt
- .4byte gMonIcon_Feebas
- .4byte gMonIcon_Milotic
- .4byte gMonIcon_Carvanha
- .4byte gMonIcon_Sharpedo
- .4byte gMonIcon_Trapinch
- .4byte gMonIcon_Vibrava
- .4byte gMonIcon_Flygon
- .4byte gMonIcon_Makuhita
- .4byte gMonIcon_Hariyama
- .4byte gMonIcon_Electrike
- .4byte gMonIcon_Manectric
- .4byte gMonIcon_Numel
- .4byte gMonIcon_Camerupt
- .4byte gMonIcon_Spheal
- .4byte gMonIcon_Sealeo
- .4byte gMonIcon_Walrein
- .4byte gMonIcon_Cacnea
- .4byte gMonIcon_Cacturne
- .4byte gMonIcon_Snorunt
- .4byte gMonIcon_Glalie
- .4byte gMonIcon_Lunatone
- .4byte gMonIcon_Solrock
- .4byte gMonIcon_Azurill
- .4byte gMonIcon_Spoink
- .4byte gMonIcon_Grumpig
- .4byte gMonIcon_Plusle
- .4byte gMonIcon_Minun
- .4byte gMonIcon_Mawile
- .4byte gMonIcon_Meditite
- .4byte gMonIcon_Medicham
- .4byte gMonIcon_Swablu
- .4byte gMonIcon_Altaria
- .4byte gMonIcon_Wynaut
- .4byte gMonIcon_Duskull
- .4byte gMonIcon_Dusclops
- .4byte gMonIcon_Roselia
- .4byte gMonIcon_Slakoth
- .4byte gMonIcon_Vigoroth
- .4byte gMonIcon_Slaking
- .4byte gMonIcon_Gulpin
- .4byte gMonIcon_Swalot
- .4byte gMonIcon_Tropius
- .4byte gMonIcon_Whismur
- .4byte gMonIcon_Loudred
- .4byte gMonIcon_Exploud
- .4byte gMonIcon_Clamperl
- .4byte gMonIcon_Huntail
- .4byte gMonIcon_Gorebyss
- .4byte gMonIcon_Absol
- .4byte gMonIcon_Shuppet
- .4byte gMonIcon_Banette
- .4byte gMonIcon_Seviper
- .4byte gMonIcon_Zangoose
- .4byte gMonIcon_Relicanth
- .4byte gMonIcon_Aron
- .4byte gMonIcon_Lairon
- .4byte gMonIcon_Aggron
- .4byte gMonIcon_Castform
- .4byte gMonIcon_Volbeat
- .4byte gMonIcon_Illumise
- .4byte gMonIcon_Lileep
- .4byte gMonIcon_Cradily
- .4byte gMonIcon_Anorith
- .4byte gMonIcon_Armaldo
- .4byte gMonIcon_Ralts
- .4byte gMonIcon_Kirlia
- .4byte gMonIcon_Gardevoir
- .4byte gMonIcon_Bagon
- .4byte gMonIcon_Shelgon
- .4byte gMonIcon_Salamence
- .4byte gMonIcon_Beldum
- .4byte gMonIcon_Metang
- .4byte gMonIcon_Metagross
- .4byte gMonIcon_Regirock
- .4byte gMonIcon_Regice
- .4byte gMonIcon_Registeel
- .4byte gMonIcon_Kyogre
- .4byte gMonIcon_Groudon
- .4byte gMonIcon_Rayquaza
- .4byte gMonIcon_Latias
- .4byte gMonIcon_Latios
- .4byte gMonIcon_Jirachi
- .4byte gMonIcon_Deoxys
- .4byte gMonIcon_Chimecho
- .4byte gMonIcon_Egg
- .4byte gMonIcon_UnownB
- .4byte gMonIcon_UnownC
- .4byte gMonIcon_UnownD
- .4byte gMonIcon_UnownE
- .4byte gMonIcon_UnownF
- .4byte gMonIcon_UnownG
- .4byte gMonIcon_UnownH
- .4byte gMonIcon_UnownI
- .4byte gMonIcon_UnownJ
- .4byte gMonIcon_UnownK
- .4byte gMonIcon_UnownL
- .4byte gMonIcon_UnownM
- .4byte gMonIcon_UnownN
- .4byte gMonIcon_UnownO
- .4byte gMonIcon_UnownP
- .4byte gMonIcon_UnownQ
- .4byte gMonIcon_UnownR
- .4byte gMonIcon_UnownS
- .4byte gMonIcon_UnownT
- .4byte gMonIcon_UnownU
- .4byte gMonIcon_UnownV
- .4byte gMonIcon_UnownW
- .4byte gMonIcon_UnownX
- .4byte gMonIcon_UnownY
- .4byte gMonIcon_UnownZ
- .4byte gMonIcon_UnownExclamationMark
- .4byte gMonIcon_UnownQuestionMark
diff --git a/data/pokemon_icon.s b/data/pokemon_icon.s
deleted file mode 100644
index ff5aa33dc..000000000
--- a/data/pokemon_icon.s
+++ /dev/null
@@ -1,92 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
-@ 83BBD20
- .include "data/graphics/pokemon/icon_table.inc"
-
-@ 83BC400
- .include "data/graphics/pokemon/icon_palette_indices.inc"
-
-@ 83BC5B8
- .include "data/graphics/pokemon/icon_palette_table.inc"
-
- .align 2
-gOamData_83BC5E8:: @ 83BC5E8
- .2byte 0x0000
- .2byte 0x8000
- .2byte 0x0400
-
- .align 2
-gSpriteAnim_83BC5F0:: @ 83BC5F0
- obj_image_anim_frame 0, 6
- obj_image_anim_frame 1, 6
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_83BC5FC:: @ 83BC5FC
- obj_image_anim_frame 0, 8
- obj_image_anim_frame 1, 8
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_83BC608:: @ 83BC608
- obj_image_anim_frame 0, 14
- obj_image_anim_frame 1, 14
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_83BC614:: @ 83BC614
- obj_image_anim_frame 0, 22
- obj_image_anim_frame 1, 22
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_83BC620:: @ 83BC620
- obj_image_anim_frame 0, 29
- obj_image_anim_frame 0, 29
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83BC62C:: @ 83BC62C
- .4byte gSpriteAnim_83BC5F0
- .4byte gSpriteAnim_83BC5FC
- .4byte gSpriteAnim_83BC608
- .4byte gSpriteAnim_83BC614
- .4byte gSpriteAnim_83BC620
-
- .align 2
-gSpriteAffineAnim_83BC640:: @ 83BC640
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 10
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83BC650:: @ 83BC650
- obj_rot_scal_anim_frame 0xFFFE, 0xFFFE, 0, 122
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83BC660:: @ 83BC660
- .4byte gSpriteAffineAnim_83BC640
- .4byte gSpriteAffineAnim_83BC650
-
- .align 1
-gSpriteImageSizes:: @ 83BC668
- @ square
- .2byte 0x20 @ 1×1
- .2byte 0x80 @ 2×2
- .2byte 0x200 @ 4×4
- .2byte 0x800 @ 8×8
-
- @ horizontal rectangle
- .2byte 0x40 @ 2×1
- .2byte 0x80 @ 4×1
- .2byte 0x100 @ 4×2
- .2byte 0x400 @ 8×4
-
- @ vertical rectangle
- .2byte 0x40 @ 1×2
- .2byte 0x80 @ 1×4
- .2byte 0x100 @ 2×4
- .2byte 0x400 @ 4×8
diff --git a/include/graphics.h b/include/graphics.h
index fa6a85513..5632cb831 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2435,6 +2435,10 @@ extern const u8 gMonFrontPic_UnownQuestionMark[];
extern const u8 gMonBackPic_UnownQuestionMark[];
extern const u8 gMonIcon_UnownQuestionMark[];
+extern const u8 gMonIcon_QuestionMark[];
+extern const u8 gMonIcon_Egg[];
+extern const u16 gMonIconPalettes[][16];
+
// data/graphics.s
extern const u8 gBagMaleTiles[];
extern const u8 gBagFemaleTiles[];
diff --git a/ld_script.txt b/ld_script.txt
index 03181e65a..284eb382e 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -147,7 +147,7 @@ SECTIONS {
asm/pokemon_storage_system.o(.text);
src/pokemon_storage_system.o(.text);
asm/pokemon_storage_system.o(.text_8098A38);
- asm/pokemon_icon.o(.text);
+ src/pokemon_icon.o(.text);
asm/pokemon_summary_screen.o(.text);
src/pokemon_summary_screen.o(.text);
asm/pokemon_summary_screen.o(.text_80A0958);
@@ -389,7 +389,7 @@ SECTIONS {
src/trainer_card.o(.rodata);
src/battle_party_menu.o(.rodata);
data/pokemon_storage_system.o(.rodata);
- data/pokemon_icon.o(.rodata);
+ src/pokemon_icon.o(.rodata);
data/pokemon_summary_screen.o(.rodata);
data/fldeff_cut.o(.rodata);
src/item_menu.o(.rodata);
diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c
new file mode 100644
index 000000000..8994ea49e
--- /dev/null
+++ b/src/pokemon_icon.c
@@ -0,0 +1,1276 @@
+#include "global.h"
+#include "graphics.h"
+#include "mail_data.h"
+#include "species.h"
+#include "sprite.h"
+
+#define POKE_ICON_BASE_PAL_TAG 56000
+
+struct MonIconSpriteTemplate
+{
+ const struct OamData *oam;
+ const u8 *image;
+ const union AnimCmd *const *anims;
+ const union AffineAnimCmd *const *affineAnims;
+ void (*callback)(struct Sprite *);
+ u16 paletteTag;
+};
+
+const u8 * const gMonIconTable[] =
+{
+ gMonIcon_Bulbasaur,
+ gMonIcon_Bulbasaur,
+ gMonIcon_Ivysaur,
+ gMonIcon_Venusaur,
+ gMonIcon_Charmander,
+ gMonIcon_Charmeleon,
+ gMonIcon_Charizard,
+ gMonIcon_Squirtle,
+ gMonIcon_Wartortle,
+ gMonIcon_Blastoise,
+ gMonIcon_Caterpie,
+ gMonIcon_Metapod,
+ gMonIcon_Butterfree,
+ gMonIcon_Weedle,
+ gMonIcon_Kakuna,
+ gMonIcon_Beedrill,
+ gMonIcon_Pidgey,
+ gMonIcon_Pidgeotto,
+ gMonIcon_Pidgeot,
+ gMonIcon_Rattata,
+ gMonIcon_Raticate,
+ gMonIcon_Spearow,
+ gMonIcon_Fearow,
+ gMonIcon_Ekans,
+ gMonIcon_Arbok,
+ gMonIcon_Pikachu,
+ gMonIcon_Raichu,
+ gMonIcon_Sandshrew,
+ gMonIcon_Sandslash,
+ gMonIcon_NidoranF,
+ gMonIcon_Nidorina,
+ gMonIcon_Nidoqueen,
+ gMonIcon_NidoranM,
+ gMonIcon_Nidorino,
+ gMonIcon_Nidoking,
+ gMonIcon_Clefairy,
+ gMonIcon_Clefable,
+ gMonIcon_Vulpix,
+ gMonIcon_Ninetales,
+ gMonIcon_Jigglypuff,
+ gMonIcon_Wigglytuff,
+ gMonIcon_Zubat,
+ gMonIcon_Golbat,
+ gMonIcon_Oddish,
+ gMonIcon_Gloom,
+ gMonIcon_Vileplume,
+ gMonIcon_Paras,
+ gMonIcon_Parasect,
+ gMonIcon_Venonat,
+ gMonIcon_Venomoth,
+ gMonIcon_Diglett,
+ gMonIcon_Dugtrio,
+ gMonIcon_Meowth,
+ gMonIcon_Persian,
+ gMonIcon_Psyduck,
+ gMonIcon_Golduck,
+ gMonIcon_Mankey,
+ gMonIcon_Primeape,
+ gMonIcon_Growlithe,
+ gMonIcon_Arcanine,
+ gMonIcon_Poliwag,
+ gMonIcon_Poliwhirl,
+ gMonIcon_Poliwrath,
+ gMonIcon_Abra,
+ gMonIcon_Kadabra,
+ gMonIcon_Alakazam,
+ gMonIcon_Machop,
+ gMonIcon_Machoke,
+ gMonIcon_Machamp,
+ gMonIcon_Bellsprout,
+ gMonIcon_Weepinbell,
+ gMonIcon_Victreebel,
+ gMonIcon_Tentacool,
+ gMonIcon_Tentacruel,
+ gMonIcon_Geodude,
+ gMonIcon_Graveler,
+ gMonIcon_Golem,
+ gMonIcon_Ponyta,
+ gMonIcon_Rapidash,
+ gMonIcon_Slowpoke,
+ gMonIcon_Slowbro,
+ gMonIcon_Magnemite,
+ gMonIcon_Magneton,
+ gMonIcon_Farfetchd,
+ gMonIcon_Doduo,
+ gMonIcon_Dodrio,
+ gMonIcon_Seel,
+ gMonIcon_Dewgong,
+ gMonIcon_Grimer,
+ gMonIcon_Muk,
+ gMonIcon_Shellder,
+ gMonIcon_Cloyster,
+ gMonIcon_Gastly,
+ gMonIcon_Haunter,
+ gMonIcon_Gengar,
+ gMonIcon_Onix,
+ gMonIcon_Drowzee,
+ gMonIcon_Hypno,
+ gMonIcon_Krabby,
+ gMonIcon_Kingler,
+ gMonIcon_Voltorb,
+ gMonIcon_Electrode,
+ gMonIcon_Exeggcute,
+ gMonIcon_Exeggutor,
+ gMonIcon_Cubone,
+ gMonIcon_Marowak,
+ gMonIcon_Hitmonlee,
+ gMonIcon_Hitmonchan,
+ gMonIcon_Lickitung,
+ gMonIcon_Koffing,
+ gMonIcon_Weezing,
+ gMonIcon_Rhyhorn,
+ gMonIcon_Rhydon,
+ gMonIcon_Chansey,
+ gMonIcon_Tangela,
+ gMonIcon_Kangaskhan,
+ gMonIcon_Horsea,
+ gMonIcon_Seadra,
+ gMonIcon_Goldeen,
+ gMonIcon_Seaking,
+ gMonIcon_Staryu,
+ gMonIcon_Starmie,
+ gMonIcon_Mrmime,
+ gMonIcon_Scyther,
+ gMonIcon_Jynx,
+ gMonIcon_Electabuzz,
+ gMonIcon_Magmar,
+ gMonIcon_Pinsir,
+ gMonIcon_Tauros,
+ gMonIcon_Magikarp,
+ gMonIcon_Gyarados,
+ gMonIcon_Lapras,
+ gMonIcon_Ditto,
+ gMonIcon_Eevee,
+ gMonIcon_Vaporeon,
+ gMonIcon_Jolteon,
+ gMonIcon_Flareon,
+ gMonIcon_Porygon,
+ gMonIcon_Omanyte,
+ gMonIcon_Omastar,
+ gMonIcon_Kabuto,
+ gMonIcon_Kabutops,
+ gMonIcon_Aerodactyl,
+ gMonIcon_Snorlax,
+ gMonIcon_Articuno,
+ gMonIcon_Zapdos,
+ gMonIcon_Moltres,
+ gMonIcon_Dratini,
+ gMonIcon_Dragonair,
+ gMonIcon_Dragonite,
+ gMonIcon_Mewtwo,
+ gMonIcon_Mew,
+ gMonIcon_Chikorita,
+ gMonIcon_Bayleef,
+ gMonIcon_Meganium,
+ gMonIcon_Cyndaquil,
+ gMonIcon_Quilava,
+ gMonIcon_Typhlosion,
+ gMonIcon_Totodile,
+ gMonIcon_Croconaw,
+ gMonIcon_Feraligatr,
+ gMonIcon_Sentret,
+ gMonIcon_Furret,
+ gMonIcon_Hoothoot,
+ gMonIcon_Noctowl,
+ gMonIcon_Ledyba,
+ gMonIcon_Ledian,
+ gMonIcon_Spinarak,
+ gMonIcon_Ariados,
+ gMonIcon_Crobat,
+ gMonIcon_Chinchou,
+ gMonIcon_Lanturn,
+ gMonIcon_Pichu,
+ gMonIcon_Cleffa,
+ gMonIcon_Igglybuff,
+ gMonIcon_Togepi,
+ gMonIcon_Togetic,
+ gMonIcon_Natu,
+ gMonIcon_Xatu,
+ gMonIcon_Mareep,
+ gMonIcon_Flaaffy,
+ gMonIcon_Ampharos,
+ gMonIcon_Bellossom,
+ gMonIcon_Marill,
+ gMonIcon_Azumarill,
+ gMonIcon_Sudowoodo,
+ gMonIcon_Politoed,
+ gMonIcon_Hoppip,
+ gMonIcon_Skiploom,
+ gMonIcon_Jumpluff,
+ gMonIcon_Aipom,
+ gMonIcon_Sunkern,
+ gMonIcon_Sunflora,
+ gMonIcon_Yanma,
+ gMonIcon_Wooper,
+ gMonIcon_Quagsire,
+ gMonIcon_Espeon,
+ gMonIcon_Umbreon,
+ gMonIcon_Murkrow,
+ gMonIcon_Slowking,
+ gMonIcon_Misdreavus,
+ gMonIcon_UnownA,
+ gMonIcon_Wobbuffet,
+ gMonIcon_Girafarig,
+ gMonIcon_Pineco,
+ gMonIcon_Forretress,
+ gMonIcon_Dunsparce,
+ gMonIcon_Gligar,
+ gMonIcon_Steelix,
+ gMonIcon_Snubbull,
+ gMonIcon_Granbull,
+ gMonIcon_Qwilfish,
+ gMonIcon_Scizor,
+ gMonIcon_Shuckle,
+ gMonIcon_Heracross,
+ gMonIcon_Sneasel,
+ gMonIcon_Teddiursa,
+ gMonIcon_Ursaring,
+ gMonIcon_Slugma,
+ gMonIcon_Magcargo,
+ gMonIcon_Swinub,
+ gMonIcon_Piloswine,
+ gMonIcon_Corsola,
+ gMonIcon_Remoraid,
+ gMonIcon_Octillery,
+ gMonIcon_Delibird,
+ gMonIcon_Mantine,
+ gMonIcon_Skarmory,
+ gMonIcon_Houndour,
+ gMonIcon_Houndoom,
+ gMonIcon_Kingdra,
+ gMonIcon_Phanpy,
+ gMonIcon_Donphan,
+ gMonIcon_Porygon2,
+ gMonIcon_Stantler,
+ gMonIcon_Smeargle,
+ gMonIcon_Tyrogue,
+ gMonIcon_Hitmontop,
+ gMonIcon_Smoochum,
+ gMonIcon_Elekid,
+ gMonIcon_Magby,
+ gMonIcon_Miltank,
+ gMonIcon_Blissey,
+ gMonIcon_Raikou,
+ gMonIcon_Entei,
+ gMonIcon_Suicune,
+ gMonIcon_Larvitar,
+ gMonIcon_Pupitar,
+ gMonIcon_Tyranitar,
+ gMonIcon_Lugia,
+ gMonIcon_HoOh,
+ gMonIcon_Celebi,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_QuestionMark,
+ gMonIcon_Treecko,
+ gMonIcon_Grovyle,
+ gMonIcon_Sceptile,
+ gMonIcon_Torchic,
+ gMonIcon_Combusken,
+ gMonIcon_Blaziken,
+ gMonIcon_Mudkip,
+ gMonIcon_Marshtomp,
+ gMonIcon_Swampert,
+ gMonIcon_Poochyena,
+ gMonIcon_Mightyena,
+ gMonIcon_Zigzagoon,
+ gMonIcon_Linoone,
+ gMonIcon_Wurmple,
+ gMonIcon_Silcoon,
+ gMonIcon_Beautifly,
+ gMonIcon_Cascoon,
+ gMonIcon_Dustox,
+ gMonIcon_Lotad,
+ gMonIcon_Lombre,
+ gMonIcon_Ludicolo,
+ gMonIcon_Seedot,
+ gMonIcon_Nuzleaf,
+ gMonIcon_Shiftry,
+ gMonIcon_Nincada,
+ gMonIcon_Ninjask,
+ gMonIcon_Shedinja,
+ gMonIcon_Taillow,
+ gMonIcon_Swellow,
+ gMonIcon_Shroomish,
+ gMonIcon_Breloom,
+ gMonIcon_Spinda,
+ gMonIcon_Wingull,
+ gMonIcon_Pelipper,
+ gMonIcon_Surskit,
+ gMonIcon_Masquerain,
+ gMonIcon_Wailmer,
+ gMonIcon_Wailord,
+ gMonIcon_Skitty,
+ gMonIcon_Delcatty,
+ gMonIcon_Kecleon,
+ gMonIcon_Baltoy,
+ gMonIcon_Claydol,
+ gMonIcon_Nosepass,
+ gMonIcon_Torkoal,
+ gMonIcon_Sableye,
+ gMonIcon_Barboach,
+ gMonIcon_Whiscash,
+ gMonIcon_Luvdisc,
+ gMonIcon_Corphish,
+ gMonIcon_Crawdaunt,
+ gMonIcon_Feebas,
+ gMonIcon_Milotic,
+ gMonIcon_Carvanha,
+ gMonIcon_Sharpedo,
+ gMonIcon_Trapinch,
+ gMonIcon_Vibrava,
+ gMonIcon_Flygon,
+ gMonIcon_Makuhita,
+ gMonIcon_Hariyama,
+ gMonIcon_Electrike,
+ gMonIcon_Manectric,
+ gMonIcon_Numel,
+ gMonIcon_Camerupt,
+ gMonIcon_Spheal,
+ gMonIcon_Sealeo,
+ gMonIcon_Walrein,
+ gMonIcon_Cacnea,
+ gMonIcon_Cacturne,
+ gMonIcon_Snorunt,
+ gMonIcon_Glalie,
+ gMonIcon_Lunatone,
+ gMonIcon_Solrock,
+ gMonIcon_Azurill,
+ gMonIcon_Spoink,
+ gMonIcon_Grumpig,
+ gMonIcon_Plusle,
+ gMonIcon_Minun,
+ gMonIcon_Mawile,
+ gMonIcon_Meditite,
+ gMonIcon_Medicham,
+ gMonIcon_Swablu,
+ gMonIcon_Altaria,
+ gMonIcon_Wynaut,
+ gMonIcon_Duskull,
+ gMonIcon_Dusclops,
+ gMonIcon_Roselia,
+ gMonIcon_Slakoth,
+ gMonIcon_Vigoroth,
+ gMonIcon_Slaking,
+ gMonIcon_Gulpin,
+ gMonIcon_Swalot,
+ gMonIcon_Tropius,
+ gMonIcon_Whismur,
+ gMonIcon_Loudred,
+ gMonIcon_Exploud,
+ gMonIcon_Clamperl,
+ gMonIcon_Huntail,
+ gMonIcon_Gorebyss,
+ gMonIcon_Absol,
+ gMonIcon_Shuppet,
+ gMonIcon_Banette,
+ gMonIcon_Seviper,
+ gMonIcon_Zangoose,
+ gMonIcon_Relicanth,
+ gMonIcon_Aron,
+ gMonIcon_Lairon,
+ gMonIcon_Aggron,
+ gMonIcon_Castform,
+ gMonIcon_Volbeat,
+ gMonIcon_Illumise,
+ gMonIcon_Lileep,
+ gMonIcon_Cradily,
+ gMonIcon_Anorith,
+ gMonIcon_Armaldo,
+ gMonIcon_Ralts,
+ gMonIcon_Kirlia,
+ gMonIcon_Gardevoir,
+ gMonIcon_Bagon,
+ gMonIcon_Shelgon,
+ gMonIcon_Salamence,
+ gMonIcon_Beldum,
+ gMonIcon_Metang,
+ gMonIcon_Metagross,
+ gMonIcon_Regirock,
+ gMonIcon_Regice,
+ gMonIcon_Registeel,
+ gMonIcon_Kyogre,
+ gMonIcon_Groudon,
+ gMonIcon_Rayquaza,
+ gMonIcon_Latias,
+ gMonIcon_Latios,
+ gMonIcon_Jirachi,
+ gMonIcon_Deoxys,
+ gMonIcon_Chimecho,
+ gMonIcon_Egg,
+ gMonIcon_UnownB,
+ gMonIcon_UnownC,
+ gMonIcon_UnownD,
+ gMonIcon_UnownE,
+ gMonIcon_UnownF,
+ gMonIcon_UnownG,
+ gMonIcon_UnownH,
+ gMonIcon_UnownI,
+ gMonIcon_UnownJ,
+ gMonIcon_UnownK,
+ gMonIcon_UnownL,
+ gMonIcon_UnownM,
+ gMonIcon_UnownN,
+ gMonIcon_UnownO,
+ gMonIcon_UnownP,
+ gMonIcon_UnownQ,
+ gMonIcon_UnownR,
+ gMonIcon_UnownS,
+ gMonIcon_UnownT,
+ gMonIcon_UnownU,
+ gMonIcon_UnownV,
+ gMonIcon_UnownW,
+ gMonIcon_UnownX,
+ gMonIcon_UnownY,
+ gMonIcon_UnownZ,
+ gMonIcon_UnownExclamationMark,
+ gMonIcon_UnownQuestionMark,
+};
+
+const u8 gMonIconPaletteIndices[] =
+{
+ 0, // ??????????
+ 1, // Bulbasaur
+ 1, // Ivysaur
+ 1, // Venusaur
+ 0, // Charmander
+ 0, // Charmeleon
+ 0, // Charizard
+ 0, // Squirtle
+ 2, // Wartortle
+ 2, // Blastoise
+ 1, // Caterpie
+ 1, // Metapod
+ 0, // Butterfree
+ 1, // Weedle
+ 2, // Kakuna
+ 2, // Beedrill
+ 0, // Pidgey
+ 0, // Pidgeotto
+ 0, // Pidgeot
+ 2, // Rattata
+ 1, // Raticate
+ 0, // Spearow
+ 0, // Fearow
+ 2, // Ekans
+ 2, // Arbok
+ 2, // Pikachu
+ 0, // Raichu
+ 2, // Sandshrew
+ 2, // Sandslash
+ 2, // Nidoran♀
+ 2, // Nidorina
+ 2, // Nidoqueen
+ 2, // Nidoran♂
+ 2, // Nidorino
+ 2, // Nidoking
+ 0, // Clefairy
+ 0, // Clefable
+ 2, // Vulpix
+ 1, // Ninetales
+ 0, // Jigglypuff
+ 0, // Wigglytuff
+ 2, // Zubat
+ 2, // Golbat
+ 1, // Oddish
+ 0, // Gloom
+ 0, // Vileplume
+ 0, // Paras
+ 0, // Parasect
+ 0, // Venonat
+ 2, // Venomoth
+ 2, // Diglett
+ 2, // Dugtrio
+ 1, // Meowth
+ 1, // Persian
+ 1, // Psyduck
+ 2, // Golduck
+ 1, // Mankey
+ 2, // Primeape
+ 0, // Growlithe
+ 0, // Arcanine
+ 0, // Poliwag
+ 0, // Poliwhirl
+ 0, // Poliwrath
+ 2, // Abra
+ 2, // Kadabra
+ 2, // Alakazam
+ 0, // Machop
+ 2, // Machoke
+ 0, // Machamp
+ 1, // Bellsprout
+ 1, // Weepinbell
+ 1, // Victreebel
+ 2, // Tentacool
+ 2, // Tentacruel
+ 1, // Geodude
+ 1, // Graveler
+ 1, // Golem
+ 0, // Ponyta
+ 0, // Rapidash
+ 0, // Slowpoke
+ 0, // Slowbro
+ 0, // Magnemite
+ 0, // Magneton
+ 1, // Farfetch'd
+ 2, // Doduo
+ 2, // Dodrio
+ 2, // Seel
+ 2, // Dewgong
+ 2, // Grimer
+ 2, // Muk
+ 2, // Shellder
+ 2, // Cloyster
+ 2, // Gastly
+ 2, // Haunter
+ 2, // Gengar
+ 2, // Onix
+ 2, // Drowzee
+ 1, // Hypno
+ 2, // Krabby
+ 2, // Kingler
+ 0, // Voltorb
+ 0, // Electrode
+ 0, // Exeggcute
+ 1, // Exeggutor
+ 1, // Cubone
+ 1, // Marowak
+ 2, // Hitmonlee
+ 2, // Hitmonchan
+ 1, // Lickitung
+ 2, // Koffing
+ 2, // Weezing
+ 1, // Rhyhorn
+ 1, // Rhydon
+ 0, // Chansey
+ 0, // Tangela
+ 1, // Kangaskhan
+ 0, // Horsea
+ 0, // Seadra
+ 0, // Goldeen
+ 0, // Seaking
+ 2, // Staryu
+ 2, // Starmie
+ 0, // Mr. mime
+ 1, // Scyther
+ 2, // Jynx
+ 1, // Electabuzz
+ 0, // Magmar
+ 2, // Pinsir
+ 2, // Tauros
+ 0, // Magikarp
+ 0, // Gyarados
+ 2, // Lapras
+ 2, // Ditto
+ 2, // Eevee
+ 0, // Vaporeon
+ 0, // Jolteon
+ 0, // Flareon
+ 0, // Porygon
+ 0, // Omanyte
+ 0, // Omastar
+ 2, // Kabuto
+ 2, // Kabutops
+ 0, // Aerodactyl
+ 1, // Snorlax
+ 0, // Articuno
+ 0, // Zapdos
+ 0, // Moltres
+ 0, // Dratini
+ 0, // Dragonair
+ 2, // Dragonite
+ 2, // Mewtwo
+ 0, // Mew
+ 1, // Chikorita
+ 1, // Bayleef
+ 1, // Meganium
+ 1, // Cyndaquil
+ 1, // Quilava
+ 1, // Typhlosion
+ 2, // Totodile
+ 2, // Croconaw
+ 2, // Feraligatr
+ 2, // Sentret
+ 2, // Furret
+ 2, // Hoothoot
+ 2, // Noctowl
+ 0, // Ledyba
+ 0, // Ledian
+ 1, // Spinarak
+ 0, // Ariados
+ 2, // Crobat
+ 2, // Chinchou
+ 0, // Lanturn
+ 0, // Pichu
+ 0, // Cleffa
+ 1, // Igglybuff
+ 2, // Togepi
+ 2, // Togetic
+ 0, // Natu
+ 0, // Xatu
+ 2, // Mareep
+ 0, // Flaaffy
+ 0, // Ampharos
+ 1, // Bellossom
+ 2, // Marill
+ 2, // Azumarill
+ 1, // Sudowoodo
+ 1, // Politoed
+ 1, // Hoppip
+ 1, // Skiploom
+ 2, // Jumpluff
+ 2, // Aipom
+ 1, // Sunkern
+ 1, // Sunflora
+ 1, // Yanma
+ 0, // Wooper
+ 0, // Quagsire
+ 2, // Espeon
+ 2, // Umbreon
+ 2, // Murkrow
+ 0, // Slowking
+ 0, // Misdreavus
+ 0, // Unown A
+ 0, // Wobbuffet
+ 1, // Girafarig
+ 0, // Pineco
+ 2, // Forretress
+ 2, // Dunsparce
+ 2, // Gligar
+ 0, // Steelix
+ 0, // Snubbull
+ 2, // Granbull
+ 0, // Qwilfish
+ 0, // Scizor
+ 1, // Shuckle
+ 2, // Heracross
+ 0, // Sneasel
+ 0, // Teddiursa
+ 2, // Ursaring
+ 0, // Slugma
+ 0, // Magcargo
+ 2, // Swinub
+ 2, // Piloswine
+ 0, // Corsola
+ 0, // Remoraid
+ 0, // Octillery
+ 0, // Delibird
+ 2, // Mantine
+ 0, // Skarmory
+ 0, // Houndour
+ 0, // Houndoom
+ 0, // Kingdra
+ 0, // Phanpy
+ 0, // Donphan
+ 0, // Porygon2
+ 2, // Stantler
+ 1, // Smeargle
+ 2, // Tyrogue
+ 2, // Hitmontop
+ 1, // Smoochum
+ 1, // Elekid
+ 1, // Magby
+ 1, // Miltank
+ 1, // Blissey
+ 0, // Raikou
+ 2, // Entei
+ 0, // Suicune
+ 1, // Larvitar
+ 0, // Pupitar
+ 1, // Tyranitar
+ 0, // Lugia
+ 1, // Ho-Oh
+ 1, // Celebi
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 0, // ?
+ 1, // Treecko
+ 0, // Grovyle
+ 1, // Sceptile
+ 0, // Torchic
+ 0, // Combusken
+ 0, // Blaziken
+ 0, // Mudkip
+ 0, // Marshtomp
+ 0, // Swampert
+ 2, // Poochyena
+ 2, // Mightyena
+ 2, // Zigzagoon
+ 2, // Linoone
+ 0, // Wurmple
+ 2, // Silcoon
+ 0, // Beautifly
+ 2, // Cascoon
+ 1, // Dustox
+ 1, // Lotad
+ 1, // Lombre
+ 1, // Ludicolo
+ 1, // Seedot
+ 1, // Nuzleaf
+ 0, // Shiftry
+ 1, // Nincada
+ 1, // Ninjask
+ 1, // Shedinja
+ 2, // Taillow
+ 2, // Swellow
+ 1, // Shroomish
+ 1, // Breloom
+ 1, // Spinda
+ 0, // Wingull
+ 0, // Pelipper
+ 2, // Surskit
+ 0, // Masquerain
+ 2, // Wailmer
+ 0, // Wailord
+ 0, // Skitty
+ 2, // Delcatty
+ 1, // Kecleon
+ 1, // Baltoy
+ 0, // Claydol
+ 0, // Nosepass
+ 1, // Torkoal
+ 2, // Sableye
+ 0, // Barboach
+ 0, // Whiscash
+ 0, // Luvdisc
+ 0, // Corphish
+ 0, // Crawdaunt
+ 2, // Feebas
+ 0, // Milotic
+ 0, // Carvanha
+ 0, // Sharpedo
+ 1, // Trapinch
+ 1, // Vibrava
+ 1, // Flygon
+ 2, // Makuhita
+ 1, // Hariyama
+ 1, // Electrike
+ 0, // Manectric
+ 1, // Numel
+ 0, // Camerupt
+ 2, // Spheal
+ 2, // Sealeo
+ 0, // Walrein
+ 1, // Cacnea
+ 1, // Cacturne
+ 2, // Snorunt
+ 0, // Glalie
+ 1, // Lunatone
+ 0, // Solrock
+ 2, // Azurill
+ 0, // Spoink
+ 2, // Grumpig
+ 0, // Plusle
+ 0, // Minun
+ 2, // Mawile
+ 0, // Meditite
+ 0, // Medicham
+ 0, // Swablu
+ 0, // Altaria
+ 0, // Wynaut
+ 0, // Duskull
+ 0, // Dusclops
+ 0, // Roselia
+ 2, // Slakoth
+ 2, // Vigoroth
+ 1, // Slaking
+ 1, // Gulpin
+ 2, // Swalot
+ 1, // Tropius
+ 0, // Whismur
+ 2, // Loudred
+ 2, // Exploud
+ 0, // Clamperl
+ 0, // Huntail
+ 0, // Gorebyss
+ 0, // Absol
+ 0, // Shuppet
+ 0, // Banette
+ 2, // Seviper
+ 0, // Zangoose
+ 1, // Relicanth
+ 2, // Aron
+ 2, // Lairon
+ 2, // Aggron
+ 0, // Castform
+ 0, // Volbeat
+ 2, // Illumise
+ 2, // Lileep
+ 0, // Cradily
+ 0, // Anorith
+ 0, // Armaldo
+ 1, // Ralts
+ 1, // Kirlia
+ 1, // Gardevoir
+ 2, // Bagon
+ 2, // Shelgon
+ 0, // Salamence
+ 0, // Beldum
+ 0, // Metang
+ 0, // Metagross
+ 2, // Regirock
+ 2, // Regice
+ 2, // Registeel
+ 2, // Kyogre
+ 0, // Groudon
+ 1, // Rayquaza
+ 0, // Latias
+ 2, // Latios
+ 0, // Jirachi
+ 0, // Deoxys
+ 0, // Chimecho
+ 1, // Egg
+ 0, // Unown B
+ 0, // Unown C
+ 0, // Unown D
+ 0, // Unown E
+ 0, // Unown F
+ 0, // Unown G
+ 0, // Unown H
+ 0, // Unown I
+ 0, // Unown J
+ 0, // Unown K
+ 0, // Unown L
+ 0, // Unown M
+ 0, // Unown N
+ 0, // Unown O
+ 0, // Unown P
+ 0, // Unown Q
+ 0, // Unown R
+ 0, // Unown S
+ 0, // Unown T
+ 0, // Unown U
+ 0, // Unown V
+ 0, // Unown W
+ 0, // Unown X
+ 0, // Unown Y
+ 0, // Unown Z
+ 0, // Unown Exclamation Mark
+ 0, // Unown Question Mark
+};
+
+const struct SpritePalette gMonIconPaletteTable[] =
+{
+ { gMonIconPalettes[0], POKE_ICON_BASE_PAL_TAG + 0 },
+ { gMonIconPalettes[1], POKE_ICON_BASE_PAL_TAG + 1 },
+ { gMonIconPalettes[2], POKE_ICON_BASE_PAL_TAG + 2 },
+
+// There are only 3 actual palettes. The following are unused
+// and don't point to valid data.
+ { gMonIconPalettes[3], POKE_ICON_BASE_PAL_TAG + 3 },
+ { gMonIconPalettes[4], POKE_ICON_BASE_PAL_TAG + 4 },
+ { gMonIconPalettes[5], POKE_ICON_BASE_PAL_TAG + 5 },
+};
+
+static const struct OamData sMonIconOamData =
+{
+ .size = 2,
+ .priority = 1,
+};
+
+// fastest to slowest
+
+static const union AnimCmd sAnim_0[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(1, 6),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_1[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_2[] =
+{
+ ANIMCMD_FRAME(0, 14),
+ ANIMCMD_FRAME(1, 14),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_3[] =
+{
+ ANIMCMD_FRAME(0, 22),
+ ANIMCMD_FRAME(1, 22),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_4[] =
+{
+ ANIMCMD_FRAME(0, 29),
+ ANIMCMD_FRAME(0, 29), // frame 0 is repeated
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const sMonIconAnims[] =
+{
+ sAnim_0,
+ sAnim_1,
+ sAnim_2,
+ sAnim_3,
+ sAnim_4,
+};
+
+static const union AffineAnimCmd sAffineAnim_0[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 0, 10),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sAffineAnim_1[] =
+{
+ AFFINEANIMCMD_FRAME(-2, -2, 0, 122),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const sMonIconAffineAnims[] =
+{
+ sAffineAnim_0,
+ sAffineAnim_1,
+};
+
+const u16 sSpriteImageSizes[3][4] =
+{
+ // square
+ {
+ 0x20, // 1×1
+ 0x80, // 2×2
+ 0x200, // 4×4
+ 0x800, // 8×8
+ },
+
+ // horizontal rectangle
+ {
+ 0x40, // 2×1
+ 0x80, // 4×1
+ 0x100, // 4×2
+ 0x400, // 8×4
+ },
+
+ // vertical rectangle
+ {
+ 0x40, // 1×2
+ 0x80, // 1×4
+ 0x100, // 2×4
+ 0x400, // 4×8
+ },
+};
+
+u16 GetUnownLetterByPersonality(u32);
+const u8 *GetMonIconPtr(u16, u32 personality);
+u8 UpdateMonIconFrame(struct Sprite *);
+u8 CreateMonIconSprite(struct MonIconSpriteTemplate *, s16, s16, u8);
+void sub_809D7E8(struct Sprite *);
+
+// duplicate of sub_809D3A4
+u8 unref_sub_809D26C(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority)
+{
+ u8 spriteId;
+ struct MonIconSpriteTemplate iconTemplate;
+ struct MonIconSpriteTemplate *iconTemplatePtr = &iconTemplate; // needed to match
+
+ iconTemplatePtr->oam = &sMonIconOamData;
+ iconTemplatePtr->image = gMonIconTable[species];
+ iconTemplatePtr->anims = sMonIconAnims;
+ iconTemplatePtr->affineAnims = sMonIconAffineAnims;
+ iconTemplatePtr->callback = callback;
+ iconTemplatePtr->paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species];
+
+ spriteId = CreateMonIconSprite(iconTemplatePtr, x, y, subpriority);
+
+ UpdateMonIconFrame(&gSprites[spriteId]);
+
+ return spriteId;
+}
+
+u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality)
+{
+ u8 spriteId;
+ struct MonIconSpriteTemplate iconTemplate =
+ {
+ .oam = &sMonIconOamData,
+ .image = GetMonIconPtr(species, personality),
+ .anims = sMonIconAnims,
+ .affineAnims = sMonIconAffineAnims,
+ .callback = callback,
+ .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species],
+ };
+
+ if (species > SPECIES_EGG)
+ iconTemplate.paletteTag = POKE_ICON_BASE_PAL_TAG;
+
+ spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority);
+
+ UpdateMonIconFrame(&gSprites[spriteId]);
+
+ return spriteId;
+}
+
+u8 sub_809D3A4(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority)
+{
+ u8 spriteId;
+ struct MonIconSpriteTemplate iconTemplate;
+ struct MonIconSpriteTemplate *iconTemplatePtr = &iconTemplate; // needed to match
+
+ iconTemplatePtr->oam = &sMonIconOamData;
+ iconTemplatePtr->image = gMonIconTable[species];
+ iconTemplatePtr->anims = sMonIconAnims;
+ iconTemplatePtr->affineAnims = sMonIconAffineAnims;
+ iconTemplatePtr->callback = callback;
+ iconTemplatePtr->paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species];
+
+ spriteId = CreateMonIconSprite(iconTemplatePtr, x, y, subpriority);
+
+ UpdateMonIconFrame(&gSprites[spriteId]);
+
+ return spriteId;
+}
+
+u16 mon_icon_convert_unown_species_id(u16 species, u32 personality)
+{
+ u16 result;
+
+ if (species == SPECIES_UNOWN)
+ {
+ u16 letter = GetUnownLetterByPersonality(personality);
+ if (letter == 0)
+ letter = SPECIES_UNOWN;
+ else
+ letter += (SPECIES_UNOWN_B - 1);
+ result = letter;
+ }
+ else
+ {
+ if (species > SPECIES_EGG)
+ result = 260;
+ else
+ result = species;
+ }
+
+ return result;
+}
+
+u16 GetUnownLetterByPersonality(u32 personality)
+{
+ return (((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 0x1C;
+}
+
+u16 sub_809D4A8(u16 species)
+{
+ u16 value;
+
+ if (MailSpeciesToSpecies(species, &value) == SPECIES_UNOWN)
+ {
+ if (value == 0)
+ value += SPECIES_UNOWN;
+ else
+ value += (SPECIES_UNOWN_B - 1);
+ return value;
+ }
+ else
+ {
+ return mon_icon_convert_unown_species_id(species, 0);
+ }
+}
+
+const u8 *GetMonIconPtr(u16 species, u32 personality)
+{
+ u16 convertedSpecies = mon_icon_convert_unown_species_id(species, personality);
+ return gMonIconTable[convertedSpecies];
+}
+
+void sub_809D510(struct Sprite *sprite)
+{
+ sub_809D7E8(sprite);
+}
+
+void sub_809D51C(void)
+{
+ u8 i;
+ for (i = 0; i < 6; i++)
+ LoadSpritePalette(&gMonIconPaletteTable[i]);
+}
+
+// unused
+void SafeLoadMonIconPalette(u16 species)
+{
+ u8 palIndex;
+ if (species > SPECIES_EGG)
+ species = 260;
+ palIndex = gMonIconPaletteIndices[species];
+ if (IndexOfSpritePaletteTag(gMonIconPaletteTable[palIndex].tag) == 0xFF)
+ LoadSpritePalette(&gMonIconPaletteTable[palIndex]);
+}
+
+void sub_809D580(u16 species)
+{
+ u8 palIndex = gMonIconPaletteIndices[species];
+ if (IndexOfSpritePaletteTag(gMonIconPaletteTable[palIndex].tag) == 0xFF)
+ LoadSpritePalette(&gMonIconPaletteTable[palIndex]);
+}
+
+// unused
+void FreeMonIconPalettes(void)
+{
+ u8 i;
+ for (i = 0; i < 6; i++)
+ FreeSpritePaletteByTag(gMonIconPaletteTable[i].tag);
+}
+
+// unused
+void SafeFreeMonIconPalette(u16 species)
+{
+ u8 palIndex;
+ if (species > SPECIES_EGG)
+ species = 260;
+ palIndex = gMonIconPaletteIndices[species];
+ FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag);
+}
+
+void sub_809D608(u16 species)
+{
+ u8 palIndex;
+ palIndex = gMonIconPaletteIndices[species];
+ FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag);
+}
+
+void sub_809D62C(struct Sprite *sprite)
+{
+ UpdateMonIconFrame(sprite);
+}
+
+// TODO: try to find a way to avoid using goto and asm statement
+u8 UpdateMonIconFrame(struct Sprite *sprite)
+{
+ u8 result = 0;
+
+ if (sprite->animDelayCounter == 0)
+ {
+ s16 frame = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue;
+
+ if (frame != -2)
+ {
+ if (frame != -1)
+ goto copy;
+ goto end;
+ }
+
+ sprite->animCmdIndex = 0;
+ goto end;
+
+ copy:
+ RequestSpriteCopy(
+ (u8 *)sprite->images + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame,
+ (u8 *)OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP,
+ sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]);
+ {
+ register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration;
+ sprite->animDelayCounter = duration;
+ }
+ sprite->animCmdIndex++;
+ result = sprite->animCmdIndex;
+ }
+ else
+ {
+ sprite->animDelayCounter--;
+ }
+
+end:
+ return result;
+}
+
+u8 CreateMonIconSprite(struct MonIconSpriteTemplate *iconTemplate, s16 x, s16 y, u8 subpriority)
+{
+ u8 spriteId;
+
+ struct SpriteFrameImage image = { NULL, sSpriteImageSizes[iconTemplate->oam->shape][iconTemplate->oam->size] };
+
+ struct SpriteTemplate spriteTemplate =
+ {
+ .tileTag = 0xFFFF,
+ .paletteTag = iconTemplate->paletteTag,
+ .oam = iconTemplate->oam,
+ .anims = iconTemplate->anims,
+ .images = &image,
+ .affineAnims = iconTemplate->affineAnims,
+ .callback = iconTemplate->callback,
+ };
+
+ spriteId = CreateSprite(&spriteTemplate, x, y, subpriority);
+ gSprites[spriteId].animPaused = TRUE;
+ gSprites[spriteId].animBeginning = FALSE;
+ gSprites[spriteId].images = (const struct SpriteFrameImage *)iconTemplate->image;
+ return spriteId;
+}
+
+void sub_809D7E8(struct Sprite *sprite)
+{
+ struct SpriteFrameImage image = { NULL, sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] };
+ sprite->images = &image;
+ DestroySprite(sprite);
+}
+
+void sub_809D824(struct Sprite *sprite, u8 animNum)
+{
+ sprite->animNum = animNum;
+ sprite->animDelayCounter = 0;
+ sprite->animCmdIndex = 0;
+}