summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2017-07-08 12:16:19 -0500
committercamthesaxman <cameronghall@cox.net>2017-07-08 12:16:19 -0500
commit9a57e785576c658980e7cac5d3531181ccc64d42 (patch)
tree85f92ebb52ccbcd26b041f20cb2f3f2b82b0e74b
parent4aa1b44315ee26fa60015a99ccd51f900e5597fd (diff)
decompile sub_80A3740 - swap32
-rw-r--r--asm/item_menu.s581
-rw-r--r--data/item_menu.s22
-rw-r--r--include/graphics.h10
-rw-r--r--include/item.h4
-rw-r--r--ld_script.txt2
-rw-r--r--src/item.c153
-rw-r--r--src/item_menu.c237
7 files changed, 401 insertions, 608 deletions
diff --git a/asm/item_menu.s b/asm/item_menu.s
index ae746307c..c94a88473 100644
--- a/asm/item_menu.s
+++ b/asm/item_menu.s
@@ -6,587 +6,6 @@
.text
- thumb_func_start sub_80A3740
-sub_80A3740: @ 80A3740
- push {lr}
- sub sp, 0x4
- ldr r1, _080A376C @ =gUnknown_083C1704
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- mov r0, sp
- adds r0, 0x2
- movs r1, 0xD1
- movs r2, 0x2
- bl LoadPalette
- mov r0, sp
- movs r1, 0xD8
- movs r2, 0x2
- bl LoadPalette
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_080A376C: .4byte gUnknown_083C1704
- thumb_func_end sub_80A3740
-
- thumb_func_start sub_80A3770
-sub_80A3770: @ 80A3770
- push {lr}
- ldr r0, _080A379C @ =gUnknown_03000701
- ldrb r0, [r0]
- cmp r0, 0
- bne _080A37B6
- ldr r3, _080A37A0 @ =gUnknown_03000704
- ldr r2, _080A37A4 @ =gUnknown_02038559
- movs r1, 0
- ldrsb r1, [r2, r1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 1
- ldr r1, _080A37A8 @ =gUnknown_083C1690
- adds r0, r1
- str r0, [r3]
- movs r0, 0
- ldrsb r0, [r2, r0]
- cmp r0, 0x3
- beq _080A37B0
- ldr r1, _080A37AC @ =gUnknown_02038564
- movs r0, 0x4
- b _080A37B4
- .align 2, 0
-_080A379C: .4byte gUnknown_03000701
-_080A37A0: .4byte gUnknown_03000704
-_080A37A4: .4byte gUnknown_02038559
-_080A37A8: .4byte gUnknown_083C1690
-_080A37AC: .4byte gUnknown_02038564
-_080A37B0:
- ldr r1, _080A37BC @ =gUnknown_02038564
- movs r0, 0x6
-_080A37B4:
- strb r0, [r1]
-_080A37B6:
- pop {r0}
- bx r0
- .align 2, 0
-_080A37BC: .4byte gUnknown_02038564
- thumb_func_end sub_80A3770
-
- thumb_func_start sub_80A37C0
-sub_80A37C0: @ 80A37C0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080A37F0 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, _080A37F4 @ =sub_80A50C8
- str r0, [r1]
- movs r0, 0
- bl StartVerticalScrollIndicators
- movs r0, 0x1
- bl StartVerticalScrollIndicators
- movs r0, 0x2
- bl StartVerticalScrollIndicators
- movs r0, 0x3
- bl StartVerticalScrollIndicators
- pop {r0}
- bx r0
- .align 2, 0
-_080A37F0: .4byte gTasks
-_080A37F4: .4byte sub_80A50C8
- thumb_func_end sub_80A37C0
-
- thumb_func_start sub_80A37F8
-sub_80A37F8: @ 80A37F8
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r6, _080A3854 @ =gUnknown_0203855A
- ldrb r5, [r6]
- cmp r5, 0xF
- bhi _080A3868
- adds r0, r5, 0x1
- strb r0, [r6]
- ldr r4, _080A3858 @ =gBGTilemapBuffers + 0x1000
- ldrb r2, [r6]
- adds r0, r4, 0
- adds r1, r5, 0
- movs r3, 0x4F
- bl sub_80A396C
- ldr r0, _080A385C @ =gUnknown_02038559
- ldrb r1, [r0]
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- ldrb r2, [r6]
- lsrs r2, 1
- ldr r3, _080A3860 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r3
- movs r3, 0x12
- ldrsb r3, [r0, r3]
- adds r0, r4, 0
- bl sub_80A39E4
- ldr r4, _080A3864 @ =gUnknown_02038558
- movs r0, 0x1
- strb r0, [r4]
- lsrs r1, r5, 1
- ldrb r2, [r6]
- lsrs r2, 1
- subs r2, 0x1
- adds r0, r7, 0
- bl sub_80A48E8
- movs r0, 0
- strb r0, [r4]
- b _080A3932
- .align 2, 0
-_080A3854: .4byte gUnknown_0203855A
-_080A3858: .4byte gBGTilemapBuffers + 0x1000
-_080A385C: .4byte gUnknown_02038559
-_080A3860: .4byte gTasks
-_080A3864: .4byte gUnknown_02038558
-_080A3868:
- ldr r0, _080A38A0 @ =gLinkOpen
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080A38B4
- ldr r1, _080A38A4 @ =gUnknown_03005D10
- ldr r0, _080A38A8 @ =gUnknown_02038559
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0]
- adds r1, r0
- ldr r0, _080A38AC @ =gUnknown_03005D24
- ldr r0, [r0]
- lsls r1, 2
- adds r1, r0
- movs r2, 0
- ldrsh r0, [r1, r2]
- ldr r4, _080A38B0 @ =gUnknown_02038562
- ldrb r1, [r4]
- bl ItemListMenu_ChangeDescription
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _080A38F2
- .align 2, 0
-_080A38A0: .4byte gLinkOpen
-_080A38A4: .4byte gUnknown_03005D10
-_080A38A8: .4byte gUnknown_02038559
-_080A38AC: .4byte gUnknown_03005D24
-_080A38B0: .4byte gUnknown_02038562
-_080A38B4:
- ldr r1, _080A3938 @ =gUnknown_02038562
- ldrb r0, [r1]
- cmp r0, 0x2
- bhi _080A38F2
- ldr r5, _080A393C @ =gUnknown_03005D10
- adds r4, r1, 0
-_080A38C0:
- ldr r0, _080A3940 @ =gUnknown_02038559
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0]
- adds r1, r0
- ldr r0, _080A3944 @ =gUnknown_03005D24
- ldr r0, [r0]
- lsls r1, 2
- adds r1, r0
- movs r2, 0
- ldrsh r0, [r1, r2]
- ldrb r1, [r4]
- bl ItemListMenu_ChangeDescription
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bls _080A38C0
-_080A38F2:
- ldr r0, _080A3938 @ =gUnknown_02038562
- ldrb r0, [r0]
- cmp r0, 0x3
- bne _080A3932
- ldr r1, _080A3948 @ =gUnknown_0203855A
- movs r0, 0x10
- strb r0, [r1]
- ldr r1, _080A394C @ =gUnknown_0203855B
- ldr r0, _080A3940 @ =gUnknown_02038559
- ldrb r0, [r0]
- adds r0, 0x1
- strb r0, [r1]
- ldr r0, _080A3950 @ =sub_80A4F68
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl sub_80A37C0
- adds r0, r7, 0
- bl DestroyTask
- bl ItemListMenu_InitMenu
- movs r0, 0x2
- movs r1, 0
- bl sub_80F979C
- movs r0, 0x3
- movs r1, 0
- bl sub_80F979C
-_080A3932:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080A3938: .4byte gUnknown_02038562
-_080A393C: .4byte gUnknown_03005D10
-_080A3940: .4byte gUnknown_02038559
-_080A3944: .4byte gUnknown_03005D24
-_080A3948: .4byte gUnknown_0203855A
-_080A394C: .4byte gUnknown_0203855B
-_080A3950: .4byte sub_80A4F68
- thumb_func_end sub_80A37F8
-
- thumb_func_start sub_80A3954
-sub_80A3954: @ 80A3954
- push {lr}
- adds r1, r0, 0
- ldr r0, _080A3968 @ =gUnknown_08E77004
- movs r2, 0x80
- lsls r2, 3
- bl CpuSet
- pop {r0}
- bx r0
- .align 2, 0
-_080A3968: .4byte gUnknown_08E77004
- thumb_func_end sub_80A3954
-
- thumb_func_start sub_80A396C
-sub_80A396C: @ 80A396C
- push {r4-r7,lr}
- lsls r1, 24
- lsrs r5, r1, 24
- adds r4, r5, 0
- lsls r2, 24
- lsrs r7, r2, 24
- lsls r3, 24
- lsrs r6, r3, 24
- adds r1, r4, 0x2
- lsls r1, 6
- adds r1, 0x1C
- adds r2, r0, r1
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r7, r4
- bls _080A39B2
-_080A398E:
- movs r1, 0
- adds r3, r5, 0x1
- adds r4, r2, 0
- adds r4, 0x40
-_080A3996:
- lsls r0, r1, 1
- adds r0, r2
- strh r6, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0xE
- bls _080A3996
- adds r2, r4, 0
- adds r1, r5, 0
- lsls r0, r3, 24
- lsrs r5, r0, 24
- cmp r7, r1
- bhi _080A398E
-_080A39B2:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80A396C
-
- thumb_func_start sub_80A39B8
-sub_80A39B8: @ 80A39B8
- push {lr}
- sub sp, 0x10
- lsls r1, 25
- lsrs r1, 24
- ldr r3, _080A39E0 @ =gUnknown_08E96EC8
- movs r2, 0
- str r2, [sp]
- str r1, [sp, 0x4]
- movs r1, 0x8
- str r1, [sp, 0x8]
- movs r1, 0x2
- str r1, [sp, 0xC]
- movs r1, 0x4
- movs r2, 0xA
- bl sub_809D104
- add sp, 0x10
- pop {r0}
- bx r0
- .align 2, 0
-_080A39E0: .4byte gUnknown_08E96EC8
- thumb_func_end sub_80A39B8
-
- thumb_func_start sub_80A39E4
-sub_80A39E4: @ 80A39E4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- mov r8, r0
- lsls r1, 24
- lsrs r1, 24
- adds r4, r1, 0
- lsls r2, 24
- lsrs r6, r2, 24
- adds r5, r6, 0
- lsls r2, r1, 1
- mov r9, r2
- lsls r3, 24
- asrs r3, 24
- movs r0, 0x1
- negs r0, r0
- cmp r3, r0
- bne _080A3A5C
- adds r0, r1, 0x1
- lsls r7, r0, 1
- cmp r1, 0x5
- bne _080A3A18
- movs r7, 0x2
-_080A3A18:
- ldr r0, _080A3A58 @ =gUnknown_08E96EC8
- mov r10, r0
- movs r4, 0x8
- subs r4, r6
- lsls r4, 16
- lsrs r4, 16
- str r4, [sp]
- str r2, [sp, 0x4]
- str r6, [sp, 0x8]
- movs r0, 0x2
- mov r9, r0
- str r0, [sp, 0xC]
- mov r0, r8
- movs r1, 0x4
- movs r2, 0xA
- mov r3, r10
- bl sub_809D104
- adds r1, r6, 0x4
- movs r0, 0
- str r0, [sp]
- str r7, [sp, 0x4]
- str r4, [sp, 0x8]
- mov r0, r9
- str r0, [sp, 0xC]
- mov r0, r8
- movs r2, 0xA
- mov r3, r10
- bl sub_809D104
- b _080A3AAA
- .align 2, 0
-_080A3A58: .4byte gUnknown_08E96EC8
-_080A3A5C:
- cmp r3, 0x1
- bne _080A3AAA
- subs r0, r4, 0x1
- lsls r0, 17
- lsrs r7, r0, 16
- cmp r4, 0x1
- bne _080A3A6C
- movs r7, 0xA
-_080A3A6C:
- ldr r6, _080A3ABC @ =gUnknown_08E96EC8
- str r5, [sp]
- str r7, [sp, 0x4]
- movs r0, 0x8
- subs r0, r5
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x8]
- movs r4, 0x2
- str r4, [sp, 0xC]
- mov r0, r8
- movs r1, 0x4
- movs r2, 0xA
- adds r3, r6, 0
- bl sub_809D104
- movs r1, 0xC
- subs r1, r5
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0
- str r0, [sp]
- mov r0, r9
- str r0, [sp, 0x4]
- str r5, [sp, 0x8]
- str r4, [sp, 0xC]
- mov r0, r8
- movs r2, 0xA
- adds r3, r6, 0
- bl sub_809D104
-_080A3AAA:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080A3ABC: .4byte gUnknown_08E96EC8
- thumb_func_end sub_80A39E4
-
- thumb_func_start sub_80A3AC0
-sub_80A3AC0: @ 80A3AC0
- push {r4-r6,lr}
- adds r3, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- movs r2, 0
- ldr r1, _080A3AE4 @ =0x0000024a
- ldr r0, _080A3AE8 @ =0x0000107d
- adds r6, r0, 0
- subs r0, 0x1
- adds r5, r0, 0
-_080A3AD4:
- cmp r2, r4
- bne _080A3AEC
- lsls r0, r2, 1
- adds r0, r3
- adds r0, r1
- strh r6, [r0]
- b _080A3AF4
- .align 2, 0
-_080A3AE4: .4byte 0x0000024a
-_080A3AE8: .4byte 0x0000107d
-_080A3AEC:
- lsls r0, r2, 1
- adds r0, r3
- adds r0, r1
- strh r5, [r0]
-_080A3AF4:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x4
- bls _080A3AD4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80A3AC0
-
- thumb_func_start sub_80A3B04
-sub_80A3B04: @ 80A3B04
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r4, _080A3BA4 @ =gUnknown_02038559
- ldrb r0, [r4]
- lsls r1, 24
- asrs r6, r1, 24
- adds r0, r6, r0
- strb r0, [r4]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x4
- ble _080A3B20
- movs r0, 0
- strb r0, [r4]
-_080A3B20:
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0
- bge _080A3B2C
- movs r0, 0x4
- strb r0, [r4]
-_080A3B2C:
- bl sub_80A76A0
- bl sub_80A7590
- ldr r2, _080A3BA8 @ =gUnknown_03005D24
- ldr r1, _080A3BAC @ =gBagPockets
- movs r0, 0
- ldrsb r0, [r4, r0]
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0]
- str r0, [r2]
- ldrb r0, [r4]
- bl sub_80A3D24
- ldr r0, _080A3BB0 @ =gUnknown_0203855A
- movs r4, 0
- strb r4, [r0]
- adds r0, r5, 0
- bl sub_80A3954
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0x10
- movs r3, 0x3
- bl sub_80A396C
- adds r0, r5, 0
- movs r1, 0
- bl sub_80A39B8
- ldr r1, _080A3BB4 @ =gUnknown_0203855B
- movs r0, 0x6
- strb r0, [r1]
- ldr r0, _080A3BB8 @ =gUnknown_02038562
- strb r4, [r0]
- ldr r4, _080A3BBC @ =sub_80A37F8
- adds r0, r4, 0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- bne _080A3B90
- adds r0, r4, 0
- movs r1, 0x8
- bl CreateTask
- lsls r0, 24
- lsrs r2, r0, 24
-_080A3B90:
- ldr r1, _080A3BC0 @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r1
- strh r6, [r0, 0x12]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080A3BA4: .4byte gUnknown_02038559
-_080A3BA8: .4byte gUnknown_03005D24
-_080A3BAC: .4byte gBagPockets
-_080A3BB0: .4byte gUnknown_0203855A
-_080A3BB4: .4byte gUnknown_0203855B
-_080A3BB8: .4byte gUnknown_02038562
-_080A3BBC: .4byte sub_80A37F8
-_080A3BC0: .4byte gTasks
- thumb_func_end sub_80A3B04
-
- thumb_func_start swap32
-swap32: @ 80A3BC4
- ldr r3, [r0]
- ldr r2, [r1]
- str r2, [r0]
- str r3, [r1]
- bx lr
- thumb_func_end swap32
-
thumb_func_start sub_80A3BD0
sub_80A3BD0: @ 80A3BD0
push {r4-r7,lr}
diff --git a/data/item_menu.s b/data/item_menu.s
index f66961b46..05bd3ea48 100644
--- a/data/item_menu.s
+++ b/data/item_menu.s
@@ -3,28 +3,6 @@
.section .rodata
-@ pointer to items, capacity
- .align 2
-gBagPockets:: @ 83C1618
- .4byte gSaveBlock1 + 0x560, 20 @ Items
- .4byte gSaveBlock1 + 0x600, 16 @ Poké Balls
- .4byte gSaveBlock1 + 0x640, 64 @ TMs & HMs
- .4byte gSaveBlock1 + 0x740, 46 @ Berries
- .4byte gSaveBlock1 + 0x5B0, 20 @ Key Items
-
- .align 2
-gUnknown_083C1640:: @ 83C1640
- .4byte OtherText_Use, sub_80A5B78
- .4byte OtherText_Toss, sub_80A5F14
- .4byte gOtherText_CancelNoTerminator, sub_80A5F80
- .4byte OtherText_Register, sub_80A5FAC
- .4byte OtherText_Use, ItemMenu_UseInBattle
- .4byte gOtherText_CancelNoTerminator, sub_80A7124
- .4byte OtherText_Give2, ItemMenu_Give
- .4byte OtherText_CheckTag, sub_80A6178
- .4byte gOtherText_CancelWithTerminator, 0x0
- .4byte OtherText_Confirm, sub_80A69E0
-
@ 6-byte entries; format of entry is unknown
gUnknown_083C1690:: @ 83C1690
.byte 0, 1, 6, 2, 0, 0
diff --git a/include/graphics.h b/include/graphics.h
index 4d042b3b6..12ffd16fe 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2440,12 +2440,16 @@ extern const u8 gBagScreen_Gfx[];
extern const u8 gBagScreenMale_Pal[];
extern const u8 gBagScreenFemale_Pal[];
extern const u16 gUnknown_08E77004[];
-
+extern const u8 gBuyMenuFrame_Gfx[];
+extern const u8 gMenuMoneyPal[];
+extern const u8 gBuyMenuFrame_Tilemap[];
+extern const u8 gMenuMoneyGfx[];
extern const u8 gMenuPokeblock_Gfx[];
-extern const u8 gMenuPokeblock_Tilemap[];
extern const u8 gMenuPokeblock_Pal[];
-
extern const u8 gMenuPokeblockDevice_Gfx[];
extern const u8 gMenuPokeblockDevice_Pal[];
+extern const u8 gMenuPokeblock_Tilemap[];
+
+extern const u8 gUnknown_08E96EC8[];
#endif // GUARD_GRAPHICS_H
diff --git a/include/item.h b/include/item.h
index f51ea3ae5..54a252302 100644
--- a/include/item.h
+++ b/include/item.h
@@ -28,7 +28,9 @@ struct BagPocket
u8 capacity;
};
-extern struct BagPocket gBagPockets[5];
+#define NUM_BAG_POCKETS 5
+
+extern const struct BagPocket gBagPockets[NUM_BAG_POCKETS];
void CopyItemName(u16 itemId, u8 *string);
bool8 IsBagPocketNonEmpty(u8 pocket);
diff --git a/ld_script.txt b/ld_script.txt
index f5a13b0c4..7796658d4 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -397,6 +397,8 @@ 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);
diff --git a/src/item.c b/src/item.c
index a5ed99a82..33aa87768 100644
--- a/src/item.c
+++ b/src/item.c
@@ -129,6 +129,7 @@ bool8 CheckBagHasSpace(u16 itemId, u16 count)
return TRUE;
}
+#ifdef NONMATCHING
bool8 AddBagItem(u16 itemId, u16 count)
{
u8 i;
@@ -193,6 +194,158 @@ bool8 AddBagItem(u16 itemId, u16 count)
memcpy(gBagPockets[pocket].itemSlots, newItems, gBagPockets[pocket].capacity * sizeof(struct ItemSlot));
return TRUE;
}
+#else
+__attribute__((naked))
+bool8 AddBagItem(u16 itemId, u16 count)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r9\n\
+ mov r6, r8\n\
+ push {r6,r7}\n\
+ sub sp, 0x100\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r8, r0\n\
+ lsls r1, 16\n\
+ lsrs r4, r1, 16\n\
+ bl ItemId_GetPocket\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080A9510\n\
+ mov r0, r8\n\
+ bl ItemId_GetPocket\n\
+ subs r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ ldr r1, _080A94F8 @ =gBagPockets\n\
+ lsls r0, r6, 3\n\
+ adds r5, r0, r1\n\
+ ldr r1, [r5]\n\
+ ldrb r2, [r5, 0x4]\n\
+ lsls r2, 2\n\
+ mov r0, sp\n\
+ bl memcpy\n\
+ ldr r7, _080A94FC @ =0x000003e7\n\
+ cmp r6, 0x3\n\
+ beq _080A9468\n\
+ movs r7, 0x63\n\
+_080A9468:\n\
+ movs r1, 0\n\
+ ldrb r0, [r5, 0x4]\n\
+ cmp r1, r0\n\
+ bcs _080A94B2\n\
+ subs r0, r6, 0x2\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r12, r0\n\
+_080A9478:\n\
+ lsls r0, r1, 2\n\
+ mov r2, sp\n\
+ adds r3, r2, r0\n\
+ ldrh r0, [r3]\n\
+ cmp r0, r8\n\
+ bne _080A94A6\n\
+ ldrh r2, [r3, 0x2]\n\
+ adds r0, r2, r4\n\
+ cmp r0, r7\n\
+ ble _080A9500\n\
+ mov r0, r12\n\
+ cmp r0, 0x1\n\
+ bls _080A9510\n\
+ subs r0, r7, r2\n\
+ subs r0, r4, r0\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ strh r7, [r3, 0x2]\n\
+ ldr r2, _080A94F8 @ =gBagPockets\n\
+ mov r9, r2\n\
+ lsls r3, r6, 3\n\
+ cmp r4, 0\n\
+ beq _080A9516\n\
+_080A94A6:\n\
+ adds r0, r1, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r1, r0, 24\n\
+ ldrb r0, [r5, 0x4]\n\
+ cmp r1, r0\n\
+ bcc _080A9478\n\
+_080A94B2:\n\
+ ldr r2, _080A94F8 @ =gBagPockets\n\
+ mov r9, r2\n\
+ lsls r3, r6, 3\n\
+ cmp r4, 0\n\
+ beq _080A9516\n\
+ movs r1, 0\n\
+ adds r0, r3, r2\n\
+ ldrb r0, [r0, 0x4]\n\
+ cmp r1, r0\n\
+ bcs _080A94F2\n\
+ mov r6, r9\n\
+ adds r5, r3, r6\n\
+_080A94CA:\n\
+ lsls r0, r1, 2\n\
+ mov r6, sp\n\
+ adds r2, r6, r0\n\
+ ldrh r0, [r2]\n\
+ cmp r0, 0\n\
+ bne _080A94E6\n\
+ mov r0, r8\n\
+ strh r0, [r2]\n\
+ cmp r4, r7\n\
+ bls _080A9514\n\
+ subs r0, r4, r7\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ strh r7, [r2, 0x2]\n\
+_080A94E6:\n\
+ adds r0, r1, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r1, r0, 24\n\
+ ldrb r2, [r5, 0x4]\n\
+ cmp r1, r2\n\
+ bcc _080A94CA\n\
+_080A94F2:\n\
+ cmp r4, 0\n\
+ beq _080A9516\n\
+ b _080A9510\n\
+ .align 2, 0\n\
+_080A94F8: .4byte gBagPockets\n\
+_080A94FC: .4byte 0x000003e7\n\
+_080A9500:\n\
+ strh r0, [r3, 0x2]\n\
+ ldr r0, _080A950C @ =gBagPockets\n\
+ lsls r1, r6, 3\n\
+ adds r1, r0\n\
+ b _080A951A\n\
+ .align 2, 0\n\
+_080A950C: .4byte gBagPockets\n\
+_080A9510:\n\
+ movs r0, 0\n\
+ b _080A9528\n\
+_080A9514:\n\
+ strh r4, [r2, 0x2]\n\
+_080A9516:\n\
+ mov r6, r9\n\
+ adds r1, r3, r6\n\
+_080A951A:\n\
+ ldr r0, [r1]\n\
+ ldrb r2, [r1, 0x4]\n\
+ lsls r2, 2\n\
+ mov r1, sp\n\
+ bl memcpy\n\
+ movs r0, 0x1\n\
+_080A9528:\n\
+ add sp, 0x100\n\
+ pop {r3,r4}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .syntax divided\n");
+}
+#endif
bool8 RemoveBagItem(u16 itemId, u16 count)
{
diff --git a/src/item_menu.c b/src/item_menu.c
index bbb91296f..91853588b 100644
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -8,6 +8,8 @@
#include "palette.h"
#include "rom4.h"
#include "sprite.h"
+#include "strings.h"
+#include "strings2.h"
#include "task.h"
#include "text.h"
#include "unknown_task.h"
@@ -22,38 +24,98 @@ struct UnknownStruct1
u8 unk3;
};
+extern u8 gUnknown_02038558;
extern s8 gUnknown_02038559;
extern u8 gUnknown_0203855A;
extern u8 gUnknown_0203855B;
extern u8 gUnknown_0203855C;
+extern u8 gUnknown_02038562;
+extern u8 gUnknown_02038564;
extern u8 gUnknown_03000700;
extern u8 gUnknown_03000701;
+extern const u8 *gUnknown_03000704;
extern struct UnknownStruct1 gUnknown_03005D10[];
extern struct ItemSlot *gUnknown_03005D24;
+extern bool8 gLinkOpen;
extern void gpu_pal_allocator_reset__manage_upper_four(void);
extern void sub_80F9020(void);
extern void sub_80F9988();
+extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16);
extern const struct CompressedSpriteSheet gUnknown_083C1CC8;
extern const struct CompressedSpriteSheet gUnknown_083C1CD0;
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},
+ {gSaveBlock1.bagPocket_Berries, 46},
+ {gSaveBlock1.bagPocket_KeyItems, 20},
+};
+
+void sub_80A5B78(u8);
+void sub_80A5F14(u8);
+void sub_80A5F80(u8);
+void sub_80A5FAC(u8);
+void ItemMenu_UseInBattle(u8);
+void sub_80A7124(u8);
+void ItemMenu_Give(u8);
+void sub_80A6178(u8);
+void sub_80A69E0(u8);
+
+const struct MenuAction2 gUnknown_083C1640[] =
+{
+ {OtherText_Use, sub_80A5B78},
+ {OtherText_Toss, sub_80A5F14},
+ {gOtherText_CancelNoTerminator, sub_80A5F80},
+ {OtherText_Register, sub_80A5FAC},
+ {OtherText_Use, ItemMenu_UseInBattle},
+ {gOtherText_CancelNoTerminator, sub_80A7124},
+ {OtherText_Give2, ItemMenu_Give},
+ {OtherText_CheckTag, sub_80A6178},
+ {gOtherText_CancelWithTerminator, NULL},
+ {OtherText_Confirm, sub_80A69E0},
+};
+
+extern const u8 gUnknown_083C1690[][6];
+/*
+const u8 gUnknown_083C1690[][6] =
+{
+ {0, 1, 6, 2, 0, 0},
+ {6, 1, 8, 2, 0, 0},
+ {0, 8, 6, 2, 0, 0},
+ {7, 0, 1, 8, 6, 2},
+ {0, 8, 3, 2, 0, 0},
+};
+*/
+
void sub_80A34E8(void);
bool8 sub_80A3520(void);
void sub_80A362C(void);
void sub_80A3740(void);
+void sub_80A396C(u16 *, u8, u8, u8);
void sub_80A39B8(u16 *, u8);
+void sub_80A39E4(u16 *, u8, u8, s8);
void sub_80A3AC0(u16 *, u8);
-void sub_80A3C34();
+void sub_80A3C34(struct ItemSlot *, u32);
void sub_80A3D08(void);
+void sub_80A3D24(u8);
void sub_80A3D40(void);
void sub_80A48E8();
void ItemListMenu_InitDescription();
+void ItemListMenu_ChangeDescription();
+void sub_80A4F68(u8);
+void sub_80A50C8(u8);
void ItemListMenu_InitMenu(void);
void sub_80A740C(void);
void sub_80A751C(void);
+void sub_80A7590(void);
void sub_80A7630(void);
+void sub_80A76A0(void);
void sub_80A770C(void);
void sub_80A7828(void);
void sub_80A78B8(void);
@@ -337,3 +399,176 @@ void ClearBag(void)
ClearItemSlots(gBagPockets[i].itemSlots, gBagPockets[i].capacity);
sub_80A3684();
}
+
+extern const u16 gUnknown_083C1704[];
+
+void sub_80A3740(void)
+{
+ u16 arr[2];
+
+ // TODO: This is a local array
+ memcpy(arr, gUnknown_083C1704, 4);
+ LoadPalette(&arr[1], 0xD1, sizeof(arr[1]));
+ LoadPalette(&arr[0], 0xD8, sizeof(arr[0]));
+}
+
+void sub_80A3770(void)
+{
+ if (gUnknown_03000701 == 0)
+ {
+ gUnknown_03000704 = gUnknown_083C1690[gUnknown_02038559];
+ if (gUnknown_02038559 != 3)
+ gUnknown_02038564 = 4;
+ else
+ gUnknown_02038564 = 6;
+ }
+}
+
+void sub_80A37C0(u8 taskId)
+{
+ gTasks[taskId].func = sub_80A50C8;
+ StartVerticalScrollIndicators(0);
+ StartVerticalScrollIndicators(1);
+ StartVerticalScrollIndicators(2);
+ StartVerticalScrollIndicators(3);
+}
+
+void sub_80A37F8(u8 taskId)
+{
+ u8 r5 = gUnknown_0203855A;
+
+ if (r5 < 16)
+ {
+ gUnknown_0203855A++;
+ sub_80A396C(gBGTilemapBuffers[2], r5, gUnknown_0203855A, 0x4F);
+ sub_80A39E4(gBGTilemapBuffers[2], gUnknown_02038559 + 1, gUnknown_0203855A / 2, gTasks[taskId].data[5]);
+ gUnknown_02038558 = 1;
+ sub_80A48E8(taskId, r5 / 2, gUnknown_0203855A / 2 - 1);
+ gUnknown_02038558 = 0;
+ return;
+ }
+
+ if (gLinkOpen == TRUE)
+ {
+ u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0;
+
+ ItemListMenu_ChangeDescription((s16)gUnknown_03005D24[val].itemId, gUnknown_02038562);
+ gUnknown_02038562++;
+ }
+ else
+ {
+ while (gUnknown_02038562 < 3)
+ {
+ u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0;
+
+ ItemListMenu_ChangeDescription((s16)gUnknown_03005D24[val].itemId, gUnknown_02038562);
+ gUnknown_02038562++;
+ }
+ }
+ if (gUnknown_02038562 == 3)
+ {
+ gUnknown_0203855A = 16;
+ gUnknown_0203855B = gUnknown_02038559 + 1;
+ sub_80A37C0(FindTaskIdByFunc(sub_80A4F68));
+ DestroyTask(taskId);
+ ItemListMenu_InitMenu();
+ sub_80F979C(2, 0);
+ sub_80F979C(3, 0);
+ }
+}
+
+void sub_80A3954(u16 *a)
+{
+ CpuCopy16(gUnknown_08E77004, a, 0x800);
+}
+
+void sub_80A396C(u16 *a, u8 b, u8 c, u8 d)
+{
+ u16 *dst = a + 14 + (b + 2) * 32;
+ u16 i;
+
+ while (c > b++)
+ {
+ for (i = 0; i < 15; i++)
+ dst[i] = d;
+ dst += 32;
+ }
+}
+
+void sub_80A39B8(u16 *a, u8 b)
+{
+ u8 var = b * 2;
+
+ sub_809D104(a, 4, 10, gUnknown_08E96EC8, 0, var, 8, 2);
+}
+
+void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d)
+{
+ u16 r2 = b * 2;
+ u16 r7;
+
+ if (d == -1)
+ {
+ r7 = (b + 1) * 2;
+ if (b == 5)
+ r7 = 2;
+
+ sub_809D104(a, 4, 10, gUnknown_08E96EC8, 8 - c, r2, c, 2);
+ sub_809D104(a, c + 4, 10, gUnknown_08E96EC8, 0, r7, 8 - c, 2);
+ }
+ else if (d == 1)
+ {
+ r7 = (b - 1) * 2;
+ if (b == 1)
+ r7 = 10;
+
+ sub_809D104(a, 4, 10, gUnknown_08E96EC8, c, r7, 8 - c, 2);
+ sub_809D104(a, 12 - c, 10, gUnknown_08E96EC8, 0, r2, c, 2);
+ }
+}
+
+void sub_80A3AC0(u16 *a, u8 b)
+{
+ u8 i;
+
+ for (i = 0; i < 5; i++)
+ {
+ if (i == b)
+ a[0x125 + i] = 0x107D;
+ else
+ a[0x125 + i] = 0x107C;
+ }
+}
+
+void sub_80A3B04(u16 *a, s8 b)
+{
+ u8 taskId;
+
+ gUnknown_02038559 += b;
+ if (gUnknown_02038559 >= NUM_BAG_POCKETS)
+ gUnknown_02038559 = 0;
+ if (gUnknown_02038559 < 0)
+ gUnknown_02038559 = NUM_BAG_POCKETS - 1;
+ sub_80A76A0();
+ sub_80A7590();
+ gUnknown_03005D24 = gBagPockets[gUnknown_02038559].itemSlots;
+ sub_80A3D24(gUnknown_02038559);
+ gUnknown_0203855A = 0;
+ sub_80A3954(a);
+ sub_80A396C(a, 0, 16, 3);
+ sub_80A39B8(a, 0);
+ gUnknown_0203855B = 6;
+ gUnknown_02038562 = 0;
+ taskId = FindTaskIdByFunc(sub_80A37F8);
+ if (taskId == 0xFF)
+ taskId = CreateTask(sub_80A37F8, 8);
+ gTasks[taskId].data[5] = b;
+}
+
+void swap32(struct ItemSlot *a, struct ItemSlot *b)
+{
+ struct ItemSlot temp = *a;
+
+ *a = *b;
+ *b = temp;
+}