summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/item_menu.s249
-rw-r--r--data/item_menu.s55
-rw-r--r--include/strings.h8
-rw-r--r--ld_script.txt1
-rw-r--r--src/item_menu.c233
5 files changed, 192 insertions, 354 deletions
diff --git a/asm/item_menu.s b/asm/item_menu.s
index a6d327eb2..143e87b66 100644
--- a/asm/item_menu.s
+++ b/asm/item_menu.s
@@ -5,255 +5,6 @@
.text
- thumb_func_start sub_81089BC
-sub_81089BC: @ 81089BC
- push {r4,r5,lr}
- ldr r0, _081089F0 @ =gUnknown_203ACFC
- movs r2, 0
- movs r1, 0
- strh r1, [r0, 0x6]
- strb r2, [r0, 0x5]
- movs r2, 0
- adds r5, r0, 0
- adds r5, 0x8
- movs r3, 0
- adds r4, r0, 0
- adds r4, 0xE
-_081089D4:
- lsls r1, r2, 1
- adds r0, r1, r5
- strh r3, [r0]
- adds r1, r4
- strh r3, [r1]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x2
- bls _081089D4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081089F0: .4byte gUnknown_203ACFC
- thumb_func_end sub_81089BC
-
- thumb_func_start sub_81089F4
-sub_81089F4: @ 81089F4
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r2, _08108A60 @ =gUnknown_203ACFC
- lsls r1, r4, 1
- adds r0, r2, 0
- adds r0, 0xE
- adds r3, r1, r0
- ldrh r0, [r3]
- adds r7, r2, 0
- ldr r6, _08108A64 @ =gUnknown_203AD10
- cmp r0, 0
- beq _08108A2E
- adds r2, r0, 0
- ldr r1, [r6]
- adds r0, r1, 0
- adds r0, 0xD
- adds r0, r4
- ldrb r5, [r0]
- adds r2, r5
- adds r1, 0xA
- adds r1, r4
- ldrb r1, [r1]
- adds r0, r1, 0x1
- cmp r2, r0
- ble _08108A2E
- subs r0, r5, 0x1
- subs r0, r1, r0
- strh r0, [r3]
-_08108A2E:
- lsls r2, r4, 1
- adds r0, r7, 0
- adds r0, 0xE
- adds r0, r2, r0
- ldrh r1, [r0]
- adds r0, r7, 0
- adds r0, 0x8
- adds r2, r0
- ldrh r0, [r2]
- adds r1, r0
- ldr r0, [r6]
- adds r0, 0xA
- adds r0, r4
- ldrb r0, [r0]
- adds r3, r0, 0x1
- cmp r1, r3
- blt _08108A58
- cmp r3, 0x1
- bgt _08108A56
- movs r0, 0
-_08108A56:
- strh r0, [r2]
-_08108A58:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08108A60: .4byte gUnknown_203ACFC
-_08108A64: .4byte gUnknown_203AD10
- thumb_func_end sub_81089F4
-
- thumb_func_start sub_8108A68
-sub_8108A68: @ 8108A68
- push {r4,lr}
- movs r4, 0
-_08108A6C:
- adds r0, r4, 0
- bl sub_81089F4
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x2
- bls _08108A6C
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8108A68
-
- thumb_func_start sub_8108A84
-sub_8108A84: @ 8108A84
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r6, 0
- ldr r0, _08108AF8 @ =gUnknown_203ACFC+8
- mov r8, r0
-_08108A90:
- lsls r2, r6, 1
- mov r3, r8
- adds r1, r2, r3
- ldrh r0, [r1]
- adds r7, r6, 0x1
- cmp r0, 0x3
- bls _08108AE6
- movs r5, 0
- subs r0, 0x3
- cmp r5, r0
- bgt _08108AE6
- ldr r0, _08108AFC @ =gUnknown_203ACFC+14
- ldr r3, _08108B00 @ =gUnknown_203AD10
- mov r12, r3
- adds r4, r2, r0
- adds r3, r1, 0
-_08108AB0:
- ldrh r2, [r4]
- mov r0, r12
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0xD
- adds r0, r6
- ldrb r0, [r0]
- adds r2, r0
- adds r1, 0xA
- adds r1, r6
- ldrb r0, [r1]
- adds r0, 0x1
- cmp r2, r0
- beq _08108AE6
- ldrh r0, [r3]
- subs r0, 0x1
- strh r0, [r3]
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- ldrh r0, [r3]
- subs r0, 0x3
- cmp r5, r0
- ble _08108AB0
-_08108AE6:
- lsls r0, r7, 24
- lsrs r6, r0, 24
- cmp r6, 0x2
- bls _08108A90
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08108AF8: .4byte gUnknown_203ACFC+8
-_08108AFC: .4byte gUnknown_203ACFC+14
-_08108B00: .4byte gUnknown_203AD10
- thumb_func_end sub_8108A84
-
- thumb_func_start sub_8108B04
-sub_8108B04: @ 8108B04
- push {lr}
- ldr r0, _08108B40 @ =gUnknown_203AD10
- ldr r0, [r0]
- cmp r0, 0
- beq _08108B12
- bl Free
-_08108B12:
- ldr r0, _08108B44 @ =gUnknown_203AD14
- ldr r0, [r0]
- cmp r0, 0
- beq _08108B1E
- bl Free
-_08108B1E:
- ldr r0, _08108B48 @ =gUnknown_203AD18
- ldr r0, [r0]
- cmp r0, 0
- beq _08108B2A
- bl Free
-_08108B2A:
- ldr r0, _08108B4C @ =gUnknown_203AD1C
- ldr r0, [r0]
- cmp r0, 0
- beq _08108B36
- bl Free
-_08108B36:
- bl FreeAllWindowBuffers
- pop {r0}
- bx r0
- .align 2, 0
-_08108B40: .4byte gUnknown_203AD10
-_08108B44: .4byte gUnknown_203AD14
-_08108B48: .4byte gUnknown_203AD18
-_08108B4C: .4byte gUnknown_203AD1C
- thumb_func_end sub_8108B04
-
- thumb_func_start ItemMenu_StartFadeToExitCallback
-ItemMenu_StartFadeToExitCallback: @ 8108B50
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x2
- negs r1, r1
- movs r2, 0
- str r2, [sp]
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _08108B84 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08108B88 @ =sub_8108B8C
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08108B84: .4byte gTasks
-_08108B88: .4byte sub_8108B8C
- thumb_func_end ItemMenu_StartFadeToExitCallback
-
thumb_func_start sub_8108B8C
sub_8108B8C: @ 8108B8C
push {r4,r5,lr}
diff --git a/data/item_menu.s b/data/item_menu.s
index b5cc492e3..c9385108e 100644
--- a/data/item_menu.s
+++ b/data/item_menu.s
@@ -6,61 +6,6 @@
.section .rodata
.align 2
-gUnknown_8452CF4:: @ 8452CF4
- .4byte 0x000001f0
- @ {
- @ .bg = 0,
- @ .charBaseIndex = 0,
- @ .mapBaseIndex = 31,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 0,
- @ .baseTile = 0x0000
- @ }
- .4byte 0x000011ed
- @ {
- @ .bg = 1,
- @ .charBaseIndex = 3,
- @ .mapBaseIndex = 30,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 1,
- @ .baseTile = 0x0000
- @ }
-
-gUnknown_8452CFC:: @ 8452CFC
- .4byte gUnknown_84162CD
- .4byte gUnknown_84162DE
- .4byte gUnknown_84162D3
-
-gUnknown_8452D08:: @ 8452D08
- .incbin "graphics/item_menu/bagmap_0.bin"
- .incbin "graphics/item_menu/bagmap_1.bin"
- .incbin "graphics/item_menu/bagmap_2.bin"
- .incbin "graphics/item_menu/bagmap_3.bin"
- .incbin "graphics/item_menu/bagmap_4.bin"
- .incbin "graphics/item_menu/bagmap_5.bin"
- .incbin "graphics/item_menu/bagmap_6.bin"
- .incbin "graphics/item_menu/bagmap_7.bin"
- .incbin "graphics/item_menu/bagmap_8.bin"
- .incbin "graphics/item_menu/bagmap_9.bin"
- .incbin "graphics/item_menu/bagmap_A.bin"
- .incbin "graphics/item_menu/bagmap_B.bin"
-
-gUnknown_8452EB8:: @ 8452EB8
- .4byte gOtherText_Use, sub_8109C50
- .4byte gOtherText_Toss, sub_8109CC0
- .4byte gUnknown_84161A9, sub_810A000
- .4byte gOtherText_Give, sub_810A0A8
- .4byte gFameCheckerText_Cancel, sub_810A2DC
- .4byte gOtherText_Use, sub_810A324
- .4byte gUnknown_84161E9, sub_8109C50
- .4byte gUnknown_84161F4, sub_8109C50
- .4byte gUnknown_84161F4, sub_810A324
- .4byte gUnknown_84161BC, sub_8109C50
- .4byte gUnknown_84161F9, sub_810A000
- .4byte gString_Dummy, NULL
-
gUnknown_8452F18:: @ 8452F18
.byte 0x00, 0x03, 0x01, 0x04
.byte 0x00, 0x02, 0x04, 0x0b
diff --git a/include/strings.h b/include/strings.h
index 2e74d7b38..809007409 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -1039,6 +1039,14 @@ extern const u8 gText_SaveFailedScreen_BackupMemoryDamaged[];
extern const u8 gText_SaveFailedScreen_SaveCompleted[];
// item_menu
+extern const u8 gUnknown_84161A9[];
+extern const u8 gUnknown_84161BC[];
+extern const u8 gUnknown_84161E9[];
+extern const u8 gUnknown_84161F4[];
+extern const u8 gUnknown_84161F9[];
+extern const u8 gUnknown_84162CD[];
+extern const u8 gUnknown_84162D3[];
+extern const u8 gUnknown_84162DE[];
extern const u8 gUnknown_84162F5[];
#endif //GUARD_STRINGS_H
diff --git a/ld_script.txt b/ld_script.txt
index feca781e7..ddec18aa0 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -518,6 +518,7 @@ SECTIONS {
src/pokedex_screen.o(.rodata);
data/pokedex_screen.o(.rodata);
src/list_menu.o(.rodata);
+ src/item_menu.o(.rodata);
data/item_menu.o(.rodata);
src/save_location.o(.rodata);
src/bag.o(.rodata);
diff --git a/src/item_menu.c b/src/item_menu.c
index 12db534e8..a861cb742 100644
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -9,6 +9,7 @@
#include "item_menu.h"
#include "item_menu_icons.h"
#include "list_menu.h"
+#include "menu.h"
#include "menu_indicators.h"
#include "new_menu_helpers.h"
#include "overworld.h"
@@ -17,19 +18,21 @@
#include "constants/items.h"
#include "constants/songs.h"
+#define FREE_IF_SET(ptr) ({ if (ptr) Free(ptr); })
+
struct BagMenuAlloc
{
u32 field_00;
u8 field_04;
u8 field_05_0:4;
- u8 field_05_4:2;
+ u8 itemMenuIcon:2;
u8 field_05_6:2;
- u16 field_06;
- u8 field_08;
- u8 field_09;
- u8 field_0A[3];
- u8 field_0D[3];
- u8 field_10[4];
+ u16 contextMenuSelectedItem;
+ u8 pocketScrollArrowsTask;
+ u8 pocketSwitchArrowsTask;
+ u8 nItems[3];
+ u8 maxShowed[3];
+ u8 data[4];
};
EWRAM_DATA struct BagStruct gUnknown_203ACFC = {};
@@ -60,9 +63,16 @@ void sub_810899C(void);
void sub_8108A68(void);
void sub_8108A84(void);
void sub_8108B04(void);
+void sub_8108B8C(u8 taskId);
void sub_8108C10(void);
void sub_8108E54(void);
void sub_8108F0C(u8 taskId);
+void sub_8109C50(u8 taskId);
+void sub_8109CC0(u8 taskId);
+void sub_810A000(u8 taskId);
+void sub_810A0A8(u8 taskId);
+void sub_810A2DC(u8 taskId);
+void sub_810A324(u8 taskId);
bool8 sub_810ADAC(void);
void sub_810AF9C(u8 taskId);
void sub_810B1D4(u8 taskId);
@@ -70,8 +80,62 @@ void sub_810B378(u8 taskId);
void sub_810B4BC(u8 taskId);
void sub_810B5D4(u8 taskId);
-extern const struct BgTemplate gUnknown_8452CF4[2];
-extern const u8 *const gUnknown_8452CFC[];
+const struct BgTemplate gUnknown_8452CF4[2] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0x000
+ }, {
+ .bg = 1,
+ .charBaseIndex = 3,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0x000
+ }
+};
+
+const u8 *const gUnknown_8452CFC[] = {
+ gUnknown_84162CD,
+ gUnknown_84162DE,
+ gUnknown_84162D3
+};
+
+const u16 gUnknown_8452D08[][18] = {
+ INCBIN_U16("graphics/item_menu/bagmap_0.bin"),
+ INCBIN_U16("graphics/item_menu/bagmap_1.bin"),
+ INCBIN_U16("graphics/item_menu/bagmap_2.bin"),
+ INCBIN_U16("graphics/item_menu/bagmap_3.bin"),
+ INCBIN_U16("graphics/item_menu/bagmap_4.bin"),
+ INCBIN_U16("graphics/item_menu/bagmap_5.bin"),
+ INCBIN_U16("graphics/item_menu/bagmap_6.bin"),
+ INCBIN_U16("graphics/item_menu/bagmap_7.bin"),
+ INCBIN_U16("graphics/item_menu/bagmap_8.bin"),
+ INCBIN_U16("graphics/item_menu/bagmap_9.bin"),
+ INCBIN_U16("graphics/item_menu/bagmap_A.bin"),
+ INCBIN_U16("graphics/item_menu/bagmap_B.bin")
+};
+
+const struct MenuAction gUnknown_8452EB8[] = {
+ {gOtherText_Use, {.void_u8 = sub_8109C50}},
+ {gOtherText_Toss, {.void_u8 = sub_8109CC0}},
+ {gUnknown_84161A9, {.void_u8 = sub_810A000}},
+ {gOtherText_Give, {.void_u8 = sub_810A0A8}},
+ {gFameCheckerText_Cancel, {.void_u8 = sub_810A2DC}},
+ {gOtherText_Use, {.void_u8 = sub_810A324}},
+ {gUnknown_84161E9, {.void_u8 = sub_8109C50}},
+ {gUnknown_84161F4, {.void_u8 = sub_8109C50}},
+ {gUnknown_84161F4, {.void_u8 = sub_810A324}},
+ {gUnknown_84161BC, {.void_u8 = sub_8109C50}},
+ {gUnknown_84161F9, {.void_u8 = sub_810A000}},
+ {gString_Dummy, {.void_u8 = NULL}}
+};
+
extern const u8 gUnknown_8452F60[];
extern const u8 gUnknown_8452F66[];
extern const struct ScrollArrowsTemplate gUnknown_8452F6C;
@@ -93,10 +157,10 @@ void GoToBagMenu(u8 location, u8 a1, MainCallback a2)
gUnknown_203ACFC.bagCallback = a2;
gUnknown_203AD10->field_00 = 0;
gUnknown_203AD10->field_04 = 0xFF;
- gUnknown_203AD10->field_05_4 = 0;
+ gUnknown_203AD10->itemMenuIcon = 0;
gUnknown_203AD10->field_05_6 = 0;
- gUnknown_203AD10->field_08 = 0xFF;
- gUnknown_203AD10->field_09 = 0xFF;
+ gUnknown_203AD10->pocketScrollArrowsTask = 0xFF;
+ gUnknown_203AD10->pocketSwitchArrowsTask = 0xFF;
if (location == 3)
gUnknown_203AD10->field_05_0 = 1;
else if (location == 6)
@@ -105,7 +169,7 @@ void GoToBagMenu(u8 location, u8 a1, MainCallback a2)
gUnknown_203AD10->field_05_0 = 0;
for (i = 0; i < 4; i++)
{
- gUnknown_203AD10->field_10[i] = 0;
+ gUnknown_203AD10->data[i] = 0;
}
if (a1 == 0 || a1 == 1 || a1 == 2)
gUnknown_203ACFC.pocket = a1;
@@ -196,7 +260,7 @@ bool8 sub_8107F3C(void)
case 7:
if (sub_81081D0())
{
- gUnknown_203AD10->field_10[0] = 0;
+ gUnknown_203AD10->data[0] = 0;
gMain.state++;
}
else
@@ -326,12 +390,12 @@ bool8 sub_81081D0(void)
bool8 sub_8108240(void)
{
- switch (gUnknown_203AD10->field_10[0])
+ switch (gUnknown_203AD10->data[0])
{
case 0:
ResetTempTileDataBuffers();
DecompressAndCopyTileDataToVram(1, gUnknown_8E830CC, 0, 0, 0);
- gUnknown_203AD10->field_10[0]++;
+ gUnknown_203AD10->data[0]++;
break;
case 1:
if (FreeTempTileDataBuffersIfPossible() != TRUE)
@@ -340,33 +404,33 @@ bool8 sub_8108240(void)
LZDecompressWram(gUnknown_8E832C0, gUnknown_203AD14);
else
LZDecompressWram(gUnknown_8E83444, gUnknown_203AD14);
- gUnknown_203AD10->field_10[0]++;
+ gUnknown_203AD10->data[0]++;
}
break;
case 2:
LoadCompressedPalette(gUnknown_8E835B4, 0x00, 0x60);
if (!sub_810ADAC() && gSaveBlock2Ptr->playerGender != MALE)
LoadCompressedPalette(gUnknown_8E83604, 0x00, 0x20);
- gUnknown_203AD10->field_10[0]++;
+ gUnknown_203AD10->data[0]++;
break;
case 3:
if (sub_810ADAC() == TRUE || gSaveBlock2Ptr->playerGender == MALE)
LoadCompressedSpriteSheet(&gUnknown_83D41E4);
else
LoadCompressedSpriteSheet(&gUnknown_83D41EC);
- gUnknown_203AD10->field_10[0]++;
+ gUnknown_203AD10->data[0]++;
break;
case 4:
LoadCompressedSpritePalette(&gUnknown_83D41F4);
- gUnknown_203AD10->field_10[0]++;
+ gUnknown_203AD10->data[0]++;
break;
case 5:
LoadCompressedSpriteSheet(&gBagSwapSpriteSheet);
- gUnknown_203AD10->field_10[0]++;
+ gUnknown_203AD10->data[0]++;
break;
default:
LoadCompressedSpritePalette(&gBagSwapSpritePalette);
- gUnknown_203AD10->field_10[0] = 0;
+ gUnknown_203AD10->data[0] = 0;
return TRUE;
}
@@ -407,7 +471,7 @@ void sub_810842C(u8 pocket)
{
u16 i;
struct BagPocket * bagPocket = &gBagPockets[pocket];
- for (i = 0; i < gUnknown_203AD10->field_0A[pocket]; i++)
+ for (i = 0; i < gUnknown_203AD10->nItems[pocket]; i++)
{
sub_8108560(gUnknown_203AD1C[i], bagPocket->itemSlots[i].itemId);
gUnknown_203AD18[i].label = gUnknown_203AD1C[i];
@@ -418,7 +482,7 @@ void sub_810842C(u8 pocket)
gUnknown_203AD18[i].label = gUnknown_203AD1C[i];
gUnknown_203AD18[i].index = i;
gMultiuseListMenuTemplate.items = gUnknown_203AD18;
- gMultiuseListMenuTemplate.totalItems = gUnknown_203AD10->field_0A[pocket] + 1;
+ gMultiuseListMenuTemplate.totalItems = gUnknown_203AD10->nItems[pocket] + 1;
gMultiuseListMenuTemplate.windowId = 0;
gMultiuseListMenuTemplate.header_X = 0;
gMultiuseListMenuTemplate.item_X = 9;
@@ -426,7 +490,7 @@ void sub_810842C(u8 pocket)
gMultiuseListMenuTemplate.lettersSpacing = 0;
gMultiuseListMenuTemplate.itemVerticalPadding = 2;
gMultiuseListMenuTemplate.upText_Y = 2;
- gMultiuseListMenuTemplate.maxShowed = gUnknown_203AD10->field_0D[pocket];
+ gMultiuseListMenuTemplate.maxShowed = gUnknown_203AD10->maxShowed[pocket];
gMultiuseListMenuTemplate.fontId = 2;
gMultiuseListMenuTemplate.cursorPal = 2;
gMultiuseListMenuTemplate.fillValue = 0;
@@ -455,12 +519,12 @@ void sub_81085A4(s32 itemIndex, bool8 onInit, struct ListMenu *list)
}
if (gUnknown_203AD10->field_04 == 0xFF)
{
- DestroyItemMenuIcon(gUnknown_203AD10->field_05_4 ^ 1);
- if (gUnknown_203AD10->field_0A[gUnknown_203ACFC.pocket] != itemIndex)
- CreateItemMenuIcon(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemIndex), gUnknown_203AD10->field_05_4);
+ DestroyItemMenuIcon(gUnknown_203AD10->itemMenuIcon ^ 1);
+ if (gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket] != itemIndex)
+ CreateItemMenuIcon(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemIndex), gUnknown_203AD10->itemMenuIcon);
else
- CreateItemMenuIcon(ITEM_N_A, gUnknown_203AD10->field_05_4);
- gUnknown_203AD10->field_05_4 ^= 1;
+ CreateItemMenuIcon(ITEM_N_A, gUnknown_203AD10->itemMenuIcon);
+ gUnknown_203AD10->itemMenuIcon ^= 1;
if (gUnknown_203AD10->field_05_6 == 0)
sub_8108818(itemIndex);
}
@@ -477,7 +541,7 @@ void sub_8108654(u8 windowId, s32 itemId, u8 y)
else
bag_menu_print_cursor(y, 0xFF);
}
- if (itemId != -2 && gUnknown_203AD10->field_0A[gUnknown_203ACFC.pocket] != itemId)
+ if (itemId != -2 && gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket] != itemId)
{
bagItemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemId);
bagItemQuantity = BagGetQuantityByPocketPosition(gUnknown_203ACFC.pocket + 1, itemId);
@@ -520,7 +584,7 @@ void sub_81087EC(void)
void sub_8108818(s32 itemIndex)
{
const u8 *description;
- if (itemIndex != gUnknown_203AD10->field_0A[gUnknown_203ACFC.pocket])
+ if (itemIndex != gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket])
description = ItemId_GetDescription(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemIndex));
else
description = gUnknown_84162F5;
@@ -530,12 +594,12 @@ void sub_8108818(s32 itemIndex)
void sub_8108888(void)
{
- gUnknown_203AD10->field_08 = AddScrollIndicatorArrowPairParameterized(
- 2,
+ gUnknown_203AD10->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized(
+ SCROLL_ARROW_UP,
160,
8,
104,
- gUnknown_203AD10->field_0A[gUnknown_203ACFC.pocket] - gUnknown_203AD10->field_0D[gUnknown_203ACFC.pocket] + 1,
+ gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket] - gUnknown_203AD10->maxShowed[gUnknown_203ACFC.pocket] + 1,
110,
110,
&gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket]
@@ -546,55 +610,124 @@ void sub_81088D8(void)
{
if (gUnknown_203AD10->field_05_0 != 1)
{
- gUnknown_203AD10->field_09 = AddScrollIndicatorArrowPair(&gUnknown_8452F6C, &gUnknown_203ACFC.pocket);
+ gUnknown_203AD10->pocketSwitchArrowsTask = AddScrollIndicatorArrowPair(&gUnknown_8452F6C, &gUnknown_203ACFC.pocket);
}
}
void sub_8108908(void)
{
- gUnknown_203AD10->field_06 = 1;
- gUnknown_203AD10->field_08 = AddScrollIndicatorArrowPairParameterized(
- 2,
+ gUnknown_203AD10->contextMenuSelectedItem = 1;
+ gUnknown_203AD10->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized(
+ SCROLL_ARROW_UP,
152,
72,
104,
2,
110,
110,
- &gUnknown_203AD10->field_06
+ &gUnknown_203AD10->contextMenuSelectedItem
);
}
void sub_8108940(void)
{
- gUnknown_203AD10->field_06 = 1;
- gUnknown_203AD10->field_08 = AddScrollIndicatorArrowPairParameterized(
- 2,
+ gUnknown_203AD10->contextMenuSelectedItem = 1;
+ gUnknown_203AD10->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized(
+ SCROLL_ARROW_UP,
212,
120,
152,
2,
110,
110,
- &gUnknown_203AD10->field_06
+ &gUnknown_203AD10->contextMenuSelectedItem
);
}
void sub_8108978(void)
{
- if (gUnknown_203AD10->field_08 != 0xFF)
+ if (gUnknown_203AD10->pocketScrollArrowsTask != 0xFF)
{
- RemoveScrollIndicatorArrowPair(gUnknown_203AD10->field_08);
- gUnknown_203AD10->field_08 = 0xFF;
+ RemoveScrollIndicatorArrowPair(gUnknown_203AD10->pocketScrollArrowsTask);
+ gUnknown_203AD10->pocketScrollArrowsTask = 0xFF;
}
sub_810899C();
}
void sub_810899C(void)
{
- if (gUnknown_203AD10->field_09 != 0xFF)
+ if (gUnknown_203AD10->pocketSwitchArrowsTask != 0xFF)
+ {
+ RemoveScrollIndicatorArrowPair(gUnknown_203AD10->pocketSwitchArrowsTask);
+ gUnknown_203AD10->pocketSwitchArrowsTask = 0xFF;
+ }
+}
+
+void sub_81089BC(void)
+{
+ u8 i;
+ gUnknown_203ACFC.pocket = POCKET_ITEMS - 1;
+ gUnknown_203ACFC.unk5 = 0;
+ for (i = 0; i < 3; i++)
+ {
+ gUnknown_203ACFC.itemsAbove[i] = 0;
+ gUnknown_203ACFC.cursorPos[i] = 0;
+ }
+}
+
+void sub_81089F4(u8 pocketId)
+{
+ if (gUnknown_203ACFC.cursorPos[pocketId] != 0 && gUnknown_203ACFC.cursorPos[pocketId] + gUnknown_203AD10->maxShowed[pocketId] > gUnknown_203AD10->nItems[pocketId] + 1)
{
- RemoveScrollIndicatorArrowPair(gUnknown_203AD10->field_09);
- gUnknown_203AD10->field_09 = 0xFF;
+ gUnknown_203ACFC.cursorPos[pocketId] = (gUnknown_203AD10->nItems[pocketId] + 1) - gUnknown_203AD10->maxShowed[pocketId];
}
+ if (gUnknown_203ACFC.cursorPos[pocketId] + gUnknown_203ACFC.itemsAbove[pocketId] >= gUnknown_203AD10->nItems[pocketId] + 1)
+ {
+ if (gUnknown_203AD10->nItems[pocketId] + 1 < 2)
+ gUnknown_203ACFC.itemsAbove[pocketId] = 0;
+ else
+ gUnknown_203ACFC.itemsAbove[pocketId] = gUnknown_203AD10->nItems[pocketId];
+ }
+}
+
+void sub_8108A68(void)
+{
+ u8 i;
+ for (i = 0; i < 3; i++)
+ {
+ sub_81089F4(i);
+ }
+}
+
+void sub_8108A84(void)
+{
+ u8 i;
+ u8 j;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (gUnknown_203ACFC.itemsAbove[i] > 3)
+ {
+ for (j = 0; j <= gUnknown_203ACFC.itemsAbove[i] - 3; gUnknown_203ACFC.itemsAbove[i]--, gUnknown_203ACFC.cursorPos[i]++, j++)
+ {
+ if (gUnknown_203ACFC.cursorPos[i] + gUnknown_203AD10->maxShowed[i] == gUnknown_203AD10->nItems[i] + 1)
+ break;
+ }
+ }
+ }
+}
+
+void sub_8108B04(void)
+{
+ FREE_IF_SET(gUnknown_203AD10);
+ FREE_IF_SET(gUnknown_203AD14);
+ FREE_IF_SET(gUnknown_203AD18);
+ FREE_IF_SET(gUnknown_203AD1C);
+ FreeAllWindowBuffers();
+}
+
+void ItemMenu_StartFadeToExitCallback(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK);
+ gTasks[taskId].func = sub_8108B8C;
}