summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/item_menu.s619
-rw-r--r--data/graphics/berries/graphics_table.inc45
-rw-r--r--data/item_menu.s212
-rw-r--r--include/graphics.h97
-rw-r--r--include/item_menu.h4
-rw-r--r--include/sprite.h2
-rw-r--r--ld_script.txt3
-rw-r--r--src/berry_tag_screen.c4
-rw-r--r--src/item_menu.c574
9 files changed, 674 insertions, 886 deletions
diff --git a/asm/item_menu.s b/asm/item_menu.s
deleted file mode 100644
index 1748a34c4..000000000
--- a/asm/item_menu.s
+++ /dev/null
@@ -1,619 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80A79EC
-sub_80A79EC: @ 80A79EC
- push {r4-r6,lr}
- adds r2, r0, 0
- movs r0, 0x34
- ldrsh r4, [r2, r0]
- cmp r4, 0
- beq _080A79FE
- cmp r4, 0x1
- beq _080A7A54
- b _080A7A8A
-_080A79FE:
- ldr r5, _080A7A28 @ =gUnknown_0203855B
- ldrb r6, [r5]
- movs r0, 0
- ldrsb r0, [r5, r0]
- cmp r0, 0x6
- beq _080A7A2C
- adds r3, r2, 0
- adds r3, 0x3F
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3]
- adds r0, r2, 0
- adds r0, 0x2A
- strb r6, [r0]
- movs r1, 0x1
- negs r1, r1
- adds r0, r1, 0
- strb r0, [r5]
- b _080A7A8A
- .align 2, 0
-_080A7A28: .4byte gUnknown_0203855B
-_080A7A2C:
- adds r3, r2, 0
- adds r3, 0x3F
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3]
- adds r0, r2, 0
- adds r0, 0x2A
- strb r4, [r0]
- ldrh r0, [r2, 0x22]
- subs r0, 0x4
- strh r0, [r2, 0x22]
- movs r0, 0x4
- strh r0, [r2, 0x2E]
- movs r0, 0x1
- strh r0, [r2, 0x34]
- adds r0, r2, 0
- bl sub_80A7AE4
- b _080A7A8A
-_080A7A54:
- ldrh r4, [r2, 0x2E]
- movs r0, 0x2E
- ldrsh r3, [r2, r0]
- cmp r3, 0
- beq _080A7A7C
- ldrh r1, [r2, 0x30]
- movs r3, 0x30
- ldrsh r0, [r2, r3]
- cmp r0, 0
- beq _080A7A72
- ldrh r0, [r2, 0x22]
- adds r0, 0x1
- strh r0, [r2, 0x22]
- subs r0, r4, 0x1
- strh r0, [r2, 0x2E]
-_080A7A72:
- adds r0, r1, 0x1
- movs r1, 0x1
- ands r0, r1
- strh r0, [r2, 0x30]
- b _080A7A8A
-_080A7A7C:
- ldr r1, _080A7A90 @ =gUnknown_0203855B
- movs r4, 0x1
- negs r4, r4
- adds r0, r4, 0
- strb r0, [r1]
- strh r3, [r2, 0x30]
- strh r3, [r2, 0x34]
-_080A7A8A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080A7A90: .4byte gUnknown_0203855B
- thumb_func_end sub_80A79EC
-
- thumb_func_start sub_80A7A94
-sub_80A7A94: @ 80A7A94
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x36
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080A7AA6
- cmp r0, 0x1
- beq _080A7AC8
- b _080A7ADC
-_080A7AA6:
- ldrb r1, [r4, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldr r0, _080A7AC4 @ =gSpriteAffineAnimTable_83C1CC4
- str r0, [r4, 0x10]
- adds r0, r4, 0
- bl InitSpriteAffineAnim
- movs r0, 0x1
- strh r0, [r4, 0x36]
- b _080A7ADC
- .align 2, 0
-_080A7AC4: .4byte gSpriteAffineAnimTable_83C1CC4
-_080A7AC8:
- ldrh r0, [r4, 0x32]
- adds r0, 0x1
- strh r0, [r4, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xC
- bne _080A7ADC
- adds r0, r4, 0
- bl sub_80A7AE4
-_080A7ADC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80A7A94
-
- thumb_func_start sub_80A7AE4
-sub_80A7AE4: @ 80A7AE4
- push {lr}
- ldr r2, _080A7B0C @ =gUnknown_0203855C
- movs r1, 0
- strb r1, [r2]
- ldrb r2, [r0, 0x1]
- movs r1, 0x4
- negs r1, r1
- ands r1, r2
- strb r1, [r0, 0x1]
- movs r1, 0
- strh r1, [r0, 0x32]
- strh r1, [r0, 0x36]
- ldrb r0, [r0, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- pop {r0}
- bx r0
- .align 2, 0
-_080A7B0C: .4byte gUnknown_0203855C
- thumb_func_end sub_80A7AE4
-
- thumb_func_start CreateBagSprite
-CreateBagSprite: @ 80A7B10
- push {lr}
- ldr r0, _080A7B24 @ =gSpriteTemplate_83C1CE0
- movs r1, 0x3A
- movs r2, 0x28
- movs r3, 0
- bl CreateSprite
- pop {r0}
- bx r0
- .align 2, 0
-_080A7B24: .4byte gSpriteTemplate_83C1CE0
- thumb_func_end CreateBagSprite
-
- thumb_func_start sub_80A7B28
-sub_80A7B28: @ 80A7B28
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0
- strh r0, [r4, 0x34]
- strh r0, [r4, 0x2E]
- adds r0, r4, 0
- bl sub_80A7B6C
- ldr r0, _080A7B44 @ =sub_80A7B6C
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080A7B44: .4byte sub_80A7B6C
- thumb_func_end sub_80A7B28
-
- thumb_func_start sub_80A7B48
-sub_80A7B48: @ 80A7B48
- ldrh r2, [r0, 0x38]
- ldrh r1, [r0, 0x2E]
- adds r1, 0x1
- movs r3, 0x1
- ands r1, r3
- subs r2, r1
- adds r1, r0, 0
- adds r1, 0x28
- strb r2, [r1]
- ldrh r2, [r0, 0x3A]
- ldrh r1, [r0, 0x2E]
- adds r1, 0x1
- ands r1, r3
- subs r2, r1
- adds r0, 0x29
- strb r2, [r0]
- bx lr
- thumb_func_end sub_80A7B48
-
- thumb_func_start sub_80A7B6C
-sub_80A7B6C: @ 80A7B6C
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r0, 0x3C
- ldrsh r2, [r4, r0]
- cmp r2, 0
- beq _080A7C16
- movs r1, 0x34
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080A7B86
- cmp r0, 0x1
- beq _080A7BD4
- b _080A7C16
-_080A7B86:
- ldrb r0, [r4, 0x1]
- movs r1, 0x4
- negs r1, r1
- ands r1, r0
- movs r0, 0x1
- orrs r1, r0
- strb r1, [r4, 0x1]
- cmp r2, 0x1
- bne _080A7BA0
- ldr r0, _080A7B9C @ =gSpriteAffineAnimTable_83C1D20
- b _080A7BA2
- .align 2, 0
-_080A7B9C: .4byte gSpriteAffineAnimTable_83C1D20
-_080A7BA0:
- ldr r0, _080A7BD0 @ =gSpriteAffineAnimTable_83C1D20 + 0x4
-_080A7BA2:
- str r0, [r4, 0x10]
- adds r0, r4, 0
- bl InitSpriteAffineAnim
- movs r0, 0x1
- strh r0, [r4, 0x34]
- adds r0, r4, 0
- adds r0, 0x28
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- strh r0, [r4, 0x38]
- adds r0, r4, 0
- adds r0, 0x29
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- strh r0, [r4, 0x3A]
- adds r0, r4, 0
- bl sub_80A7B48
- b _080A7C16
- .align 2, 0
-_080A7BD0: .4byte gSpriteAffineAnimTable_83C1D20 + 0x4
-_080A7BD4:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- movs r5, 0
- strh r0, [r4, 0x2E]
- adds r0, r4, 0
- bl sub_80A7B48
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x20
- bne _080A7C16
- strh r5, [r4, 0x2E]
- strh r5, [r4, 0x34]
- ldrh r1, [r4, 0x38]
- adds r0, r4, 0
- adds r0, 0x28
- strb r1, [r0]
- ldrh r0, [r4, 0x3A]
- adds r1, r4, 0
- adds r1, 0x29
- strb r0, [r1]
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldrb r1, [r4, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x1]
- ldr r0, _080A7C1C @ =SpriteCallbackDummy
- str r0, [r4, 0x1C]
-_080A7C16:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080A7C1C: .4byte SpriteCallbackDummy
- thumb_func_end sub_80A7B6C
-
- thumb_func_start CreateBagPokeballSprite
-CreateBagPokeballSprite: @ 80A7C20
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _080A7C54 @ =gUnknown_083C1D30
- bl LoadSpritePalette
- ldr r0, _080A7C58 @ =gSpriteTemplate_83C1D38
- movs r1, 0x10
- movs r2, 0x58
- movs r3, 0
- bl CreateSprite
- ldr r1, _080A7C5C @ =gUnknown_02038568
- strb r0, [r1]
- ldr r2, _080A7C60 @ =gSprites
- ldrb r1, [r1]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r4, [r0, 0x3C]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080A7C54: .4byte gUnknown_083C1D30
-_080A7C58: .4byte gSpriteTemplate_83C1D38
-_080A7C5C: .4byte gUnknown_02038568
-_080A7C60: .4byte gSprites
- thumb_func_end CreateBagPokeballSprite
-
- thumb_func_start sub_80A7C64
-sub_80A7C64: @ 80A7C64
- push {r4,r5,lr}
- movs r0, 0x8
- bl FreeSpritePaletteByTag
- ldr r5, _080A7C98 @ =gSprites
- ldr r4, _080A7C9C @ =gUnknown_02038568
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r0, [r0, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- bl DestroySprite
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080A7C98: .4byte gSprites
-_080A7C9C: .4byte gUnknown_02038568
- thumb_func_end sub_80A7C64
-
- thumb_func_start sub_80A7CA0
-sub_80A7CA0: @ 80A7CA0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- adds r4, r1, 0
- movs r2, 0x80
- lsls r2, 4
- adds r0, r4, 0
- movs r1, 0
- bl memset
- movs r0, 0x80
- lsls r0, 1
- adds r4, r0
- movs r7, 0
-_080A7CBE:
- adds r4, 0x20
- movs r5, 0
- adds r1, r7, 0x1
- mov r8, r1
-_080A7CC6:
- adds r0, r4, 0
- adds r1, r6, 0
- movs r2, 0x20
- bl memcpy
- adds r4, 0x20
- adds r6, 0x20
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _080A7CC6
- cmp r7, 0x5
- beq _080A7CE4
- adds r4, 0x20
-_080A7CE4:
- mov r1, r8
- lsls r0, r1, 24
- lsrs r7, r0, 24
- cmp r7, 0x5
- bls _080A7CBE
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80A7CA0
-
- thumb_func_start sub_80A7CF8
-sub_80A7CF8: @ 80A7CF8
- push {r4,r5,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x2A
- bne _080A7D44
- bl IsEnigmaBerryValid
- cmp r0, 0x1
- bne _080A7D44
- ldr r4, _080A7D34 @ =gSaveBlock1 + 0x317C
- ldr r1, _080A7D38 @ =0x02000000
- adds r0, r4, 0
- bl sub_80A7CA0
- movs r0, 0x90
- lsls r0, 3
- adds r4, r0
- str r4, [sp]
- ldr r1, _080A7D3C @ =0xffff0000
- ldr r0, [sp, 0x4]
- ands r0, r1
- ldr r1, _080A7D40 @ =0x00007544
- orrs r0, r1
- str r0, [sp, 0x4]
- mov r0, sp
- bl LoadSpritePalette
- b _080A7D72
- .align 2, 0
-_080A7D34: .4byte gSaveBlock1 + 0x317C
-_080A7D38: .4byte 0x02000000
-_080A7D3C: .4byte 0xffff0000
-_080A7D40: .4byte 0x00007544
-_080A7D44:
- ldr r5, _080A7D7C @ =gBerryGraphicsTable
- lsls r4, 3
- adds r0, r5, 0x4
- adds r0, r4, r0
- ldr r0, [r0]
- str r0, [sp]
- mov r1, sp
- ldr r0, _080A7D80 @ =0x00007544
- strh r0, [r1, 0x4]
- mov r0, sp
- bl LoadCompressedObjectPalette
- adds r4, r5
- ldr r0, [r4]
- ldr r4, _080A7D84 @ =0x02001000
- adds r1, r4, 0
- bl sub_800D238
- ldr r0, _080A7D88 @ =0xfffff000
- adds r1, r4, r0
- adds r0, r4, 0
- bl sub_80A7CA0
-_080A7D72:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080A7D7C: .4byte gBerryGraphicsTable
-_080A7D80: .4byte 0x00007544
-_080A7D84: .4byte 0x02001000
-_080A7D88: .4byte 0xfffff000
- thumb_func_end sub_80A7CF8
-
- thumb_func_start sub_80A7D8C
-sub_80A7D8C: @ 80A7D8C
- push {r4,r5,lr}
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- bl sub_80A7CF8
- ldr r0, _080A7DC0 @ =gSpriteTemplate_83C1D74
- lsls r4, 16
- asrs r4, 16
- lsls r5, 16
- asrs r5, 16
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080A7DC0: .4byte gSpriteTemplate_83C1D74
- thumb_func_end sub_80A7D8C
-
- thumb_func_start sub_80A7DC4
-sub_80A7DC4: @ 80A7DC4
- ldr r1, _080A7DD0 @ =gUnknown_030041B4
- ldrh r1, [r1]
- negs r1, r1
- strh r1, [r0, 0x26]
- bx lr
- .align 2, 0
-_080A7DD0: .4byte gUnknown_030041B4
- thumb_func_end sub_80A7DC4
-
- thumb_func_start sub_80A7DD4
-sub_80A7DD4: @ 80A7DD4
- push {lr}
- ldr r0, _080A7DE8 @ =0x00007544
- bl FreeSpritePaletteByTag
- movs r0, 0x8
- bl FreeSpritePaletteByTag
- pop {r0}
- bx r0
- .align 2, 0
-_080A7DE8: .4byte 0x00007544
- thumb_func_end sub_80A7DD4
-
- thumb_func_start sub_80A7DEC
-sub_80A7DEC: @ 80A7DEC
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- mov r8, r3
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, _080A7E50 @ =0x00007544
- bl FreeSpritePaletteByTag
- adds r0, r4, 0
- bl sub_80A7CF8
- ldr r0, _080A7E54 @ =gSpriteTemplate_83C1E04
- adds r1, r5, 0
- adds r2, r6, 0
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- adds r4, r1, 0
- mov r0, r8
- cmp r0, 0x1
- bne _080A7E42
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080A7E58 @ =gSprites
- adds r0, r1
- movs r1, 0x1
- bl StartSpriteAffineAnim
-_080A7E42:
- adds r0, r4, 0
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080A7E50: .4byte 0x00007544
-_080A7E54: .4byte gSpriteTemplate_83C1E04
-_080A7E58: .4byte gSprites
- thumb_func_end sub_80A7DEC
-
- thumb_func_start sub_80A7E5C
-sub_80A7E5C: @ 80A7E5C
- push {lr}
- adds r1, r0, 0
- ldr r0, _080A7E78 @ =gSpriteTemplate_83C1F98
- lsls r1, 16
- asrs r1, 16
- movs r2, 0x63
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_080A7E78: .4byte gSpriteTemplate_83C1F98
- thumb_func_end sub_80A7E5C
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/graphics/berries/graphics_table.inc b/data/graphics/berries/graphics_table.inc
deleted file mode 100644
index 78af1c48b..000000000
--- a/data/graphics/berries/graphics_table.inc
+++ /dev/null
@@ -1,45 +0,0 @@
- .align 2
-gBerryGraphicsTable:: @ 83C1E1C
- .4byte gBerryPic_Cheri, gBerryPalette_Cheri
- .4byte gBerryPic_Chesto, gBerryPalette_Chesto
- .4byte gBerryPic_Pecha, gBerryPalette_Pecha
- .4byte gBerryPic_Rawst, gBerryPalette_Rawst
- .4byte gBerryPic_Aspear, gBerryPalette_Aspear
- .4byte gBerryPic_Leppa, gBerryPalette_Leppa
- .4byte gBerryPic_Oran, gBerryPalette_Oran
- .4byte gBerryPic_Persim, gBerryPalette_Persim
- .4byte gBerryPic_Lum, gBerryPalette_Lum
- .4byte gBerryPic_Sitrus, gBerryPalette_Sitrus
- .4byte gBerryPic_Figy, gBerryPalette_Figy
- .4byte gBerryPic_Wiki, gBerryPalette_Wiki
- .4byte gBerryPic_Mago, gBerryPalette_Mago
- .4byte gBerryPic_Aguav, gBerryPalette_Aguav
- .4byte gBerryPic_Iapapa, gBerryPalette_Iapapa
- .4byte gBerryPic_Razz, gBerryPalette_Razz
- .4byte gBerryPic_Bluk, gBerryPalette_Bluk
- .4byte gBerryPic_Nanab, gBerryPalette_Nanab
- .4byte gBerryPic_Wepear, gBerryPalette_Wepear
- .4byte gBerryPic_Pinap, gBerryPalette_Pinap
- .4byte gBerryPic_Pomeg, gBerryPalette_Pomeg
- .4byte gBerryPic_Kelpsy, gBerryPalette_Kelpsy
- .4byte gBerryPic_Qualot, gBerryPalette_Qualot
- .4byte gBerryPic_Hondew, gBerryPalette_Hondew
- .4byte gBerryPic_Grepa, gBerryPalette_Grepa
- .4byte gBerryPic_Tamato, gBerryPalette_Tamato
- .4byte gBerryPic_Cornn, gBerryPalette_Cornn
- .4byte gBerryPic_Magost, gBerryPalette_Magost
- .4byte gBerryPic_Rabuta, gBerryPalette_Rabuta
- .4byte gBerryPic_Nomel, gBerryPalette_Nomel
- .4byte gBerryPic_Spelon, gBerryPalette_Spelon
- .4byte gBerryPic_Pamtre, gBerryPalette_Pamtre
- .4byte gBerryPic_Watmel, gBerryPalette_Watmel
- .4byte gBerryPic_Durin, gBerryPalette_Durin
- .4byte gBerryPic_Belue, gBerryPalette_Belue
- .4byte gBerryPic_Liechi, gBerryPalette_Liechi
- .4byte gBerryPic_Ganlon, gBerryPalette_Ganlon
- .4byte gBerryPic_Salac, gBerryPalette_Salac
- .4byte gBerryPic_Petaya, gBerryPalette_Petaya
- .4byte gBerryPic_Apicot, gBerryPalette_Apicot
- .4byte gBerryPic_Lansat, gBerryPalette_Lansat
- .4byte gBerryPic_Starf, gBerryPalette_Starf
- .4byte gBerryPic_Enigma, gBerryPalette_Enigma
diff --git a/data/item_menu.s b/data/item_menu.s
deleted file mode 100644
index c79e3bfc3..000000000
--- a/data/item_menu.s
+++ /dev/null
@@ -1,212 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gPalette_83C170C:: @ 83C170C
- .incbin "graphics/unknown/83C170C.gbapal"
-
- .align 2
-gSpriteImage_83C172C:: @ 83C172C
- .incbin "graphics/unknown_sprites/83C172C.4bpp"
-
- .align 2
- .incbin "graphics/unused/cherry.4bpp"
-
- .align 2
- .incbin "graphics/unused/cherry.gbapal"
-
- .align 2
-gOamData_83C1C4C:: @ 83C1C4C
- .2byte 0x0000
- .2byte 0xC000
- .2byte 0x7800
-
- .align 2
-gSpriteAnim_83C1C54:: @ 83C1C54
- obj_image_anim_frame 0, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83C1C5C:: @ 83C1C5C
- obj_image_anim_frame 64, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83C1C64:: @ 83C1C64
- obj_image_anim_frame 128, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83C1C6C:: @ 83C1C6C
- obj_image_anim_frame 192, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83C1C74:: @ 83C1C74
- obj_image_anim_frame 256, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83C1C7C:: @ 83C1C7C
- obj_image_anim_frame 320, 4
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83C1C84:: @ 83C1C84
- .4byte gSpriteAnim_83C1C54
- .4byte gSpriteAnim_83C1C5C
- .4byte gSpriteAnim_83C1C6C
- .4byte gSpriteAnim_83C1C74
- .4byte gSpriteAnim_83C1C7C
- .4byte gSpriteAnim_83C1C64
-
- .align 2
-gSpriteAffineAnim_83C1C9C:: @ 83C1C9C
- obj_rot_scal_anim_frame 0x0, 0x0, -2, 2
- obj_rot_scal_anim_frame 0x0, 0x0, 2, 4
- obj_rot_scal_anim_frame 0x0, 0x0, -2, 4
- obj_rot_scal_anim_frame 0x0, 0x0, 2, 2
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83C1CC4:: @ 83C1CC4
- .4byte gSpriteAffineAnim_83C1C9C
-
- .align 2
-gUnknown_083C1CC8:: @ 83C1CC8
- obj_tiles gBagMaleTiles, 0x3000, 30000
-
- .align 2
-gUnknown_083C1CD0:: @ 83C1CD0
- obj_tiles gBagFemaleTiles, 0x3000, 30000
-
- .align 2
-gUnknown_083C1CD8:: @ 83C1CD8
- obj_pal gBagPalette, 30000
-
- .align 2
-gSpriteTemplate_83C1CE0:: @ 83C1CE0
- spr_template 30000, 30000, gOamData_83C1C4C, gSpriteAnimTable_83C1C84, NULL, gSpriteAffineAnimTable_83C1CC4, sub_80A7998
-
- .align 2
-gOamData_83C1CF8:: @ 83C1CF8
- .2byte 0x0000
- .2byte 0x4800
- .2byte 0x8800
-
- .align 2
-gSpriteAffineAnim_83C1D00:: @ 83C1D00
- obj_rot_scal_anim_frame 0x0, 0x0, 8, 32
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_83C1D10:: @ 83C1D10
- obj_rot_scal_anim_frame 0x0, 0x0, -8, 32
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_83C1D20:: @ 83C1D20
- .4byte gSpriteAffineAnim_83C1D00
- .4byte gSpriteAffineAnim_83C1D10
-
- .align 2
-gSpriteImageTable_83C1D28:: @ 83C1D28
- obj_frame_tiles gSpriteImage_83C172C, 0x80
-
- .align 2
-gUnknown_083C1D30:: @ 83C1D30
- obj_pal gPalette_83C170C, 8
-
- .align 2
-gSpriteTemplate_83C1D38:: @ 83C1D38
- spr_template 0xFFFF, 8, gOamData_83C1CF8, gSpriteAnimTable_83C1C84, gSpriteImageTable_83C1D28, gSpriteAffineAnimTable_83C1D20, sub_80A7B28
-
- .align 2
-gOamData_83C1D50:: @ 83C1D50
- .2byte 0x0000
- .2byte 0xC000
- .2byte 0x7400
-
- .align 2
-gOamData_83C1D58:: @ 83C1D58
- .2byte 0x0300
- .2byte 0xC000
- .2byte 0x7000
-
- .align 2
-gSpriteAnim_83C1D60:: @ 83C1D60
- obj_image_anim_frame 0, 0
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83C1D68:: @ 83C1D68
- .4byte gSpriteAnim_83C1D60
-
- .align 2
-gSpriteImageTable_83C1D6C:: @ 83C1D6C
- obj_frame_tiles 0x02000000, 0x800
-
- .align 2
-gSpriteTemplate_83C1D74:: @ 83C1D74
- spr_template 0xFFFF, 30020, gOamData_83C1D50, gSpriteAnimTable_83C1D68, gSpriteImageTable_83C1D6C, gDummySpriteAffineAnimTable, sub_80A7DC4
-
- .align 2
-gSpriteAffineAnim_83C1D8C:: @ 83C1D8C
- obj_rot_scal_anim_frame 0xFFFF, 0xFFFF, -3, 96
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 16
- obj_rot_scal_anim_frame 0xFFFE, 0xFFFE, -1, 64
- obj_rot_scal_anim_frame 0xFFF8, 0x0, 0, 16
- obj_rot_scal_anim_frame 0x0, 0xFFF8, 0, 16
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnim_83C1DC4:: @ 83C1DC4
- obj_rot_scal_anim_frame 0xFFFF, 0xFFFF, 3, 96
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 16
- obj_rot_scal_anim_frame 0xFFFE, 0xFFFE, 1, 64
- obj_rot_scal_anim_frame 0xFFF8, 0x0, 0, 16
- obj_rot_scal_anim_frame 0x0, 0xFFF8, 0, 16
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83C1DFC:: @ 83C1DFC
- .4byte gSpriteAffineAnim_83C1D8C
- .4byte gSpriteAffineAnim_83C1DC4
-
- .align 2
-gSpriteTemplate_83C1E04:: @ 83C1E04
- spr_template 0xFFFF, 30020, gOamData_83C1D58, gSpriteAnimTable_83C1D68, gSpriteImageTable_83C1D6C, gSpriteAffineAnimTable_83C1DFC, SpriteCallbackDummy
-
-@ 83C1E1C
- .include "data/graphics/berries/graphics_table.inc"
-
- .align 2
-gUnknown_083C1F74:: @ 83C1F74
- obj_tiles gBerryCheckCircle_Gfx, 2048, 0x2710
-
- .align 2
-gUnknown_083C1F7C:: @ 83C1F7C
- obj_pal gBerryCheck_Pal, 0x2710
-
- .align 2
-gOamData_83C1F84:: @ 83C1F84
- .2byte 0x0000
- .2byte 0x8000
- .2byte 0x0400
-
- .align 2
-gSpriteAnim_83C1F8C:: @ 83C1F8C
- obj_image_anim_frame 0, 0
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83C1F94:: @ 83C1F94
- .4byte gSpriteAnim_83C1F8C
-
- .align 2
-gSpriteTemplate_83C1F98:: @ 83C1F98
- spr_template 10000, 10000, gOamData_83C1F84, gSpriteAnimTable_83C1F94, NULL, gDummySpriteAffineAnimTable, sub_80A7DC4
diff --git a/include/graphics.h b/include/graphics.h
index 12ffd16fe..fb9781147 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2436,6 +2436,9 @@ extern const u8 gMonBackPic_UnownQuestionMark[];
extern const u8 gMonIcon_UnownQuestionMark[];
// data/graphics.s
+extern const u8 gBagMaleTiles[];
+extern const u8 gBagFemaleTiles[];
+extern const u8 gBagPalette[];
extern const u8 gBagScreen_Gfx[];
extern const u8 gBagScreenMale_Pal[];
extern const u8 gBagScreenFemale_Pal[];
@@ -2450,6 +2453,100 @@ extern const u8 gMenuPokeblockDevice_Gfx[];
extern const u8 gMenuPokeblockDevice_Pal[];
extern const u8 gMenuPokeblock_Tilemap[];
+extern const u8 gBerryCheck_Gfx[];
+extern const u8 gBerryCheck_Pal[];
+extern const u8 gUnknown_08E788E4[];
+extern const u8 gUnknown_08E78A84[];
+extern const u8 gBerryCheckCircle_Gfx[];
+
+// data/graphics/berries/graphics.inc
+extern const u8 gBerryPic_Cheri[];
+extern const u8 gBerryPic_Oran[];
+extern const u8 gBerryPic_Pecha[];
+extern const u8 gBerryPic_Rawst[];
+extern const u8 gBerryPic_Aspear[];
+extern const u8 gBerryPic_Leppa[];
+extern const u8 gBerryPic_Chesto[];
+extern const u8 gBerryPic_Persim[];
+extern const u8 gBerryPic_Lum[];
+extern const u8 gBerryPic_Sitrus[];
+extern const u8 gBerryPic_Figy[];
+extern const u8 gBerryPic_Wiki[];
+extern const u8 gBerryPic_Mago[];
+extern const u8 gBerryPic_Aguav[];
+extern const u8 gBerryPic_Iapapa[];
+extern const u8 gBerryPic_Razz[];
+extern const u8 gBerryPic_Bluk[];
+extern const u8 gBerryPic_Nanab[];
+extern const u8 gBerryPic_Wepear[];
+extern const u8 gBerryPic_Pinap[];
+extern const u8 gBerryPic_Pomeg[];
+extern const u8 gBerryPic_Kelpsy[];
+extern const u8 gBerryPic_Qualot[];
+extern const u8 gBerryPic_Hondew[];
+extern const u8 gBerryPic_Grepa[];
+extern const u8 gBerryPic_Tamato[];
+extern const u8 gBerryPic_Cornn[];
+extern const u8 gBerryPic_Magost[];
+extern const u8 gBerryPic_Rabuta[];
+extern const u8 gBerryPic_Nomel[];
+extern const u8 gBerryPic_Spelon[];
+extern const u8 gBerryPic_Pamtre[];
+extern const u8 gBerryPic_Watmel[];
+extern const u8 gBerryPic_Durin[];
+extern const u8 gBerryPic_Belue[];
+extern const u8 gBerryPic_Liechi[];
+extern const u8 gBerryPic_Ganlon[];
+extern const u8 gBerryPic_Salac[];
+extern const u8 gBerryPic_Petaya[];
+extern const u8 gBerryPic_Apicot[];
+extern const u8 gBerryPic_Lansat[];
+extern const u8 gBerryPic_Starf[];
+extern const u8 gBerryPic_Enigma[];
+extern const u8 gBerryPalette_Cheri[];
+extern const u8 gBerryPalette_Oran[];
+extern const u8 gBerryPalette_Pecha[];
+extern const u8 gBerryPalette_Rawst[];
+extern const u8 gBerryPalette_Aspear[];
+extern const u8 gBerryPalette_Leppa[];
+extern const u8 gBerryPalette_Chesto[];
+extern const u8 gBerryPalette_Persim[];
+extern const u8 gBerryPalette_Lum[];
+extern const u8 gBerryPalette_Sitrus[];
+extern const u8 gBerryPalette_Figy[];
+extern const u8 gBerryPalette_Wiki[];
+extern const u8 gBerryPalette_Mago[];
+extern const u8 gBerryPalette_Aguav[];
+extern const u8 gBerryPalette_Iapapa[];
+extern const u8 gBerryPalette_Razz[];
+extern const u8 gBerryPalette_Bluk[];
+extern const u8 gBerryPalette_Nanab[];
+extern const u8 gBerryPalette_Wepear[];
+extern const u8 gBerryPalette_Pinap[];
+extern const u8 gBerryPalette_Pomeg[];
+extern const u8 gBerryPalette_Kelpsy[];
+extern const u8 gBerryPalette_Qualot[];
+extern const u8 gBerryPalette_Hondew[];
+extern const u8 gBerryPalette_Grepa[];
+extern const u8 gBerryPalette_Tamato[];
+extern const u8 gBerryPalette_Cornn[];
+extern const u8 gBerryPalette_Magost[];
+extern const u8 gBerryPalette_Rabuta[];
+extern const u8 gBerryPalette_Nomel[];
+extern const u8 gBerryPalette_Spelon[];
+extern const u8 gBerryPalette_Pamtre[];
+extern const u8 gBerryPalette_Watmel[];
+extern const u8 gBerryPalette_Durin[];
+extern const u8 gBerryPalette_Belue[];
+extern const u8 gBerryPalette_Liechi[];
+extern const u8 gBerryPalette_Ganlon[];
+extern const u8 gBerryPalette_Salac[];
+extern const u8 gBerryPalette_Petaya[];
+extern const u8 gBerryPalette_Apicot[];
+extern const u8 gBerryPalette_Lansat[];
+extern const u8 gBerryPalette_Starf[];
+extern const u8 gBerryPalette_Enigma[];
+
extern const u8 gUnknown_08E96EC8[];
#endif // GUARD_GRAPHICS_H
diff --git a/include/item_menu.h b/include/item_menu.h
index 1a0050334..ca2be0e72 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -22,8 +22,8 @@ void sub_80A6A30(void);
bool32 sub_80A6D1C(void);
void sub_80A6DCC(void);
void sub_80A7094(u8);
-u8 sub_80A7D8C(u8 berry, int i, int i1);
+u8 CreateBerrySprite(u8, s16, s16);
void sub_80A7DD4(void);
-u8 sub_80A7E5C(u8);
+u8 sub_80A7E5C(s16);
#endif // GUARD_ITEM_MENU_H
diff --git a/include/sprite.h b/include/sprite.h
index a65e71bd9..733231eb5 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -19,7 +19,7 @@ struct CompressedSpriteSheet
struct SpriteFrameImage
{
- u8 *data;
+ const u8 *data;
u16 size;
};
diff --git a/ld_script.txt b/ld_script.txt
index 7796658d4..43fb78ecd 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -156,7 +156,6 @@ SECTIONS {
src/mail_data.o(.text);
src/map_name_popup.o(.text);
src/item_menu.o(.text);
- asm/item_menu.o(.text);
src/battle_anim_80A7E7C.o(.text);
src/item.o(.text);
src/matsuda_debug_menu.o(.text);
@@ -397,9 +396,7 @@ SECTIONS {
data/pokemon_icon.o(.rodata);
data/pokemon_summary_screen.o(.rodata);
data/fldeff_cut.o(.rodata);
- src/item_menu.o(.data); /* HACK: gBagPockets must not be declared const for item.c to match. */
src/item_menu.o(.rodata);
- data/item_menu.o(.rodata);
data/battle_anim_80A7E7C.o(.rodata);
data/item.o(.rodata);
data/matsuda_debug_menu.o(.rodata);
diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c
index 0e81e4fec..97f57b060 100644
--- a/src/berry_tag_screen.c
+++ b/src/berry_tag_screen.c
@@ -131,7 +131,7 @@ static bool8 sub_8146058(void)
break;
case 8:
berry = gScriptItemId + OFFSET_7B;
- gUnknown_0203932C = sub_80A7D8C(berry, 56, 64);
+ gUnknown_0203932C = CreateBerrySprite(berry, 56, 64);
gMain.state += 1;
break;
case 9:
@@ -571,7 +571,7 @@ static void sub_81468BC(void)
sub_81464E4();
// center of berry sprite
- gUnknown_0203932C = sub_80A7D8C(gScriptItemId + OFFSET_7B, 56, 64);
+ gUnknown_0203932C = CreateBerrySprite(gScriptItemId + OFFSET_7B, 56, 64);
sub_8146600(gScriptItemId + OFFSET_7B);
}
diff --git a/src/item_menu.c b/src/item_menu.c
index 79a836d63..a5cbcc7df 100644
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "berry.h"
#include "berry_tag_screen.h"
#include "data2.h"
#include "decompress.h"
@@ -90,10 +91,12 @@ extern u8 gUnknown_02038561;
extern u8 gUnknown_02038562;
extern u8 gUnknown_02038563;
extern u8 gUnknown_02038564;
+extern u8 gUnknown_02038568;
extern void (*gUnknown_03005D00)(u8);
extern u8 gUnknown_03000700;
extern u8 gUnknown_03000701;
extern const u8 *gUnknown_03000704;
+extern u16 gUnknown_030041B4;
extern struct UnknownStruct1 gUnknown_03005D10[];
extern struct ItemSlot *gUnknown_03005D24; // selected pocket item slots
extern const u8 Event_NoRegisteredItem[];
@@ -125,7 +128,6 @@ extern const struct CompressedSpritePalette gUnknown_083C1CD8;
const struct BagPocket gBagPockets[NUM_BAG_POCKETS] =
{
- // pointer to items, capacity
{gSaveBlock1.bagPocket_Items, 20},
{gSaveBlock1.bagPocket_PokeBalls, 16},
{gSaveBlock1.bagPocket_TMHM, 64},
@@ -276,8 +278,10 @@ int sub_80A7988(void);
void sub_80A79B4(struct Sprite *);
void sub_80A79EC(struct Sprite *);
void sub_80A7A94(struct Sprite *);
+void sub_80A7AE4(struct Sprite *);
void CreateBagSprite(void);
-void CreateBagPokeballSprite();
+void sub_80A7B6C(struct Sprite *);
+void CreateBagPokeballSprite(u8);
void sub_80A7C64(void);
void sub_80A3118(void)
@@ -3900,6 +3904,97 @@ int sub_80A7988(void)
return val;
}
+const u16 gPalette_83C170C[] = INCBIN_U16("graphics/unknown/83C170C.gbapal");
+const u8 gSpriteImage_83C172C[] = INCBIN_U8("graphics/unknown_sprites/83C172C.4bpp");
+
+const u8 gSpriteImage_UnusedCherry[] = INCBIN_U8("graphics/unused/cherry.4bpp");
+const u16 gSpritePalette_UnusedCherry[] = INCBIN_U16("graphics/unused/cherry.gbapal");
+
+//------------------------------------------------------------------------------
+// Bag Sprite
+//------------------------------------------------------------------------------
+
+const struct OamData gOamData_83C1C4C =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 7,
+ .affineParam = 0,
+};
+
+const union AnimCmd gSpriteAnim_83C1C54[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83C1C5C[] =
+{
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83C1C64[] =
+{
+ ANIMCMD_FRAME(128, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83C1C6C[] =
+{
+ ANIMCMD_FRAME(192, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83C1C74[] =
+{
+ ANIMCMD_FRAME(256, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_83C1C7C[] =
+{
+ ANIMCMD_FRAME(320, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83C1C84[] =
+{
+ gSpriteAnim_83C1C54,
+ gSpriteAnim_83C1C5C,
+ gSpriteAnim_83C1C6C,
+ gSpriteAnim_83C1C74,
+ gSpriteAnim_83C1C7C,
+ gSpriteAnim_83C1C64,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83C1C9C[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, -2, 2),
+ AFFINEANIMCMD_FRAME(0, 0, 2, 4),
+ AFFINEANIMCMD_FRAME(0, 0, -2, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 2, 2),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1CC4[] =
+{
+ gSpriteAffineAnim_83C1C9C,
+};
+
+const struct CompressedSpriteSheet gUnknown_083C1CC8 = {gBagMaleTiles, 0x3000, 30000};
+const struct CompressedSpriteSheet gUnknown_083C1CD0 = {gBagFemaleTiles, 0x3000, 30000};
+const struct CompressedSpritePalette gUnknown_083C1CD8 = {gBagPalette, 30000};
+
void sub_80A7998(struct Sprite *sprite)
{
sprite->animNum = 0;
@@ -3918,3 +4013,478 @@ void sub_80A79B4(struct Sprite *sprite)
if (gUnknown_0203855C != 0)
sub_80A7A94(sprite);
}
+
+void sub_80A79EC(struct Sprite *sprite)
+{
+ switch (sprite->data3)
+ {
+ case 0:
+ if (gUnknown_0203855B != 6)
+ {
+ sprite->animBeginning = TRUE;
+ sprite->animNum = gUnknown_0203855B;
+ gUnknown_0203855B = -1;
+ }
+ else
+ {
+ sprite->animBeginning = TRUE;
+ sprite->animNum = 0;
+ sprite->pos1.y -= 4;
+ sprite->data0 = 4;
+ sprite->data3 = 1;
+ sub_80A7AE4(sprite);
+ }
+ break;
+ case 1:
+ if (sprite->data0 != 0)
+ {
+ if (sprite->data1 != 0)
+ {
+ sprite->pos1.y++;
+ sprite->data0--;
+ }
+ sprite->data1 = (sprite->data1 + 1) & 1;
+ }
+ else
+ {
+ gUnknown_0203855B = -1;
+ sprite->data1 = 0;
+ sprite->data3 = 0;
+ }
+ break;
+ }
+}
+
+void sub_80A7A94(struct Sprite *sprite)
+{
+ switch (sprite->data4)
+ {
+ case 0:
+ sprite->oam.affineMode = 1;
+ sprite->affineAnims = gSpriteAffineAnimTable_83C1CC4;
+ InitSpriteAffineAnim(sprite);
+ sprite->data4 = 1;
+ break;
+ case 1:
+ sprite->data2++;
+ if (sprite->data2 == 12)
+ sub_80A7AE4(sprite);
+ break;
+ }
+}
+
+void sub_80A7AE4(struct Sprite *sprite)
+{
+ gUnknown_0203855C = 0;
+ sprite->oam.affineMode = 0;
+ sprite->data2 = 0;
+ sprite->data4 = 0;
+ FreeOamMatrix(sprite->oam.matrixNum);
+}
+
+static const struct SpriteTemplate sBagSpriteTemplate =
+{
+ .tileTag = 30000,
+ .paletteTag = 30000,
+ .oam = &gOamData_83C1C4C,
+ .anims = gSpriteAnimTable_83C1C84,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_83C1CC4,
+ .callback = sub_80A7998,
+};
+
+void CreateBagSprite(void)
+{
+ CreateSprite(&sBagSpriteTemplate, 58, 40, 0);
+}
+
+//------------------------------------------------------------------------------
+// Pokeball Sprite
+//------------------------------------------------------------------------------
+
+const struct OamData gOamData_83C1CF8 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 4,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 8,
+ .affineParam = 0,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83C1D00[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 8, 32),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83C1D10[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, -8, 32),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1D20[] =
+{
+ gSpriteAffineAnim_83C1D00,
+ gSpriteAffineAnim_83C1D10,
+};
+
+const struct SpriteFrameImage gSpriteImageTable_83C1D28[] =
+{
+ {gSpriteImage_83C172C, sizeof(gSpriteImage_83C172C)},
+};
+
+const struct SpritePalette gUnknown_083C1D30 = {gPalette_83C170C, 8};
+
+void sub_80A7B28(struct Sprite *sprite)
+{
+ sprite->data3 = 0;
+ sprite->data0 = 0;
+ sub_80A7B6C(sprite);
+ sprite->callback = sub_80A7B6C;
+}
+
+void sub_80A7B48(struct Sprite *sprite)
+{
+ sprite->centerToCornerVecX = sprite->data5 - ((sprite->data0 + 1) & 1);
+ sprite->centerToCornerVecY = sprite->data6 - ((sprite->data0 + 1) & 1);
+}
+
+void sub_80A7B6C(struct Sprite *sprite)
+{
+ if (sprite->data7 != 0)
+ {
+ switch (sprite->data3)
+ {
+ case 0:
+ sprite->oam.affineMode = 1;
+ if (sprite->data7 == 1)
+ sprite->affineAnims = gSpriteAffineAnimTable_83C1D20;
+ else
+ sprite->affineAnims = gSpriteAffineAnimTable_83C1D20 + 1;
+ InitSpriteAffineAnim(sprite);
+ sprite->data3 = 1;
+ sprite->data5 = sprite->centerToCornerVecX;
+ sprite->data6 = sprite->centerToCornerVecY;
+ sub_80A7B48(sprite);
+ break;
+ case 1:
+ sprite->data0++;
+ sub_80A7B48(sprite);
+ if (sprite->data0 == 32)
+ {
+ sprite->data0 = 0;
+ sprite->data3 = 0;
+ sprite->centerToCornerVecX = sprite->data5;
+ sprite->centerToCornerVecY = sprite->data6;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ sprite->oam.affineMode = 0;
+ sprite->callback = SpriteCallbackDummy;
+ }
+ break;
+ }
+ }
+}
+
+static const struct SpriteTemplate sPokeballSpriteTemplate =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 8,
+ .oam = &gOamData_83C1CF8,
+ .anims = gSpriteAnimTable_83C1C84,
+ .images = gSpriteImageTable_83C1D28,
+ .affineAnims = gSpriteAffineAnimTable_83C1D20,
+ .callback = sub_80A7B28,
+};
+
+void CreateBagPokeballSprite(u8 a)
+{
+ LoadSpritePalette(&gUnknown_083C1D30);
+ gUnknown_02038568 = CreateSprite(&sPokeballSpriteTemplate, 16, 88, 0);
+ gSprites[gUnknown_02038568].data7 = a;
+}
+
+void sub_80A7C64(void)
+{
+ FreeSpritePaletteByTag(8);
+ FreeOamMatrix(gSprites[gUnknown_02038568].oam.matrixNum);
+ DestroySprite(&gSprites[gUnknown_02038568]);
+}
+
+#define ewramBerryPic ewram
+#define ewramBerryPicTemp (ewram + 0x1000)
+
+const struct OamData gOamData_83C1D50 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 7,
+ .affineParam = 0,
+};
+
+const struct OamData gOamData_83C1D58 =
+{
+ .y = 0,
+ .affineMode = 3,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 7,
+ .affineParam = 0,
+};
+
+const union AnimCmd gSpriteAnim_83C1D60[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83C1D68[] =
+{
+ gSpriteAnim_83C1D60,
+};
+
+const struct SpriteFrameImage gSpriteImageTable_83C1D6C[] =
+{
+ {ewramBerryPic, 0x800},
+};
+
+void sub_80A7DC4(struct Sprite *);
+const struct SpriteTemplate sBerrySpriteTemplate =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 30020,
+ .oam = &gOamData_83C1D50,
+ .anims = gSpriteAnimTable_83C1D68,
+ .images = gSpriteImageTable_83C1D6C,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A7DC4,
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83C1D8C[] =
+{
+ AFFINEANIMCMD_FRAME(-1, -1, -3, 96),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 16),
+ AFFINEANIMCMD_FRAME(-2, -2, -1, 64),
+ AFFINEANIMCMD_FRAME(-8, 0, 0, 16),
+ AFFINEANIMCMD_FRAME(0, -8, 0, 16),
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gSpriteAffineAnim_83C1DC4[] =
+{
+ AFFINEANIMCMD_FRAME(-1, -1, 3, 96),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 16),
+ AFFINEANIMCMD_FRAME(-2, -2, 1, 64),
+ AFFINEANIMCMD_FRAME(-8, 0, 0, 16),
+ AFFINEANIMCMD_FRAME(0, -8, 0, 16),
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1DFC[] =
+{
+ gSpriteAffineAnim_83C1D8C,
+ gSpriteAffineAnim_83C1DC4,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83C1E04 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 30020,
+ .oam = &gOamData_83C1D58,
+ .anims = gSpriteAnimTable_83C1D68,
+ .images = gSpriteImageTable_83C1D6C,
+ .affineAnims = gSpriteAffineAnimTable_83C1DFC,
+ .callback = SpriteCallbackDummy,
+};
+
+static const struct {const u8 *lzPic; const u8 *lzPalette;} sBerryGraphicsTable[] =
+{
+ {gBerryPic_Cheri, gBerryPalette_Cheri},
+ {gBerryPic_Chesto, gBerryPalette_Chesto},
+ {gBerryPic_Pecha, gBerryPalette_Pecha},
+ {gBerryPic_Rawst, gBerryPalette_Rawst},
+ {gBerryPic_Aspear, gBerryPalette_Aspear},
+ {gBerryPic_Leppa, gBerryPalette_Leppa},
+ {gBerryPic_Oran, gBerryPalette_Oran},
+ {gBerryPic_Persim, gBerryPalette_Persim},
+ {gBerryPic_Lum, gBerryPalette_Lum},
+ {gBerryPic_Sitrus, gBerryPalette_Sitrus},
+ {gBerryPic_Figy, gBerryPalette_Figy},
+ {gBerryPic_Wiki, gBerryPalette_Wiki},
+ {gBerryPic_Mago, gBerryPalette_Mago},
+ {gBerryPic_Aguav, gBerryPalette_Aguav},
+ {gBerryPic_Iapapa, gBerryPalette_Iapapa},
+ {gBerryPic_Razz, gBerryPalette_Razz},
+ {gBerryPic_Bluk, gBerryPalette_Bluk},
+ {gBerryPic_Nanab, gBerryPalette_Nanab},
+ {gBerryPic_Wepear, gBerryPalette_Wepear},
+ {gBerryPic_Pinap, gBerryPalette_Pinap},
+ {gBerryPic_Pomeg, gBerryPalette_Pomeg},
+ {gBerryPic_Kelpsy, gBerryPalette_Kelpsy},
+ {gBerryPic_Qualot, gBerryPalette_Qualot},
+ {gBerryPic_Hondew, gBerryPalette_Hondew},
+ {gBerryPic_Grepa, gBerryPalette_Grepa},
+ {gBerryPic_Tamato, gBerryPalette_Tamato},
+ {gBerryPic_Cornn, gBerryPalette_Cornn},
+ {gBerryPic_Magost, gBerryPalette_Magost},
+ {gBerryPic_Rabuta, gBerryPalette_Rabuta},
+ {gBerryPic_Nomel, gBerryPalette_Nomel},
+ {gBerryPic_Spelon, gBerryPalette_Spelon},
+ {gBerryPic_Pamtre, gBerryPalette_Pamtre},
+ {gBerryPic_Watmel, gBerryPalette_Watmel},
+ {gBerryPic_Durin, gBerryPalette_Durin},
+ {gBerryPic_Belue, gBerryPalette_Belue},
+ {gBerryPic_Liechi, gBerryPalette_Liechi},
+ {gBerryPic_Ganlon, gBerryPalette_Ganlon},
+ {gBerryPic_Salac, gBerryPalette_Salac},
+ {gBerryPic_Petaya, gBerryPalette_Petaya},
+ {gBerryPic_Apicot, gBerryPalette_Apicot},
+ {gBerryPic_Lansat, gBerryPalette_Lansat},
+ {gBerryPic_Starf, gBerryPalette_Starf},
+ {gBerryPic_Enigma, gBerryPalette_Enigma},
+};
+
+static void DrawBerryPic(const u8 *src, u8 *dst)
+{
+ u8 i;
+ u8 j;
+
+ memset(dst, 0, 0x800);
+ dst += 0x100;
+ for (i = 0; i < 6; i++)
+ {
+ dst += 32;
+ for (j = 0; j < 6; j++)
+ {
+ memcpy(dst, src, 32);
+ dst += 32;
+ src += 32;
+ }
+ if (i != 5)
+ dst += 32;
+ }
+}
+
+void LoadBerryPic(u8 berryId)
+{
+ struct SpritePalette spritePal;
+
+ if (berryId == 0x2A && IsEnigmaBerryValid() == TRUE)
+ {
+ DrawBerryPic(gSaveBlock1.enigmaBerry.pic, ewramBerryPic);
+ spritePal.data = gSaveBlock1.enigmaBerry.palette;
+ spritePal.tag = 0x7544;
+ LoadSpritePalette(&spritePal);
+ }
+ else
+ {
+ spritePal.data = (u16 *)sBerryGraphicsTable[berryId].lzPalette;
+ spritePal.tag = 0x7544;
+ LoadCompressedObjectPalette((struct CompressedSpritePalette *)&spritePal);
+ sub_800D238(sBerryGraphicsTable[berryId].lzPic, ewramBerryPicTemp);
+ DrawBerryPic(ewramBerryPicTemp, ewramBerryPic);
+ }
+}
+
+u8 CreateBerrySprite(u8 berryId, s16 x, s16 y)
+{
+ LoadBerryPic(berryId);
+ return CreateSprite(&sBerrySpriteTemplate, x, y, 0);
+}
+
+void sub_80A7DC4(struct Sprite *sprite)
+{
+ sprite->pos2.y = -gUnknown_030041B4;
+}
+
+void sub_80A7DD4(void)
+{
+ FreeSpritePaletteByTag(0x7544);
+ FreeSpritePaletteByTag(8);
+}
+
+u8 sub_80A7DEC(u8 berryId, u8 x, u8 y, bool8 animate)
+{
+ u8 spriteId;
+
+ FreeSpritePaletteByTag(0x7544);
+ LoadBerryPic(berryId);
+ spriteId = CreateSprite(&gSpriteTemplate_83C1E04, x, y, 0);
+ if (animate == TRUE)
+ StartSpriteAffineAnim(&gSprites[spriteId], 1);
+ return spriteId;
+}
+
+const struct CompressedSpriteSheet gUnknown_083C1F74 = {gBerryCheckCircle_Gfx, 2048, 0x2710};
+
+const struct CompressedSpritePalette gUnknown_083C1F7C = {gBerryCheck_Pal, 0x2710};
+
+const struct OamData gOamData_83C1F84 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const union AnimCmd gSpriteAnim_83C1F8C[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_83C1F94[] =
+{
+ gSpriteAnim_83C1F8C,
+};
+
+const struct SpriteTemplate gSpriteTemplate_83C1F98 =
+{
+ .tileTag = 10000,
+ .paletteTag = 10000,
+ .oam = &gOamData_83C1F84,
+ .anims = gSpriteAnimTable_83C1F94,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A7DC4,
+};
+
+u8 sub_80A7E5C(s16 x)
+{
+ return CreateSprite(&gSpriteTemplate_83C1F98, x, 99, 0);
+}