diff options
-rw-r--r-- | Makefile | 14 | ||||
-rw-r--r-- | asm/item_pc.s | 368 | ||||
-rw-r--r-- | include/item.h | 3 | ||||
-rw-r--r-- | include/pc_screen_effect.h | 2 | ||||
-rw-r--r-- | src/item_pc.c | 121 |
5 files changed, 136 insertions, 372 deletions
@@ -61,6 +61,16 @@ MAPJSON := tools/mapjson/mapjson $(shell mkdir -p $(C_BUILDDIR) $(ASM_BUILDDIR) $(DATA_ASM_BUILDDIR) $(SONG_BUILDDIR)) +infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) + +# Build tools when building the rom +# Disable dependency scanning for clean/tidy/tools +ifeq (,$(filter-out all compare,$(MAKECMDGOALS))) +$(call infoshell, $(MAKE) tools) +else +NODEP := 1 +endif + C_SRCS := $(wildcard $(C_SUBDIR)/*.c) C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) @@ -76,9 +86,11 @@ SONG_OBJS := $(patsubst $(SONG_SUBDIR)/%.s,$(SONG_BUILDDIR)/%.o,$(SONG_SRCS)) OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS)) +MAKEFLAGS += --no-print-directory + all: rom -rom: tools $(ROM) +rom: $(ROM) tools: @$(MAKE) -C tools/gbagfx diff --git a/asm/item_pc.s b/asm/item_pc.s index 1a76e707d..8d27851ef 100644 --- a/asm/item_pc.s +++ b/asm/item_pc.s @@ -5,374 +5,6 @@ .text - thumb_func_start sub_810DBF0 -sub_810DBF0: @ 810DBF0 - push {r4,r5,lr} - ldr r0, _0810DC30 @ =gUnknown_203ADCC - ldrh r1, [r0, 0x4] - adds r4, r0, 0 - ldr r5, _0810DC34 @ =gUnknown_203ADBC - cmp r1, 0 - beq _0810DC14 - ldrh r0, [r4, 0x4] - ldr r1, [r5] - ldrb r3, [r1, 0x6] - adds r0, r3 - ldrb r2, [r1, 0x7] - adds r1, r2, 0x1 - cmp r0, r1 - ble _0810DC14 - subs r0, r3, 0x1 - subs r0, r2, r0 - strh r0, [r4, 0x4] -_0810DC14: - adds r3, r4, 0 - ldrh r0, [r3, 0x4] - ldrh r1, [r3, 0x6] - adds r0, r1 - ldr r1, [r5] - ldrb r1, [r1, 0x7] - adds r2, r1, 0x1 - cmp r0, r2 - blt _0810DC3A - cmp r2, 0x1 - bgt _0810DC38 - movs r0, 0 - strh r0, [r3, 0x6] - b _0810DC3A - .align 2, 0 -_0810DC30: .4byte gUnknown_203ADCC -_0810DC34: .4byte gUnknown_203ADBC -_0810DC38: - strh r1, [r4, 0x6] -_0810DC3A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_810DBF0 - - thumb_func_start sub_810DC40 -sub_810DC40: @ 810DC40 - push {lr} - ldr r0, _0810DC7C @ =gUnknown_203ADBC - ldr r0, [r0] - cmp r0, 0 - beq _0810DC4E - bl Free -_0810DC4E: - ldr r0, _0810DC80 @ =gUnknown_203ADC0 - ldr r0, [r0] - cmp r0, 0 - beq _0810DC5A - bl Free -_0810DC5A: - ldr r0, _0810DC84 @ =gUnknown_203ADC4 - ldr r0, [r0] - cmp r0, 0 - beq _0810DC66 - bl Free -_0810DC66: - ldr r0, _0810DC88 @ =gUnknown_203ADC8 - ldr r0, [r0] - cmp r0, 0 - beq _0810DC72 - bl Free -_0810DC72: - bl FreeAllWindowBuffers - pop {r0} - bx r0 - .align 2, 0 -_0810DC7C: .4byte gUnknown_203ADBC -_0810DC80: .4byte gUnknown_203ADC0 -_0810DC84: .4byte gUnknown_203ADC4 -_0810DC88: .4byte gUnknown_203ADC8 - thumb_func_end sub_810DC40 - - thumb_func_start sub_810DC8C -sub_810DC8C: @ 810DC8C - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0810DCB0 @ =gUnknown_203ADCC - ldrb r0, [r0, 0x8] - cmp r0, 0x1 - bne _0810DCB4 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - b _0810DCC4 - .align 2, 0 -_0810DCB0: .4byte gUnknown_203ADCC -_0810DCB4: - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl sub_80A0A70 - movs r0, 0x3 - bl PlaySE -_0810DCC4: - ldr r0, _0810DCDC @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _0810DCE0 @ =sub_810DCE4 - str r0, [r1] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810DCDC: .4byte gTasks -_0810DCE0: .4byte sub_810DCE4 - thumb_func_end sub_810DC8C - - thumb_func_start sub_810DCE4 -sub_810DCE4: @ 810DCE4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0810DD28 @ =gTasks+0x8 - adds r4, r0, r1 - ldr r0, _0810DD2C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0810DD4E - bl sub_80A0AAC - lsls r0, 24 - cmp r0, 0 - bne _0810DD4E - ldrb r0, [r4] - ldr r4, _0810DD30 @ =gUnknown_203ADCC + 0x4 - adds r2, r4, 0x2 - adds r1, r4, 0 - bl DestroyListMenu - ldr r0, _0810DD34 @ =gUnknown_203ADBC - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0 - beq _0810DD38 - bl SetMainCallback2 - b _0810DD40 - .align 2, 0 -_0810DD28: .4byte gTasks+0x8 -_0810DD2C: .4byte gPaletteFade -_0810DD30: .4byte gUnknown_203ADCC + 0x4 -_0810DD34: .4byte gUnknown_203ADBC -_0810DD38: - subs r0, r4, 0x4 - ldr r0, [r0] - bl SetMainCallback2 -_0810DD40: - bl sub_810DBD0 - bl sub_810DC40 - adds r0, r5, 0 - bl DestroyTask -_0810DD4E: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_810DCE4 - - thumb_func_start sub_810DD54 -sub_810DD54: @ 810DD54 - ldr r1, _0810DD64 @ =gUnknown_203ADCC - ldrb r0, [r1, 0x6] - ldrb r1, [r1, 0x4] - adds r0, r1 - lsls r0, 24 - lsrs r0, 24 - bx lr - .align 2, 0 -_0810DD64: .4byte gUnknown_203ADCC - thumb_func_end sub_810DD54 - - thumb_func_start ItemPc_GetItemIdBySlotId -ItemPc_GetItemIdBySlotId: @ 810DD68 - lsls r0, 16 - ldr r1, _0810DD7C @ =gSaveBlock1Ptr - ldr r1, [r1] - lsrs r0, 14 - adds r1, r0 - movs r0, 0xA6 - lsls r0, 2 - adds r1, r0 - ldrh r0, [r1] - bx lr - .align 2, 0 -_0810DD7C: .4byte gSaveBlock1Ptr - thumb_func_end ItemPc_GetItemIdBySlotId - - thumb_func_start ItemPc_GetItemQuantityBySlotId -ItemPc_GetItemQuantityBySlotId: @ 810DD80 - push {lr} - lsls r0, 16 - ldr r1, _0810DD9C @ =gSaveBlock1Ptr - lsrs r0, 14 - ldr r1, [r1] - adds r0, r1 - ldr r1, _0810DDA0 @ =0x0000029a - adds r0, r1 - bl GetBagItemId - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - .align 2, 0 -_0810DD9C: .4byte gSaveBlock1Ptr -_0810DDA0: .4byte 0x0000029a - thumb_func_end ItemPc_GetItemQuantityBySlotId - - thumb_func_start sub_810DDA4 -sub_810DDA4: @ 810DDA4 - push {r4,r5,lr} - bl sub_809A4E8 - ldr r4, _0810DE00 @ =gUnknown_203ADBC - ldr r1, [r4] - movs r0, 0 - strb r0, [r1, 0x7] - movs r2, 0 - ldr r3, _0810DE04 @ =gSaveBlock1Ptr - ldr r0, [r3] - movs r1, 0xA6 - lsls r1, 2 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0 - beq _0810DDEA - adds r5, r4, 0 - adds r4, r3, 0 - adds r3, r1, 0 -_0810DDCA: - ldr r0, [r5] - ldrb r1, [r0, 0x7] - adds r1, 0x1 - strb r1, [r0, 0x7] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x1D - bhi _0810DDEA - ldr r0, [r4] - lsls r1, r2, 2 - adds r0, r1 - adds r0, r3 - ldrh r0, [r0] - cmp r0, 0 - bne _0810DDCA -_0810DDEA: - ldr r0, _0810DE00 @ =gUnknown_203ADBC - ldr r1, [r0] - ldrb r0, [r1, 0x7] - adds r0, 0x1 - cmp r0, 0x6 - ble _0810DDF8 - movs r0, 0x6 -_0810DDF8: - strb r0, [r1, 0x6] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0810DE00: .4byte gUnknown_203ADBC -_0810DE04: .4byte gSaveBlock1Ptr - thumb_func_end sub_810DDA4 - - thumb_func_start sub_810DE08 -sub_810DE08: @ 810DE08 - push {r4-r6,lr} - ldr r0, _0810DE64 @ =gUnknown_203ADCC - ldrh r1, [r0, 0x6] - adds r6, r0, 0 - cmp r1, 0x3 - bls _0810DE5C - movs r4, 0 - ldrh r0, [r6, 0x6] - subs r0, 0x3 - cmp r4, r0 - bgt _0810DE5C - ldrh r1, [r6, 0x4] - ldr r5, _0810DE68 @ =gUnknown_203ADBC - ldr r2, [r5] - ldrb r0, [r2, 0x6] - adds r1, r0 - ldrb r0, [r2, 0x7] - adds r0, 0x1 - cmp r1, r0 - beq _0810DE5C - adds r3, r6, 0 -_0810DE32: - ldrh r0, [r3, 0x6] - subs r0, 0x1 - strh r0, [r3, 0x6] - ldrh r0, [r3, 0x4] - adds r0, 0x1 - strh r0, [r3, 0x4] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldrh r0, [r3, 0x6] - subs r0, 0x3 - cmp r4, r0 - bgt _0810DE5C - ldrh r1, [r6, 0x4] - ldr r2, [r5] - ldrb r0, [r2, 0x6] - adds r1, r0 - ldrb r0, [r2, 0x7] - adds r0, 0x1 - cmp r1, r0 - bne _0810DE32 -_0810DE5C: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0810DE64: .4byte gUnknown_203ADCC -_0810DE68: .4byte gUnknown_203ADBC - thumb_func_end sub_810DE08 - - thumb_func_start sub_810DE6C -sub_810DE6C: @ 810DE6C - push {lr} - sub sp, 0x8 - movs r1, 0x6 - str r1, [sp] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0 - movs r2, 0xE - movs r3, 0x1E - bl sub_80F6B08 - movs r0, 0x1 - bl schedule_bg_copy_tilemap_to_vram - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_810DE6C - - thumb_func_start sub_810DE94 -sub_810DE94: @ 810DE94 - ldr r1, _0810DE9C @ =gUnknown_203ADCC - strb r0, [r1, 0x8] - bx lr - .align 2, 0 -_0810DE9C: .4byte gUnknown_203ADCC - thumb_func_end sub_810DE94 - thumb_func_start sub_810DEA0 sub_810DEA0: @ 810DEA0 push {r4-r6,lr} diff --git a/include/item.h b/include/item.h index 320b7ffec..ffc32b50a 100644 --- a/include/item.h +++ b/include/item.h @@ -71,5 +71,8 @@ u16 BagGetItemIdByPocketPosition(u8 a0, u16 a1); u16 BagGetQuantityByPocketPosition(u8 a0, u16 a1); bool8 itemid_is_unique(u16 itemId); void sub_809A584(struct ItemSlot * slots, u8 capacity); +u16 GetBagItemId(u16 *); + +void sub_809A4E8(void); #endif // ITEM_H diff --git a/include/pc_screen_effect.h b/include/pc_screen_effect.h index cdd7a96fe..91e1f6d1d 100644 --- a/include/pc_screen_effect.h +++ b/include/pc_screen_effect.h @@ -2,5 +2,7 @@ #define GUARD_PC_SCREEN_EFFECT_H void sub_80A0A48(u16, u16, u8); +void sub_80A0A70(u16, u16, u8); +bool8 sub_80A0AAC(void); #endif //GUARD_PC_SCREEN_EFFECT_H diff --git a/src/item_pc.c b/src/item_pc.c index c3d3ade9d..8b0b67d2f 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -13,6 +13,7 @@ #include "menu.h" #include "menu_helpers.h" #include "menu_indicators.h" +#include "new_menu_helpers.h" #include "palette.h" #include "party_menu.h" #include "pc_screen_effect.h" @@ -26,7 +27,7 @@ struct ItemPcResources { - u32 field_00; + MainCallback field_00; u8 field_04; u8 field_05; u8 field_06; @@ -64,17 +65,18 @@ void sub_810D878(void); void sub_810D954(s32 itemIndex, bool8 onInit, struct ListMenu * list); void sub_810DA20(u8 windowId, s32 itemId, u8 y); void sub_810DAD4(u8 y, u8 state); -void sub_810E8F0(void); void sub_810DB34(void); void sub_810DB5C(void); void sub_810DBF0(void); void sub_810DC40(void); +void sub_810DCE4(u8 taskId); u16 ItemPc_GetItemIdBySlotId(u16 itemIndex); u16 ItemPc_GetItemQuantityBySlotId(u16 itemIndex); void sub_810DDA4(void); void sub_810DE08(void); void sub_810DE94(u8); void sub_810DEA0(u8 taskId); +void sub_810E8F0(void); void sub_810EA34(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); const struct BgTemplate gUnknown_8453F6C[2] = { @@ -355,7 +357,7 @@ bool8 sub_810D78C(void) bool8 sub_810D83C(void) { - sub_810D83C_sub(gUnknown_203ADC4, 0x0F8); + sub_810D83C_sub(gUnknown_203ADC4, sizeof(struct ListMenuItem) * (PC_ITEMS_COUNT + 1)); sub_810D83C_sub(gUnknown_203ADC8, 0x1B2); return TRUE; } @@ -483,3 +485,116 @@ void sub_810DBD0(void) gUnknown_203ADBC->field_08 = 0xFF; } } + +void sub_810DBF0(void) +{ + if (gUnknown_203ADCC.field_4 != 0 && gUnknown_203ADCC.field_4 + gUnknown_203ADBC->field_06 > gUnknown_203ADBC->field_07 + 1) + gUnknown_203ADCC.field_4 = (gUnknown_203ADBC->field_07 + 1) - gUnknown_203ADBC->field_06; + if (gUnknown_203ADCC.field_4 + gUnknown_203ADCC.field_6 >= gUnknown_203ADBC->field_07 + 1) + { + if (gUnknown_203ADBC->field_07 + 1 < 2) + gUnknown_203ADCC.field_6 = 0; + else + gUnknown_203ADCC.field_6 = gUnknown_203ADBC->field_07; + } +} + +#define sub_810DC40_sub(ptr) ({ \ + void ** ptr__ = (void **)&(ptr); \ + if (*ptr__ != NULL) \ + Free(*ptr__); \ +}) + +void sub_810DC40(void) +{ + sub_810DC40_sub(gUnknown_203ADBC); + sub_810DC40_sub(gUnknown_203ADC0); + sub_810DC40_sub(gUnknown_203ADC4); + sub_810DC40_sub(gUnknown_203ADC8); + FreeAllWindowBuffers(); +} + +void sub_810DC8C(u8 taskId) +{ + if (gUnknown_203ADCC.field_8 == 1) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + } + else + { + sub_80A0A70(0, 0, 0); + PlaySE(SE_PC_OFF); + } + gTasks[taskId].func = sub_810DCE4; +} + +void sub_810DCE4(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (!gPaletteFade.active && !sub_80A0AAC()) + { + DestroyListMenu(data[0], &gUnknown_203ADCC.field_4, &gUnknown_203ADCC.field_6); + if (gUnknown_203ADBC->field_00 != NULL) + SetMainCallback2(gUnknown_203ADBC->field_00); + else + SetMainCallback2(gUnknown_203ADCC.field_0); + sub_810DBD0(); + sub_810DC40(); + DestroyTask(taskId); + } +} + +u8 sub_810DD54(void) +{ + return gUnknown_203ADCC.field_4 + gUnknown_203ADCC.field_6; +} + +u16 ItemPc_GetItemIdBySlotId(u16 idx) +{ + return gSaveBlock1Ptr->pcItems[idx].itemId; +} + +u16 ItemPc_GetItemQuantityBySlotId(u16 idx) +{ + return GetBagItemId(&gSaveBlock1Ptr->pcItems[idx].quantity); +} + +void sub_810DDA4(void) +{ + u16 i; + + sub_809A4E8(); + gUnknown_203ADBC->field_07 = 0; + for (i = 0; i < PC_ITEMS_COUNT; gUnknown_203ADBC->field_07++, i++) + { + if (gSaveBlock1Ptr->pcItems[i].itemId == ITEM_NONE) + break; + } + gUnknown_203ADBC->field_06 = gUnknown_203ADBC->field_07 + 1 <= 6 ? gUnknown_203ADBC->field_07 + 1 : 6; +} + +void sub_810DE08(void) +{ + u8 i; + + if (gUnknown_203ADCC.field_6 > 3) + { + for (i = 0; i <= gUnknown_203ADCC.field_6 - 3; gUnknown_203ADCC.field_6--, gUnknown_203ADCC.field_4++, i++) + { + if (gUnknown_203ADCC.field_4 + gUnknown_203ADBC->field_06 == gUnknown_203ADBC->field_07 + 1) + break; + } + } +} + +void sub_810DE6C(int a0) +{ + sub_80F6B08(1, 0, 14, 30, 6, a0 + 1); + schedule_bg_copy_tilemap_to_vram(1); +} + +void sub_810DE94(u8 a0) +{ + gUnknown_203ADCC.field_8 = a0; +} |