summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2017-07-06 19:25:06 -0500
committercamthesaxman <cameronghall@cox.net>2017-07-06 19:25:06 -0500
commitad7a7222a538380b446f9aecde44c5222ff3b68a (patch)
treefe88555cb303e6e2122b829401ade2bd78bdc962
parent42562fd8dfe66b2469a4f2a71ac204b2a74ac84a (diff)
decompile sub_80A34B4 - ClearBag
-rw-r--r--asm/item_menu.s341
-rw-r--r--include/graphics.h6
-rw-r--r--src/item_menu.c135
3 files changed, 139 insertions, 343 deletions
diff --git a/asm/item_menu.s b/asm/item_menu.s
index 3be9e3770..ae746307c 100644
--- a/asm/item_menu.s
+++ b/asm/item_menu.s
@@ -6,347 +6,6 @@
.text
- 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 c3fe20996..fc0cc3adf 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2435,4 +2435,10 @@ extern const u8 gMonFrontPic_UnownQuestionMark[];
extern const u8 gMonBackPic_UnownQuestionMark[];
extern const u8 gMonIcon_UnownQuestionMark[];
+// data/graphics.s
+extern const u8 gBagScreen_Gfx[];
+extern const u8 gBagScreenMale_Pal[];
+extern const u8 gBagScreenFemale_Pal[];
+extern const u16 gUnknown_08E77004[];
+
#endif // GUARD_GRAPHICS_H
diff --git a/src/item_menu.c b/src/item_menu.c
index 0ce37f908..bbb91296f 100644
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -1,4 +1,6 @@
#include "global.h"
+#include "decompress.h"
+#include "graphics.h"
#include "item.h"
#include "main.h"
#include "menu.h"
@@ -16,12 +18,15 @@ 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;
@@ -30,8 +35,12 @@ 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);
-u8 sub_80A3520(void);
+bool8 sub_80A3520(void);
void sub_80A362C(void);
void sub_80A3740(void);
void sub_80A39B8(u16 *, u8);
@@ -116,7 +125,7 @@ bool8 sub_80A317C(void)
gMain.state++;
break;
case 6:
- if (sub_80A3520() == 0)
+ if (sub_80A3520() == FALSE)
break;
gMain.state++;
break;
@@ -206,3 +215,125 @@ bool8 sub_80A317C(void)
}
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();
+}