summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorultima-soul <akshayjhanji@hotmail.com>2019-10-15 17:57:54 -0700
committerultima-soul <akshayjhanji@hotmail.com>2019-10-15 17:57:54 -0700
commit364d88ec2c762426d92fd987b9dfff629b21b8e9 (patch)
tree5ac57db2698c7eaccf5df45c6271a7799601a0cf
parent94f722e719c585db0adbcc5954a3760973ff7ad7 (diff)
parentefa8b91699400977f4ab1f2412a4747be3965420 (diff)
Merge branch 'master' into data_dump
-rw-r--r--asm/naming_screen.s4
-rw-r--r--asm/party_menu.s18
-rw-r--r--asm/pokemon_icon.s848
-rw-r--r--asm/pokemon_storage_system.s14
-rw-r--r--asm/pokemon_summary_screen.s6
-rw-r--r--asm/trade.s32
-rw-r--r--asm/trainer_card.s20
-rw-r--r--baserom.ipsbin1678113 -> 1675622 bytes
-rw-r--r--data/data_835B488.s28
-rw-r--r--data/graphics.s7
-rw-r--r--include/graphics.h419
-rw-r--r--include/pokemon_icon.h13
-rw-r--r--ld_script.txt4
-rw-r--r--src/mail.c14
-rw-r--r--src/mevent_8145654.c10
-rw-r--r--src/pokemon_icon.c1284
-rw-r--r--tools/br_ips/br_ips.c3
17 files changed, 1780 insertions, 944 deletions
diff --git a/asm/naming_screen.s b/asm/naming_screen.s
index 09f4ca070..817d215a0 100644
--- a/asm/naming_screen.s
+++ b/asm/naming_screen.s
@@ -2849,7 +2849,7 @@ _0809EFEC: .4byte gUnknown_83E252C
sub_809EFF0: @ 809EFF0
push {lr}
sub sp, 0xC
- bl sub_809707C
+ bl LoadMonIconPalettes
ldr r0, _0809F038 @ =gUnknown_203998C
ldr r3, [r0]
ldr r1, _0809F03C @ =0x00001e34
@@ -2866,7 +2866,7 @@ sub_809EFF0: @ 809EFF0
str r2, [sp, 0x8]
movs r2, 0x38
movs r3, 0x28
- bl sub_8096E18
+ bl CreateMonIcon
lsls r0, 24
lsrs r0, 24
ldr r2, _0809F048 @ =gSprites
diff --git a/asm/party_menu.s b/asm/party_menu.s
index 5ebea0f54..ab17008ec 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -373,7 +373,7 @@ _0811ED44:
bl sub_8122980
b _0811EDFC
_0811ED4A:
- bl sub_809707C
+ bl LoadMonIconPalettes
b _0811EDFC
_0811ED50:
bl party_menu_add_per_mon_objects
@@ -7206,7 +7206,7 @@ party_menu_link_mon_icon_anim: @ 812224C
lsrs r7, r3, 24
cmp r5, 0
beq _0812229A
- ldr r1, _081222A4 @ =sub_809718C
+ ldr r1, _081222A4 @ =SpriteCB_MonIcon
ldr r0, [r4, 0x4]
ldrb r2, [r0]
ldrb r3, [r0, 0x1]
@@ -7216,7 +7216,7 @@ party_menu_link_mon_icon_anim: @ 812224C
ldr r0, [sp, 0x20]
str r0, [sp, 0x8]
adds r0, r5, 0
- bl sub_8096E18
+ bl CreateMonIcon
strb r0, [r4, 0x9]
ldr r2, _081222A8 @ =gSprites
ldrb r0, [r4, 0x9]
@@ -7240,7 +7240,7 @@ _0812229A:
pop {r0}
bx r0
.align 2, 0
-_081222A4: .4byte sub_809718C
+_081222A4: .4byte SpriteCB_MonIcon
_081222A8: .4byte gSprites
thumb_func_end party_menu_link_mon_icon_anim
@@ -7276,7 +7276,7 @@ _081222D4:
ldr r1, _081222F0 @ =gSprites
adds r0, r1
movs r1, 0
- bl sub_8097414
+ bl MonIcon_SetAnim
b _0812234C
.align 2, 0
_081222F0: .4byte gSprites
@@ -7287,7 +7287,7 @@ _081222F4:
ldr r1, _08122308 @ =gSprites
adds r0, r1
movs r1, 0x1
- bl sub_8097414
+ bl MonIcon_SetAnim
b _0812234C
.align 2, 0
_08122308: .4byte gSprites
@@ -7298,7 +7298,7 @@ _0812230C:
ldr r1, _08122320 @ =gSprites
adds r0, r1
movs r1, 0x2
- bl sub_8097414
+ bl MonIcon_SetAnim
b _0812234C
.align 2, 0
_08122320: .4byte gSprites
@@ -7309,7 +7309,7 @@ _08122324:
ldr r1, _08122338 @ =gSprites
adds r0, r1
movs r1, 0x3
- bl sub_8097414
+ bl MonIcon_SetAnim
b _0812234C
.align 2, 0
_08122338: .4byte gSprites
@@ -7320,7 +7320,7 @@ _0812233C:
ldr r1, _08122354 @ =gSprites
adds r0, r1
movs r1, 0x4
- bl sub_8097414
+ bl MonIcon_SetAnim
_0812234C:
pop {r4}
pop {r0}
diff --git a/asm/pokemon_icon.s b/asm/pokemon_icon.s
deleted file mode 100644
index 4eb654a50..000000000
--- a/asm/pokemon_icon.s
+++ /dev/null
@@ -1,848 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8096E18
-sub_8096E18: @ 8096E18
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x30
- adds r4, r0, 0
- adds r6, r1, 0
- ldr r0, [sp, 0x4C]
- ldr r1, [sp, 0x50]
- ldr r5, [sp, 0x54]
- lsls r4, 16
- lsrs r4, 16
- lsls r2, 16
- lsrs r2, 16
- mov r8, r2
- lsls r3, 16
- lsrs r7, r3, 16
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r0, _08096EB4 @ =gUnknown_83D4068
- str r0, [sp, 0x18]
- adds r0, r4, 0
- adds r2, r5, 0
- bl GetMonIconPtr
- str r0, [sp, 0x1C]
- ldr r0, _08096EB8 @ =gUnknown_83D40AC
- str r0, [sp, 0x20]
- ldr r0, _08096EBC @ =gUnknown_83D40E0
- str r0, [sp, 0x24]
- str r6, [sp, 0x28]
- ldr r0, _08096EC0 @ =gUnknown_83D3E80
- adds r0, r4, r0
- ldr r1, _08096EC4 @ =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 _08096E7E
- mov r0, sp
- strh r5, [r0, 0x14]
-_08096E7E:
- mov r0, r8
- lsls r1, r0, 16
- asrs r1, 16
- lsls r2, r7, 16
- asrs r2, 16
- mov r0, sp
- mov r3, r9
- bl CreateMonIconSprite
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _08096EC8 @ =gSprites
- adds r0, r1
- bl UpdateMonIconFrame
- adds r0, r4, 0
- add sp, 0x30
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08096EB4: .4byte gUnknown_83D4068
-_08096EB8: .4byte gUnknown_83D40AC
-_08096EBC: .4byte gUnknown_83D40E0
-_08096EC0: .4byte gUnknown_83D3E80
-_08096EC4: .4byte 0x0000dac0
-_08096EC8: .4byte gSprites
- thumb_func_end sub_8096E18
-
- thumb_func_start sub_8096ECC
-sub_8096ECC: @ 8096ECC
- push {r4-r7,lr}
- sub sp, 0x18
- adds r4, r2, 0
- adds r5, r3, 0
- ldr r6, [sp, 0x2C]
- lsls r0, 16
- lsrs r0, 16
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 24
- lsrs r6, 24
- mov r3, sp
- ldr r2, _08096F44 @ =gUnknown_83D4068
- str r2, [sp]
- movs r2, 0
- str r2, [sp, 0x4]
- ldr r2, _08096F48 @ =gUnknown_83D40AC
- str r2, [sp, 0x8]
- ldr r2, _08096F4C @ =gUnknown_83D40E0
- str r2, [sp, 0xC]
- str r1, [sp, 0x10]
- ldr r2, _08096F50 @ =gUnknown_83D3E80
- adds r2, r0, r2
- ldr r7, _08096F54 @ =0x0000dac0
- adds r1, r7, 0
- ldrb r2, [r2]
- adds r1, r2
- strh r1, [r3, 0x14]
- ldr r1, [sp, 0x30]
- bl sub_8097028
- str r0, [sp, 0x4]
- lsls r4, 16
- asrs r4, 16
- lsls r5, 16
- asrs r5, 16
- mov r0, sp
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, 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, _08096F58 @ =gSprites
- adds r0, r1
- bl UpdateMonIconFrame
- adds r0, r4, 0
- add sp, 0x18
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08096F44: .4byte gUnknown_83D4068
-_08096F48: .4byte gUnknown_83D40AC
-_08096F4C: .4byte gUnknown_83D40E0
-_08096F50: .4byte gUnknown_83D3E80
-_08096F54: .4byte 0x0000dac0
-_08096F58: .4byte gSprites
- thumb_func_end sub_8096ECC
-
- thumb_func_start mon_icon_convert_unown_species_id
-mon_icon_convert_unown_species_id: @ 8096F5C
- push {lr}
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0xC9
- bne _08096F86
- adds r0, r1, 0
- bl GetUnownLetterByPersonality
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _08096F78
- movs r0, 0xC9
- b _08096F82
-_08096F78:
- movs r1, 0xCE
- lsls r1, 1
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
-_08096F82:
- adds r1, r0, 0
- b _08096F92
-_08096F86:
- movs r0, 0xCE
- lsls r0, 1
- adds r1, r2, 0
- cmp r1, r0
- bls _08096F92
- movs r1, 0
-_08096F92:
- adds r0, r1, 0
- pop {r1}
- bx r1
- thumb_func_end mon_icon_convert_unown_species_id
-
- thumb_func_start GetUnownLetterByPersonality
-GetUnownLetterByPersonality: @ 8096F98
- push {lr}
- adds r2, r0, 0
- cmp r2, 0
- beq _08096FCE
- 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
- b _08096FD0
-_08096FCE:
- movs r0, 0
-_08096FD0:
- pop {r1}
- bx r1
- thumb_func_end GetUnownLetterByPersonality
-
- thumb_func_start sub_8096FD4
-sub_8096FD4: @ 8096FD4
- 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, 0xC9
- bne _0809700A
- mov r0, sp
- ldrh r0, [r0]
- cmp r0, 0
- bne _08096FFA
- mov r1, sp
- adds r0, 0xC9
- b _08097002
-_08096FFA:
- mov r1, sp
- movs r2, 0xCE
- lsls r2, 1
- adds r0, r2
-_08097002:
- strh r0, [r1]
- mov r0, sp
- ldrh r0, [r0]
- b _08097020
-_0809700A:
- movs r0, 0xCE
- lsls r0, 1
- cmp r4, r0
- bls _08097014
- movs r4, 0
-_08097014:
- adds r0, r4, 0
- movs r1, 0
- bl mon_icon_convert_unown_species_id
- lsls r0, 16
- lsrs r0, 16
-_08097020:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8096FD4
-
- thumb_func_start sub_8097028
-sub_8097028: @ 8097028
- push {lr}
- adds r3, r1, 0
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _08097050 @ =gUnknown_83D37A0
- lsls r1, r0, 2
- adds r1, r2
- ldr r2, [r1]
- movs r1, 0xCD
- lsls r1, 1
- cmp r0, r1
- bne _0809704A
- cmp r3, 0x1
- bne _0809704A
- movs r0, 0x80
- lsls r0, 3
- adds r2, r0
-_0809704A:
- adds r0, r2, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08097050: .4byte gUnknown_83D37A0
- thumb_func_end sub_8097028
-
- thumb_func_start GetMonIconPtr
-GetMonIconPtr: @ 8097054
- push {r4,lr}
- adds r4, r2, 0
- lsls r0, 16
- lsrs r0, 16
- bl mon_icon_convert_unown_species_id
- lsls r0, 16
- lsrs r0, 16
- adds r1, r4, 0
- bl sub_8097028
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetMonIconPtr
-
- thumb_func_start sub_8097070
-sub_8097070: @ 8097070
- push {lr}
- bl sub_80973D8
- pop {r0}
- bx r0
- thumb_func_end sub_8097070
-
- thumb_func_start sub_809707C
-sub_809707C: @ 809707C
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, _0809709C @ =gUnknown_83D4038
-_08097082:
- lsls r0, r4, 3
- adds r0, r5
- bl LoadSpritePalette
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _08097082
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0809709C: .4byte gUnknown_83D4038
- thumb_func_end sub_809707C
-
- thumb_func_start SafeLoadMonIconPalette
-SafeLoadMonIconPalette: @ 80970A0
- push {r4,lr}
- lsls r0, 16
- lsrs r1, r0, 16
- movs r0, 0xCE
- lsls r0, 1
- cmp r1, r0
- bls _080970B0
- movs r1, 0
-_080970B0:
- ldr r0, _080970D8 @ =gUnknown_83D3E80
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r1, _080970DC @ =gUnknown_83D4038
- lsls r0, 3
- adds r4, r0, r1
- ldrh r0, [r4, 0x4]
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _080970D0
- adds r0, r4, 0
- bl LoadSpritePalette
-_080970D0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080970D8: .4byte gUnknown_83D3E80
-_080970DC: .4byte gUnknown_83D4038
- thumb_func_end SafeLoadMonIconPalette
-
- thumb_func_start sub_80970E0
-sub_80970E0: @ 80970E0
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _0809710C @ =gUnknown_83D3E80
- adds r0, r1
- ldrb r0, [r0]
- ldr r1, _08097110 @ =gUnknown_83D4038
- lsls r0, 3
- adds r4, r0, r1
- ldrh r0, [r4, 0x4]
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _08097106
- adds r0, r4, 0
- bl LoadSpritePalette
-_08097106:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809710C: .4byte gUnknown_83D3E80
-_08097110: .4byte gUnknown_83D4038
- thumb_func_end sub_80970E0
-
- thumb_func_start FreeMonIconPalettes
-FreeMonIconPalettes: @ 8097114
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, _08097134 @ =gUnknown_83D4038
-_0809711A:
- 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 _0809711A
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08097134: .4byte gUnknown_83D4038
- thumb_func_end FreeMonIconPalettes
-
- thumb_func_start sub_8097138
-sub_8097138: @ 8097138
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- movs r0, 0xCE
- lsls r0, 1
- cmp r1, r0
- bls _08097148
- movs r1, 0
-_08097148:
- ldr r0, _08097160 @ =gUnknown_83D3E80
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r1, _08097164 @ =gUnknown_83D4038
- lsls r0, 3
- adds r0, r1
- ldrh r0, [r0, 0x4]
- bl FreeSpritePaletteByTag
- pop {r0}
- bx r0
- .align 2, 0
-_08097160: .4byte gUnknown_83D3E80
-_08097164: .4byte gUnknown_83D4038
- thumb_func_end sub_8097138
-
- thumb_func_start sub_8097168
-sub_8097168: @ 8097168
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _08097184 @ =gUnknown_83D3E80
- adds r0, r1
- ldrb r0, [r0]
- ldr r1, _08097188 @ =gUnknown_83D4038
- lsls r0, 3
- adds r0, r1
- ldrh r0, [r0, 0x4]
- bl FreeSpritePaletteByTag
- pop {r0}
- bx r0
- .align 2, 0
-_08097184: .4byte gUnknown_83D3E80
-_08097188: .4byte gUnknown_83D4038
- thumb_func_end sub_8097168
-
- thumb_func_start sub_809718C
-sub_809718C: @ 809718C
- push {lr}
- bl UpdateMonIconFrame
- pop {r0}
- bx r0
- thumb_func_end sub_809718C
-
- thumb_func_start sub_8097198
-sub_8097198: @ 8097198
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0xA0
- bhi _080971C0
- ldr r6, _080971C8 @ =gUnknown_83D4038
- movs r5, 0x5
-_080971A6:
- ldr r0, [r6]
- adds r1, r4, 0
- movs r2, 0x20
- bl LoadPalette
- adds r0, r4, 0
- adds r0, 0x10
- lsls r0, 16
- lsrs r4, r0, 16
- adds r6, 0x8
- subs r5, 0x1
- cmp r5, 0
- bge _080971A6
-_080971C0:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080971C8: .4byte gUnknown_83D4038
- thumb_func_end sub_8097198
-
- thumb_func_start GetValidMonIconPalettePtr
-GetValidMonIconPalettePtr: @ 80971CC
- push {lr}
- lsls r0, 16
- lsrs r2, r0, 16
- movs r0, 0xCE
- lsls r0, 1
- cmp r2, r0
- bls _080971DC
- movs r2, 0
-_080971DC:
- ldr r1, _080971F0 @ =gUnknown_83D4038
- ldr r0, _080971F4 @ =gUnknown_83D3E80
- adds r0, r2, r0
- ldrb r0, [r0]
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0]
- pop {r1}
- bx r1
- .align 2, 0
-_080971F0: .4byte gUnknown_83D4038
-_080971F4: .4byte gUnknown_83D3E80
- thumb_func_end GetValidMonIconPalettePtr
-
- thumb_func_start sub_80971F8
-sub_80971F8: @ 80971F8
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- movs r0, 0xCE
- lsls r0, 1
- cmp r1, r0
- bls _08097208
- movs r1, 0
-_08097208:
- ldr r0, _08097214 @ =gUnknown_83D3E80
- adds r0, r1, r0
- ldrb r0, [r0]
- pop {r1}
- bx r1
- .align 2, 0
-_08097214: .4byte gUnknown_83D3E80
- thumb_func_end sub_80971F8
-
- thumb_func_start sub_8097218
-sub_8097218: @ 8097218
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _08097224 @ =gUnknown_83D3E80
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_08097224: .4byte gUnknown_83D3E80
- thumb_func_end sub_8097218
-
- thumb_func_start UpdateMonIconFrame
-UpdateMonIconFrame: @ 8097228
- 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 _080972DC
- 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 _08097272
- adds r0, 0x1
- cmp r3, r0
- bne _08097276
- b _080972F0
-_08097272:
- strb r7, [r5]
- b _080972F0
-_08097276:
- ldr r2, _080972D4 @ =gUnknown_83D40E8
- 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, _080972D8 @ =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 _080972F0
- .align 2, 0
-_080972D4: .4byte gUnknown_83D40E8
-_080972D8: .4byte 0x06010000
-_080972DC:
- 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]
-_080972F0:
- 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: @ 8097300
- 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, _080973C8 @ =gUnknown_83D40E8
- 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, _080973CC @ =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, _080973D0 @ =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, _080973D4 @ =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
-_080973C8: .4byte gUnknown_83D40E8
-_080973CC: .4byte 0xffff0000
-_080973D0: .4byte 0x0000ffff
-_080973D4: .4byte gSprites
- thumb_func_end CreateMonIconSprite
-
- thumb_func_start sub_80973D8
-sub_80973D8: @ 80973D8
- push {lr}
- sub sp, 0x8
- movs r1, 0
- str r1, [sp]
- ldr r3, _0809740C @ =gUnknown_83D40E8
- 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, _08097410 @ =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
-_0809740C: .4byte gUnknown_83D40E8
-_08097410: .4byte 0xffff0000
- thumb_func_end sub_80973D8
-
- thumb_func_start sub_8097414
-sub_8097414: @ 8097414
- 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_8097414
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s
index f1188910d..71e0e2e0e 100644
--- a/asm/pokemon_storage_system.s
+++ b/asm/pokemon_storage_system.s
@@ -8688,7 +8688,7 @@ _0808FFA8: .4byte 0x00004037
thumb_func_start sub_808FFAC
sub_808FFAC: @ 808FFAC
push {r4-r6,lr}
- bl sub_809707C
+ bl LoadMonIconPalettes
movs r2, 0
ldr r3, _0809003C @ =gUnknown_20397B0
ldr r5, _08090040 @ =0x00000b04
@@ -11179,7 +11179,7 @@ _08091248:
lsrs r4, 16
adds r0, r3, 0
movs r1, 0x1
- bl sub_8097028
+ bl GetMonIconTiles
lsls r1, r4, 5
ldr r2, _08091288 @ =0x06010000
adds r1, r2
@@ -11271,11 +11271,11 @@ sub_80912E0: @ 80912E0
ldm r0!, {r3,r5,r7}
stm r2!, {r3,r5,r7}
adds r0, r6, 0
- bl mon_icon_convert_unown_species_id
+ bl GetIconSpecies
mov r10, r0
mov r6, r10
mov r2, sp
- ldr r1, _08091394 @ =gUnknown_83D3E80
+ ldr r1, _08091394 @ =gMonIconPaletteIndices
adds r1, r6, r1
ldr r3, _08091398 @ =0x0000dac0
adds r0, r3, 0
@@ -11329,7 +11329,7 @@ sub_80912E0: @ 80912E0
b _080913B4
.align 2, 0
_08091390: .4byte gUnknown_83CEBF0
-_08091394: .4byte gUnknown_83D3E80
+_08091394: .4byte gMonIconPaletteIndices
_08091398: .4byte 0x0000dac0
_0809139C: .4byte 0x0000ffff
_080913A0: .4byte gSprites
@@ -19235,7 +19235,7 @@ _0809515A:
movs r0, 0
bl HideBg
movs r0, 0x80
- bl sub_8097198
+ bl LoadMonIconPalettesAt
b _080951F8
_08095168:
adds r0, r1, 0x2
@@ -19954,7 +19954,7 @@ sub_80956A4: @ 80956A4
bl GetMonIconPtr
adds r4, r0, 0
adds r0, r5, 0
- bl sub_80971F8
+ bl GetValidMonIconPalIndex
adds r0, 0x8
lsls r0, 24
lsrs r0, 24
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index f6f746313..8a01dcfb6 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -10814,7 +10814,7 @@ _08139E58:
adds r0, r5, 0
movs r2, 0x18
movs r3, 0x20
- bl sub_8096E18
+ bl CreateMonIcon
ldr r1, [r6]
ldr r2, _08139E9C @ =0x00003014
adds r1, r2
@@ -10916,7 +10916,7 @@ sub_8139F20: @ 8139F20
bl GetMonData
lsls r0, 16
lsrs r0, 16
- bl sub_8097138
+ bl SafeFreeMonIconPalette
ldr r0, [r4]
ldr r1, _08139F5C @ =0x00003014
adds r0, r1
@@ -10926,7 +10926,7 @@ sub_8139F20: @ 8139F20
lsls r0, 2
ldr r1, _08139F60 @ =gSprites
adds r0, r1
- bl sub_8097070
+ bl DestroyMonIcon
pop {r4}
pop {r0}
bx r0
diff --git a/asm/trade.s b/asm/trade.s
index 3573dcfaf..b5e8ee022 100644
--- a/asm/trade.s
+++ b/asm/trade.s
@@ -83,7 +83,7 @@ _0804C674:
movs r1, 0x1
movs r2, 0xE0
bl TextWindow_SetUserSelectedFrame
- bl sub_809707C
+ bl LoadMonIconPalettes
ldr r2, _0804C708 @ =gUnknown_2031DA8
ldr r0, [r2]
adds r0, 0x69
@@ -521,8 +521,8 @@ _0804CA4A:
str r0, [sp, 0x4]
str r1, [sp, 0x8]
adds r0, r5, 0
- ldr r1, _0804CB44 @ =sub_809718C
- bl sub_8096E18
+ ldr r1, _0804CB44 @ =SpriteCB_MonIcon
+ bl CreateMonIcon
mov r2, r8
ldr r1, [r2]
adds r1, 0x28
@@ -580,8 +580,8 @@ _0804CABE:
movs r0, 0
str r0, [sp, 0x8]
adds r0, r5, 0
- ldr r1, _0804CB44 @ =sub_809718C
- bl sub_8096E18
+ ldr r1, _0804CB44 @ =SpriteCB_MonIcon
+ bl CreateMonIcon
mov r2, r8
ldr r1, [r2]
adds r1, 0x2E
@@ -607,7 +607,7 @@ _0804CB34: .4byte gEnemyPartyCount
_0804CB38: .4byte gUnknown_8261E40
_0804CB3C: .4byte gPlayerParty
_0804CB40: .4byte 0xfff40000
-_0804CB44: .4byte sub_809718C
+_0804CB44: .4byte SpriteCB_MonIcon
_0804CB48: .4byte gEnemyParty
_0804CB4C: .4byte gMain
_0804CB50:
@@ -1211,8 +1211,8 @@ _0804D048:
str r0, [sp, 0x4]
str r1, [sp, 0x8]
adds r0, r5, 0
- ldr r1, _0804D144 @ =sub_809718C
- bl sub_8096E18
+ ldr r1, _0804D144 @ =SpriteCB_MonIcon
+ bl CreateMonIcon
mov r2, r8
ldr r1, [r2]
adds r1, 0x28
@@ -1270,8 +1270,8 @@ _0804D0BE:
movs r0, 0
str r0, [sp, 0x8]
adds r0, r5, 0
- ldr r1, _0804D144 @ =sub_809718C
- bl sub_8096E18
+ ldr r1, _0804D144 @ =SpriteCB_MonIcon
+ bl CreateMonIcon
mov r2, r8
ldr r1, [r2]
adds r1, 0x2E
@@ -1297,7 +1297,7 @@ _0804D134: .4byte gEnemyPartyCount
_0804D138: .4byte gUnknown_8261E40
_0804D13C: .4byte gPlayerParty
_0804D140: .4byte 0xfff40000
-_0804D144: .4byte sub_809718C
+_0804D144: .4byte SpriteCB_MonIcon
_0804D148: .4byte gEnemyParty
_0804D14C: .4byte gMain
_0804D150:
@@ -4651,7 +4651,7 @@ _0804EBA2:
adds r0, r1
lsls r0, 2
add r0, r8
- ldr r1, _0804ECAC @ =sub_809718C
+ ldr r1, _0804ECAC @ =SpriteCB_MonIcon
bl StoreSpriteCallbackInData6
ldr r2, _0804ECA4 @ =gUnknown_2031DA8
ldr r1, [r2]
@@ -4698,7 +4698,7 @@ _0804EC98:
_0804ECA0: .4byte gSprites
_0804ECA4: .4byte gUnknown_2031DA8
_0804ECA8: .4byte gUnknown_8261E40
-_0804ECAC: .4byte sub_809718C
+_0804ECAC: .4byte SpriteCB_MonIcon
_0804ECB0: .4byte gUnknown_8260A32
_0804ECB4:
ldr r2, _0804ECE4 @ =gSprites
@@ -4717,7 +4717,7 @@ _0804ECB4:
adds r2, 0x1C
adds r0, r2
ldr r1, [r0]
- ldr r0, _0804ECE8 @ =sub_809718C
+ ldr r0, _0804ECE8 @ =SpriteCB_MonIcon
cmp r1, r0
beq _0804ECDC
b _0804EE54
@@ -4727,7 +4727,7 @@ _0804ECDC:
b _0804EE54
.align 2, 0
_0804ECE4: .4byte gSprites
-_0804ECE8: .4byte sub_809718C
+_0804ECE8: .4byte SpriteCB_MonIcon
_0804ECEC:
ldr r1, _0804EE08 @ =gUnknown_8260834
ldr r0, [sp, 0x60]
@@ -6356,7 +6356,7 @@ _0804F988:
subs r1, r2
lsls r1, 24
lsrs r1, 24
- bl sub_8097414
+ bl MonIcon_SetAnim
adds r4, 0x1
ldr r0, [r6]
adds r0, 0x36
diff --git a/asm/trainer_card.s b/asm/trainer_card.s
index 1ebda42ab..1e97ba2de 100644
--- a/asm/trainer_card.s
+++ b/asm/trainer_card.s
@@ -1215,7 +1215,7 @@ _080899AE:
bl VarGet
lsls r0, 16
lsrs r0, 16
- bl sub_8096FD4
+ bl MailSpeciesToIconSpecies
adds r1, r5, 0
adds r1, 0x54
strh r0, [r1]
@@ -1223,7 +1223,7 @@ _080899AE:
bl VarGet
lsls r0, 16
lsrs r0, 16
- bl sub_8096FD4
+ bl MailSpeciesToIconSpecies
adds r1, r5, 0
adds r1, 0x56
strh r0, [r1]
@@ -1231,7 +1231,7 @@ _080899AE:
bl VarGet
lsls r0, 16
lsrs r0, 16
- bl sub_8096FD4
+ bl MailSpeciesToIconSpecies
adds r1, r5, 0
adds r1, 0x58
strh r0, [r1]
@@ -1239,7 +1239,7 @@ _080899AE:
bl VarGet
lsls r0, 16
lsrs r0, 16
- bl sub_8096FD4
+ bl MailSpeciesToIconSpecies
adds r1, r5, 0
adds r1, 0x5A
strh r0, [r1]
@@ -1247,7 +1247,7 @@ _080899AE:
bl VarGet
lsls r0, 16
lsrs r0, 16
- bl sub_8096FD4
+ bl MailSpeciesToIconSpecies
adds r1, r5, 0
adds r1, 0x5C
strh r0, [r1]
@@ -1255,7 +1255,7 @@ _080899AE:
bl VarGet
lsls r0, 16
lsrs r0, 16
- bl sub_8096FD4
+ bl MailSpeciesToIconSpecies
adds r1, r5, 0
adds r1, 0x5E
strh r0, [r1]
@@ -3203,7 +3203,7 @@ _0808AAA4:
ldrh r0, [r1]
cmp r0, 0
beq _0808AAEE
- bl sub_8097218
+ bl GetMonIconPaletteIndexFromSpecies
lsls r0, 24
lsrs r0, 24
lsls r1, r4, 20
@@ -3250,7 +3250,7 @@ _0808AB0C: .4byte 0x00000457
sub_808AB10: @ 808AB10
push {r4,r5,lr}
sub sp, 0x4
- ldr r0, _0808AB40 @ =gUnknown_83D3740
+ ldr r0, _0808AB40 @ =gMonIconPalettes
ldr r4, _0808AB44 @ =gUnknown_20397A4
ldr r1, [r4]
ldr r5, _0808AB48 @ =0x00000396
@@ -3271,7 +3271,7 @@ sub_808AB10: @ 808AB10
beq _0808AB80
b _0808AB88
.align 2, 0
-_0808AB40: .4byte gUnknown_83D3740
+_0808AB40: .4byte gMonIconPalettes
_0808AB44: .4byte gUnknown_20397A4
_0808AB48: .4byte 0x00000396
_0808AB4C: .4byte 0x000004aa
@@ -3322,7 +3322,7 @@ _0808AB9A:
adds r0, r1
ldrh r0, [r0]
movs r1, 0
- bl sub_8097028
+ bl GetMonIconTiles
adds r1, r0, 0
lsls r3, r4, 20
movs r0, 0x80
diff --git a/baserom.ips b/baserom.ips
index 023f7cbb0..59846cc98 100644
--- a/baserom.ips
+++ b/baserom.ips
Binary files differ
diff --git a/data/data_835B488.s b/data/data_835B488.s
index a1893150d..10ade9a52 100644
--- a/data/data_835B488.s
+++ b/data/data_835B488.s
@@ -511,30 +511,10 @@ gUnknown_83D35DC:: @ 83D35DC
gUnknown_83D3728:: @ 83D3728
.incbin "baserom.gba", 0x3D3728, 0x18
-gUnknown_83D3740:: @ 83D3740
- .incbin "baserom.gba", 0x3D3740, 0x60
-
-gUnknown_83D37A0:: @ 83D37A0
- .incbin "baserom.gba", 0x3D37A0, 0x6E0
-
-gUnknown_83D3E80:: @ 83D3E80
- .incbin "baserom.gba", 0x3D3E80, 0x1B8
-
-gUnknown_83D4038:: @ 83D4038
- .incbin "baserom.gba", 0x3D4038, 0x30
-
-gUnknown_83D4068:: @ 83D4068
- .incbin "baserom.gba", 0x3D4068, 0x44
-
-gUnknown_83D40AC:: @ 83D40AC
- .incbin "baserom.gba", 0x3D40AC, 0x34
-
-gUnknown_83D40E0:: @ 83D40E0
- .incbin "baserom.gba", 0x3D40E0, 0x8
-
-gUnknown_83D40E8:: @ 83D40E8
- .incbin "baserom.gba", 0x3D40E8, 0x18
-
+ @ pokemon_icon
+ .section .rodata.83D4100
+ .align 2
+ @ fldeff_cut
gUnknown_83D4100:: @ 83D4100
.incbin "baserom.gba", 0x3D4100, 0x4C
diff --git a/data/graphics.s b/data/graphics.s
index ee8799cd2..7c96fce1a 100644
--- a/data/graphics.s
+++ b/data/graphics.s
@@ -11848,9 +11848,7 @@ gMonShinyPalette_Deoxys:: @ 8E3A360
.align 2
gMonIcon_Deoxys:: @ 8E3A388
.incbin "graphics/pokemon/deoxys/icon.4bpp"
-
- .align 2
-gMonIcon_DeoxysAttack:: @ 8E3A788
+ @ Referenced as part of the same array as normal deoxys
.incbin "graphics/pokemon/deoxys/icon_attack.4bpp"
.align 2
@@ -11982,6 +11980,7 @@ gMonBackPic_UnownI:: @ 8E3F228
.incbin "graphics/pokemon/unown/i/back.4bpp.lz"
.align 2
+
gMonIcon_UnownI:: @ 8E3F3D0
.incbin "graphics/pokemon/unown/i/icon.4bpp"
@@ -13698,7 +13697,7 @@ gFile_graphics_battle_interface_ball_status_bar_sheet:: @ 8E7BB04
.incbin "graphics/battle_interface/ball_status_bar.4bpp.lz"
.align 2
-gUnknown_8E7BBB8:: @ 8E7BB88
+gMonIcon_Egg:: @ 8E7BB88
.incbin "baserom.gba", 0xE7BB88, 0x400 @UNKNOWN
.align 2
diff --git a/include/graphics.h b/include/graphics.h
index 79b47f306..bd6c2c800 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2352,7 +2352,7 @@ extern const u8 gMonIcon_Chimecho[];
extern const u8 gMonFootprint_Chimecho[];
extern const u32 gMonFrontPic_Egg[];
extern const u32 gMonPalette_Egg[];
-extern const u32 gMonIcon_Egg[];
+extern const u8 gMonIcon_Egg[];
extern const u32 gMonFrontPic_UnownB[];
extern const u32 gMonBackPic_UnownB[];
extern const u8 gMonIcon_UnownB[];
@@ -3494,4 +3494,421 @@ extern const u32 gFile_graphics_mail_dream_map_tilemap[];
extern const u32 gFile_graphics_mail_fab_map_tilemap[];
extern const u32 gFile_graphics_mail_retro_map_tilemap[];
+// pokemon_icons
+extern const u8 gMonIcon_Bulbasaur[];
+extern const u8 gMonIcon_Ivysaur[];
+extern const u8 gMonIcon_Venusaur[];
+extern const u8 gMonIcon_Charmander[];
+extern const u8 gMonIcon_Charmeleon[];
+extern const u8 gMonIcon_Charizard[];
+extern const u8 gMonIcon_Squirtle[];
+extern const u8 gMonIcon_Wartortle[];
+extern const u8 gMonIcon_Blastoise[];
+extern const u8 gMonIcon_Caterpie[];
+extern const u8 gMonIcon_Metapod[];
+extern const u8 gMonIcon_Butterfree[];
+extern const u8 gMonIcon_Weedle[];
+extern const u8 gMonIcon_Kakuna[];
+extern const u8 gMonIcon_Beedrill[];
+extern const u8 gMonIcon_Pidgey[];
+extern const u8 gMonIcon_Pidgeotto[];
+extern const u8 gMonIcon_Pidgeot[];
+extern const u8 gMonIcon_Rattata[];
+extern const u8 gMonIcon_Raticate[];
+extern const u8 gMonIcon_Spearow[];
+extern const u8 gMonIcon_Fearow[];
+extern const u8 gMonIcon_Ekans[];
+extern const u8 gMonIcon_Arbok[];
+extern const u8 gMonIcon_Pikachu[];
+extern const u8 gMonIcon_Raichu[];
+extern const u8 gMonIcon_Sandshrew[];
+extern const u8 gMonIcon_Sandslash[];
+extern const u8 gMonIcon_Nidoran_f[];
+extern const u8 gMonIcon_Nidorina[];
+extern const u8 gMonIcon_Nidoqueen[];
+extern const u8 gMonIcon_Nidoran_m[];
+extern const u8 gMonIcon_Nidorino[];
+extern const u8 gMonIcon_Nidoking[];
+extern const u8 gMonIcon_Clefairy[];
+extern const u8 gMonIcon_Clefable[];
+extern const u8 gMonIcon_Vulpix[];
+extern const u8 gMonIcon_Ninetales[];
+extern const u8 gMonIcon_Jigglypuff[];
+extern const u8 gMonIcon_Wigglytuff[];
+extern const u8 gMonIcon_Zubat[];
+extern const u8 gMonIcon_Golbat[];
+extern const u8 gMonIcon_Oddish[];
+extern const u8 gMonIcon_Gloom[];
+extern const u8 gMonIcon_Vileplume[];
+extern const u8 gMonIcon_Paras[];
+extern const u8 gMonIcon_Parasect[];
+extern const u8 gMonIcon_Venonat[];
+extern const u8 gMonIcon_Venomoth[];
+extern const u8 gMonIcon_Diglett[];
+extern const u8 gMonIcon_Dugtrio[];
+extern const u8 gMonIcon_Meowth[];
+extern const u8 gMonIcon_Persian[];
+extern const u8 gMonIcon_Psyduck[];
+extern const u8 gMonIcon_Golduck[];
+extern const u8 gMonIcon_Mankey[];
+extern const u8 gMonIcon_Primeape[];
+extern const u8 gMonIcon_Growlithe[];
+extern const u8 gMonIcon_Arcanine[];
+extern const u8 gMonIcon_Poliwag[];
+extern const u8 gMonIcon_Poliwhirl[];
+extern const u8 gMonIcon_Poliwrath[];
+extern const u8 gMonIcon_Abra[];
+extern const u8 gMonIcon_Kadabra[];
+extern const u8 gMonIcon_Alakazam[];
+extern const u8 gMonIcon_Machop[];
+extern const u8 gMonIcon_Machoke[];
+extern const u8 gMonIcon_Machamp[];
+extern const u8 gMonIcon_Bellsprout[];
+extern const u8 gMonIcon_Weepinbell[];
+extern const u8 gMonIcon_Victreebel[];
+extern const u8 gMonIcon_Tentacool[];
+extern const u8 gMonIcon_Tentacruel[];
+extern const u8 gMonIcon_Geodude[];
+extern const u8 gMonIcon_Graveler[];
+extern const u8 gMonIcon_Golem[];
+extern const u8 gMonIcon_Ponyta[];
+extern const u8 gMonIcon_Rapidash[];
+extern const u8 gMonIcon_Slowpoke[];
+extern const u8 gMonIcon_Slowbro[];
+extern const u8 gMonIcon_Magnemite[];
+extern const u8 gMonIcon_Magneton[];
+extern const u8 gMonIcon_Farfetch_d[];
+extern const u8 gMonIcon_Doduo[];
+extern const u8 gMonIcon_Dodrio[];
+extern const u8 gMonIcon_Seel[];
+extern const u8 gMonIcon_Dewgong[];
+extern const u8 gMonIcon_Grimer[];
+extern const u8 gMonIcon_Muk[];
+extern const u8 gMonIcon_Shellder[];
+extern const u8 gMonIcon_Cloyster[];
+extern const u8 gMonIcon_Gastly[];
+extern const u8 gMonIcon_Haunter[];
+extern const u8 gMonIcon_Gengar[];
+extern const u8 gMonIcon_Onix[];
+extern const u8 gMonIcon_Drowzee[];
+extern const u8 gMonIcon_Hypno[];
+extern const u8 gMonIcon_Krabby[];
+extern const u8 gMonIcon_Kingler[];
+extern const u8 gMonIcon_Voltorb[];
+extern const u8 gMonIcon_Electrode[];
+extern const u8 gMonIcon_Exeggcute[];
+extern const u8 gMonIcon_Exeggutor[];
+extern const u8 gMonIcon_Cubone[];
+extern const u8 gMonIcon_Marowak[];
+extern const u8 gMonIcon_Hitmonlee[];
+extern const u8 gMonIcon_Hitmonchan[];
+extern const u8 gMonIcon_Lickitung[];
+extern const u8 gMonIcon_Koffing[];
+extern const u8 gMonIcon_Weezing[];
+extern const u8 gMonIcon_Rhyhorn[];
+extern const u8 gMonIcon_Rhydon[];
+extern const u8 gMonIcon_Chansey[];
+extern const u8 gMonIcon_Tangela[];
+extern const u8 gMonIcon_Kangaskhan[];
+extern const u8 gMonIcon_Horsea[];
+extern const u8 gMonIcon_Seadra[];
+extern const u8 gMonIcon_Goldeen[];
+extern const u8 gMonIcon_Seaking[];
+extern const u8 gMonIcon_Staryu[];
+extern const u8 gMonIcon_Starmie[];
+extern const u8 gMonIcon_Mr_Mime[];
+extern const u8 gMonIcon_Scyther[];
+extern const u8 gMonIcon_Jynx[];
+extern const u8 gMonIcon_Electabuzz[];
+extern const u8 gMonIcon_Magmar[];
+extern const u8 gMonIcon_Pinsir[];
+extern const u8 gMonIcon_Tauros[];
+extern const u8 gMonIcon_Magikarp[];
+extern const u8 gMonIcon_Gyarados[];
+extern const u8 gMonIcon_Lapras[];
+extern const u8 gMonIcon_Ditto[];
+extern const u8 gMonIcon_Eevee[];
+extern const u8 gMonIcon_Vaporeon[];
+extern const u8 gMonIcon_Jolteon[];
+extern const u8 gMonIcon_Flareon[];
+extern const u8 gMonIcon_Porygon[];
+extern const u8 gMonIcon_Omanyte[];
+extern const u8 gMonIcon_Omastar[];
+extern const u8 gMonIcon_Kabuto[];
+extern const u8 gMonIcon_Kabutops[];
+extern const u8 gMonIcon_Aerodactyl[];
+extern const u8 gMonIcon_Snorlax[];
+extern const u8 gMonIcon_Articuno[];
+extern const u8 gMonIcon_Zapdos[];
+extern const u8 gMonIcon_Moltres[];
+extern const u8 gMonIcon_Dratini[];
+extern const u8 gMonIcon_Dragonair[];
+extern const u8 gMonIcon_Dragonite[];
+extern const u8 gMonIcon_Mewtwo[];
+extern const u8 gMonIcon_Mew[];
+extern const u8 gMonIcon_Chikorita[];
+extern const u8 gMonIcon_Bayleef[];
+extern const u8 gMonIcon_Meganium[];
+extern const u8 gMonIcon_Cyndaquil[];
+extern const u8 gMonIcon_Quilava[];
+extern const u8 gMonIcon_Typhlosion[];
+extern const u8 gMonIcon_Totodile[];
+extern const u8 gMonIcon_Croconaw[];
+extern const u8 gMonIcon_Feraligatr[];
+extern const u8 gMonIcon_Sentret[];
+extern const u8 gMonIcon_Furret[];
+extern const u8 gMonIcon_Hoothoot[];
+extern const u8 gMonIcon_Noctowl[];
+extern const u8 gMonIcon_Ledyba[];
+extern const u8 gMonIcon_Ledian[];
+extern const u8 gMonIcon_Spinarak[];
+extern const u8 gMonIcon_Ariados[];
+extern const u8 gMonIcon_Crobat[];
+extern const u8 gMonIcon_Chinchou[];
+extern const u8 gMonIcon_Lanturn[];
+extern const u8 gMonIcon_Pichu[];
+extern const u8 gMonIcon_Cleffa[];
+extern const u8 gMonIcon_Igglybuff[];
+extern const u8 gMonIcon_Togepi[];
+extern const u8 gMonIcon_Togetic[];
+extern const u8 gMonIcon_Natu[];
+extern const u8 gMonIcon_Xatu[];
+extern const u8 gMonIcon_Mareep[];
+extern const u8 gMonIcon_Flaaffy[];
+extern const u8 gMonIcon_Ampharos[];
+extern const u8 gMonIcon_Bellossom[];
+extern const u8 gMonIcon_Marill[];
+extern const u8 gMonIcon_Azumarill[];
+extern const u8 gMonIcon_Sudowoodo[];
+extern const u8 gMonIcon_Politoed[];
+extern const u8 gMonIcon_Hoppip[];
+extern const u8 gMonIcon_Skiploom[];
+extern const u8 gMonIcon_Jumpluff[];
+extern const u8 gMonIcon_Aipom[];
+extern const u8 gMonIcon_Sunkern[];
+extern const u8 gMonIcon_Sunflora[];
+extern const u8 gMonIcon_Yanma[];
+extern const u8 gMonIcon_Wooper[];
+extern const u8 gMonIcon_Quagsire[];
+extern const u8 gMonIcon_Espeon[];
+extern const u8 gMonIcon_Umbreon[];
+extern const u8 gMonIcon_Murkrow[];
+extern const u8 gMonIcon_Slowking[];
+extern const u8 gMonIcon_Misdreavus[];
+extern const u8 gMonIcon_Unown_A[];
+extern const u8 gMonIcon_Wobbuffet[];
+extern const u8 gMonIcon_Girafarig[];
+extern const u8 gMonIcon_Pineco[];
+extern const u8 gMonIcon_Forretress[];
+extern const u8 gMonIcon_Dunsparce[];
+extern const u8 gMonIcon_Gligar[];
+extern const u8 gMonIcon_Steelix[];
+extern const u8 gMonIcon_Snubbull[];
+extern const u8 gMonIcon_Granbull[];
+extern const u8 gMonIcon_Qwilfish[];
+extern const u8 gMonIcon_Scizor[];
+extern const u8 gMonIcon_Shuckle[];
+extern const u8 gMonIcon_Heracross[];
+extern const u8 gMonIcon_Sneasel[];
+extern const u8 gMonIcon_Teddiursa[];
+extern const u8 gMonIcon_Ursaring[];
+extern const u8 gMonIcon_Slugma[];
+extern const u8 gMonIcon_Magcargo[];
+extern const u8 gMonIcon_Swinub[];
+extern const u8 gMonIcon_Piloswine[];
+extern const u8 gMonIcon_Corsola[];
+extern const u8 gMonIcon_Remoraid[];
+extern const u8 gMonIcon_Octillery[];
+extern const u8 gMonIcon_Delibird[];
+extern const u8 gMonIcon_Mantine[];
+extern const u8 gMonIcon_Skarmory[];
+extern const u8 gMonIcon_Houndour[];
+extern const u8 gMonIcon_Houndoom[];
+extern const u8 gMonIcon_Kingdra[];
+extern const u8 gMonIcon_Phanpy[];
+extern const u8 gMonIcon_Donphan[];
+extern const u8 gMonIcon_Porygon2[];
+extern const u8 gMonIcon_Stantler[];
+extern const u8 gMonIcon_Smeargle[];
+extern const u8 gMonIcon_Tyrogue[];
+extern const u8 gMonIcon_Hitmontop[];
+extern const u8 gMonIcon_Smoochum[];
+extern const u8 gMonIcon_Elekid[];
+extern const u8 gMonIcon_Magby[];
+extern const u8 gMonIcon_Miltank[];
+extern const u8 gMonIcon_Blissey[];
+extern const u8 gMonIcon_Raikou[];
+extern const u8 gMonIcon_Entei[];
+extern const u8 gMonIcon_Suicune[];
+extern const u8 gMonIcon_Larvitar[];
+extern const u8 gMonIcon_Pupitar[];
+extern const u8 gMonIcon_Tyranitar[];
+extern const u8 gMonIcon_Lugia[];
+extern const u8 gMonIcon_Ho_Oh[];
+extern const u8 gMonIcon_Celebi[];
+extern const u8 gMonIcon_Treecko[];
+extern const u8 gMonIcon_Grovyle[];
+extern const u8 gMonIcon_Sceptile[];
+extern const u8 gMonIcon_Torchic[];
+extern const u8 gMonIcon_Combusken[];
+extern const u8 gMonIcon_Blaziken[];
+extern const u8 gMonIcon_Mudkip[];
+extern const u8 gMonIcon_Marshtomp[];
+extern const u8 gMonIcon_Swampert[];
+extern const u8 gMonIcon_Poochyena[];
+extern const u8 gMonIcon_Mightyena[];
+extern const u8 gMonIcon_Zigzagoon[];
+extern const u8 gMonIcon_Linoone[];
+extern const u8 gMonIcon_Wurmple[];
+extern const u8 gMonIcon_Silcoon[];
+extern const u8 gMonIcon_Beautifly[];
+extern const u8 gMonIcon_Cascoon[];
+extern const u8 gMonIcon_Dustox[];
+extern const u8 gMonIcon_Lotad[];
+extern const u8 gMonIcon_Lombre[];
+extern const u8 gMonIcon_Ludicolo[];
+extern const u8 gMonIcon_Seedot[];
+extern const u8 gMonIcon_Nuzleaf[];
+extern const u8 gMonIcon_Shiftry[];
+extern const u8 gMonIcon_Nincada[];
+extern const u8 gMonIcon_Ninjask[];
+extern const u8 gMonIcon_Shedinja[];
+extern const u8 gMonIcon_Taillow[];
+extern const u8 gMonIcon_Swellow[];
+extern const u8 gMonIcon_Shroomish[];
+extern const u8 gMonIcon_Breloom[];
+extern const u8 gMonIcon_Spinda[];
+extern const u8 gMonIcon_Wingull[];
+extern const u8 gMonIcon_Pelipper[];
+extern const u8 gMonIcon_Surskit[];
+extern const u8 gMonIcon_Masquerain[];
+extern const u8 gMonIcon_Wailmer[];
+extern const u8 gMonIcon_Wailord[];
+extern const u8 gMonIcon_Skitty[];
+extern const u8 gMonIcon_Delcatty[];
+extern const u8 gMonIcon_Kecleon[];
+extern const u8 gMonIcon_Baltoy[];
+extern const u8 gMonIcon_Claydol[];
+extern const u8 gMonIcon_Nosepass[];
+extern const u8 gMonIcon_Torkoal[];
+extern const u8 gMonIcon_Sableye[];
+extern const u8 gMonIcon_Barboach[];
+extern const u8 gMonIcon_Whiscash[];
+extern const u8 gMonIcon_Luvdisc[];
+extern const u8 gMonIcon_Corphish[];
+extern const u8 gMonIcon_Crawdaunt[];
+extern const u8 gMonIcon_Feebas[];
+extern const u8 gMonIcon_Milotic[];
+extern const u8 gMonIcon_Carvanha[];
+extern const u8 gMonIcon_Sharpedo[];
+extern const u8 gMonIcon_Trapinch[];
+extern const u8 gMonIcon_Vibrava[];
+extern const u8 gMonIcon_Flygon[];
+extern const u8 gMonIcon_Makuhita[];
+extern const u8 gMonIcon_Hariyama[];
+extern const u8 gMonIcon_Electrike[];
+extern const u8 gMonIcon_Manectric[];
+extern const u8 gMonIcon_Numel[];
+extern const u8 gMonIcon_Camerupt[];
+extern const u8 gMonIcon_Spheal[];
+extern const u8 gMonIcon_Sealeo[];
+extern const u8 gMonIcon_Walrein[];
+extern const u8 gMonIcon_Cacnea[];
+extern const u8 gMonIcon_Cacturne[];
+extern const u8 gMonIcon_Snorunt[];
+extern const u8 gMonIcon_Glalie[];
+extern const u8 gMonIcon_Lunatone[];
+extern const u8 gMonIcon_Solrock[];
+extern const u8 gMonIcon_Azurill[];
+extern const u8 gMonIcon_Spoink[];
+extern const u8 gMonIcon_Grumpig[];
+extern const u8 gMonIcon_Plusle[];
+extern const u8 gMonIcon_Minun[];
+extern const u8 gMonIcon_Mawile[];
+extern const u8 gMonIcon_Meditite[];
+extern const u8 gMonIcon_Medicham[];
+extern const u8 gMonIcon_Swablu[];
+extern const u8 gMonIcon_Altaria[];
+extern const u8 gMonIcon_Wynaut[];
+extern const u8 gMonIcon_Duskull[];
+extern const u8 gMonIcon_Dusclops[];
+extern const u8 gMonIcon_Roselia[];
+extern const u8 gMonIcon_Slakoth[];
+extern const u8 gMonIcon_Vigoroth[];
+extern const u8 gMonIcon_Slaking[];
+extern const u8 gMonIcon_Gulpin[];
+extern const u8 gMonIcon_Swalot[];
+extern const u8 gMonIcon_Tropius[];
+extern const u8 gMonIcon_Whismur[];
+extern const u8 gMonIcon_Loudred[];
+extern const u8 gMonIcon_Exploud[];
+extern const u8 gMonIcon_Clamperl[];
+extern const u8 gMonIcon_Huntail[];
+extern const u8 gMonIcon_Gorebyss[];
+extern const u8 gMonIcon_Absol[];
+extern const u8 gMonIcon_Shuppet[];
+extern const u8 gMonIcon_Banette[];
+extern const u8 gMonIcon_Seviper[];
+extern const u8 gMonIcon_Zangoose[];
+extern const u8 gMonIcon_Relicanth[];
+extern const u8 gMonIcon_Aron[];
+extern const u8 gMonIcon_Lairon[];
+extern const u8 gMonIcon_Aggron[];
+extern const u8 gMonIcon_Castform[];
+extern const u8 gMonIcon_Volbeat[];
+extern const u8 gMonIcon_Illumise[];
+extern const u8 gMonIcon_Lileep[];
+extern const u8 gMonIcon_Cradily[];
+extern const u8 gMonIcon_Anorith[];
+extern const u8 gMonIcon_Armaldo[];
+extern const u8 gMonIcon_Ralts[];
+extern const u8 gMonIcon_Kirlia[];
+extern const u8 gMonIcon_Gardevoir[];
+extern const u8 gMonIcon_Bagon[];
+extern const u8 gMonIcon_Shelgon[];
+extern const u8 gMonIcon_Salamence[];
+extern const u8 gMonIcon_Beldum[];
+extern const u8 gMonIcon_Metang[];
+extern const u8 gMonIcon_Metagross[];
+extern const u8 gMonIcon_Regirock[];
+extern const u8 gMonIcon_Regice[];
+extern const u8 gMonIcon_Registeel[];
+extern const u8 gMonIcon_Kyogre[];
+extern const u8 gMonIcon_Groudon[];
+extern const u8 gMonIcon_Rayquaza[];
+extern const u8 gMonIcon_Latias[];
+extern const u8 gMonIcon_Latios[];
+extern const u8 gMonIcon_Jirachi[];
+extern const u8 gMonIcon_Deoxys[];
+extern const u8 gMonIcon_Chimecho[];
+extern const u8 gMonIcon_Egg[];
+extern const u8 gMonIcon_Unown_B[];
+extern const u8 gMonIcon_Unown_C[];
+extern const u8 gMonIcon_Unown_D[];
+extern const u8 gMonIcon_Unown_E[];
+extern const u8 gMonIcon_Unown_F[];
+extern const u8 gMonIcon_Unown_G[];
+extern const u8 gMonIcon_Unown_H[];
+extern const u8 gMonIcon_Unown_I[];
+extern const u8 gMonIcon_Unown_J[];
+extern const u8 gMonIcon_Unown_K[];
+extern const u8 gMonIcon_Unown_L[];
+extern const u8 gMonIcon_Unown_M[];
+extern const u8 gMonIcon_Unown_N[];
+extern const u8 gMonIcon_Unown_O[];
+extern const u8 gMonIcon_Unown_P[];
+extern const u8 gMonIcon_Unown_Q[];
+extern const u8 gMonIcon_Unown_R[];
+extern const u8 gMonIcon_Unown_S[];
+extern const u8 gMonIcon_Unown_T[];
+extern const u8 gMonIcon_Unown_U[];
+extern const u8 gMonIcon_Unown_V[];
+extern const u8 gMonIcon_Unown_W[];
+extern const u8 gMonIcon_Unown_X[];
+extern const u8 gMonIcon_Unown_Y[];
+extern const u8 gMonIcon_Unown_Z[];
+extern const u8 gMonIcon_Unown_ExclamationMark[];
+extern const u8 gMonIcon_Unown_QuestionMark[];
+extern const u8 gMonIcon_QuestionMark[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h
index d5aab71de..52d374041 100644
--- a/include/pokemon_icon.h
+++ b/include/pokemon_icon.h
@@ -4,20 +4,21 @@
#include "global.h"
const u8 *GetMonIconPtr(u16 speciesId, u32 personality, u32 frameNo);
+const u8 *GetMonIconTiles(u16 iconSpecies, bool32 extra);
const u16 *GetValidMonIconPalettePtr(u16 speciesId);
u16 sub_80D2E84(u16 speciesId);
void sub_80D2F68(u16 iconId);
u8 sub_80D2D78(u16 iconId, void callback(struct Sprite *), u16 x, u16 y, u16 a4, u8 a5);
void sub_80D2FF0(u16 iconId);
void sub_80D2EF8(struct Sprite *sprite);
-void sub_809707C(void);
+void LoadMonIconPalettes(void);
void FreeMonIconPalettes(void);
-u16 sub_8096FD4(u16);
-u8 sub_8096ECC(u16, void (*)(struct Sprite *), s16, s16, u8, bool32);
-void sub_8097070(struct Sprite *);
+u16 MailSpeciesToIconSpecies(u16);
+u8 CreateMonIcon_HandleDeoxys(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, bool32 extra);
+void DestroyMonIcon(struct Sprite *);
u16 GetUnownLetterByPersonality(u32 personality);
u8 UpdateMonIconFrame(struct Sprite *sprite);
-void sub_80970E0(u16 iconId);
-void sub_8097168(u16 iconId);
+void LoadMonIconPalette(u16 iconId);
+void FreeMonIconPalette(u16 iconId);
#endif // GUARD_POKEMON_ICON_H
diff --git a/ld_script.txt b/ld_script.txt
index aa9da405e..1d5a43ce4 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -131,7 +131,7 @@ SECTIONS {
src/pokedex.o(.text);
asm/trainer_card.o(.text);
asm/pokemon_storage_system.o(.text);
- asm/pokemon_icon.o(.text);
+ src/pokemon_icon.o(.text);
asm/script_movement.o(.text);
asm/fldeff_cut.o(.text);
src/mail_data.o(.text);
@@ -420,6 +420,8 @@ SECTIONS {
src/title_screen.o(.rodata);
data/field_weather.o(.rodata);
data/data_835B488.o(.rodata);
+ src/pokemon_icon.o(.rodata);
+ data/data_835B488.o(.rodata.83D4100);
src/item_menu_icons.o(.rodata);
src/battle_anim_mon_movement.o(.rodata);
src/item.o(.rodata);
diff --git a/src/mail.c b/src/mail.c
index f6b7e2c4d..a9cb66683 100644
--- a/src/mail.c
+++ b/src/mail.c
@@ -596,16 +596,16 @@ static bool8 DoInitMailView(void)
gPaletteFade.bufferTransferDisabled = TRUE;
break;
case 17:
- iconId = sub_8096FD4(sMailViewResources->mail->species);
+ iconId = MailSpeciesToIconSpecies(sMailViewResources->mail->species);
switch (sMailViewResources->monIconType)
{
case MAIL_ICON_BEAD:
- sub_80970E0(iconId);
- sMailViewResources->monIconSpriteId = sub_8096ECC(iconId, SpriteCallbackDummy, 0x60, 0x80, 0, FALSE);
+ LoadMonIconPalette(iconId);
+ sMailViewResources->monIconSpriteId = CreateMonIcon_HandleDeoxys(iconId, SpriteCallbackDummy, 0x60, 0x80, 0, FALSE);
break;
case MAIL_ICON_DREAM:
- sub_80970E0(iconId);
- sMailViewResources->monIconSpriteId = sub_8096ECC(iconId, SpriteCallbackDummy, 0x28, 0x80, 0, FALSE);
+ LoadMonIconPalette(iconId);
+ sMailViewResources->monIconSpriteId = CreateMonIcon_HandleDeoxys(iconId, SpriteCallbackDummy, 0x28, 0x80, 0, FALSE);
break;
}
break;
@@ -726,8 +726,8 @@ static void ShowMailCB_Teardown(void)
{
case MAIL_ICON_BEAD:
case MAIL_ICON_DREAM:
- sub_8097168(sub_8096FD4(sMailViewResources->mail->species));
- sub_8097070(&gSprites[sMailViewResources->monIconSpriteId]);
+ FreeMonIconPalette(MailSpeciesToIconSpecies(sMailViewResources->mail->species));
+ DestroyMonIcon(&gSprites[sMailViewResources->monIconSpriteId]);
break;
}
*sMailViewResources = (struct MailViewResources){};
diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c
index 85c1dfccb..e42b49627 100644
--- a/src/mevent_8145654.c
+++ b/src/mevent_8145654.c
@@ -200,7 +200,7 @@ s32 FadeToWonderCardMenu(void)
CopyBgTilemapBufferToVram(1);
break;
case 6:
- sub_809707C();
+ LoadMonIconPalettes();
break;
case 7:
ShowBg(1);
@@ -398,7 +398,7 @@ void sub_8146060(void)
gUnknown_203F3C8->unk_017C = 0xFF;
if (gUnknown_203F3C8->unk_014C.unk_06 != SPECIES_NONE)
{
- gUnknown_203F3C8->unk_017C = sub_8096ECC(sub_8096FD4(gUnknown_203F3C8->unk_014C.unk_06), SpriteCallbackDummy, 0xDC, 0x14, 0, FALSE);
+ gUnknown_203F3C8->unk_017C = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(gUnknown_203F3C8->unk_014C.unk_06), SpriteCallbackDummy, 0xDC, 0x14, 0, FALSE);
gSprites[gUnknown_203F3C8->unk_017C].oam.priority = 2;
}
if (gUnknown_203F3C8->unk_0000.unk_09 != 0 && gUnknown_203F3C8->unk_0000.unk_08_0 == 1)
@@ -412,7 +412,7 @@ void sub_8146060(void)
gUnknown_203F3C8->unk_017D[r7][0] = CreateSprite(&gUnknown_8467FA0, 0xd8 - 32 * r7, 0x90, 8);
if (gUnknown_203F3C8->unk_014C.unk_08[0][r7] != 0)
{
- gUnknown_203F3C8->unk_017D[r7][1] = sub_8096ECC(sub_8096FD4(gUnknown_203F3C8->unk_014C.unk_08[0][r7]), SpriteCallbackDummy, 0xd8 - 32 * r7, 0x88, 0, 0);
+ gUnknown_203F3C8->unk_017D[r7][1] = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(gUnknown_203F3C8->unk_014C.unk_08[0][r7]), SpriteCallbackDummy, 0xd8 - 32 * r7, 0x88, 0, 0);
gSprites[gUnknown_203F3C8->unk_017D[r7][1]].oam.priority = 2;
}
}
@@ -423,7 +423,7 @@ void sub_81461D8(void)
{
u8 r6 = 0;
if (gUnknown_203F3C8->unk_017C != 0xFF)
- sub_8097070(&gSprites[gUnknown_203F3C8->unk_017C]);
+ DestroyMonIcon(&gSprites[gUnknown_203F3C8->unk_017C]);
if (gUnknown_203F3C8->unk_0000.unk_09 != 0 && gUnknown_203F3C8->unk_0000.unk_08_0 == 1)
{
for (; r6 < gUnknown_203F3C8->unk_0000.unk_09; r6++)
@@ -435,7 +435,7 @@ void sub_81461D8(void)
// if (gUnknown_203F3C8->unk_017D[r6][1] != 0xFF)
if (gUnknown_203F3C8->unk_017D[r6][0] != 0xFF)
{
- sub_8097070(&gSprites[gUnknown_203F3C8->unk_017D[r6][1]]);
+ DestroyMonIcon(&gSprites[gUnknown_203F3C8->unk_017D[r6][1]]);
}
}
}
diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c
new file mode 100644
index 000000000..f3492593c
--- /dev/null
+++ b/src/pokemon_icon.c
@@ -0,0 +1,1284 @@
+#include "global.h"
+#include "palette.h"
+#include "mail_data.h"
+#include "pokemon_icon.h"
+#include "graphics.h"
+#include "constants/species.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;
+ SpriteCallback callback;
+ u16 paletteTag;
+};
+
+static u8 CreateMonIconSprite(const struct MonIconSpriteTemplate * template, s16 x, s16 y, u8 subpriority);
+static void DestroyMonIconInternal(struct Sprite * sprite);
+
+const u16 gMonIconPalettes[][16] = {
+ INCBIN_U16("graphics/pokemon/icon_palettes/icon_palette_0.gbapal"),
+ INCBIN_U16("graphics/pokemon/icon_palettes/icon_palette_1.gbapal"),
+ INCBIN_U16("graphics/pokemon/icon_palettes/icon_palette_2.gbapal")
+};
+
+const u8 *const gMonIconTable[] = {
+ [SPECIES_NONE] = gMonIcon_QuestionMark,
+ [SPECIES_BULBASAUR] = gMonIcon_Bulbasaur,
+ [SPECIES_IVYSAUR] = gMonIcon_Ivysaur,
+ [SPECIES_VENUSAUR] = gMonIcon_Venusaur,
+ [SPECIES_CHARMANDER] = gMonIcon_Charmander,
+ [SPECIES_CHARMELEON] = gMonIcon_Charmeleon,
+ [SPECIES_CHARIZARD] = gMonIcon_Charizard,
+ [SPECIES_SQUIRTLE] = gMonIcon_Squirtle,
+ [SPECIES_WARTORTLE] = gMonIcon_Wartortle,
+ [SPECIES_BLASTOISE] = gMonIcon_Blastoise,
+ [SPECIES_CATERPIE] = gMonIcon_Caterpie,
+ [SPECIES_METAPOD] = gMonIcon_Metapod,
+ [SPECIES_BUTTERFREE] = gMonIcon_Butterfree,
+ [SPECIES_WEEDLE] = gMonIcon_Weedle,
+ [SPECIES_KAKUNA] = gMonIcon_Kakuna,
+ [SPECIES_BEEDRILL] = gMonIcon_Beedrill,
+ [SPECIES_PIDGEY] = gMonIcon_Pidgey,
+ [SPECIES_PIDGEOTTO] = gMonIcon_Pidgeotto,
+ [SPECIES_PIDGEOT] = gMonIcon_Pidgeot,
+ [SPECIES_RATTATA] = gMonIcon_Rattata,
+ [SPECIES_RATICATE] = gMonIcon_Raticate,
+ [SPECIES_SPEAROW] = gMonIcon_Spearow,
+ [SPECIES_FEAROW] = gMonIcon_Fearow,
+ [SPECIES_EKANS] = gMonIcon_Ekans,
+ [SPECIES_ARBOK] = gMonIcon_Arbok,
+ [SPECIES_PIKACHU] = gMonIcon_Pikachu,
+ [SPECIES_RAICHU] = gMonIcon_Raichu,
+ [SPECIES_SANDSHREW] = gMonIcon_Sandshrew,
+ [SPECIES_SANDSLASH] = gMonIcon_Sandslash,
+ [SPECIES_NIDORAN_F] = gMonIcon_NidoranF,
+ [SPECIES_NIDORINA] = gMonIcon_Nidorina,
+ [SPECIES_NIDOQUEEN] = gMonIcon_Nidoqueen,
+ [SPECIES_NIDORAN_M] = gMonIcon_NidoranM,
+ [SPECIES_NIDORINO] = gMonIcon_Nidorino,
+ [SPECIES_NIDOKING] = gMonIcon_Nidoking,
+ [SPECIES_CLEFAIRY] = gMonIcon_Clefairy,
+ [SPECIES_CLEFABLE] = gMonIcon_Clefable,
+ [SPECIES_VULPIX] = gMonIcon_Vulpix,
+ [SPECIES_NINETALES] = gMonIcon_Ninetales,
+ [SPECIES_JIGGLYPUFF] = gMonIcon_Jigglypuff,
+ [SPECIES_WIGGLYTUFF] = gMonIcon_Wigglytuff,
+ [SPECIES_ZUBAT] = gMonIcon_Zubat,
+ [SPECIES_GOLBAT] = gMonIcon_Golbat,
+ [SPECIES_ODDISH] = gMonIcon_Oddish,
+ [SPECIES_GLOOM] = gMonIcon_Gloom,
+ [SPECIES_VILEPLUME] = gMonIcon_Vileplume,
+ [SPECIES_PARAS] = gMonIcon_Paras,
+ [SPECIES_PARASECT] = gMonIcon_Parasect,
+ [SPECIES_VENONAT] = gMonIcon_Venonat,
+ [SPECIES_VENOMOTH] = gMonIcon_Venomoth,
+ [SPECIES_DIGLETT] = gMonIcon_Diglett,
+ [SPECIES_DUGTRIO] = gMonIcon_Dugtrio,
+ [SPECIES_MEOWTH] = gMonIcon_Meowth,
+ [SPECIES_PERSIAN] = gMonIcon_Persian,
+ [SPECIES_PSYDUCK] = gMonIcon_Psyduck,
+ [SPECIES_GOLDUCK] = gMonIcon_Golduck,
+ [SPECIES_MANKEY] = gMonIcon_Mankey,
+ [SPECIES_PRIMEAPE] = gMonIcon_Primeape,
+ [SPECIES_GROWLITHE] = gMonIcon_Growlithe,
+ [SPECIES_ARCANINE] = gMonIcon_Arcanine,
+ [SPECIES_POLIWAG] = gMonIcon_Poliwag,
+ [SPECIES_POLIWHIRL] = gMonIcon_Poliwhirl,
+ [SPECIES_POLIWRATH] = gMonIcon_Poliwrath,
+ [SPECIES_ABRA] = gMonIcon_Abra,
+ [SPECIES_KADABRA] = gMonIcon_Kadabra,
+ [SPECIES_ALAKAZAM] = gMonIcon_Alakazam,
+ [SPECIES_MACHOP] = gMonIcon_Machop,
+ [SPECIES_MACHOKE] = gMonIcon_Machoke,
+ [SPECIES_MACHAMP] = gMonIcon_Machamp,
+ [SPECIES_BELLSPROUT] = gMonIcon_Bellsprout,
+ [SPECIES_WEEPINBELL] = gMonIcon_Weepinbell,
+ [SPECIES_VICTREEBEL] = gMonIcon_Victreebel,
+ [SPECIES_TENTACOOL] = gMonIcon_Tentacool,
+ [SPECIES_TENTACRUEL] = gMonIcon_Tentacruel,
+ [SPECIES_GEODUDE] = gMonIcon_Geodude,
+ [SPECIES_GRAVELER] = gMonIcon_Graveler,
+ [SPECIES_GOLEM] = gMonIcon_Golem,
+ [SPECIES_PONYTA] = gMonIcon_Ponyta,
+ [SPECIES_RAPIDASH] = gMonIcon_Rapidash,
+ [SPECIES_SLOWPOKE] = gMonIcon_Slowpoke,
+ [SPECIES_SLOWBRO] = gMonIcon_Slowbro,
+ [SPECIES_MAGNEMITE] = gMonIcon_Magnemite,
+ [SPECIES_MAGNETON] = gMonIcon_Magneton,
+ [SPECIES_FARFETCHD] = gMonIcon_Farfetchd,
+ [SPECIES_DODUO] = gMonIcon_Doduo,
+ [SPECIES_DODRIO] = gMonIcon_Dodrio,
+ [SPECIES_SEEL] = gMonIcon_Seel,
+ [SPECIES_DEWGONG] = gMonIcon_Dewgong,
+ [SPECIES_GRIMER] = gMonIcon_Grimer,
+ [SPECIES_MUK] = gMonIcon_Muk,
+ [SPECIES_SHELLDER] = gMonIcon_Shellder,
+ [SPECIES_CLOYSTER] = gMonIcon_Cloyster,
+ [SPECIES_GASTLY] = gMonIcon_Gastly,
+ [SPECIES_HAUNTER] = gMonIcon_Haunter,
+ [SPECIES_GENGAR] = gMonIcon_Gengar,
+ [SPECIES_ONIX] = gMonIcon_Onix,
+ [SPECIES_DROWZEE] = gMonIcon_Drowzee,
+ [SPECIES_HYPNO] = gMonIcon_Hypno,
+ [SPECIES_KRABBY] = gMonIcon_Krabby,
+ [SPECIES_KINGLER] = gMonIcon_Kingler,
+ [SPECIES_VOLTORB] = gMonIcon_Voltorb,
+ [SPECIES_ELECTRODE] = gMonIcon_Electrode,
+ [SPECIES_EXEGGCUTE] = gMonIcon_Exeggcute,
+ [SPECIES_EXEGGUTOR] = gMonIcon_Exeggutor,
+ [SPECIES_CUBONE] = gMonIcon_Cubone,
+ [SPECIES_MAROWAK] = gMonIcon_Marowak,
+ [SPECIES_HITMONLEE] = gMonIcon_Hitmonlee,
+ [SPECIES_HITMONCHAN] = gMonIcon_Hitmonchan,
+ [SPECIES_LICKITUNG] = gMonIcon_Lickitung,
+ [SPECIES_KOFFING] = gMonIcon_Koffing,
+ [SPECIES_WEEZING] = gMonIcon_Weezing,
+ [SPECIES_RHYHORN] = gMonIcon_Rhyhorn,
+ [SPECIES_RHYDON] = gMonIcon_Rhydon,
+ [SPECIES_CHANSEY] = gMonIcon_Chansey,
+ [SPECIES_TANGELA] = gMonIcon_Tangela,
+ [SPECIES_KANGASKHAN] = gMonIcon_Kangaskhan,
+ [SPECIES_HORSEA] = gMonIcon_Horsea,
+ [SPECIES_SEADRA] = gMonIcon_Seadra,
+ [SPECIES_GOLDEEN] = gMonIcon_Goldeen,
+ [SPECIES_SEAKING] = gMonIcon_Seaking,
+ [SPECIES_STARYU] = gMonIcon_Staryu,
+ [SPECIES_STARMIE] = gMonIcon_Starmie,
+ [SPECIES_MR_MIME] = gMonIcon_Mrmime,
+ [SPECIES_SCYTHER] = gMonIcon_Scyther,
+ [SPECIES_JYNX] = gMonIcon_Jynx,
+ [SPECIES_ELECTABUZZ] = gMonIcon_Electabuzz,
+ [SPECIES_MAGMAR] = gMonIcon_Magmar,
+ [SPECIES_PINSIR] = gMonIcon_Pinsir,
+ [SPECIES_TAUROS] = gMonIcon_Tauros,
+ [SPECIES_MAGIKARP] = gMonIcon_Magikarp,
+ [SPECIES_GYARADOS] = gMonIcon_Gyarados,
+ [SPECIES_LAPRAS] = gMonIcon_Lapras,
+ [SPECIES_DITTO] = gMonIcon_Ditto,
+ [SPECIES_EEVEE] = gMonIcon_Eevee,
+ [SPECIES_VAPOREON] = gMonIcon_Vaporeon,
+ [SPECIES_JOLTEON] = gMonIcon_Jolteon,
+ [SPECIES_FLAREON] = gMonIcon_Flareon,
+ [SPECIES_PORYGON] = gMonIcon_Porygon,
+ [SPECIES_OMANYTE] = gMonIcon_Omanyte,
+ [SPECIES_OMASTAR] = gMonIcon_Omastar,
+ [SPECIES_KABUTO] = gMonIcon_Kabuto,
+ [SPECIES_KABUTOPS] = gMonIcon_Kabutops,
+ [SPECIES_AERODACTYL] = gMonIcon_Aerodactyl,
+ [SPECIES_SNORLAX] = gMonIcon_Snorlax,
+ [SPECIES_ARTICUNO] = gMonIcon_Articuno,
+ [SPECIES_ZAPDOS] = gMonIcon_Zapdos,
+ [SPECIES_MOLTRES] = gMonIcon_Moltres,
+ [SPECIES_DRATINI] = gMonIcon_Dratini,
+ [SPECIES_DRAGONAIR] = gMonIcon_Dragonair,
+ [SPECIES_DRAGONITE] = gMonIcon_Dragonite,
+ [SPECIES_MEWTWO] = gMonIcon_Mewtwo,
+ [SPECIES_MEW] = gMonIcon_Mew,
+ [SPECIES_CHIKORITA] = gMonIcon_Chikorita,
+ [SPECIES_BAYLEEF] = gMonIcon_Bayleef,
+ [SPECIES_MEGANIUM] = gMonIcon_Meganium,
+ [SPECIES_CYNDAQUIL] = gMonIcon_Cyndaquil,
+ [SPECIES_QUILAVA] = gMonIcon_Quilava,
+ [SPECIES_TYPHLOSION] = gMonIcon_Typhlosion,
+ [SPECIES_TOTODILE] = gMonIcon_Totodile,
+ [SPECIES_CROCONAW] = gMonIcon_Croconaw,
+ [SPECIES_FERALIGATR] = gMonIcon_Feraligatr,
+ [SPECIES_SENTRET] = gMonIcon_Sentret,
+ [SPECIES_FURRET] = gMonIcon_Furret,
+ [SPECIES_HOOTHOOT] = gMonIcon_Hoothoot,
+ [SPECIES_NOCTOWL] = gMonIcon_Noctowl,
+ [SPECIES_LEDYBA] = gMonIcon_Ledyba,
+ [SPECIES_LEDIAN] = gMonIcon_Ledian,
+ [SPECIES_SPINARAK] = gMonIcon_Spinarak,
+ [SPECIES_ARIADOS] = gMonIcon_Ariados,
+ [SPECIES_CROBAT] = gMonIcon_Crobat,
+ [SPECIES_CHINCHOU] = gMonIcon_Chinchou,
+ [SPECIES_LANTURN] = gMonIcon_Lanturn,
+ [SPECIES_PICHU] = gMonIcon_Pichu,
+ [SPECIES_CLEFFA] = gMonIcon_Cleffa,
+ [SPECIES_IGGLYBUFF] = gMonIcon_Igglybuff,
+ [SPECIES_TOGEPI] = gMonIcon_Togepi,
+ [SPECIES_TOGETIC] = gMonIcon_Togetic,
+ [SPECIES_NATU] = gMonIcon_Natu,
+ [SPECIES_XATU] = gMonIcon_Xatu,
+ [SPECIES_MAREEP] = gMonIcon_Mareep,
+ [SPECIES_FLAAFFY] = gMonIcon_Flaaffy,
+ [SPECIES_AMPHAROS] = gMonIcon_Ampharos,
+ [SPECIES_BELLOSSOM] = gMonIcon_Bellossom,
+ [SPECIES_MARILL] = gMonIcon_Marill,
+ [SPECIES_AZUMARILL] = gMonIcon_Azumarill,
+ [SPECIES_SUDOWOODO] = gMonIcon_Sudowoodo,
+ [SPECIES_POLITOED] = gMonIcon_Politoed,
+ [SPECIES_HOPPIP] = gMonIcon_Hoppip,
+ [SPECIES_SKIPLOOM] = gMonIcon_Skiploom,
+ [SPECIES_JUMPLUFF] = gMonIcon_Jumpluff,
+ [SPECIES_AIPOM] = gMonIcon_Aipom,
+ [SPECIES_SUNKERN] = gMonIcon_Sunkern,
+ [SPECIES_SUNFLORA] = gMonIcon_Sunflora,
+ [SPECIES_YANMA] = gMonIcon_Yanma,
+ [SPECIES_WOOPER] = gMonIcon_Wooper,
+ [SPECIES_QUAGSIRE] = gMonIcon_Quagsire,
+ [SPECIES_ESPEON] = gMonIcon_Espeon,
+ [SPECIES_UMBREON] = gMonIcon_Umbreon,
+ [SPECIES_MURKROW] = gMonIcon_Murkrow,
+ [SPECIES_SLOWKING] = gMonIcon_Slowking,
+ [SPECIES_MISDREAVUS] = gMonIcon_Misdreavus,
+ [SPECIES_UNOWN] = gMonIcon_UnownA,
+ [SPECIES_WOBBUFFET] = gMonIcon_Wobbuffet,
+ [SPECIES_GIRAFARIG] = gMonIcon_Girafarig,
+ [SPECIES_PINECO] = gMonIcon_Pineco,
+ [SPECIES_FORRETRESS] = gMonIcon_Forretress,
+ [SPECIES_DUNSPARCE] = gMonIcon_Dunsparce,
+ [SPECIES_GLIGAR] = gMonIcon_Gligar,
+ [SPECIES_STEELIX] = gMonIcon_Steelix,
+ [SPECIES_SNUBBULL] = gMonIcon_Snubbull,
+ [SPECIES_GRANBULL] = gMonIcon_Granbull,
+ [SPECIES_QWILFISH] = gMonIcon_Qwilfish,
+ [SPECIES_SCIZOR] = gMonIcon_Scizor,
+ [SPECIES_SHUCKLE] = gMonIcon_Shuckle,
+ [SPECIES_HERACROSS] = gMonIcon_Heracross,
+ [SPECIES_SNEASEL] = gMonIcon_Sneasel,
+ [SPECIES_TEDDIURSA] = gMonIcon_Teddiursa,
+ [SPECIES_URSARING] = gMonIcon_Ursaring,
+ [SPECIES_SLUGMA] = gMonIcon_Slugma,
+ [SPECIES_MAGCARGO] = gMonIcon_Magcargo,
+ [SPECIES_SWINUB] = gMonIcon_Swinub,
+ [SPECIES_PILOSWINE] = gMonIcon_Piloswine,
+ [SPECIES_CORSOLA] = gMonIcon_Corsola,
+ [SPECIES_REMORAID] = gMonIcon_Remoraid,
+ [SPECIES_OCTILLERY] = gMonIcon_Octillery,
+ [SPECIES_DELIBIRD] = gMonIcon_Delibird,
+ [SPECIES_MANTINE] = gMonIcon_Mantine,
+ [SPECIES_SKARMORY] = gMonIcon_Skarmory,
+ [SPECIES_HOUNDOUR] = gMonIcon_Houndour,
+ [SPECIES_HOUNDOOM] = gMonIcon_Houndoom,
+ [SPECIES_KINGDRA] = gMonIcon_Kingdra,
+ [SPECIES_PHANPY] = gMonIcon_Phanpy,
+ [SPECIES_DONPHAN] = gMonIcon_Donphan,
+ [SPECIES_PORYGON2] = gMonIcon_Porygon2,
+ [SPECIES_STANTLER] = gMonIcon_Stantler,
+ [SPECIES_SMEARGLE] = gMonIcon_Smeargle,
+ [SPECIES_TYROGUE] = gMonIcon_Tyrogue,
+ [SPECIES_HITMONTOP] = gMonIcon_Hitmontop,
+ [SPECIES_SMOOCHUM] = gMonIcon_Smoochum,
+ [SPECIES_ELEKID] = gMonIcon_Elekid,
+ [SPECIES_MAGBY] = gMonIcon_Magby,
+ [SPECIES_MILTANK] = gMonIcon_Miltank,
+ [SPECIES_BLISSEY] = gMonIcon_Blissey,
+ [SPECIES_RAIKOU] = gMonIcon_Raikou,
+ [SPECIES_ENTEI] = gMonIcon_Entei,
+ [SPECIES_SUICUNE] = gMonIcon_Suicune,
+ [SPECIES_LARVITAR] = gMonIcon_Larvitar,
+ [SPECIES_PUPITAR] = gMonIcon_Pupitar,
+ [SPECIES_TYRANITAR] = gMonIcon_Tyranitar,
+ [SPECIES_LUGIA] = gMonIcon_Lugia,
+ [SPECIES_HO_OH] = gMonIcon_HoOh,
+ [SPECIES_CELEBI] = gMonIcon_Celebi,
+ [SPECIES_OLD_UNOWN_B] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_C] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_D] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_E] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_F] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_G] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_H] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_I] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_J] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_K] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_L] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_M] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_N] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_O] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_P] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_Q] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_R] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_S] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_T] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_U] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_V] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_W] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_X] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_Y] = gMonIcon_QuestionMark,
+ [SPECIES_OLD_UNOWN_Z] = gMonIcon_QuestionMark,
+ [SPECIES_TREECKO] = gMonIcon_Treecko,
+ [SPECIES_GROVYLE] = gMonIcon_Grovyle,
+ [SPECIES_SCEPTILE] = gMonIcon_Sceptile,
+ [SPECIES_TORCHIC] = gMonIcon_Torchic,
+ [SPECIES_COMBUSKEN] = gMonIcon_Combusken,
+ [SPECIES_BLAZIKEN] = gMonIcon_Blaziken,
+ [SPECIES_MUDKIP] = gMonIcon_Mudkip,
+ [SPECIES_MARSHTOMP] = gMonIcon_Marshtomp,
+ [SPECIES_SWAMPERT] = gMonIcon_Swampert,
+ [SPECIES_POOCHYENA] = gMonIcon_Poochyena,
+ [SPECIES_MIGHTYENA] = gMonIcon_Mightyena,
+ [SPECIES_ZIGZAGOON] = gMonIcon_Zigzagoon,
+ [SPECIES_LINOONE] = gMonIcon_Linoone,
+ [SPECIES_WURMPLE] = gMonIcon_Wurmple,
+ [SPECIES_SILCOON] = gMonIcon_Silcoon,
+ [SPECIES_BEAUTIFLY] = gMonIcon_Beautifly,
+ [SPECIES_CASCOON] = gMonIcon_Cascoon,
+ [SPECIES_DUSTOX] = gMonIcon_Dustox,
+ [SPECIES_LOTAD] = gMonIcon_Lotad,
+ [SPECIES_LOMBRE] = gMonIcon_Lombre,
+ [SPECIES_LUDICOLO] = gMonIcon_Ludicolo,
+ [SPECIES_SEEDOT] = gMonIcon_Seedot,
+ [SPECIES_NUZLEAF] = gMonIcon_Nuzleaf,
+ [SPECIES_SHIFTRY] = gMonIcon_Shiftry,
+ [SPECIES_NINCADA] = gMonIcon_Nincada,
+ [SPECIES_NINJASK] = gMonIcon_Ninjask,
+ [SPECIES_SHEDINJA] = gMonIcon_Shedinja,
+ [SPECIES_TAILLOW] = gMonIcon_Taillow,
+ [SPECIES_SWELLOW] = gMonIcon_Swellow,
+ [SPECIES_SHROOMISH] = gMonIcon_Shroomish,
+ [SPECIES_BRELOOM] = gMonIcon_Breloom,
+ [SPECIES_SPINDA] = gMonIcon_Spinda,
+ [SPECIES_WINGULL] = gMonIcon_Wingull,
+ [SPECIES_PELIPPER] = gMonIcon_Pelipper,
+ [SPECIES_SURSKIT] = gMonIcon_Surskit,
+ [SPECIES_MASQUERAIN] = gMonIcon_Masquerain,
+ [SPECIES_WAILMER] = gMonIcon_Wailmer,
+ [SPECIES_WAILORD] = gMonIcon_Wailord,
+ [SPECIES_SKITTY] = gMonIcon_Skitty,
+ [SPECIES_DELCATTY] = gMonIcon_Delcatty,
+ [SPECIES_KECLEON] = gMonIcon_Kecleon,
+ [SPECIES_BALTOY] = gMonIcon_Baltoy,
+ [SPECIES_CLAYDOL] = gMonIcon_Claydol,
+ [SPECIES_NOSEPASS] = gMonIcon_Nosepass,
+ [SPECIES_TORKOAL] = gMonIcon_Torkoal,
+ [SPECIES_SABLEYE] = gMonIcon_Sableye,
+ [SPECIES_BARBOACH] = gMonIcon_Barboach,
+ [SPECIES_WHISCASH] = gMonIcon_Whiscash,
+ [SPECIES_LUVDISC] = gMonIcon_Luvdisc,
+ [SPECIES_CORPHISH] = gMonIcon_Corphish,
+ [SPECIES_CRAWDAUNT] = gMonIcon_Crawdaunt,
+ [SPECIES_FEEBAS] = gMonIcon_Feebas,
+ [SPECIES_MILOTIC] = gMonIcon_Milotic,
+ [SPECIES_CARVANHA] = gMonIcon_Carvanha,
+ [SPECIES_SHARPEDO] = gMonIcon_Sharpedo,
+ [SPECIES_TRAPINCH] = gMonIcon_Trapinch,
+ [SPECIES_VIBRAVA] = gMonIcon_Vibrava,
+ [SPECIES_FLYGON] = gMonIcon_Flygon,
+ [SPECIES_MAKUHITA] = gMonIcon_Makuhita,
+ [SPECIES_HARIYAMA] = gMonIcon_Hariyama,
+ [SPECIES_ELECTRIKE] = gMonIcon_Electrike,
+ [SPECIES_MANECTRIC] = gMonIcon_Manectric,
+ [SPECIES_NUMEL] = gMonIcon_Numel,
+ [SPECIES_CAMERUPT] = gMonIcon_Camerupt,
+ [SPECIES_SPHEAL] = gMonIcon_Spheal,
+ [SPECIES_SEALEO] = gMonIcon_Sealeo,
+ [SPECIES_WALREIN] = gMonIcon_Walrein,
+ [SPECIES_CACNEA] = gMonIcon_Cacnea,
+ [SPECIES_CACTURNE] = gMonIcon_Cacturne,
+ [SPECIES_SNORUNT] = gMonIcon_Snorunt,
+ [SPECIES_GLALIE] = gMonIcon_Glalie,
+ [SPECIES_LUNATONE] = gMonIcon_Lunatone,
+ [SPECIES_SOLROCK] = gMonIcon_Solrock,
+ [SPECIES_AZURILL] = gMonIcon_Azurill,
+ [SPECIES_SPOINK] = gMonIcon_Spoink,
+ [SPECIES_GRUMPIG] = gMonIcon_Grumpig,
+ [SPECIES_PLUSLE] = gMonIcon_Plusle,
+ [SPECIES_MINUN] = gMonIcon_Minun,
+ [SPECIES_MAWILE] = gMonIcon_Mawile,
+ [SPECIES_MEDITITE] = gMonIcon_Meditite,
+ [SPECIES_MEDICHAM] = gMonIcon_Medicham,
+ [SPECIES_SWABLU] = gMonIcon_Swablu,
+ [SPECIES_ALTARIA] = gMonIcon_Altaria,
+ [SPECIES_WYNAUT] = gMonIcon_Wynaut,
+ [SPECIES_DUSKULL] = gMonIcon_Duskull,
+ [SPECIES_DUSCLOPS] = gMonIcon_Dusclops,
+ [SPECIES_ROSELIA] = gMonIcon_Roselia,
+ [SPECIES_SLAKOTH] = gMonIcon_Slakoth,
+ [SPECIES_VIGOROTH] = gMonIcon_Vigoroth,
+ [SPECIES_SLAKING] = gMonIcon_Slaking,
+ [SPECIES_GULPIN] = gMonIcon_Gulpin,
+ [SPECIES_SWALOT] = gMonIcon_Swalot,
+ [SPECIES_TROPIUS] = gMonIcon_Tropius,
+ [SPECIES_WHISMUR] = gMonIcon_Whismur,
+ [SPECIES_LOUDRED] = gMonIcon_Loudred,
+ [SPECIES_EXPLOUD] = gMonIcon_Exploud,
+ [SPECIES_CLAMPERL] = gMonIcon_Clamperl,
+ [SPECIES_HUNTAIL] = gMonIcon_Huntail,
+ [SPECIES_GOREBYSS] = gMonIcon_Gorebyss,
+ [SPECIES_ABSOL] = gMonIcon_Absol,
+ [SPECIES_SHUPPET] = gMonIcon_Shuppet,
+ [SPECIES_BANETTE] = gMonIcon_Banette,
+ [SPECIES_SEVIPER] = gMonIcon_Seviper,
+ [SPECIES_ZANGOOSE] = gMonIcon_Zangoose,
+ [SPECIES_RELICANTH] = gMonIcon_Relicanth,
+ [SPECIES_ARON] = gMonIcon_Aron,
+ [SPECIES_LAIRON] = gMonIcon_Lairon,
+ [SPECIES_AGGRON] = gMonIcon_Aggron,
+ [SPECIES_CASTFORM] = gMonIcon_Castform,
+ [SPECIES_VOLBEAT] = gMonIcon_Volbeat,
+ [SPECIES_ILLUMISE] = gMonIcon_Illumise,
+ [SPECIES_LILEEP] = gMonIcon_Lileep,
+ [SPECIES_CRADILY] = gMonIcon_Cradily,
+ [SPECIES_ANORITH] = gMonIcon_Anorith,
+ [SPECIES_ARMALDO] = gMonIcon_Armaldo,
+ [SPECIES_RALTS] = gMonIcon_Ralts,
+ [SPECIES_KIRLIA] = gMonIcon_Kirlia,
+ [SPECIES_GARDEVOIR] = gMonIcon_Gardevoir,
+ [SPECIES_BAGON] = gMonIcon_Bagon,
+ [SPECIES_SHELGON] = gMonIcon_Shelgon,
+ [SPECIES_SALAMENCE] = gMonIcon_Salamence,
+ [SPECIES_BELDUM] = gMonIcon_Beldum,
+ [SPECIES_METANG] = gMonIcon_Metang,
+ [SPECIES_METAGROSS] = gMonIcon_Metagross,
+ [SPECIES_REGIROCK] = gMonIcon_Regirock,
+ [SPECIES_REGICE] = gMonIcon_Regice,
+ [SPECIES_REGISTEEL] = gMonIcon_Registeel,
+ [SPECIES_KYOGRE] = gMonIcon_Kyogre,
+ [SPECIES_GROUDON] = gMonIcon_Groudon,
+ [SPECIES_RAYQUAZA] = gMonIcon_Rayquaza,
+ [SPECIES_LATIAS] = gMonIcon_Latias,
+ [SPECIES_LATIOS] = gMonIcon_Latios,
+ [SPECIES_JIRACHI] = gMonIcon_Jirachi,
+ [SPECIES_DEOXYS] = gMonIcon_Deoxys,
+ [SPECIES_CHIMECHO] = gMonIcon_Chimecho,
+ [SPECIES_EGG] = gMonIcon_Egg,
+ [SPECIES_UNOWN_B] = gMonIcon_UnownB,
+ [SPECIES_UNOWN_C] = gMonIcon_UnownC,
+ [SPECIES_UNOWN_D] = gMonIcon_UnownD,
+ [SPECIES_UNOWN_E] = gMonIcon_UnownE,
+ [SPECIES_UNOWN_F] = gMonIcon_UnownF,
+ [SPECIES_UNOWN_G] = gMonIcon_UnownG,
+ [SPECIES_UNOWN_H] = gMonIcon_UnownH,
+ [SPECIES_UNOWN_I] = gMonIcon_UnownI,
+ [SPECIES_UNOWN_J] = gMonIcon_UnownJ,
+ [SPECIES_UNOWN_K] = gMonIcon_UnownK,
+ [SPECIES_UNOWN_L] = gMonIcon_UnownL,
+ [SPECIES_UNOWN_M] = gMonIcon_UnownM,
+ [SPECIES_UNOWN_N] = gMonIcon_UnownN,
+ [SPECIES_UNOWN_O] = gMonIcon_UnownO,
+ [SPECIES_UNOWN_P] = gMonIcon_UnownP,
+ [SPECIES_UNOWN_Q] = gMonIcon_UnownQ,
+ [SPECIES_UNOWN_R] = gMonIcon_UnownR,
+ [SPECIES_UNOWN_S] = gMonIcon_UnownS,
+ [SPECIES_UNOWN_T] = gMonIcon_UnownT,
+ [SPECIES_UNOWN_U] = gMonIcon_UnownU,
+ [SPECIES_UNOWN_V] = gMonIcon_UnownV,
+ [SPECIES_UNOWN_W] = gMonIcon_UnownW,
+ [SPECIES_UNOWN_X] = gMonIcon_UnownX,
+ [SPECIES_UNOWN_Y] = gMonIcon_UnownY,
+ [SPECIES_UNOWN_Z] = gMonIcon_UnownZ,
+ [SPECIES_UNOWN_EMARK] = gMonIcon_UnownExclamationMark,
+ [SPECIES_UNOWN_QMARK] = gMonIcon_UnownQuestionMark
+};
+
+const u8 gMonIconPaletteIndices[] = {
+ [SPECIES_NONE] = 0,
+ [SPECIES_BULBASAUR] = 1,
+ [SPECIES_IVYSAUR] = 1,
+ [SPECIES_VENUSAUR] = 1,
+ [SPECIES_CHARMANDER] = 0,
+ [SPECIES_CHARMELEON] = 0,
+ [SPECIES_CHARIZARD] = 0,
+ [SPECIES_SQUIRTLE] = 0,
+ [SPECIES_WARTORTLE] = 2,
+ [SPECIES_BLASTOISE] = 2,
+ [SPECIES_CATERPIE] = 1,
+ [SPECIES_METAPOD] = 1,
+ [SPECIES_BUTTERFREE] = 0,
+ [SPECIES_WEEDLE] = 1,
+ [SPECIES_KAKUNA] = 2,
+ [SPECIES_BEEDRILL] = 2,
+ [SPECIES_PIDGEY] = 0,
+ [SPECIES_PIDGEOTTO] = 0,
+ [SPECIES_PIDGEOT] = 0,
+ [SPECIES_RATTATA] = 2,
+ [SPECIES_RATICATE] = 1,
+ [SPECIES_SPEAROW] = 0,
+ [SPECIES_FEAROW] = 0,
+ [SPECIES_EKANS] = 2,
+ [SPECIES_ARBOK] = 2,
+ [SPECIES_PIKACHU] = 2,
+ [SPECIES_RAICHU] = 0,
+ [SPECIES_SANDSHREW] = 2,
+ [SPECIES_SANDSLASH] = 2,
+ [SPECIES_NIDORAN_F] = 2,
+ [SPECIES_NIDORINA] = 2,
+ [SPECIES_NIDOQUEEN] = 2,
+ [SPECIES_NIDORAN_M] = 2,
+ [SPECIES_NIDORINO] = 2,
+ [SPECIES_NIDOKING] = 2,
+ [SPECIES_CLEFAIRY] = 0,
+ [SPECIES_CLEFABLE] = 0,
+ [SPECIES_VULPIX] = 2,
+ [SPECIES_NINETALES] = 1,
+ [SPECIES_JIGGLYPUFF] = 0,
+ [SPECIES_WIGGLYTUFF] = 0,
+ [SPECIES_ZUBAT] = 2,
+ [SPECIES_GOLBAT] = 2,
+ [SPECIES_ODDISH] = 1,
+ [SPECIES_GLOOM] = 0,
+ [SPECIES_VILEPLUME] = 0,
+ [SPECIES_PARAS] = 0,
+ [SPECIES_PARASECT] = 0,
+ [SPECIES_VENONAT] = 0,
+ [SPECIES_VENOMOTH] = 2,
+ [SPECIES_DIGLETT] = 2,
+ [SPECIES_DUGTRIO] = 2,
+ [SPECIES_MEOWTH] = 1,
+ [SPECIES_PERSIAN] = 1,
+ [SPECIES_PSYDUCK] = 1,
+ [SPECIES_GOLDUCK] = 2,
+ [SPECIES_MANKEY] = 1,
+ [SPECIES_PRIMEAPE] = 2,
+ [SPECIES_GROWLITHE] = 0,
+ [SPECIES_ARCANINE] = 0,
+ [SPECIES_POLIWAG] = 0,
+ [SPECIES_POLIWHIRL] = 0,
+ [SPECIES_POLIWRATH] = 0,
+ [SPECIES_ABRA] = 2,
+ [SPECIES_KADABRA] = 2,
+ [SPECIES_ALAKAZAM] = 2,
+ [SPECIES_MACHOP] = 0,
+ [SPECIES_MACHOKE] = 2,
+ [SPECIES_MACHAMP] = 0,
+ [SPECIES_BELLSPROUT] = 1,
+ [SPECIES_WEEPINBELL] = 1,
+ [SPECIES_VICTREEBEL] = 1,
+ [SPECIES_TENTACOOL] = 2,
+ [SPECIES_TENTACRUEL] = 2,
+ [SPECIES_GEODUDE] = 1,
+ [SPECIES_GRAVELER] = 1,
+ [SPECIES_GOLEM] = 1,
+ [SPECIES_PONYTA] = 0,
+ [SPECIES_RAPIDASH] = 0,
+ [SPECIES_SLOWPOKE] = 0,
+ [SPECIES_SLOWBRO] = 0,
+ [SPECIES_MAGNEMITE] = 0,
+ [SPECIES_MAGNETON] = 0,
+ [SPECIES_FARFETCHD] = 1,
+ [SPECIES_DODUO] = 2,
+ [SPECIES_DODRIO] = 2,
+ [SPECIES_SEEL] = 2,
+ [SPECIES_DEWGONG] = 2,
+ [SPECIES_GRIMER] = 2,
+ [SPECIES_MUK] = 2,
+ [SPECIES_SHELLDER] = 2,
+ [SPECIES_CLOYSTER] = 2,
+ [SPECIES_GASTLY] = 2,
+ [SPECIES_HAUNTER] = 2,
+ [SPECIES_GENGAR] = 2,
+ [SPECIES_ONIX] = 2,
+ [SPECIES_DROWZEE] = 2,
+ [SPECIES_HYPNO] = 1,
+ [SPECIES_KRABBY] = 2,
+ [SPECIES_KINGLER] = 2,
+ [SPECIES_VOLTORB] = 0,
+ [SPECIES_ELECTRODE] = 0,
+ [SPECIES_EXEGGCUTE] = 0,
+ [SPECIES_EXEGGUTOR] = 1,
+ [SPECIES_CUBONE] = 1,
+ [SPECIES_MAROWAK] = 1,
+ [SPECIES_HITMONLEE] = 2,
+ [SPECIES_HITMONCHAN] = 2,
+ [SPECIES_LICKITUNG] = 1,
+ [SPECIES_KOFFING] = 2,
+ [SPECIES_WEEZING] = 2,
+ [SPECIES_RHYHORN] = 1,
+ [SPECIES_RHYDON] = 1,
+ [SPECIES_CHANSEY] = 0,
+ [SPECIES_TANGELA] = 0,
+ [SPECIES_KANGASKHAN] = 1,
+ [SPECIES_HORSEA] = 0,
+ [SPECIES_SEADRA] = 0,
+ [SPECIES_GOLDEEN] = 0,
+ [SPECIES_SEAKING] = 0,
+ [SPECIES_STARYU] = 2,
+ [SPECIES_STARMIE] = 2,
+ [SPECIES_MR_MIME] = 0,
+ [SPECIES_SCYTHER] = 1,
+ [SPECIES_JYNX] = 2,
+ [SPECIES_ELECTABUZZ] = 1,
+ [SPECIES_MAGMAR] = 0,
+ [SPECIES_PINSIR] = 2,
+ [SPECIES_TAUROS] = 2,
+ [SPECIES_MAGIKARP] = 0,
+ [SPECIES_GYARADOS] = 0,
+ [SPECIES_LAPRAS] = 2,
+ [SPECIES_DITTO] = 2,
+ [SPECIES_EEVEE] = 2,
+ [SPECIES_VAPOREON] = 0,
+ [SPECIES_JOLTEON] = 0,
+ [SPECIES_FLAREON] = 0,
+ [SPECIES_PORYGON] = 0,
+ [SPECIES_OMANYTE] = 0,
+ [SPECIES_OMASTAR] = 0,
+ [SPECIES_KABUTO] = 2,
+ [SPECIES_KABUTOPS] = 2,
+ [SPECIES_AERODACTYL] = 0,
+ [SPECIES_SNORLAX] = 1,
+ [SPECIES_ARTICUNO] = 0,
+ [SPECIES_ZAPDOS] = 0,
+ [SPECIES_MOLTRES] = 0,
+ [SPECIES_DRATINI] = 0,
+ [SPECIES_DRAGONAIR] = 0,
+ [SPECIES_DRAGONITE] = 2,
+ [SPECIES_MEWTWO] = 2,
+ [SPECIES_MEW] = 0,
+ [SPECIES_CHIKORITA] = 1,
+ [SPECIES_BAYLEEF] = 1,
+ [SPECIES_MEGANIUM] = 1,
+ [SPECIES_CYNDAQUIL] = 1,
+ [SPECIES_QUILAVA] = 1,
+ [SPECIES_TYPHLOSION] = 1,
+ [SPECIES_TOTODILE] = 2,
+ [SPECIES_CROCONAW] = 2,
+ [SPECIES_FERALIGATR] = 2,
+ [SPECIES_SENTRET] = 2,
+ [SPECIES_FURRET] = 2,
+ [SPECIES_HOOTHOOT] = 2,
+ [SPECIES_NOCTOWL] = 2,
+ [SPECIES_LEDYBA] = 0,
+ [SPECIES_LEDIAN] = 0,
+ [SPECIES_SPINARAK] = 1,
+ [SPECIES_ARIADOS] = 0,
+ [SPECIES_CROBAT] = 2,
+ [SPECIES_CHINCHOU] = 2,
+ [SPECIES_LANTURN] = 0,
+ [SPECIES_PICHU] = 0,
+ [SPECIES_CLEFFA] = 0,
+ [SPECIES_IGGLYBUFF] = 1,
+ [SPECIES_TOGEPI] = 2,
+ [SPECIES_TOGETIC] = 2,
+ [SPECIES_NATU] = 0,
+ [SPECIES_XATU] = 0,
+ [SPECIES_MAREEP] = 2,
+ [SPECIES_FLAAFFY] = 0,
+ [SPECIES_AMPHAROS] = 0,
+ [SPECIES_BELLOSSOM] = 1,
+ [SPECIES_MARILL] = 2,
+ [SPECIES_AZUMARILL] = 2,
+ [SPECIES_SUDOWOODO] = 1,
+ [SPECIES_POLITOED] = 1,
+ [SPECIES_HOPPIP] = 1,
+ [SPECIES_SKIPLOOM] = 1,
+ [SPECIES_JUMPLUFF] = 2,
+ [SPECIES_AIPOM] = 2,
+ [SPECIES_SUNKERN] = 1,
+ [SPECIES_SUNFLORA] = 1,
+ [SPECIES_YANMA] = 1,
+ [SPECIES_WOOPER] = 0,
+ [SPECIES_QUAGSIRE] = 0,
+ [SPECIES_ESPEON] = 2,
+ [SPECIES_UMBREON] = 2,
+ [SPECIES_MURKROW] = 2,
+ [SPECIES_SLOWKING] = 0,
+ [SPECIES_MISDREAVUS] = 0,
+ [SPECIES_UNOWN] = 0,
+ [SPECIES_WOBBUFFET] = 0,
+ [SPECIES_GIRAFARIG] = 1,
+ [SPECIES_PINECO] = 0,
+ [SPECIES_FORRETRESS] = 2,
+ [SPECIES_DUNSPARCE] = 2,
+ [SPECIES_GLIGAR] = 2,
+ [SPECIES_STEELIX] = 0,
+ [SPECIES_SNUBBULL] = 0,
+ [SPECIES_GRANBULL] = 2,
+ [SPECIES_QWILFISH] = 0,
+ [SPECIES_SCIZOR] = 0,
+ [SPECIES_SHUCKLE] = 1,
+ [SPECIES_HERACROSS] = 2,
+ [SPECIES_SNEASEL] = 0,
+ [SPECIES_TEDDIURSA] = 0,
+ [SPECIES_URSARING] = 2,
+ [SPECIES_SLUGMA] = 0,
+ [SPECIES_MAGCARGO] = 0,
+ [SPECIES_SWINUB] = 2,
+ [SPECIES_PILOSWINE] = 2,
+ [SPECIES_CORSOLA] = 0,
+ [SPECIES_REMORAID] = 0,
+ [SPECIES_OCTILLERY] = 0,
+ [SPECIES_DELIBIRD] = 0,
+ [SPECIES_MANTINE] = 2,
+ [SPECIES_SKARMORY] = 0,
+ [SPECIES_HOUNDOUR] = 0,
+ [SPECIES_HOUNDOOM] = 0,
+ [SPECIES_KINGDRA] = 0,
+ [SPECIES_PHANPY] = 0,
+ [SPECIES_DONPHAN] = 0,
+ [SPECIES_PORYGON2] = 0,
+ [SPECIES_STANTLER] = 2,
+ [SPECIES_SMEARGLE] = 1,
+ [SPECIES_TYROGUE] = 2,
+ [SPECIES_HITMONTOP] = 2,
+ [SPECIES_SMOOCHUM] = 1,
+ [SPECIES_ELEKID] = 1,
+ [SPECIES_MAGBY] = 1,
+ [SPECIES_MILTANK] = 1,
+ [SPECIES_BLISSEY] = 1,
+ [SPECIES_RAIKOU] = 0,
+ [SPECIES_ENTEI] = 2,
+ [SPECIES_SUICUNE] = 0,
+ [SPECIES_LARVITAR] = 1,
+ [SPECIES_PUPITAR] = 0,
+ [SPECIES_TYRANITAR] = 1,
+ [SPECIES_LUGIA] = 0,
+ [SPECIES_HO_OH] = 1,
+ [SPECIES_CELEBI] = 1,
+ [SPECIES_OLD_UNOWN_B] = 0,
+ [SPECIES_OLD_UNOWN_C] = 0,
+ [SPECIES_OLD_UNOWN_D] = 0,
+ [SPECIES_OLD_UNOWN_E] = 0,
+ [SPECIES_OLD_UNOWN_F] = 0,
+ [SPECIES_OLD_UNOWN_G] = 0,
+ [SPECIES_OLD_UNOWN_H] = 0,
+ [SPECIES_OLD_UNOWN_I] = 0,
+ [SPECIES_OLD_UNOWN_J] = 0,
+ [SPECIES_OLD_UNOWN_K] = 0,
+ [SPECIES_OLD_UNOWN_L] = 0,
+ [SPECIES_OLD_UNOWN_M] = 0,
+ [SPECIES_OLD_UNOWN_N] = 0,
+ [SPECIES_OLD_UNOWN_O] = 0,
+ [SPECIES_OLD_UNOWN_P] = 0,
+ [SPECIES_OLD_UNOWN_Q] = 0,
+ [SPECIES_OLD_UNOWN_R] = 0,
+ [SPECIES_OLD_UNOWN_S] = 0,
+ [SPECIES_OLD_UNOWN_T] = 0,
+ [SPECIES_OLD_UNOWN_U] = 0,
+ [SPECIES_OLD_UNOWN_V] = 0,
+ [SPECIES_OLD_UNOWN_W] = 0,
+ [SPECIES_OLD_UNOWN_X] = 0,
+ [SPECIES_OLD_UNOWN_Y] = 0,
+ [SPECIES_OLD_UNOWN_Z] = 0,
+ [SPECIES_TREECKO] = 1,
+ [SPECIES_GROVYLE] = 0,
+ [SPECIES_SCEPTILE] = 1,
+ [SPECIES_TORCHIC] = 0,
+ [SPECIES_COMBUSKEN] = 0,
+ [SPECIES_BLAZIKEN] = 0,
+ [SPECIES_MUDKIP] = 0,
+ [SPECIES_MARSHTOMP] = 0,
+ [SPECIES_SWAMPERT] = 0,
+ [SPECIES_POOCHYENA] = 2,
+ [SPECIES_MIGHTYENA] = 2,
+ [SPECIES_ZIGZAGOON] = 2,
+ [SPECIES_LINOONE] = 2,
+ [SPECIES_WURMPLE] = 0,
+ [SPECIES_SILCOON] = 2,
+ [SPECIES_BEAUTIFLY] = 0,
+ [SPECIES_CASCOON] = 2,
+ [SPECIES_DUSTOX] = 1,
+ [SPECIES_LOTAD] = 1,
+ [SPECIES_LOMBRE] = 1,
+ [SPECIES_LUDICOLO] = 1,
+ [SPECIES_SEEDOT] = 1,
+ [SPECIES_NUZLEAF] = 1,
+ [SPECIES_SHIFTRY] = 0,
+ [SPECIES_NINCADA] = 1,
+ [SPECIES_NINJASK] = 1,
+ [SPECIES_SHEDINJA] = 1,
+ [SPECIES_TAILLOW] = 2,
+ [SPECIES_SWELLOW] = 2,
+ [SPECIES_SHROOMISH] = 1,
+ [SPECIES_BRELOOM] = 1,
+ [SPECIES_SPINDA] = 1,
+ [SPECIES_WINGULL] = 0,
+ [SPECIES_PELIPPER] = 0,
+ [SPECIES_SURSKIT] = 2,
+ [SPECIES_MASQUERAIN] = 0,
+ [SPECIES_WAILMER] = 2,
+ [SPECIES_WAILORD] = 0,
+ [SPECIES_SKITTY] = 0,
+ [SPECIES_DELCATTY] = 2,
+ [SPECIES_KECLEON] = 1,
+ [SPECIES_BALTOY] = 1,
+ [SPECIES_CLAYDOL] = 0,
+ [SPECIES_NOSEPASS] = 0,
+ [SPECIES_TORKOAL] = 1,
+ [SPECIES_SABLEYE] = 2,
+ [SPECIES_BARBOACH] = 0,
+ [SPECIES_WHISCASH] = 0,
+ [SPECIES_LUVDISC] = 0,
+ [SPECIES_CORPHISH] = 0,
+ [SPECIES_CRAWDAUNT] = 0,
+ [SPECIES_FEEBAS] = 2,
+ [SPECIES_MILOTIC] = 0,
+ [SPECIES_CARVANHA] = 0,
+ [SPECIES_SHARPEDO] = 0,
+ [SPECIES_TRAPINCH] = 1,
+ [SPECIES_VIBRAVA] = 1,
+ [SPECIES_FLYGON] = 1,
+ [SPECIES_MAKUHITA] = 2,
+ [SPECIES_HARIYAMA] = 1,
+ [SPECIES_ELECTRIKE] = 1,
+ [SPECIES_MANECTRIC] = 0,
+ [SPECIES_NUMEL] = 1,
+ [SPECIES_CAMERUPT] = 0,
+ [SPECIES_SPHEAL] = 2,
+ [SPECIES_SEALEO] = 2,
+ [SPECIES_WALREIN] = 0,
+ [SPECIES_CACNEA] = 1,
+ [SPECIES_CACTURNE] = 1,
+ [SPECIES_SNORUNT] = 2,
+ [SPECIES_GLALIE] = 0,
+ [SPECIES_LUNATONE] = 1,
+ [SPECIES_SOLROCK] = 0,
+ [SPECIES_AZURILL] = 2,
+ [SPECIES_SPOINK] = 0,
+ [SPECIES_GRUMPIG] = 2,
+ [SPECIES_PLUSLE] = 0,
+ [SPECIES_MINUN] = 0,
+ [SPECIES_MAWILE] = 2,
+ [SPECIES_MEDITITE] = 0,
+ [SPECIES_MEDICHAM] = 0,
+ [SPECIES_SWABLU] = 0,
+ [SPECIES_ALTARIA] = 0,
+ [SPECIES_WYNAUT] = 0,
+ [SPECIES_DUSKULL] = 0,
+ [SPECIES_DUSCLOPS] = 0,
+ [SPECIES_ROSELIA] = 0,
+ [SPECIES_SLAKOTH] = 2,
+ [SPECIES_VIGOROTH] = 2,
+ [SPECIES_SLAKING] = 1,
+ [SPECIES_GULPIN] = 1,
+ [SPECIES_SWALOT] = 2,
+ [SPECIES_TROPIUS] = 1,
+ [SPECIES_WHISMUR] = 0,
+ [SPECIES_LOUDRED] = 2,
+ [SPECIES_EXPLOUD] = 2,
+ [SPECIES_CLAMPERL] = 0,
+ [SPECIES_HUNTAIL] = 0,
+ [SPECIES_GOREBYSS] = 0,
+ [SPECIES_ABSOL] = 0,
+ [SPECIES_SHUPPET] = 0,
+ [SPECIES_BANETTE] = 0,
+ [SPECIES_SEVIPER] = 2,
+ [SPECIES_ZANGOOSE] = 0,
+ [SPECIES_RELICANTH] = 1,
+ [SPECIES_ARON] = 2,
+ [SPECIES_LAIRON] = 2,
+ [SPECIES_AGGRON] = 2,
+ [SPECIES_CASTFORM] = 0,
+ [SPECIES_VOLBEAT] = 0,
+ [SPECIES_ILLUMISE] = 2,
+ [SPECIES_LILEEP] = 2,
+ [SPECIES_CRADILY] = 0,
+ [SPECIES_ANORITH] = 0,
+ [SPECIES_ARMALDO] = 0,
+ [SPECIES_RALTS] = 1,
+ [SPECIES_KIRLIA] = 1,
+ [SPECIES_GARDEVOIR] = 1,
+ [SPECIES_BAGON] = 2,
+ [SPECIES_SHELGON] = 2,
+ [SPECIES_SALAMENCE] = 0,
+ [SPECIES_BELDUM] = 0,
+ [SPECIES_METANG] = 0,
+ [SPECIES_METAGROSS] = 0,
+ [SPECIES_REGIROCK] = 2,
+ [SPECIES_REGICE] = 2,
+ [SPECIES_REGISTEEL] = 2,
+ [SPECIES_KYOGRE] = 2,
+ [SPECIES_GROUDON] = 0,
+ [SPECIES_RAYQUAZA] = 1,
+ [SPECIES_LATIAS] = 0,
+ [SPECIES_LATIOS] = 2,
+ [SPECIES_JIRACHI] = 0,
+ [SPECIES_DEOXYS] = 0,
+ [SPECIES_CHIMECHO] = 0,
+ [SPECIES_EGG] = 1,
+ [SPECIES_UNOWN_B] = 0,
+ [SPECIES_UNOWN_C] = 0,
+ [SPECIES_UNOWN_D] = 0,
+ [SPECIES_UNOWN_E] = 0,
+ [SPECIES_UNOWN_F] = 0,
+ [SPECIES_UNOWN_G] = 0,
+ [SPECIES_UNOWN_H] = 0,
+ [SPECIES_UNOWN_I] = 0,
+ [SPECIES_UNOWN_J] = 0,
+ [SPECIES_UNOWN_K] = 0,
+ [SPECIES_UNOWN_L] = 0,
+ [SPECIES_UNOWN_M] = 0,
+ [SPECIES_UNOWN_N] = 0,
+ [SPECIES_UNOWN_O] = 0,
+ [SPECIES_UNOWN_P] = 0,
+ [SPECIES_UNOWN_Q] = 0,
+ [SPECIES_UNOWN_R] = 0,
+ [SPECIES_UNOWN_S] = 0,
+ [SPECIES_UNOWN_T] = 0,
+ [SPECIES_UNOWN_U] = 0,
+ [SPECIES_UNOWN_V] = 0,
+ [SPECIES_UNOWN_W] = 0,
+ [SPECIES_UNOWN_X] = 0,
+ [SPECIES_UNOWN_Y] = 0,
+ [SPECIES_UNOWN_Z] = 0,
+ [SPECIES_UNOWN_EMARK] = 0,
+ [SPECIES_UNOWN_QMARK] = 0
+};
+
+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 },
+ // The following three point outside the gMonIconPalettes array
+ // and are therefore invalid. Fortunately, they are never used.
+ { 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 = {
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(32x32),
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(32x32),
+ .tileNum = 0x000,
+ .priority = 1,
+ .paletteNum = 0
+};
+
+static const union AnimCmd sMonIconAnim_Fast[] = {
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(1, 6),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd sMonIconAnim_MediumFast[] = {
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd sMonIconAnim_MediumSlow[] = {
+ ANIMCMD_FRAME(0, 14),
+ ANIMCMD_FRAME(1, 14),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd sMonIconAnim_Slow[] = {
+ ANIMCMD_FRAME(0, 22),
+ ANIMCMD_FRAME(1, 22),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd sMonIconAnim_Still[] = {
+ ANIMCMD_FRAME(0, 29),
+ ANIMCMD_FRAME(0, 29),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd *const sMonIconAnims[] = {
+ sMonIconAnim_Fast,
+ sMonIconAnim_MediumFast,
+ sMonIconAnim_MediumSlow,
+ sMonIconAnim_Slow,
+ sMonIconAnim_Still
+};
+
+static const union AffineAnimCmd sMonIconAffineAnim_0[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 10),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sMonIconAffineAnim_1[] = {
+ AFFINEANIMCMD_FRAME(-2, -2, 0, 122),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd *const sMonIconAffineAnims[] = {
+ sMonIconAffineAnim_0,
+ sMonIconAffineAnim_1
+};
+
+static const u16 sSpriteImageSizes[][4] = {
+ [ST_OAM_SQUARE] = {
+ [ST_OAM_SIZE_0] = 0x020,
+ [ST_OAM_SIZE_1] = 0x080,
+ [ST_OAM_SIZE_2] = 0x200,
+ [ST_OAM_SIZE_3] = 0x800,
+ },
+ [ST_OAM_H_RECTANGLE] = {
+ [ST_OAM_SIZE_0] = 0x040,
+ [ST_OAM_SIZE_1] = 0x080,
+ [ST_OAM_SIZE_2] = 0x100,
+ [ST_OAM_SIZE_3] = 0x400,
+ },
+ [ST_OAM_V_RECTANGLE] = {
+ [ST_OAM_SIZE_0] = 0x040,
+ [ST_OAM_SIZE_1] = 0x080,
+ [ST_OAM_SIZE_2] = 0x100,
+ [ST_OAM_SIZE_3] = 0x400,
+ },
+};
+
+u8 CreateMonIcon(u16 species, SpriteCallback callback, s16 x, s16 y, u8 subpriority, u32 personality, bool32 extra)
+{
+ u8 spriteId;
+ struct MonIconSpriteTemplate iconTemplate =
+ {
+ .oam = &sMonIconOamData,
+ .image = GetMonIconPtr(species, personality, extra),
+ .anims = sMonIconAnims,
+ .affineAnims = sMonIconAffineAnims,
+ .callback = callback,
+ .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species],
+ };
+
+ if (species > NUM_SPECIES)
+ iconTemplate.paletteTag = POKE_ICON_BASE_PAL_TAG;
+
+ spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority);
+
+ UpdateMonIconFrame(&gSprites[spriteId]);
+
+ return spriteId;
+}
+
+u8 CreateMonIcon_HandleDeoxys(u16 species, SpriteCallback callback, s16 x, s16 y, u8 subpriority, bool32 extra)
+{
+ u8 spriteId;
+ struct MonIconSpriteTemplate iconTemplate =
+ {
+ .oam = &sMonIconOamData,
+ .image = NULL,
+ .anims = sMonIconAnims,
+ .affineAnims = sMonIconAffineAnims,
+ .callback = callback,
+ .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species],
+ };
+
+ iconTemplate.image = GetMonIconTiles(species, extra);
+ spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority);
+
+ UpdateMonIconFrame(&gSprites[spriteId]);
+
+ return spriteId;
+}
+
+u16 GetIconSpecies(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 > NUM_SPECIES)
+ result = SPECIES_NONE;
+ else
+ result = species;
+ }
+
+ return result;
+}
+
+u16 GetUnownLetterByPersonality(u32 personality)
+{
+ if (!personality)
+ return 0;
+ else
+ return (((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 0x1C;
+}
+
+u16 MailSpeciesToIconSpecies(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
+ {
+ if (species > (SPECIES_UNOWN_B - 1))
+ species = SPECIES_NONE;
+ return GetIconSpecies(species, 0);
+ }
+}
+
+const u8 *GetMonIconTiles(u16 species, bool32 extra)
+{
+ const u8 *iconSprite = gMonIconTable[species];
+ if (species == SPECIES_DEOXYS && extra == TRUE)
+ iconSprite += 0x400;
+ return iconSprite;
+}
+
+const u8 *GetMonIconPtr(u16 species, u32 personality, bool32 extra)
+{
+ return GetMonIconTiles(GetIconSpecies(species, personality), extra);
+}
+
+void DestroyMonIcon(struct Sprite * sprite)
+{
+ DestroyMonIconInternal(sprite);
+}
+
+void LoadMonIconPalettes(void)
+{
+ u8 i;
+ for (i = 0; i < NELEMS(gMonIconPaletteTable); i++)
+ LoadSpritePalette(&gMonIconPaletteTable[i]);
+}
+
+void SafeLoadMonIconPalette(u16 species)
+{
+ u8 palIndex;
+ if (species > NUM_SPECIES)
+ species = SPECIES_NONE;
+ palIndex = gMonIconPaletteIndices[species];
+ if (IndexOfSpritePaletteTag(gMonIconPaletteTable[palIndex].tag) == 0xFF)
+ LoadSpritePalette(&gMonIconPaletteTable[palIndex]);
+}
+
+void LoadMonIconPalette(u16 species)
+{
+ u8 palIndex;
+ palIndex = gMonIconPaletteIndices[species];
+ if (IndexOfSpritePaletteTag(gMonIconPaletteTable[palIndex].tag) == 0xFF)
+ LoadSpritePalette(&gMonIconPaletteTable[palIndex]);
+}
+
+void FreeMonIconPalettes(void)
+{
+ u8 i;
+ for (i = 0; i < 6; i++)
+ FreeSpritePaletteByTag(gMonIconPaletteTable[i].tag);
+}
+
+void SafeFreeMonIconPalette(u16 species)
+{
+ u8 palIndex;
+ if (species > NUM_SPECIES)
+ species = SPECIES_NONE;
+ palIndex = gMonIconPaletteIndices[species];
+ FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag);
+}
+
+void FreeMonIconPalette(u16 species)
+{
+ u8 palIndex;
+ palIndex = gMonIconPaletteIndices[species];
+ FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag);
+}
+
+void SpriteCB_MonIcon(struct Sprite * sprite)
+{
+ UpdateMonIconFrame(sprite);
+}
+
+void LoadMonIconPalettesAt(u16 offset)
+{
+ int i;
+ if (offset <= 0x100 - 0x60)
+ {
+ for (i = 0; i < (int)NELEMS(gMonIconPaletteTable); i++)
+ {
+ LoadPalette(gMonIconPaletteTable[i].data, offset, 0x20);
+ offset += 0x10;
+ }
+ }
+}
+
+const u16 *GetValidMonIconPalettePtr(u16 species)
+{
+ if (species > NUM_SPECIES)
+ species = SPECIES_NONE;
+ return gMonIconPaletteTable[gMonIconPaletteIndices[species]].data;
+}
+
+u8 GetValidMonIconPalIndex(u16 species)
+{
+ if (species > NUM_SPECIES)
+ species = SPECIES_NONE;
+ return gMonIconPaletteIndices[species];
+}
+
+u8 GetMonIconPaletteIndexFromSpecies(u16 species)
+{
+ return gMonIconPaletteIndices[species];
+}
+
+u8 UpdateMonIconFrame(struct Sprite * sprite)
+{
+ u8 result = 0;
+
+ if (sprite->animDelayCounter == 0)
+ {
+ s16 frame = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue;
+
+ switch (frame)
+ {
+ case -1:
+ break;
+ case -2:
+ sprite->animCmdIndex = 0;
+ break;
+ default:
+ RequestSpriteCopy(
+ // pointer arithmetic is needed to get the correct pointer to perform the sprite copy on.
+ // because sprite->images is a struct def, it has to be casted to (u8 *) before any
+ // arithmetic can be performed.
+ (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]);
+ sprite->animDelayCounter = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration & 0xFF;
+ sprite->animCmdIndex++;
+ result = sprite->animCmdIndex;
+ break;
+ }
+ }
+ else
+ {
+ sprite->animDelayCounter--;
+ }
+ return result;
+}
+
+static u8 CreateMonIconSprite(const 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 = SPRITE_INVALID_TAG,
+ .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;
+}
+
+static void DestroyMonIconInternal(struct Sprite * sprite)
+{
+ struct SpriteFrameImage image = { NULL, sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] };
+ sprite->images = &image;
+ DestroySprite(sprite);
+}
+
+void MonIcon_SetAnim(struct Sprite * sprite, u8 animNum)
+{
+ sprite->animNum = animNum;
+ sprite->animDelayCounter = 0;
+ sprite->animCmdIndex = 0;
+}
diff --git a/tools/br_ips/br_ips.c b/tools/br_ips/br_ips.c
index 440705cab..d144c5f39 100644
--- a/tools/br_ips/br_ips.c
+++ b/tools/br_ips/br_ips.c
@@ -1,4 +1,3 @@
-#define _POSIX_C_SOURCE 200808L // Don't use GNU getline
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
@@ -20,6 +19,7 @@ static const char HELP[] = "br_ips\n"
"Options:\n"
" -h - show this message and exit\n";
+#if !defined(__CYGWIN__) && !defined(__APPLE__) && (_POSIX_C_SOURCE < 200809L || !_GNU_SOURCE)
static int getline(char ** lineptr, size_t * n, FILE * stream) {
// Static implementation of GNU getline
int i = 0;
@@ -49,6 +49,7 @@ static int getline(char ** lineptr, size_t * n, FILE * stream) {
buf[i] = 0;
return i;
}
+#endif
static void getIncbinsFromFile(hunk_t ** hunks, size_t * num, size_t * maxnum, const char * fname, char ** strbuf, size_t * buffersize) {
// Recursively find incbinned segments and encode them as hunks.