diff options
| -rw-r--r-- | asm/item_menu.s | 341 | ||||
| -rw-r--r-- | include/graphics.h | 6 | ||||
| -rw-r--r-- | src/item_menu.c | 135 | 
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(); +} | 
