diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-16 15:14:57 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-16 15:14:57 -0400 |
commit | d0633593e8446d6985967d4859c5100067c7d779 (patch) | |
tree | 81f35bf23a9857209e7ab3bc3bb749fb3959309e | |
parent | 4f4b03af6077787ceef226d9085242966c69b6bd (diff) |
item_pc: through sub_810DBD0
-rw-r--r-- | asm/item_pc.s | 368 | ||||
-rw-r--r-- | include/constants/items.h | 2 | ||||
-rw-r--r-- | include/item_menu_icons.h | 2 | ||||
-rw-r--r-- | include/strings.h | 2 | ||||
-rw-r--r-- | include/text.h | 12 | ||||
-rw-r--r-- | src/item_pc.c | 103 |
6 files changed, 134 insertions, 355 deletions
diff --git a/asm/item_pc.s b/asm/item_pc.s index f70f0c7f1..1a76e707d 100644 --- a/asm/item_pc.s +++ b/asm/item_pc.s @@ -5,346 +5,6 @@ .text - thumb_func_start sub_810D954 -sub_810D954: @ 810D954 - push {r4,r5,lr} - sub sp, 0x14 - adds r4, r0, 0 - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0x1 - beq _0810D968 - movs r0, 0x5 - bl PlaySE -_0810D968: - ldr r5, _0810D9BC @ =gUnknown_203ADBC - ldr r1, [r5] - ldrb r0, [r1, 0x4] - cmp r0, 0xFF - bne _0810DA0A - ldrb r1, [r1, 0x5] - movs r0, 0x1 - eors r0, r1 - bl sub_8098940 - movs r0, 0x2 - negs r0, r0 - cmp r4, r0 - beq _0810D9CE - lsls r0, r4, 16 - lsrs r0, 16 - bl sub_810DD68 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, [r5] - ldrb r1, [r0, 0x5] - adds r0, r4, 0 - bl sub_80988E8 - adds r0, r4, 0 - bl ItemId_GetPocket - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bne _0810D9C4 - adds r0, r4, 0 - bl ItemIdToBattleMoveId - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xD - muls r1, r0 - ldr r0, _0810D9C0 @ =gMoveNames - adds r5, r1, r0 - b _0810D9DA - .align 2, 0 -_0810D9BC: .4byte gUnknown_203ADBC -_0810D9C0: .4byte gMoveNames -_0810D9C4: - adds r0, r4, 0 - bl ItemId_GetDescription - adds r5, r0, 0 - b _0810D9DA -_0810D9CE: - ldr r0, _0810DA14 @ =0x00000177 - ldr r1, [r5] - ldrb r1, [r1, 0x5] - bl sub_80988E8 - ldr r5, _0810DA18 @ =gUnknown_84178BE -_0810D9DA: - ldr r0, _0810DA1C @ =gUnknown_203ADBC - ldr r2, [r0] - ldrb r0, [r2, 0x5] - movs r1, 0x1 - eors r0, r1 - movs r4, 0 - strb r0, [r2, 0x5] - movs r0, 0x1 - movs r1, 0 - bl FillWindowPixelBuffer - movs r1, 0x3 - str r1, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - str r4, [sp, 0x8] - str r4, [sp, 0xC] - str r1, [sp, 0x10] - movs r0, 0x1 - movs r1, 0x2 - adds r2, r5, 0 - movs r3, 0 - bl sub_810EA34 -_0810DA0A: - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0810DA14: .4byte 0x00000177 -_0810DA18: .4byte gUnknown_84178BE -_0810DA1C: .4byte gUnknown_203ADBC - thumb_func_end sub_810D954 - - thumb_func_start sub_810DA20 -sub_810DA20: @ 810DA20 - push {r4-r6,lr} - sub sp, 0x14 - adds r4, r1, 0 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r2, 24 - lsrs r5, r2, 24 - ldr r0, _0810DA4C @ =gUnknown_203ADBC - ldr r0, [r0] - ldrb r1, [r0, 0x4] - cmp r1, 0xFF - beq _0810DA58 - lsls r0, r4, 24 - lsrs r0, 24 - cmp r1, r0 - bne _0810DA50 - adds r0, r5, 0 - movs r1, 0x2 - bl sub_810DAD4 - b _0810DA58 - .align 2, 0 -_0810DA4C: .4byte gUnknown_203ADBC -_0810DA50: - adds r0, r5, 0 - movs r1, 0xFF - bl sub_810DAD4 -_0810DA58: - movs r0, 0x2 - negs r0, r0 - cmp r4, r0 - beq _0810DA9E - lsls r0, r4, 16 - lsrs r0, 16 - bl sub_810DD80 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - ldr r0, _0810DAA8 @ =gStringVar1 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r4, _0810DAAC @ =gStringVar4 - ldr r1, _0810DAB0 @ =gText_TimesStrVar1 - adds r0, r4, 0 - bl StringExpandPlaceholders - str r5, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r0, [sp, 0x8] - movs r0, 0xFF - str r0, [sp, 0xC] - movs r0, 0x1 - str r0, [sp, 0x10] - adds r0, r6, 0 - movs r1, 0 - adds r2, r4, 0 - movs r3, 0x6E - bl sub_810EA34 -_0810DA9E: - add sp, 0x14 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0810DAA8: .4byte gStringVar1 -_0810DAAC: .4byte gStringVar4 -_0810DAB0: .4byte gText_TimesStrVar1 - thumb_func_end sub_810DA20 - - thumb_func_start sub_810DAB4 -sub_810DAB4: @ 810DAB4 - push {r4,lr} - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r4, 24 - lsrs r4, 24 - bl ListMenuGetYCoordForPrintingArrowCursor - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - bl sub_810DAD4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_810DAB4 - - thumb_func_start sub_810DAD4 -sub_810DAD4: @ 810DAD4 - push {r4,r5,lr} - sub sp, 0x14 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0xFF - bne _0810DB10 - movs r0, 0x2 - movs r1, 0 - bl GetFontAttribute - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x2 - movs r1, 0x1 - bl GetFontAttribute - lsls r0, 24 - lsrs r0, 24 - str r4, [sp] - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - adds r3, r5, 0 - bl FillWindowPixelRect - b _0810DB26 -_0810DB10: - ldr r2, _0810DB30 @ =gFameCheckerText_ListMenuCursor - str r5, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - str r1, [sp, 0x10] - movs r1, 0x2 - movs r3, 0 - bl sub_810EA34 -_0810DB26: - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0810DB30: .4byte gFameCheckerText_ListMenuCursor - thumb_func_end sub_810DAD4 - - thumb_func_start sub_810DB34 -sub_810DB34: @ 810DB34 - push {lr} - sub sp, 0x14 - ldr r2, _0810DB58 @ =gUnknown_84178A7 - movs r1, 0x1 - str r1, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r1, [sp, 0x8] - str r0, [sp, 0xC] - str r0, [sp, 0x10] - movs r0, 0x2 - movs r1, 0 - movs r3, 0 - bl sub_810EA34 - add sp, 0x14 - pop {r0} - bx r0 - .align 2, 0 -_0810DB58: .4byte gUnknown_84178A7 - thumb_func_end sub_810DB34 - - thumb_func_start sub_810DB5C -sub_810DB5C: @ 810DB5C - push {r4,lr} - sub sp, 0x10 - ldr r4, _0810DB90 @ =gUnknown_203ADBC - ldr r1, [r4] - ldrb r0, [r1, 0x7] - ldrb r1, [r1, 0x6] - subs r0, r1 - adds r0, 0x1 - str r0, [sp] - movs r0, 0x6E - str r0, [sp, 0x4] - str r0, [sp, 0x8] - ldr r0, _0810DB94 @ =gUnknown_203ADCC + 0x4 - str r0, [sp, 0xC] - movs r0, 0x2 - movs r1, 0x80 - movs r2, 0x8 - movs r3, 0x68 - bl AddScrollIndicatorArrowPairParameterized - ldr r1, [r4] - strb r0, [r1, 0x8] - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810DB90: .4byte gUnknown_203ADBC -_0810DB94: .4byte gUnknown_203ADCC + 0x4 - thumb_func_end sub_810DB5C - - thumb_func_start sub_810DB98 -sub_810DB98: @ 810DB98 - push {r4,lr} - sub sp, 0x10 - ldr r4, _0810DBCC @ =gUnknown_203ADBC - ldr r1, [r4] - movs r0, 0x1 - strh r0, [r1, 0xA] - movs r0, 0x2 - str r0, [sp] - movs r0, 0x6E - str r0, [sp, 0x4] - str r0, [sp, 0x8] - adds r1, 0xA - str r1, [sp, 0xC] - movs r0, 0x2 - movs r1, 0xD4 - movs r2, 0x78 - movs r3, 0x98 - bl AddScrollIndicatorArrowPairParameterized - ldr r1, [r4] - strb r0, [r1, 0x8] - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810DBCC: .4byte gUnknown_203ADBC - thumb_func_end sub_810DB98 - - thumb_func_start sub_810DBD0 -sub_810DBD0: @ 810DBD0 - push {r4,lr} - ldr r4, _0810DBEC @ =gUnknown_203ADBC - ldr r1, [r4] - ldrb r0, [r1, 0x8] - cmp r0, 0xFF - beq _0810DBE6 - bl RemoveScrollIndicatorArrowPair - ldr r1, [r4] - movs r0, 0xFF - strb r0, [r1, 0x8] -_0810DBE6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810DBEC: .4byte gUnknown_203ADBC - thumb_func_end sub_810DBD0 - thumb_func_start sub_810DBF0 sub_810DBF0: @ 810DBF0 push {r4,r5,lr} @@ -537,8 +197,8 @@ sub_810DD54: @ 810DD54 _0810DD64: .4byte gUnknown_203ADCC thumb_func_end sub_810DD54 - thumb_func_start sub_810DD68 -sub_810DD68: @ 810DD68 + thumb_func_start ItemPc_GetItemIdBySlotId +ItemPc_GetItemIdBySlotId: @ 810DD68 lsls r0, 16 ldr r1, _0810DD7C @ =gSaveBlock1Ptr ldr r1, [r1] @@ -551,10 +211,10 @@ sub_810DD68: @ 810DD68 bx lr .align 2, 0 _0810DD7C: .4byte gSaveBlock1Ptr - thumb_func_end sub_810DD68 + thumb_func_end ItemPc_GetItemIdBySlotId - thumb_func_start sub_810DD80 -sub_810DD80: @ 810DD80 + thumb_func_start ItemPc_GetItemQuantityBySlotId +ItemPc_GetItemQuantityBySlotId: @ 810DD80 push {lr} lsls r0, 16 ldr r1, _0810DD9C @ =gSaveBlock1Ptr @@ -571,7 +231,7 @@ sub_810DD80: @ 810DD80 .align 2, 0 _0810DD9C: .4byte gSaveBlock1Ptr _0810DDA0: .4byte 0x0000029a - thumb_func_end sub_810DD80 + thumb_func_end ItemPc_GetItemQuantityBySlotId thumb_func_start sub_810DDA4 sub_810DDA4: @ 810DDA4 @@ -814,7 +474,7 @@ _0810DF6C: strh r4, [r6, 0x2] lsls r0, r4, 16 lsrs r0, 16 - bl sub_810DD80 + bl ItemPc_GetItemQuantityBySlotId strh r0, [r6, 0x4] ldrb r0, [r6] movs r1, 0x2 @@ -890,7 +550,7 @@ sub_810DFE0: @ 810DFE0 strb r4, [r0, 0x4] ldr r4, _0810E0A4 @ =gStringVar1 ldrh r0, [r6, 0x2] - bl sub_810DD68 + bl ItemPc_GetItemIdBySlotId lsls r0, 16 lsrs r0, 16 bl ItemId_GetItem @@ -1224,7 +884,7 @@ sub_810E274: @ 810E274 movs r3, 0x2 bl ProgramAndPlaceMenuCursorOnWindow ldrh r0, [r6, 0x2] - bl sub_810DD68 + bl ItemPc_GetItemIdBySlotId lsls r0, 16 lsrs r0, 16 ldr r1, _0810E348 @ =gStringVar1 @@ -1328,7 +988,7 @@ sub_810E3A4: @ 810E3A4 movs r0, 0x1 strh r0, [r4, 0x10] ldrh r0, [r4, 0x2] - bl sub_810DD80 + bl ItemPc_GetItemQuantityBySlotId lsls r0, 16 lsrs r0, 16 cmp r0, 0x1 @@ -1373,7 +1033,7 @@ sub_810E418: @ 810E418 ldr r7, _0810E49C @ =gTasks+0x8 adds r5, r6, r7 ldrh r0, [r5, 0x2] - bl sub_810DD68 + bl ItemPc_GetItemIdBySlotId lsls r0, 16 lsrs r4, r0, 16 ldrh r1, [r5, 0x10] @@ -1483,7 +1143,7 @@ _0810E51A: movs r0, 0x5 bl PlaySE ldrh r0, [r5, 0x2] - bl sub_810DD68 + bl ItemPc_GetItemIdBySlotId lsls r0, 16 lsrs r0, 16 ldrh r1, [r5, 0x10] @@ -1578,7 +1238,7 @@ sub_810E5E0: @ 810E5E0 sub sp, 0x14 lsls r0, 16 lsrs r0, 16 - bl sub_810DD68 + bl ItemPc_GetItemIdBySlotId lsls r0, 16 lsrs r0, 16 ldr r6, _0810E660 @ =gStringVar1 @@ -1828,7 +1488,7 @@ sub_810E7F8: @ 810E7F8 bl sub_810DD54 lsls r0, 24 lsrs r0, 24 - bl sub_810DD68 + bl ItemPc_GetItemIdBySlotId ldr r1, _0810E834 @ =gUnknown_203B0A0 strh r0, [r1, 0xC] add sp, 0xC diff --git a/include/constants/items.h b/include/constants/items.h index 64fed0e4c..cc73119e6 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -379,6 +379,8 @@ #define ITEM_RUBY 373 #define ITEM_SAPPHIRE 374 +#define ITEM_N_A 375 + // Emerald #define ITEM_MAGMA_EMBLEM 375 #define ITEM_OLD_SEA_MAP 376 diff --git a/include/item_menu_icons.h b/include/item_menu_icons.h index 47a873c36..c964a0bdc 100644 --- a/include/item_menu_icons.h +++ b/include/item_menu_icons.h @@ -6,5 +6,7 @@ void sub_80984D8(void); void sub_80985E4(void); u8 sub_80D511C(u8 a0, u8 a1, u8 a2, u8 a3); +void sub_8098940(bool8 a0); +void sub_80988E8(u16 itemId, bool8 a0); #endif // GUARD_ITEM_MENU_ICONS diff --git a/include/strings.h b/include/strings.h index e624fe407..3c374270d 100644 --- a/include/strings.h +++ b/include/strings.h @@ -150,5 +150,7 @@ extern const u8 gString_Help[]; extern const u8 gString_HelpSystem_ClearTo8[]; extern const u8 gUnknown_8416655[]; +extern const u8 gUnknown_84178A7[]; +extern const u8 gUnknown_84178BE[]; #endif //GUARD_STRINGS_H diff --git a/include/text.h b/include/text.h index dc53b4845..2e6a8c837 100644 --- a/include/text.h +++ b/include/text.h @@ -91,6 +91,18 @@ #define TEXT_SPEED_FF 0xFF +enum +{ + FONTATTR_MAX_LETTER_WIDTH, + FONTATTR_MAX_LETTER_HEIGHT, + FONTATTR_LETTER_SPACING, + FONTATTR_LINE_SPACING, + FONTATTR_UNKNOWN, // dunno what this is yet + FONTATTR_COLOR_FOREGROUND, + FONTATTR_COLOR_BACKGROUND, + FONTATTR_COLOR_SHADOW +}; + struct TextPrinterSubStruct { u8 font_type:4; // 0x14 diff --git a/src/item_pc.c b/src/item_pc.c index 2b63651e7..c3d3ade9d 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -1,5 +1,6 @@ #include "global.h" #include "bg.h" +#include "data2.h" #include "decompress.h" #include "gpu_regs.h" #include "graphics.h" @@ -11,12 +12,16 @@ #include "malloc.h" #include "menu.h" #include "menu_helpers.h" +#include "menu_indicators.h" #include "palette.h" +#include "party_menu.h" #include "pc_screen_effect.h" #include "scanline_effect.h" #include "sound.h" +#include "string_util.h" #include "strings.h" #include "task.h" +#include "constants/items.h" #include "constants/songs.h" struct ItemPcResources @@ -27,7 +32,7 @@ struct ItemPcResources u8 field_06; u8 field_07; u8 field_08; - u8 filler_09[3]; + u16 field_0A; s16 field_0C[3]; }; @@ -58,15 +63,19 @@ bool8 sub_810D83C(void); 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); +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_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] = { { @@ -382,3 +391,95 @@ void sub_810D878(void) gMultiuseListMenuTemplate.scrollMultiple = 0; gMultiuseListMenuTemplate.cursorKind = 0; } + +void sub_810D954(s32 itemIndex, bool8 onInit, struct ListMenu * list) +{ + u16 itemId; + const u8 * desc; + if (onInit != TRUE) + PlaySE(SE_SELECT); + + if (gUnknown_203ADBC->field_04 == 0xFF) + { + sub_8098940(gUnknown_203ADBC->field_05 ^ 1); + if (itemIndex != -2) + { + itemId = ItemPc_GetItemIdBySlotId(itemIndex); + sub_80988E8(itemId, gUnknown_203ADBC->field_05); + if (ItemId_GetPocket(itemId) == POCKET_TM_CASE) + desc = gMoveNames[ItemIdToBattleMoveId(itemId)]; + else + desc = ItemId_GetDescription(itemId); + } + else + { + sub_80988E8(ITEM_N_A, gUnknown_203ADBC->field_05); + desc = gUnknown_84178BE; + } + gUnknown_203ADBC->field_05 ^= 1; + FillWindowPixelBuffer(1, 0); + sub_810EA34(1, 2, desc, 0, 3, 2, 0, 0, 3); + } +} + +void sub_810DA20(u8 windowId, s32 itemId, u8 y) +{ + if (gUnknown_203ADBC->field_04 != 0xFF) + { + if (gUnknown_203ADBC->field_04 == (u8)itemId) + sub_810DAD4(y, 2); + else + sub_810DAD4(y, 0xFF); + } + if (itemId != -2) + { + u16 quantity = ItemPc_GetItemQuantityBySlotId(itemId); + ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_RIGHT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + sub_810EA34(windowId, 0, gStringVar4, 110, y, 0, 0, 0xFF, 1); + } +} + +void sub_810DAB4(u8 listMenuId, u8 colorIdx) +{ + sub_810DAD4(ListMenuGetYCoordForPrintingArrowCursor(listMenuId), colorIdx); +} + +void sub_810DAD4(u8 y, u8 colorIdx) +{ + if (colorIdx == 0xFF) + { + u8 maxWidth = GetFontAttribute(2, FONTATTR_MAX_LETTER_WIDTH); + u8 maxHeight = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT); + FillWindowPixelRect(0, 0, 0, y, maxWidth, maxHeight); + } + else + { + sub_810EA34(0, 2, gFameCheckerText_ListMenuCursor, 0, y, 0, 0, 0, colorIdx); + } +} + +void sub_810DB34(void) +{ + sub_810EA34(2, 0, gUnknown_84178A7, 0, 1, 0, 1, 0, 0); +} + +void sub_810DB5C(void) +{ + gUnknown_203ADBC->field_08 = AddScrollIndicatorArrowPairParameterized(2, 128, 8, 104, gUnknown_203ADBC->field_07 - gUnknown_203ADBC->field_06 + 1, 110, 110, &gUnknown_203ADCC.field_4); +} + +void sub_810DB98(void) +{ + gUnknown_203ADBC->field_0A = 1; + gUnknown_203ADBC->field_08 = AddScrollIndicatorArrowPairParameterized(2, 212, 120, 152, 2, 110, 110, &gUnknown_203ADBC->field_0A); +} + +void sub_810DBD0(void) +{ + if (gUnknown_203ADBC->field_08 != 0xFF) + { + RemoveScrollIndicatorArrowPair(gUnknown_203ADBC->field_08); + gUnknown_203ADBC->field_08 = 0xFF; + } +} |