summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/item_menu.s727
-rw-r--r--[-rwxr-xr-x]include/graphics.h7
-rw-r--r--include/item.h8
-rw-r--r--ld_script.txt1
-rw-r--r--src/item.c8
-rw-r--r--src/item_menu.c339
6 files changed, 354 insertions, 736 deletions
diff --git a/asm/item_menu.s b/asm/item_menu.s
index 17e399160..ae746307c 100644
--- a/asm/item_menu.s
+++ b/asm/item_menu.s
@@ -6,733 +6,6 @@
.text
- thumb_func_start sub_80A3118
-sub_80A3118: @ 80A3118
- push {lr}
- bl AnimateSprites
- bl BuildOamBuffer
- bl RunTasks
- bl sub_80A740C
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_80A3118
-
- thumb_func_start sub_80A3134
-sub_80A3134: @ 80A3134
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- ldr r1, _080A3168 @ =gBGTilemapBuffers + 0x800
- ldr r2, _080A316C @ =0x06002000
- ldr r0, _080A3170 @ =0x040000d4
- str r1, [r0]
- str r2, [r0, 0x4]
- ldr r3, _080A3174 @ =0x80000400
- str r3, [r0, 0x8]
- ldr r2, [r0, 0x8]
- movs r2, 0x80
- lsls r2, 4
- adds r1, r2
- ldr r2, _080A3178 @ =0x06006000
- str r1, [r0]
- str r2, [r0, 0x4]
- str r3, [r0, 0x8]
- ldr r0, [r0, 0x8]
- pop {r0}
- bx r0
- .align 2, 0
-_080A3168: .4byte gBGTilemapBuffers + 0x800
-_080A316C: .4byte 0x06002000
-_080A3170: .4byte 0x040000d4
-_080A3174: .4byte 0x80000400
-_080A3178: .4byte 0x06006000
- thumb_func_end sub_80A3134
-
- thumb_func_start sub_80A317C
-sub_80A317C: @ 80A317C
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r0, _080A3198 @ =gMain
- ldr r1, _080A319C @ =0x0000043c
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x10
- bls _080A318E
- b _080A34A8
-_080A318E:
- lsls r0, 2
- ldr r1, _080A31A0 @ =_080A31A4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080A3198: .4byte gMain
-_080A319C: .4byte 0x0000043c
-_080A31A0: .4byte _080A31A4
- .align 2, 0
-_080A31A4:
- .4byte _080A31E8
- .4byte _080A31F2
- .4byte _080A3208
- .4byte _080A320E
- .4byte _080A3228
- .4byte _080A324C
- .4byte _080A3252
- .4byte _080A3270
- .4byte _080A327C
- .4byte _080A3298
- .4byte _080A32A4
- .4byte _080A3328
- .4byte _080A338C
- .4byte _080A33F4
- .4byte _080A3404
- .4byte _080A345C
- .4byte _080A347C
-_080A31E8:
- bl sub_80F9438
- bl sub_80A34E8
- b _080A3464
-_080A31F2:
- bl remove_some_task
- ldr r1, _080A3200 @ =gMain
- ldr r0, _080A3204 @ =0x0000043c
- adds r1, r0
- b _080A346A
- .align 2, 0
-_080A3200: .4byte gMain
-_080A3204: .4byte 0x0000043c
-_080A3208:
- bl gpu_pal_allocator_reset__manage_upper_four
- b _080A3464
-_080A320E:
- bl sub_80F9020
- ldr r0, _080A3220 @ =0x02000000
- ldr r1, _080A3224 @ =0x0001ffff
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- b _080A3464
- .align 2, 0
-_080A3220: .4byte 0x02000000
-_080A3224: .4byte 0x0001ffff
-_080A3228:
- bl ResetPaletteFade
- ldr r2, _080A3240 @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- ldr r1, _080A3244 @ =gMain
- ldr r0, _080A3248 @ =0x0000043c
- adds r1, r0
- b _080A346A
- .align 2, 0
-_080A3240: .4byte gPaletteFade
-_080A3244: .4byte gMain
-_080A3248: .4byte 0x0000043c
-_080A324C:
- bl ResetSpriteData
- b _080A3464
-_080A3252:
- bl sub_80A3520
- lsls r0, 24
- cmp r0, 0
- bne _080A325E
- b _080A34A8
-_080A325E:
- ldr r1, _080A3268 @ =gMain
- ldr r0, _080A326C @ =0x0000043c
- adds r1, r0
- b _080A346A
- .align 2, 0
-_080A3268: .4byte gMain
-_080A326C: .4byte 0x0000043c
-_080A3270:
- ldr r0, _080A3278 @ =gWindowConfig_81E6DFC
- bl SetUpWindowConfig
- b _080A3464
- .align 2, 0
-_080A3278: .4byte gWindowConfig_81E6DFC
-_080A327C:
- ldr r0, _080A328C @ =gWindowConfig_81E6DFC
- bl MultistepInitMenuWindowBegin
- ldr r1, _080A3290 @ =gMain
- ldr r0, _080A3294 @ =0x0000043c
- adds r1, r0
- b _080A346A
- .align 2, 0
-_080A328C: .4byte gWindowConfig_81E6DFC
-_080A3290: .4byte gMain
-_080A3294: .4byte 0x0000043c
-_080A3298:
- bl MultistepInitMenuWindowContinue
- cmp r0, 0
- bne _080A32A2
- b _080A34A8
-_080A32A2:
- b _080A3464
-_080A32A4:
- bl sub_80F944C
- bl LoadScrollIndicatorPalette
- movs r0, 0
- movs r1, 0xAC
- movs r2, 0xC
- bl CreateVerticalScrollIndicators
- movs r0, 0x1
- movs r1, 0xAC
- movs r2, 0x94
- bl CreateVerticalScrollIndicators
- movs r0, 0x2
- movs r1, 0x1C
- movs r2, 0x58
- bl CreateVerticalScrollIndicators
- movs r0, 0x3
- movs r1, 0x64
- movs r2, 0x58
- bl CreateVerticalScrollIndicators
- movs r0, 0
- movs r1, 0x2
- bl sub_80F9988
- movs r0, 0x1
- movs r1, 0x2
- bl sub_80F9988
- movs r0, 0x2
- movs r1, 0x2
- bl sub_80F9988
- movs r0, 0x3
- movs r1, 0x2
- bl sub_80F9988
- ldr r0, _080A331C @ =gUnknown_03000701
- ldrb r0, [r0]
- subs r0, 0x4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _080A3312
- movs r0, 0x2
- movs r1, 0x1
- bl sub_80F979C
- movs r0, 0x3
- movs r1, 0x1
- bl sub_80F979C
-_080A3312:
- ldr r1, _080A3320 @ =gMain
- ldr r0, _080A3324 @ =0x0000043c
- adds r1, r0
- b _080A346A
- .align 2, 0
-_080A331C: .4byte gUnknown_03000701
-_080A3320: .4byte gMain
-_080A3324: .4byte 0x0000043c
-_080A3328:
- ldr r1, _080A3378 @ =gUnknown_0203855A
- movs r0, 0x10
- strb r0, [r1]
- ldr r4, _080A337C @ =gBGTilemapBuffers + 0x1000
- ldr r5, _080A3380 @ =gUnknown_02038559
- ldrb r1, [r5]
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_80A39B8
- ldrb r1, [r5]
- adds r0, r4, 0
- bl sub_80A3AC0
- bl sub_80A3D08
- ldr r4, _080A3384 @ =gBagPockets
- ldr r0, [r4, 0x10]
- ldr r1, [r4, 0x14]
- bl sub_80A3C34
- ldr r0, [r4, 0x18]
- ldr r1, [r4, 0x1C]
- bl sub_80A3C34
- bl sub_80A3D40
- ldr r1, _080A3388 @ =gUnknown_03005D24
- movs r0, 0
- ldrsb r0, [r5, r0]
- lsls r0, 3
- adds r0, r4
- ldr r0, [r0]
- str r0, [r1]
- bl sub_80A362C
- b _080A3464
- .align 2, 0
-_080A3378: .4byte gUnknown_0203855A
-_080A337C: .4byte gBGTilemapBuffers + 0x1000
-_080A3380: .4byte gUnknown_02038559
-_080A3384: .4byte gBagPockets
-_080A3388: .4byte gUnknown_03005D24
-_080A338C:
- ldr r0, _080A33D4 @ =0x0000ffff
- movs r1, 0
- movs r2, 0x7
- bl sub_80A48E8
- ldr r1, _080A33D8 @ =gUnknown_03005D10
- ldr r4, _080A33DC @ =gUnknown_02038559
- movs r0, 0
- ldrsb r0, [r4, r0]
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0]
- adds r1, r0
- ldr r0, _080A33E0 @ =gUnknown_03005D24
- ldr r0, [r0]
- lsls r1, 2
- adds r1, r0
- movs r2, 0
- ldrsh r0, [r1, r2]
- bl ItemListMenu_InitDescription
- bl ItemListMenu_InitMenu
- ldr r1, _080A33E4 @ =gUnknown_0203855B
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r1]
- ldr r1, _080A33E8 @ =gUnknown_0203855C
- movs r0, 0
- strb r0, [r1]
- ldr r1, _080A33EC @ =gMain
- ldr r0, _080A33F0 @ =0x0000043c
- adds r1, r0
- b _080A346A
- .align 2, 0
-_080A33D4: .4byte 0x0000ffff
-_080A33D8: .4byte gUnknown_03005D10
-_080A33DC: .4byte gUnknown_02038559
-_080A33E0: .4byte gUnknown_03005D24
-_080A33E4: .4byte gUnknown_0203855B
-_080A33E8: .4byte gUnknown_0203855C
-_080A33EC: .4byte gMain
-_080A33F0: .4byte 0x0000043c
-_080A33F4:
- bl CreateBagSprite
- movs r0, 0
- bl CreateBagPokeballSprite
- bl sub_80A3740
- b _080A3464
-_080A3404:
- ldr r3, _080A3444 @ =0x04000208
- ldrh r2, [r3]
- movs r0, 0
- strh r0, [r3]
- ldr r4, _080A3448 @ =0x04000200
- ldrh r0, [r4]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r4]
- strh r2, [r3]
- ldr r2, _080A344C @ =REG_DISPSTAT
- ldrh r0, [r2]
- movs r1, 0x8
- orrs r0, r1
- strh r0, [r2]
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r2, _080A3450 @ =gPaletteFade
- ldrb r1, [r2, 0x8]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2, 0x8]
- ldr r1, _080A3454 @ =gMain
- ldr r0, _080A3458 @ =0x0000043c
- adds r1, r0
- b _080A346A
- .align 2, 0
-_080A3444: .4byte 0x04000208
-_080A3448: .4byte 0x04000200
-_080A344C: .4byte REG_DISPSTAT
-_080A3450: .4byte gPaletteFade
-_080A3454: .4byte gMain
-_080A3458: .4byte 0x0000043c
-_080A345C:
- bl sub_8055870
- cmp r0, 0x1
- beq _080A34A8
-_080A3464:
- ldr r1, _080A3474 @ =gMain
- ldr r2, _080A3478 @ =0x0000043c
- adds r1, r2
-_080A346A:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _080A34A8
- .align 2, 0
-_080A3474: .4byte gMain
-_080A3478: .4byte 0x0000043c
-_080A347C:
- ldr r0, _080A34A0 @ =sub_80A3134
- bl SetVBlankCallback
- ldr r0, _080A34A4 @ =sub_80A3118
- bl SetMainCallback2
- bl sub_80A751C
- bl sub_80A7630
- bl sub_80A770C
- bl sub_80A7828
- bl sub_80A78B8
- movs r0, 0x1
- b _080A34AA
- .align 2, 0
-_080A34A0: .4byte sub_80A3134
-_080A34A4: .4byte sub_80A3118
-_080A34A8:
- movs r0, 0
-_080A34AA:
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80A317C
-
- thumb_func_start sub_80A34B4
-sub_80A34B4: @ 80A34B4
- push {lr}
-_080A34B6:
- bl sub_80A317C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080A34D2
- bl sub_80F9344
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080A34B6
- movs r0, 0
- b _080A34DE
-_080A34D2:
- ldr r1, _080A34E4 @ =gUnknown_03000700
- movs r0, 0
- strb r0, [r1]
- bl ResetTasks
- movs r0, 0x1
-_080A34DE:
- pop {r1}
- bx r1
- .align 2, 0
-_080A34E4: .4byte gUnknown_03000700
- thumb_func_end sub_80A34B4
-
- thumb_func_start sub_80A34E8
-sub_80A34E8: @ 80A34E8
- push {lr}
- bl sub_80F9368
- ldr r1, _080A3514 @ =REG_BG2CNT
- ldr r2, _080A3518 @ =0x00000c06
- adds r0, r2, 0
- strh r0, [r1]
- subs r1, 0x2
- ldr r2, _080A351C @ =0x00000405
- adds r0, r2, 0
- strh r0, [r1]
- subs r1, 0xA
- movs r2, 0xBA
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x50
- movs r0, 0
- strh r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080A3514: .4byte REG_BG2CNT
-_080A3518: .4byte 0x00000c06
-_080A351C: .4byte 0x00000405
- thumb_func_end sub_80A34E8
-
- thumb_func_start sub_80A3520
-sub_80A3520: @ 80A3520
- push {lr}
- ldr r0, _080A353C @ =0x02000000
- ldr r1, _080A3540 @ =0x0001ffff
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x4
- bls _080A3530
- b _080A3624
-_080A3530:
- lsls r0, 2
- ldr r1, _080A3544 @ =_080A3548
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080A353C: .4byte 0x02000000
-_080A3540: .4byte 0x0001ffff
-_080A3544: .4byte _080A3548
- .align 2, 0
-_080A3548:
- .4byte _080A355C
- .4byte _080A3570
- .4byte _080A3588
- .4byte _080A35C0
- .4byte _080A3604
-_080A355C:
- ldr r0, _080A3568 @ =gBagScreen_Gfx
- ldr r1, _080A356C @ =0x06004000
- bl LZDecompressVram
- b _080A35EA
- .align 2, 0
-_080A3568: .4byte gBagScreen_Gfx
-_080A356C: .4byte 0x06004000
-_080A3570:
- ldr r0, _080A3580 @ =gUnknown_08E77004
- ldr r1, _080A3584 @ =gBGTilemapBuffers + 0x1000
- movs r2, 0x80
- lsls r2, 3
- bl CpuSet
- b _080A35EA
- .align 2, 0
-_080A3580: .4byte gUnknown_08E77004
-_080A3584: .4byte gBGTilemapBuffers + 0x1000
-_080A3588:
- ldr r0, _080A35A4 @ =gSaveBlock2
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- beq _080A3598
- ldr r0, _080A35A8 @ =gUnknown_03000701
- ldrb r0, [r0]
- cmp r0, 0x7
- bne _080A35B0
-_080A3598:
- ldr r0, _080A35AC @ =gBagScreenMale_Pal
- movs r1, 0
- movs r2, 0x40
- bl LoadCompressedPalette
- b _080A35EA
- .align 2, 0
-_080A35A4: .4byte gSaveBlock2
-_080A35A8: .4byte gUnknown_03000701
-_080A35AC: .4byte gBagScreenMale_Pal
-_080A35B0:
- ldr r0, _080A35BC @ =gBagScreenFemale_Pal
- movs r1, 0
- movs r2, 0x40
- bl LoadCompressedPalette
- b _080A35EA
- .align 2, 0
-_080A35BC: .4byte gBagScreenFemale_Pal
-_080A35C0:
- ldr r0, _080A35D8 @ =gSaveBlock2
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- beq _080A35D0
- ldr r0, _080A35DC @ =gUnknown_03000701
- ldrb r0, [r0]
- cmp r0, 0x7
- bne _080A35E4
-_080A35D0:
- ldr r0, _080A35E0 @ =gUnknown_083C1CC8
- bl LoadCompressedObjectPic
- b _080A35EA
- .align 2, 0
-_080A35D8: .4byte gSaveBlock2
-_080A35DC: .4byte gUnknown_03000701
-_080A35E0: .4byte gUnknown_083C1CC8
-_080A35E4:
- ldr r0, _080A35F8 @ =gUnknown_083C1CD0
- bl LoadCompressedObjectPic
-_080A35EA:
- ldr r1, _080A35FC @ =0x02000000
- ldr r0, _080A3600 @ =0x0001ffff
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _080A3624
- .align 2, 0
-_080A35F8: .4byte gUnknown_083C1CD0
-_080A35FC: .4byte 0x02000000
-_080A3600: .4byte 0x0001ffff
-_080A3604:
- ldr r0, _080A3618 @ =gUnknown_083C1CD8
- bl LoadCompressedObjectPalette
- ldr r0, _080A361C @ =0x02000000
- ldr r1, _080A3620 @ =0x0001ffff
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- movs r0, 0x1
- b _080A3626
- .align 2, 0
-_080A3618: .4byte gUnknown_083C1CD8
-_080A361C: .4byte 0x02000000
-_080A3620: .4byte 0x0001ffff
-_080A3624:
- movs r0, 0
-_080A3626:
- pop {r1}
- bx r1
- thumb_func_end sub_80A3520
-
- thumb_func_start sub_80A362C
-sub_80A362C: @ 80A362C
- push {r4-r6,lr}
- movs r4, 0
- ldr r6, _080A3648 @ =gUnknown_03000701
- ldr r5, _080A364C @ =gUnknown_03005D10
-_080A3634:
- ldrb r0, [r6]
- cmp r0, 0x5
- bne _080A3650
- lsls r1, r4, 2
- adds r0, r1, r5
- ldrb r0, [r0, 0x2]
- subs r0, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- b _080A3656
- .align 2, 0
-_080A3648: .4byte gUnknown_03000701
-_080A364C: .4byte gUnknown_03005D10
-_080A3650:
- lsls r1, r4, 2
- adds r0, r1, r5
- ldrb r3, [r0, 0x2]
-_080A3656:
- adds r1, r5
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- beq _080A366C
- ldrb r2, [r1, 0x3]
- adds r0, r2
- cmp r0, r3
- ble _080A3674
- subs r0, r3, r2
- strb r0, [r1, 0x1]
- b _080A3674
-_080A366C:
- ldrb r0, [r1]
- cmp r0, r3
- bls _080A3674
- strb r3, [r1]
-_080A3674:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x4
- bls _080A3634
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80A362C
-
- thumb_func_start sub_80A3684
-sub_80A3684: @ 80A3684
- push {r4,lr}
- movs r2, 0
- ldr r4, _080A36B0 @ =gUnknown_02038559
- ldr r3, _080A36B4 @ =gUnknown_03005D10
- movs r1, 0
-_080A368E:
- lsls r0, r2, 2
- adds r0, r3
- strb r1, [r0]
- strb r1, [r0, 0x1]
- strb r1, [r0, 0x2]
- strb r1, [r0, 0x3]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x4
- bls _080A368E
- movs r0, 0
- strb r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080A36B0: .4byte gUnknown_02038559
-_080A36B4: .4byte gUnknown_03005D10
- thumb_func_end sub_80A3684
-
- thumb_func_start sub_80A36B8
-sub_80A36B8: @ 80A36B8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- ldr r0, [sp, 0x18]
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- lsls r2, 24
- lsls r3, 24
- lsrs r3, 24
- mov r12, r3
- lsls r0, 24
- lsrs r0, 24
- lsrs r2, 24
- adds r0, r2, r0
- cmp r2, r0
- bgt _080A370A
- adds r7, r0, 0
-_080A36DE:
- mov r1, r8
- mov r3, r12
- adds r0, r1, r3
- adds r4, r2, 0x1
- cmp r1, r0
- bgt _080A3702
- lsls r3, r2, 5
- movs r5, 0
- adds r2, r0, 0
-_080A36F0:
- adds r0, r1, r3
- lsls r0, 1
- adds r0, r6
- strh r5, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r2
- ble _080A36F0
-_080A3702:
- lsls r0, r4, 16
- lsrs r2, r0, 16
- cmp r2, r7
- ble _080A36DE
-_080A370A:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80A36B8
-
- thumb_func_start ClearBag
-ClearBag: @ 80A3714
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, _080A373C @ =gBagPockets
-_080A371A:
- lsls r1, r4, 3
- adds r1, r5
- ldr r0, [r1]
- ldrb r1, [r1, 0x4]
- bl ClearItemSlots
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x4
- bls _080A371A
- bl sub_80A3684
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080A373C: .4byte gBagPockets
- thumb_func_end ClearBag
-
thumb_func_start sub_80A3740
sub_80A3740: @ 80A3740
push {lr}
diff --git a/include/graphics.h b/include/graphics.h
index 36b11fd0a..4d042b3b6 100755..100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2435,7 +2435,12 @@ extern const u8 gMonFrontPic_UnownQuestionMark[];
extern const u8 gMonBackPic_UnownQuestionMark[];
extern const u8 gMonIcon_UnownQuestionMark[];
-// src/pokeblock.c
+// data/graphics.s
+extern const u8 gBagScreen_Gfx[];
+extern const u8 gBagScreenMale_Pal[];
+extern const u8 gBagScreenFemale_Pal[];
+extern const u16 gUnknown_08E77004[];
+
extern const u8 gMenuPokeblock_Gfx[];
extern const u8 gMenuPokeblock_Tilemap[];
extern const u8 gMenuPokeblock_Pal[];
diff --git a/include/item.h b/include/item.h
index 47af11940..f51ea3ae5 100644
--- a/include/item.h
+++ b/include/item.h
@@ -22,6 +22,14 @@ struct Item
u8 secondaryId;
};
+struct BagPocket
+{
+ struct ItemSlot *itemSlots;
+ u8 capacity;
+};
+
+extern struct BagPocket gBagPockets[5];
+
void CopyItemName(u16 itemId, u8 *string);
bool8 IsBagPocketNonEmpty(u8 pocket);
bool8 CheckBagHasItem(u16 itemId, u16 count);
diff --git a/ld_script.txt b/ld_script.txt
index a51f50947..f5a13b0c4 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -155,6 +155,7 @@ SECTIONS {
src/fldeff_cut.o(.text);
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);
diff --git a/src/item.c b/src/item.c
index 2eb013490..a5ed99a82 100644
--- a/src/item.c
+++ b/src/item.c
@@ -8,14 +8,6 @@
extern u8 gUnknown_02038560;
extern struct Item gItems[];
-struct BagPocket
-{
- struct ItemSlot *itemSlots;
- u8 capacity;
-};
-
-extern struct BagPocket gBagPockets[5];
-
enum
{
ITEMS_POCKET,
diff --git a/src/item_menu.c b/src/item_menu.c
new file mode 100644
index 000000000..bbb91296f
--- /dev/null
+++ b/src/item_menu.c
@@ -0,0 +1,339 @@
+#include "global.h"
+#include "decompress.h"
+#include "graphics.h"
+#include "item.h"
+#include "main.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "palette.h"
+#include "rom4.h"
+#include "sprite.h"
+#include "task.h"
+#include "text.h"
+#include "unknown_task.h"
+
+extern u8 ewram[];
+
+struct UnknownStruct1
+{
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+};
+
+extern s8 gUnknown_02038559;
+extern u8 gUnknown_0203855A;
+extern u8 gUnknown_0203855B;
+extern u8 gUnknown_0203855C;
+extern u8 gUnknown_03000700;
+extern u8 gUnknown_03000701;
+extern struct UnknownStruct1 gUnknown_03005D10[];
+extern struct ItemSlot *gUnknown_03005D24;
+
+extern void gpu_pal_allocator_reset__manage_upper_four(void);
+extern void sub_80F9020(void);
+extern void sub_80F9988();
+
+extern const struct CompressedSpriteSheet gUnknown_083C1CC8;
+extern const struct CompressedSpriteSheet gUnknown_083C1CD0;
+extern const struct CompressedSpritePalette gUnknown_083C1CD8;
+
+void sub_80A34E8(void);
+bool8 sub_80A3520(void);
+void sub_80A362C(void);
+void sub_80A3740(void);
+void sub_80A39B8(u16 *, u8);
+void sub_80A3AC0(u16 *, u8);
+void sub_80A3C34();
+void sub_80A3D08(void);
+void sub_80A3D40(void);
+void sub_80A48E8();
+void ItemListMenu_InitDescription();
+void ItemListMenu_InitMenu(void);
+void sub_80A740C(void);
+void sub_80A751C(void);
+void sub_80A7630(void);
+void sub_80A770C(void);
+void sub_80A7828(void);
+void sub_80A78B8(void);
+void CreateBagSprite(void);
+void CreateBagPokeballSprite();
+
+void sub_80A3118(void)
+{
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTasks();
+ sub_80A740C();
+ UpdatePaletteFade();
+}
+
+void sub_80A3134(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+
+ {
+ const void *src = gBGTilemapBuffers[1];
+ void *dst = (void *)(VRAM + 0x2000);
+
+ DmaCopy16(3, src, dst, 0x800);
+ }
+
+ {
+ const void *src = gBGTilemapBuffers[2];
+ void *dst = (void *)(VRAM + 0x6000);
+
+ DmaCopy16(3, src, dst, 0x800);
+ }
+}
+
+bool8 sub_80A317C(void)
+{
+ u32 val;
+ u16 savedIme;
+
+ switch (gMain.state)
+ {
+ case 0:
+ sub_80F9438();
+ sub_80A34E8();
+ gMain.state++;
+ break;
+ case 1:
+ remove_some_task();
+ gMain.state++;
+ break;
+ case 2:
+ gpu_pal_allocator_reset__manage_upper_four();
+ gMain.state++;
+ break;
+ case 3:
+ sub_80F9020();
+ ewram[0x1FFFF] = 0;
+ gMain.state++;
+ break;
+ case 4:
+ ResetPaletteFade();
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ gMain.state++;
+ break;
+ case 5:
+ ResetSpriteData();
+ gMain.state++;
+ break;
+ case 6:
+ if (sub_80A3520() == FALSE)
+ break;
+ gMain.state++;
+ break;
+ case 7:
+ SetUpWindowConfig(&gWindowConfig_81E6DFC);
+ gMain.state++;
+ break;
+ case 8:
+ MultistepInitMenuWindowBegin(&gWindowConfig_81E6DFC);
+ gMain.state++;
+ break;
+ case 9:
+ if (!MultistepInitMenuWindowContinue())
+ break;
+ gMain.state++;
+ break;
+ case 10:
+ sub_80F944C();
+ LoadScrollIndicatorPalette();
+ CreateVerticalScrollIndicators(0, 172, 12);
+ CreateVerticalScrollIndicators(1, 172, 148);
+ CreateVerticalScrollIndicators(2, 28, 88);
+ CreateVerticalScrollIndicators(3, 100, 88);
+ sub_80F9988(0, 2);
+ sub_80F9988(1, 2);
+ sub_80F9988(2, 2);
+ sub_80F9988(3, 2);
+ if (gUnknown_03000701 == 4 || gUnknown_03000701 == 5)
+ {
+ sub_80F979C(2, 1);
+ sub_80F979C(3, 1);
+ }
+ gMain.state++;
+ break;
+ case 11:
+ gUnknown_0203855A = 16;
+ sub_80A39B8(gBGTilemapBuffers[2], gUnknown_02038559 + 1);
+ sub_80A3AC0(gBGTilemapBuffers[2], gUnknown_02038559);
+ sub_80A3D08();
+ // What is this?
+ sub_80A3C34(gBagPockets[2].itemSlots, *(u32 *)&gBagPockets[2].capacity);
+ sub_80A3C34(gBagPockets[3].itemSlots, *(u32 *)&gBagPockets[3].capacity);
+ sub_80A3D40();
+ gUnknown_03005D24 = gBagPockets[gUnknown_02038559].itemSlots;
+ sub_80A362C();
+ gMain.state++;
+ break;
+ case 12:
+ sub_80A48E8(0xFFFF, 0, 7);
+ val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0;
+ ItemListMenu_InitDescription((s16)gUnknown_03005D24[val].itemId);
+ ItemListMenu_InitMenu();
+ gUnknown_0203855B = gUnknown_02038559 + 1;
+ gUnknown_0203855C = 0;
+ gMain.state++;
+ break;
+ case 13:
+ CreateBagSprite();
+ CreateBagPokeballSprite(0);
+ sub_80A3740();
+ gMain.state++;
+ break;
+ case 14:
+ savedIme = REG_IME;
+ REG_IME = 0;
+ REG_IE |= INTR_FLAG_VBLANK;
+ REG_IME = savedIme;
+ REG_DISPSTAT |= 8;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ gMain.state++;
+ break;
+ case 15:
+ if (sub_8055870() == TRUE)
+ break;
+ gMain.state++;
+ break;
+ case 16:
+ SetVBlankCallback(sub_80A3134);
+ SetMainCallback2(sub_80A3118);
+ sub_80A751C();
+ sub_80A7630();
+ sub_80A770C();
+ sub_80A7828();
+ sub_80A78B8();
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_80A34B4(void)
+{
+ do
+ {
+ if (sub_80A317C() == TRUE)
+ {
+ gUnknown_03000700 = 0;
+ ResetTasks();
+ return TRUE;
+ }
+ } while (sub_80F9344() != 1);
+ return FALSE;
+}
+
+void sub_80A34E8(void)
+{
+ sub_80F9368();
+ REG_BG2CNT = 0x0C06;
+ REG_BG1CNT = 0x0405;
+ REG_DISPCNT = 0x1740;
+ REG_BLDCNT = 0;
+}
+
+bool8 sub_80A3520(void)
+{
+ switch (ewram[0x1FFFF])
+ {
+ case 0:
+ LZDecompressVram(gBagScreen_Gfx, (void *)(VRAM + 0x4000));
+ ewram[0x1FFFF]++;
+ break;
+ case 1:
+ CpuCopy16(gUnknown_08E77004, gBGTilemapBuffers[2], 0x800);
+ ewram[0x1FFFF]++;
+ break;
+ case 2:
+ if (gSaveBlock2.playerGender == MALE || gUnknown_03000701 == 7)
+ LoadCompressedPalette(gBagScreenMale_Pal, 0, 64);
+ else
+ LoadCompressedPalette(gBagScreenFemale_Pal, 0, 64);
+ ewram[0x1FFFF]++;
+ break;
+ case 3:
+ if (gSaveBlock2.playerGender == MALE || gUnknown_03000701 == 7)
+ LoadCompressedObjectPic(&gUnknown_083C1CC8);
+ else
+ LoadCompressedObjectPic(&gUnknown_083C1CD0);
+ ewram[0x1FFFF]++;
+ break;
+ case 4:
+ LoadCompressedObjectPalette(&gUnknown_083C1CD8);
+ ewram[0x1FFFF] = 0;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_80A362C(void)
+{
+ u8 i;
+
+ for (i = 0; i < 5; i++)
+ {
+ u8 r3;
+
+ if (gUnknown_03000701 == 5)
+ r3 = gUnknown_03005D10[i].unk2 - 1;
+ else
+ r3 = gUnknown_03005D10[i].unk2;
+
+ if (gUnknown_03005D10[i].unk1 != 0)
+ {
+ if (gUnknown_03005D10[i].unk1 + gUnknown_03005D10[i].unk3 > r3)
+ gUnknown_03005D10[i].unk1 = r3 - gUnknown_03005D10[i].unk3;
+ }
+ else
+ {
+ if (gUnknown_03005D10[i].unk0 > r3)
+ gUnknown_03005D10[i].unk0 = r3;
+ }
+ }
+}
+
+void sub_80A3684(void)
+{
+ u16 i;
+
+ for (i = 0; i < 5; i++)
+ {
+ gUnknown_03005D10[i].unk0 = 0;
+ gUnknown_03005D10[i].unk1 = 0;
+ gUnknown_03005D10[i].unk2 = 0;
+ gUnknown_03005D10[i].unk3 = 0;
+ }
+ gUnknown_02038559 = 0;
+}
+
+void sub_80A36B8(u16 *a, u8 b, u8 c, u8 d, u8 e)
+{
+ u16 i;
+ u16 j;
+
+ for (i = c; i <= c + e; i++)
+ {
+ for (j = b; j <= b + d; j++)
+ {
+ u32 index = j + i * 32;
+
+ a[index] = 0;
+ }
+ }
+}
+
+void ClearBag(void)
+{
+ u16 i;
+
+ for (i = 0; i < 5; i++)
+ ClearItemSlots(gBagPockets[i].itemSlots, gBagPockets[i].capacity);
+ sub_80A3684();
+}