From f6e050cf354a6ca3f5ea3a57496cc0ae2aac49dd Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 17 Jan 2020 15:11:46 -0500 Subject: through sub_81081AC --- src/item_menu.c | 281 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 src/item_menu.c (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c new file mode 100644 index 000000000..9128d0856 --- /dev/null +++ b/src/item_menu.c @@ -0,0 +1,281 @@ +#include "global.h" +#include "bag.h" +#include "battle_controllers.h" +#include "bg.h" +#include "help_system.h" +#include "item_menu.h" +#include "item_menu_icons.h" +#include "list_menu.h" +#include "malloc.h" +#include "new_menu_helpers.h" +#include "overworld.h" +#include "palette.h" +#include "scanline_effect.h" +#include "text.h" +#include "constants/items.h" + +struct BagMenuAlloc +{ + u32 field_00; + u8 field_04; + u8 field_05_0:4; + u8 field_05_4:2; + u8 field_05_6:2; + u16 field_06; + u8 field_08; + u8 field_09; + u8 filler_0A[6]; + u8 field_10[4]; +}; + +EWRAM_DATA struct BagStruct gUnknown_203ACFC = {}; +EWRAM_DATA struct BagMenuAlloc * gUnknown_203AD10 = NULL; +EWRAM_DATA void * gUnknown_203AD14 = NULL; +EWRAM_DATA struct ListMenuItem * gUnknown_203AD18 = NULL; +EWRAM_DATA u8 (*gUnknown_203AD1C)[20] = NULL; + +void sub_8107F10(void); +bool8 sub_8107F3C(void); +void sub_810813C(void); +void sub_8108178(u8 taskId); +void sub_81081AC(void); +bool8 sub_81081D0(void); +bool8 sub_8108240(void); +u8 sub_8108388(u8 location); +bool8 sub_81083F4(void); +void sub_810842C(u8 a0); +void sub_81087EC(void); +void sub_8108888(void); +void sub_81088D8(void); +void sub_8108A68(void); +void sub_8108A84(void); +void sub_8108B04(void); +void sub_8108C10(void); +void sub_8108E54(void); + +void GoToBagMenu(u8 location, u8 a1, MainCallback a2) +{ + u8 i; + + sub_81081AC(); + gUnknown_203AD10 = Alloc(sizeof(struct BagMenuAlloc)); + if (gUnknown_203AD10 == NULL) + SetMainCallback2(a2); + else + { + if (location != 11) + gUnknown_203ACFC.location = location; + if (a2 != NULL) + gUnknown_203ACFC.bagCallback = a2; + gUnknown_203AD10->field_00 = 0; + gUnknown_203AD10->field_04 = 0xFF; + gUnknown_203AD10->field_05_4 = 0; + gUnknown_203AD10->field_05_6 = 0; + gUnknown_203AD10->field_08 = 0xFF; + gUnknown_203AD10->field_09 = 0xFF; + if (location == 3) + gUnknown_203AD10->field_05_0 = 1; + else if (location == 6) + gUnknown_203AD10->field_05_0 = 2; + else + gUnknown_203AD10->field_05_0 = 0; + for (i = 0; i < 4; i++) + { + gUnknown_203AD10->field_10[i] = 0; + } + if (a1 == 0 || a1 == 1 || a1 == 2) + gUnknown_203ACFC.unk6 = a1; + gTextFlags.autoScroll = FALSE; + gSpecialVar_ItemId = ITEM_NONE; + SetMainCallback2(sub_8107F10); + } +} + +void CB2_BagMenuFromStartMenu(void) +{ + GoToBagMenu(0, 3, CB2_ReturnToFieldWithOpenMenu); +} + +void sub_8107ECC(void) +{ + GoToBagMenu(5, 3, SetCB2ToReshowScreenAfterMenu2); +} + +void sub_8107EE0(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + DoScheduledBgTilemapCopiesToVram(); + UpdatePaletteFade(); +} + +void sub_8107EFC(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_8107F10(void) +{ + while (1) + { + if ((u8)sub_80BF72C() == TRUE) + break; + if (sub_8107F3C() == TRUE) + break; + if (MenuHelpers_LinkSomething() == TRUE) + break; + } +} + +bool8 sub_8107F3C(void) +{ + u8 taskId; + + switch (gMain.state) + { + case 0: + SetVBlankHBlankCallbacksToNull(); + ClearScheduledBgCopiesToVram(); + gMain.state++; + break; + case 1: + ScanlineEffect_Stop(); + gMain.state++; + break; + case 2: + FreeAllSpritePalettes(); + gMain.state++; + break; + case 3: + ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = TRUE; + gMain.state++; + break; + case 4: + ResetSpriteData(); + gMain.state++; + break; + case 5: + ResetItemMenuIconState(); + gMain.state++; + break; + case 6: + if (!MenuHelpers_LinkSomething()) + { + ResetTasks(); + } + gMain.state++; + break; + case 7: + if (sub_81081D0()) + { + gUnknown_203AD10->field_10[0] = 0; + gMain.state++; + } + else + { + sub_810813C(); + return TRUE; + } + break; + case 8: + if (sub_8108240() == TRUE) + gMain.state++; + break; + case 9: + sub_810B858(); + gMain.state++; + break; + case 10: + sub_8108E54(); + sub_8108A68(); + sub_8108A84(); + gMain.state++; + break; + case 11: + if (!sub_81083F4()) + { + sub_810813C(); + return TRUE; + } + gMain.state++; + break; + case 12: + sub_810842C(gUnknown_203ACFC.unk6); + gMain.state++; + break; + case 13: + if (gUnknown_203ACFC.location != 3) + sub_81087EC(); + else + sub_810B994(); + gMain.state++; + break; + case 14: + taskId = sub_8108388(gUnknown_203ACFC.location); + gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.unk6], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.unk6]); + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[8] = 0; + gMain.state++; + break; + case 15: + sub_80984FC(gUnknown_203ACFC.unk6); + gMain.state++; + break; + case 16: + sub_8108888(); + sub_81088D8(); + gMain.state++; + break; + case 17: + sub_80985E4(); + gMain.state++; + break; + case 18: + sub_8108C10(); + gMain.state++; + break; + case 19: + if (gUnknown_203ACFC.location == 3) + HelpSystem_SetSomeVariable2(29); + else + HelpSystem_SetSomeVariable2(9); + gPaletteFade.bufferTransferDisabled = FALSE; + gMain.state++; + break; + default: + SetVBlankCallback(sub_8107EFC); + SetMainCallback2(sub_8107EE0); + return TRUE; + } + return FALSE; +} + +void sub_810813C(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); + CreateTask(sub_8108178, 0); + SetVBlankCallback(sub_8107EFC); + SetMainCallback2(sub_8107EE0); +} + +void sub_8108178(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(gUnknown_203ACFC.bagCallback); + sub_8108B04(); + DestroyTask(taskId); + } +} + +void sub_81081AC(void) +{ + gUnknown_203AD10 = NULL; + gUnknown_203AD14 = NULL; + gUnknown_203AD18 = NULL; + gUnknown_203AD1C = NULL; +} -- cgit v1.2.3 From dbf3ac402d94be993839bddd109e3cfaef8e3dea Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 17 Jan 2020 16:40:53 -0500 Subject: through sub_8108560 --- src/item_menu.c | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 169 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index 9128d0856..ce964b647 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1,17 +1,18 @@ #include "global.h" +#include "gflib.h" #include "bag.h" #include "battle_controllers.h" -#include "bg.h" +#include "decompress.h" +#include "graphics.h" #include "help_system.h" +#include "item.h" #include "item_menu.h" #include "item_menu_icons.h" #include "list_menu.h" -#include "malloc.h" #include "new_menu_helpers.h" #include "overworld.h" -#include "palette.h" #include "scanline_effect.h" -#include "text.h" +#include "strings.h" #include "constants/items.h" struct BagMenuAlloc @@ -24,7 +25,8 @@ struct BagMenuAlloc u16 field_06; u8 field_08; u8 field_09; - u8 filler_0A[6]; + u8 field_0A[3]; + u8 field_0D[3]; u8 field_10[4]; }; @@ -32,7 +34,7 @@ EWRAM_DATA struct BagStruct gUnknown_203ACFC = {}; EWRAM_DATA struct BagMenuAlloc * gUnknown_203AD10 = NULL; EWRAM_DATA void * gUnknown_203AD14 = NULL; EWRAM_DATA struct ListMenuItem * gUnknown_203AD18 = NULL; -EWRAM_DATA u8 (*gUnknown_203AD1C)[20] = NULL; +EWRAM_DATA u8 (*gUnknown_203AD1C)[19] = NULL; void sub_8107F10(void); bool8 sub_8107F3C(void); @@ -43,7 +45,10 @@ bool8 sub_81081D0(void); bool8 sub_8108240(void); u8 sub_8108388(u8 location); bool8 sub_81083F4(void); -void sub_810842C(u8 a0); +void sub_810842C(u8 pocket); +void sub_81085A4(s32 itemIndex, bool8 onInit, struct ListMenu *list); +void sub_8108654(u8 windowId, s32 itemId, u8 y); +void sub_8108560(u8 *dest, u16 itemId); void sub_81087EC(void); void sub_8108888(void); void sub_81088D8(void); @@ -52,6 +57,17 @@ void sub_8108A84(void); void sub_8108B04(void); void sub_8108C10(void); void sub_8108E54(void); +void sub_8108F0C(u8 taskId); +bool8 sub_810ADAC(void); +void sub_810AF9C(u8 taskId); +void sub_810B1D4(u8 taskId); +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 gUnknown_8452F60[]; +extern const u8 gUnknown_8452F66[]; void GoToBagMenu(u8 location, u8 a1, MainCallback a2) { @@ -84,7 +100,7 @@ void GoToBagMenu(u8 location, u8 a1, MainCallback a2) gUnknown_203AD10->field_10[i] = 0; } if (a1 == 0 || a1 == 1 || a1 == 2) - gUnknown_203ACFC.unk6 = a1; + gUnknown_203ACFC.pocket = a1; gTextFlags.autoScroll = FALSE; gSpecialVar_ItemId = ITEM_NONE; SetMainCallback2(sub_8107F10); @@ -204,7 +220,7 @@ bool8 sub_8107F3C(void) gMain.state++; break; case 12: - sub_810842C(gUnknown_203ACFC.unk6); + sub_810842C(gUnknown_203ACFC.pocket); gMain.state++; break; case 13: @@ -216,13 +232,13 @@ bool8 sub_8107F3C(void) break; case 14: taskId = sub_8108388(gUnknown_203ACFC.location); - gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.unk6], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.unk6]); + gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); gTasks[taskId].data[3] = 0; gTasks[taskId].data[8] = 0; gMain.state++; break; case 15: - sub_80984FC(gUnknown_203ACFC.unk6); + sub_80984FC(gUnknown_203ACFC.pocket); gMain.state++; break; case 16: @@ -279,3 +295,145 @@ void sub_81081AC(void) gUnknown_203AD18 = NULL; gUnknown_203AD1C = NULL; } + +bool8 sub_81081D0(void) +{ + void **buff; + ResetAllBgsCoordinatesAndBgCntRegs(); + buff = &gUnknown_203AD14; + *buff = Alloc(0x800); + if (*buff == NULL) + return FALSE; + memset(*buff, 0, 0x800); + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, gUnknown_8452CF4, NELEMS(gUnknown_8452CF4)); + SetBgTilemapBuffer(1, *buff); + ScheduleBgCopyTilemapToVram(1); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON); + ShowBg(0); + ShowBg(1); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + return TRUE; +} + +bool8 sub_8108240(void) +{ + switch (gUnknown_203AD10->field_10[0]) + { + case 0: + ResetTempTileDataBuffers(); + DecompressAndCopyTileDataToVram(1, gUnknown_8E830CC, 0, 0, 0); + gUnknown_203AD10->field_10[0]++; + break; + case 1: + if (FreeTempTileDataBuffersIfPossible() != TRUE) + { + if (gUnknown_203ACFC.location != 3) + LZDecompressWram(gUnknown_8E832C0, gUnknown_203AD14); + else + LZDecompressWram(gUnknown_8E83444, gUnknown_203AD14); + gUnknown_203AD10->field_10[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]++; + break; + case 3: + if (sub_810ADAC() == TRUE || gSaveBlock2Ptr->playerGender == MALE) + LoadCompressedSpriteSheet(&gUnknown_83D41E4); + else + LoadCompressedSpriteSheet(&gUnknown_83D41EC); + gUnknown_203AD10->field_10[0]++; + break; + case 4: + LoadCompressedSpritePalette(&gUnknown_83D41F4); + gUnknown_203AD10->field_10[0]++; + break; + case 5: + LoadCompressedSpriteSheet(&gBagSwapSpriteSheet); + gUnknown_203AD10->field_10[0]++; + break; + default: + LoadCompressedSpritePalette(&gBagSwapSpritePalette); + gUnknown_203AD10->field_10[0] = 0; + return TRUE; + } + + return FALSE; +} + +u8 sub_8108388(u8 location) +{ + switch (location) + { + case 6: + return CreateTask(sub_810AF9C, 0); + case 9: + return CreateTask(sub_810B1D4, 0); + case 10: + return CreateTask(sub_810B5D4, 0); + case 7: + return CreateTask(sub_810B4BC, 0); + case 8: + return CreateTask(sub_810B378, 0); + default: + return CreateTask(sub_8108F0C, 0); + } +} + +bool8 sub_81083F4(void) +{ + gUnknown_203AD18 = Alloc(43 * sizeof(struct ListMenuItem)); + if (gUnknown_203AD18 == NULL) + return FALSE; + gUnknown_203AD1C = Alloc(43 * 19); + if (gUnknown_203AD1C == NULL) + return FALSE; + return TRUE; +} + +void sub_810842C(u8 pocket) +{ + u16 i; + struct BagPocket * bagPocket = &gBagPockets[pocket]; + for (i = 0; i < gUnknown_203AD10->field_0A[pocket]; i++) + { + sub_8108560(gUnknown_203AD1C[i], bagPocket->itemSlots[i].itemId); + gUnknown_203AD18[i].label = gUnknown_203AD1C[i]; + gUnknown_203AD18[i].index = i; + } + StringCopy(gUnknown_203AD1C[i], gUnknown_8452F60); + StringAppend(gUnknown_203AD1C[i], gFameCheckerText_Cancel); + 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.windowId = 0; + gMultiuseListMenuTemplate.header_X = 0; + gMultiuseListMenuTemplate.item_X = 9; + gMultiuseListMenuTemplate.cursor_X = 1; + gMultiuseListMenuTemplate.lettersSpacing = 0; + gMultiuseListMenuTemplate.itemVerticalPadding = 2; + gMultiuseListMenuTemplate.upText_Y = 2; + gMultiuseListMenuTemplate.maxShowed = gUnknown_203AD10->field_0D[pocket]; + gMultiuseListMenuTemplate.fontId = 2; + gMultiuseListMenuTemplate.cursorPal = 2; + gMultiuseListMenuTemplate.fillValue = 0; + gMultiuseListMenuTemplate.cursorShadowPal = 3; + gMultiuseListMenuTemplate.moveCursorFunc = sub_81085A4; + gMultiuseListMenuTemplate.itemPrintFunc = sub_8108654; + gMultiuseListMenuTemplate.cursorKind = 0; + gMultiuseListMenuTemplate.scrollMultiple = 0; +} + +void sub_8108560(u8 *dest, u16 itemId) +{ + if (itemId == ITEM_TM_CASE || itemId == ITEM_BERRY_POUCH) + StringCopy(dest, gUnknown_8452F66); + else + StringCopy(dest, gUnknown_8452F60); + StringAppend(dest, ItemId_GetName(itemId)); +} -- cgit v1.2.3 From 881199142ccac48aa975d0b59be07dfd78ad70af Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 17 Jan 2020 22:23:20 -0500 Subject: through bag_menu_print_cursor --- src/bag.c | 2 +- src/item_menu.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 71 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/bag.c b/src/bag.c index c30bc626d..4a962bec6 100644 --- a/src/bag.c +++ b/src/bag.c @@ -227,7 +227,7 @@ void sub_810B858(void) } } -void sub_810B8F0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, s8 speed, u8 colorIdx) +void sub_810B8F0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx) { AddTextPrinterParameterized4(windowId, fontId, x, y, letterSpacing, lineSpacing, gUnknown_84530B8[colorIdx], speed, str); } diff --git a/src/item_menu.c b/src/item_menu.c index ce964b647..578170c17 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -14,6 +14,7 @@ #include "scanline_effect.h" #include "strings.h" #include "constants/items.h" +#include "constants/songs.h" struct BagMenuAlloc { @@ -46,10 +47,12 @@ bool8 sub_8108240(void); u8 sub_8108388(u8 location); bool8 sub_81083F4(void); void sub_810842C(u8 pocket); +void sub_8108560(u8 *dest, u16 itemId); void sub_81085A4(s32 itemIndex, bool8 onInit, struct ListMenu *list); void sub_8108654(u8 windowId, s32 itemId, u8 y); -void sub_8108560(u8 *dest, u16 itemId); +void bag_menu_print_cursor(u8 y, u8 colorIdx); void sub_81087EC(void); +void sub_8108818(s32 itemIndex); void sub_8108888(void); void sub_81088D8(void); void sub_8108A68(void); @@ -68,6 +71,7 @@ void sub_810B5D4(u8 taskId); extern const struct BgTemplate gUnknown_8452CF4[2]; extern const u8 gUnknown_8452F60[]; extern const u8 gUnknown_8452F66[]; +extern const u8 gUnknown_8452F7C[]; void GoToBagMenu(u8 location, u8 a1, MainCallback a2) { @@ -437,3 +441,68 @@ void sub_8108560(u8 *dest, u16 itemId) StringCopy(dest, gUnknown_8452F60); StringAppend(dest, ItemId_GetName(itemId)); } + +void sub_81085A4(s32 itemIndex, bool8 onInit, struct ListMenu *list) +{ + if (onInit != TRUE) + { + PlaySE(SE_BAG1); + sub_8098580(); + } + 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); + else + CreateItemMenuIcon(ITEM_N_A, gUnknown_203AD10->field_05_4); + gUnknown_203AD10->field_05_4 ^= 1; + if (gUnknown_203AD10->field_05_6 == 0) + sub_8108818(itemIndex); + } +} + +void sub_8108654(u8 windowId, s32 itemId, u8 y) +{ + u16 bagItemId; + u16 bagItemQuantity; + if (gUnknown_203AD10->field_04 != 0xFF) + { + if (gUnknown_203AD10->field_04 == (u8)itemId) + bag_menu_print_cursor(y, 2); + else + bag_menu_print_cursor(y, 0xFF); + } + if (itemId != -2 && gUnknown_203AD10->field_0A[gUnknown_203ACFC.pocket] != itemId) + { + bagItemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemId); + bagItemQuantity = BagGetQuantityByPocketPosition(gUnknown_203ACFC.pocket + 1, itemId); + if (gUnknown_203ACFC.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(bagItemId)) + { + ConvertIntToDecimalStringN(gStringVar1, bagItemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + sub_810B8F0(windowId, 0, gStringVar4, 0x6e, y, 0, 0, 0xFF, 1); + } + else if (gSaveBlock1Ptr->registeredItem != ITEM_NONE && gSaveBlock1Ptr->registeredItem == bagItemId) + { + BlitBitmapToWindow(windowId, gUnknown_8452F7C, 0x70, y, 0x18, 0x10); + } + } +} + +void bag_menu_print_cursor_(u8 taskId, u8 colorIdx) +{ + bag_menu_print_cursor(ListMenuGetYCoordForPrintingArrowCursor(taskId), colorIdx); +} + +void bag_menu_print_cursor(u8 y, u8 colorIdx) +{ + if (colorIdx == 0xFF) + { + FillWindowPixelRect(0, PIXEL_FILL(0), 1, y, GetMenuCursorDimensionByFont(2, 0), GetMenuCursorDimensionByFont(2, 1)); + } + else + { + sub_810B8F0(0, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, colorIdx); + } +} -- cgit v1.2.3 From 2ce545fc216cc07ac9b9bf833a6ed410d90ab420 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 09:23:48 -0500 Subject: through sub_810899C --- src/bag.c | 2 +- src/item_menu.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/bag.c b/src/bag.c index 4a962bec6..b5ba01b4d 100644 --- a/src/bag.c +++ b/src/bag.c @@ -232,7 +232,7 @@ void sub_810B8F0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSp AddTextPrinterParameterized4(windowId, fontId, x, y, letterSpacing, lineSpacing, gUnknown_84530B8[colorIdx], speed, str); } -void sub_810B958(const u8 * str) +void sub_810B958(const u8 * str, u8 unused) { u32 x = 0x48 - GetStringWidth(1, str, 0); AddTextPrinterParameterized3(2, 1, x / 2, 1, gUnknown_84530B8[0], 0, str); diff --git a/src/item_menu.c b/src/item_menu.c index 578170c17..12db534e8 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_indicators.h" #include "new_menu_helpers.h" #include "overworld.h" #include "scanline_effect.h" @@ -55,6 +56,7 @@ void sub_81087EC(void); void sub_8108818(s32 itemIndex); void sub_8108888(void); void sub_81088D8(void); +void sub_810899C(void); void sub_8108A68(void); void sub_8108A84(void); void sub_8108B04(void); @@ -69,8 +71,10 @@ void sub_810B4BC(u8 taskId); void sub_810B5D4(u8 taskId); extern const struct BgTemplate gUnknown_8452CF4[2]; +extern const u8 *const gUnknown_8452CFC[]; extern const u8 gUnknown_8452F60[]; extern const u8 gUnknown_8452F66[]; +extern const struct ScrollArrowsTemplate gUnknown_8452F6C; extern const u8 gUnknown_8452F7C[]; void GoToBagMenu(u8 location, u8 a1, MainCallback a2) @@ -506,3 +510,91 @@ void bag_menu_print_cursor(u8 y, u8 colorIdx) sub_810B8F0(0, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, colorIdx); } } + +void sub_81087EC(void) +{ + FillWindowPixelBuffer(2, PIXEL_FILL(0)); + sub_810B958(gUnknown_8452CFC[gUnknown_203ACFC.pocket], gUnknown_203ACFC.pocket); +} + +void sub_8108818(s32 itemIndex) +{ + const u8 *description; + if (itemIndex != gUnknown_203AD10->field_0A[gUnknown_203ACFC.pocket]) + description = ItemId_GetDescription(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemIndex)); + else + description = gUnknown_84162F5; + FillWindowPixelBuffer(1, PIXEL_FILL(0)); + sub_810B8F0(1, 2, description, 0, 3, 2, 0, 0, 0); +} + +void sub_8108888(void) +{ + gUnknown_203AD10->field_08 = AddScrollIndicatorArrowPairParameterized( + 2, + 160, + 8, + 104, + gUnknown_203AD10->field_0A[gUnknown_203ACFC.pocket] - gUnknown_203AD10->field_0D[gUnknown_203ACFC.pocket] + 1, + 110, + 110, + &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket] + ); +} + +void sub_81088D8(void) +{ + if (gUnknown_203AD10->field_05_0 != 1) + { + gUnknown_203AD10->field_09 = AddScrollIndicatorArrowPair(&gUnknown_8452F6C, &gUnknown_203ACFC.pocket); + } +} + +void sub_8108908(void) +{ + gUnknown_203AD10->field_06 = 1; + gUnknown_203AD10->field_08 = AddScrollIndicatorArrowPairParameterized( + 2, + 152, + 72, + 104, + 2, + 110, + 110, + &gUnknown_203AD10->field_06 + ); +} + +void sub_8108940(void) +{ + gUnknown_203AD10->field_06 = 1; + gUnknown_203AD10->field_08 = AddScrollIndicatorArrowPairParameterized( + 2, + 212, + 120, + 152, + 2, + 110, + 110, + &gUnknown_203AD10->field_06 + ); +} + +void sub_8108978(void) +{ + if (gUnknown_203AD10->field_08 != 0xFF) + { + RemoveScrollIndicatorArrowPair(gUnknown_203AD10->field_08); + gUnknown_203AD10->field_08 = 0xFF; + } + sub_810899C(); +} + +void sub_810899C(void) +{ + if (gUnknown_203AD10->field_09 != 0xFF) + { + RemoveScrollIndicatorArrowPair(gUnknown_203AD10->field_09); + gUnknown_203AD10->field_09 = 0xFF; + } +} -- cgit v1.2.3 From 1c3f865acf9e957e8f6ba4daf7f0cfa093893074 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 09:36:16 -0500 Subject: through ItemMenu_StartFadeToExitCallback --- src/item_menu.c | 233 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 183 insertions(+), 50 deletions(-) (limited to 'src') 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; } -- cgit v1.2.3 From dfcfe6d8e1942349adfefc8e79255dcd8befca0a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 11:52:32 -0500 Subject: through MoveItemSlotInList --- src/item_menu.c | 167 ++++++++++++++++++++++++++++++++++++++++++++------------ src/item_pc.c | 2 +- 2 files changed, 132 insertions(+), 37 deletions(-) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index a861cb742..5c09791ae 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -22,7 +22,7 @@ struct BagMenuAlloc { - u32 field_00; + MainCallback field_00; u8 field_04; u8 field_05_0:4; u8 itemMenuIcon:2; @@ -64,14 +64,15 @@ void sub_8108A68(void); void sub_8108A84(void); void sub_8108B04(void); void sub_8108B8C(u8 taskId); +void sub_8108CFC(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 Task_ItemMenuAction_Use(u8 taskId); +void Task_ItemMenuAction_Toss(u8 taskId); +void Task_ItemMenuAction_ToggleSelect(u8 taskId); +void Task_ItemMenuAction_Give(u8 taskId); +void Task_ItemMenuAction_Cancel(u8 taskId); void sub_810A324(u8 taskId); bool8 sub_810ADAC(void); void sub_810AF9C(u8 taskId); @@ -100,40 +101,40 @@ const struct BgTemplate gUnknown_8452CF4[2] = { } }; -const u8 *const gUnknown_8452CFC[] = { - gUnknown_84162CD, - gUnknown_84162DE, - gUnknown_84162D3 +const u8 *const sPocketNames[] = { + gText_Items2, + gText_KeyItems2, + gText_PokeBalls2 }; 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") + [ITEMMENUACTION_USE] = INCBIN_U16("graphics/item_menu/bagmap_0.bin"), + [ITEMMENUACTION_TOSS] = INCBIN_U16("graphics/item_menu/bagmap_1.bin"), + [ITEMMENUACTION_REGISTER] = INCBIN_U16("graphics/item_menu/bagmap_2.bin"), + [ITEMMENUACTION_GIVE] = INCBIN_U16("graphics/item_menu/bagmap_3.bin"), + [ITEMMENUACTION_CANCEL] = INCBIN_U16("graphics/item_menu/bagmap_4.bin"), + [ITEMMENUACTION_BATTLE_USE] = INCBIN_U16("graphics/item_menu/bagmap_5.bin"), + [ITEMMENUACTION_CHECK] = INCBIN_U16("graphics/item_menu/bagmap_6.bin"), + [ITEMMENUACTION_OPEN] = INCBIN_U16("graphics/item_menu/bagmap_7.bin"), + [ITEMMENUACTION_OPEN_BERRIES] = INCBIN_U16("graphics/item_menu/bagmap_8.bin"), + [ITEMMENUACTION_WALK] = INCBIN_U16("graphics/item_menu/bagmap_9.bin"), + [ITEMMENUACTION_DESELECT] = INCBIN_U16("graphics/item_menu/bagmap_A.bin"), + [ITEMMENUACTION_DUMMY] = 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}} + [ITEMMENUACTION_USE] = {gOtherText_Use, {.void_u8 = Task_ItemMenuAction_Use}}, + [ITEMMENUACTION_TOSS] = {gOtherText_Toss, {.void_u8 = Task_ItemMenuAction_Toss}}, + [ITEMMENUACTION_REGISTER] = {gOtherText_Register, {.void_u8 = Task_ItemMenuAction_ToggleSelect}}, + [ITEMMENUACTION_GIVE] = {gOtherText_Give, {.void_u8 = Task_ItemMenuAction_Give}}, + [ITEMMENUACTION_CANCEL] = {gFameCheckerText_Cancel, {.void_u8 = Task_ItemMenuAction_Cancel}}, + [ITEMMENUACTION_BATTLE_USE] = {gOtherText_Use, {.void_u8 = sub_810A324}}, + [ITEMMENUACTION_CHECK] = {gOtherText_Check, {.void_u8 = Task_ItemMenuAction_Use}}, + [ITEMMENUACTION_OPEN] = {gOtherText_Open, {.void_u8 = Task_ItemMenuAction_Use}}, + [ITEMMENUACTION_OPEN_BERRIES] = {gOtherText_Open, {.void_u8 = sub_810A324}}, + [ITEMMENUACTION_WALK] = {gOtherText_Walk, {.void_u8 = Task_ItemMenuAction_Use}}, + [ITEMMENUACTION_DESELECT] = {gOtherText_Deselect, {.void_u8 = Task_ItemMenuAction_ToggleSelect}}, + [ITEMMENUACTION_DUMMY] = {gString_Dummy, {.void_u8 = NULL}} }; extern const u8 gUnknown_8452F60[]; @@ -155,7 +156,7 @@ void GoToBagMenu(u8 location, u8 a1, MainCallback a2) gUnknown_203ACFC.location = location; if (a2 != NULL) gUnknown_203ACFC.bagCallback = a2; - gUnknown_203AD10->field_00 = 0; + gUnknown_203AD10->field_00 = NULL; gUnknown_203AD10->field_04 = 0xFF; gUnknown_203AD10->itemMenuIcon = 0; gUnknown_203AD10->field_05_6 = 0; @@ -578,7 +579,7 @@ void bag_menu_print_cursor(u8 y, u8 colorIdx) void sub_81087EC(void) { FillWindowPixelBuffer(2, PIXEL_FILL(0)); - sub_810B958(gUnknown_8452CFC[gUnknown_203ACFC.pocket], gUnknown_203ACFC.pocket); + sub_810B958(sPocketNames[gUnknown_203ACFC.pocket], gUnknown_203ACFC.pocket); } void sub_8108818(s32 itemIndex) @@ -731,3 +732,97 @@ void ItemMenu_StartFadeToExitCallback(u8 taskId) BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); gTasks[taskId].func = sub_8108B8C; } + +void sub_8108B8C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!gPaletteFade.active && FuncIsActiveTask(sub_8108CFC) != TRUE) + { + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + if (gUnknown_203AD10->field_00 != NULL) + SetMainCallback2(gUnknown_203AD10->field_00); + else + SetMainCallback2(gUnknown_203ACFC.bagCallback); + sub_8108978(); + sub_8108B04(); + DestroyTask(taskId); + } +} + +void sub_8108C10(void) +{ + u16 paldata = RGB_BLACK; + u8 taskId; + + LoadPalette(&paldata, 0x00, 0x02); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0x3F); + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + if (gUnknown_203ACFC.unk5 == 1) + { + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 240)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 0)); + } + else + { + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 240)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 160)); + taskId = CreateTask(sub_8108CFC, 0); + gTasks[taskId].data[0] = 192; + gTasks[taskId].data[1] = -16; + gUnknown_203ACFC.unk5 = 1; + } +} + +void sub_8108CB4(void) +{ + + u8 taskId = CreateTask(sub_8108CFC, 0); + gTasks[taskId].data[0] = -16; + gTasks[taskId].data[1] = 16; + gUnknown_203ACFC.unk5 = 0; +} + +void CB2_SetUpReshowBattleScreenAfterMenu(void) +{ + gUnknown_203ACFC.unk5 = 0; +} + +void sub_8108CFC(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + data[0] += data[1]; + if (data[0] > 160) + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 160)); + else + SetGpuReg(REG_OFFSET_WIN0V, data[0]); + if ((data[1] == 16 && data[0] == 160) || (data[1] == -16 && data[0] == 0)) + DestroyTask(taskId); +} + +void MoveItemSlotInList(struct ItemSlot * itemSlots_, u32 from, u32 to_) +{ + // dumb assignments needed to match + struct ItemSlot *itemSlots = itemSlots_; + u32 to = to_; + + if (from != to) + { + s16 i, count; + struct ItemSlot firstSlot = itemSlots[from]; + + if (to > from) + { + to--; + for (i = from, count = to; i < count; i++) + itemSlots[i] = itemSlots[i + 1]; + } + else + { + for (i = from, count = to; i > count; i--) + itemSlots[i] = itemSlots[i - 1]; + } + itemSlots[to] = firstSlot; + } +} diff --git a/src/item_pc.c b/src/item_pc.c index 217acc829..3134d9f6b 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -814,7 +814,7 @@ static void ItemPc_InsertItemIntoNewSlot(u8 taskId, u32 pos) ItemPc_MoveItemModeCancel(taskId, pos); else { - ItemMenu_MoveItemSlotToNewPositionInArray(gSaveBlock1Ptr->pcItems, data[1], pos); + MoveItemSlotInList(gSaveBlock1Ptr->pcItems, data[1], pos); DestroyListMenuTask(data[0], &sListMenuState.scroll, &sListMenuState.row); if (data[1] < pos) sListMenuState.row--; -- cgit v1.2.3 From 24e199fdfdce8e17f65578b7446c2a8368b3a0be Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 12:59:26 -0500 Subject: through sub_81090DC --- src/item_menu.c | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 136 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index 5c09791ae..7b42ddaae 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -22,7 +22,7 @@ struct BagMenuAlloc { - MainCallback field_00; + MainCallback exitCB; u8 field_04; u8 field_05_0:4; u8 itemMenuIcon:2; @@ -68,12 +68,26 @@ void sub_8108CFC(u8 taskId); void sub_8108C10(void); void sub_8108E54(void); void sub_8108F0C(u8 taskId); +void sub_81090DC(u8 taskId); +void sub_8109140(u8 a0); +u8 sub_8109168(u8 taskId, u8 pocketId); +void sub_81091D0(u8 taskId, s16 itemIndex, u8 a2); +void sub_81093B8(u8 taskId, s16 itemIndex); +void sub_8109BB8(u8 taskId); void Task_ItemMenuAction_Use(u8 taskId); void Task_ItemMenuAction_Toss(u8 taskId); void Task_ItemMenuAction_ToggleSelect(u8 taskId); void Task_ItemMenuAction_Give(u8 taskId); void Task_ItemMenuAction_Cancel(u8 taskId); +void sub_8109DB0(u8 taskId); +void sub_8109EA8(u8 taskId); void sub_810A324(u8 taskId); +void sub_810A370(u8 taskId); +void sub_810A468(u8 taskId); +void sub_810A568(u8 taskId); +void sub_810A720(u8 taskId); +void sub_810A940(u8 taskId); +void sub_810AB40(u8 taskId); bool8 sub_810ADAC(void); void sub_810AF9C(u8 taskId); void sub_810B1D4(u8 taskId); @@ -137,6 +151,7 @@ const struct MenuAction gUnknown_8452EB8[] = { [ITEMMENUACTION_DUMMY] = {gString_Dummy, {.void_u8 = NULL}} }; +extern const TaskFunc gUnknown_8452F34[]; extern const u8 gUnknown_8452F60[]; extern const u8 gUnknown_8452F66[]; extern const struct ScrollArrowsTemplate gUnknown_8452F6C; @@ -156,7 +171,7 @@ void GoToBagMenu(u8 location, u8 a1, MainCallback a2) gUnknown_203ACFC.location = location; if (a2 != NULL) gUnknown_203ACFC.bagCallback = a2; - gUnknown_203AD10->field_00 = NULL; + gUnknown_203AD10->exitCB = NULL; gUnknown_203AD10->field_04 = 0xFF; gUnknown_203AD10->itemMenuIcon = 0; gUnknown_203AD10->field_05_6 = 0; @@ -739,8 +754,8 @@ void sub_8108B8C(u8 taskId) if (!gPaletteFade.active && FuncIsActiveTask(sub_8108CFC) != TRUE) { DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - if (gUnknown_203AD10->field_00 != NULL) - SetMainCallback2(gUnknown_203AD10->field_00); + if (gUnknown_203AD10->exitCB != NULL) + SetMainCallback2(gUnknown_203AD10->exitCB); else SetMainCallback2(gUnknown_203ACFC.bagCallback); sub_8108978(); @@ -826,3 +841,120 @@ void MoveItemSlotInList(struct ItemSlot * itemSlots_, u32 from, u32 to_) itemSlots[to] = firstSlot; } } + +void sub_8108DC8(u8 pocketId) +{ + u16 i; + struct BagPocket * pocket = &gBagPockets[pocketId]; + BagPocketCompaction(pocket->itemSlots, pocket->capacity); + gUnknown_203AD10->nItems[pocketId] = 0; + for (i = 0; i < pocket->capacity; i++) + { + if (pocket->itemSlots[i].itemId == ITEM_NONE) + break; + gUnknown_203AD10->nItems[pocketId]++; + } + if (gUnknown_203AD10->nItems[pocketId] + 1 > 6) + gUnknown_203AD10->maxShowed[pocketId] = 6; + else + gUnknown_203AD10->maxShowed[pocketId] = gUnknown_203AD10->nItems[pocketId] + 1; +} + +void sub_8108E54(void) +{ + u8 i; + for (i = 0; i < 3; i++) + sub_8108DC8(i); +} + +void DisplayItemMessageInBag(u8 taskId, u8 fontId, const u8 * string, TaskFunc followUpFunc) +{ + s16 *data = gTasks[taskId].data; + data[10] = sub_810BA70(5); + FillWindowPixelBuffer(data[10], PIXEL_FILL(1)); + DisplayMessageAndContinueTask(taskId, data[10], 0x06D, 0x0D, fontId, GetTextSpeedSetting(), string, followUpFunc); + ScheduleBgCopyTilemapToVram(0); +} + +void ItemMenu_SetExitCallback(MainCallback cb) +{ + gUnknown_203AD10->exitCB = cb; +} + +u8 sub_8108EEC(u8 a0) +{ + return gUnknown_203ACFC.cursorPos[a0] + gUnknown_203ACFC.itemsAbove[a0]; +} + +void sub_8108F0C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 cursorPos; + u16 itemsAbove; + s32 input; + + if (gPaletteFade.active) + return; + if (FuncIsActiveTask(sub_8108CFC) == TRUE) + return; + if ((u8)sub_80BF72C() == TRUE) + return; + switch (sub_8109168(taskId, gUnknown_203ACFC.pocket)) + { + case 1: + sub_81091D0(taskId, -1, 0); + return; + case 2: + sub_81091D0(taskId, 1, 0); + return; + default: + if (JOY_NEW(SELECT_BUTTON) && gUnknown_203ACFC.location == 0) + { + ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); + if (cursorPos + itemsAbove != gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket]) + { + PlaySE(SE_SELECT); + sub_81093B8(taskId, cursorPos + itemsAbove); + return; + } + } + break; + } + input = ListMenu_ProcessInput(data[0]); + ListMenuGetScrollAndRow(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + switch (input) + { + case -1: + return; + case -2: + PlaySE(SE_SELECT); + gSpecialVar_ItemId = ITEM_NONE; + sub_8108CB4(); + gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; + break; + default: + PlaySE(SE_SELECT); + if (input == gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket]) + { + gSpecialVar_ItemId = ITEM_NONE; + sub_8108CB4(); + gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; + } + else + { + sub_8108978(); + bag_menu_print_cursor_(data[0], 2); + data[1] = input; + data[2] = BagGetQuantityByPocketPosition(gUnknown_203ACFC.pocket + 1, input); + gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, input); + gTasks[taskId].func = sub_81090DC; + } + break; + } +} + +void sub_81090DC(u8 taskId) +{ + sub_8109140(1); + gUnknown_8452F34[gUnknown_203ACFC.location](taskId); +} -- cgit v1.2.3 From 39dcda73c4eced02683dccb4319dac480f3300fe Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 14:59:07 -0500 Subject: through sub_810967C --- src/item_menu.c | 210 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 206 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index 7b42ddaae..66656f8bf 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -69,10 +69,15 @@ void sub_8108C10(void); void sub_8108E54(void); void sub_8108F0C(u8 taskId); void sub_81090DC(u8 taskId); -void sub_8109140(u8 a0); +void sub_8109140(u32 a0); u8 sub_8109168(u8 taskId, u8 pocketId); -void sub_81091D0(u8 taskId, s16 itemIndex, u8 a2); +void sub_81091D0(u8 taskId, s16 direction, bool16 a2); +void sub_8109298(u8 taskId); void sub_81093B8(u8 taskId, s16 itemIndex); +void sub_81094B0(u8 taskId); +void sub_81095AC(u8 taskId, u32 itemIndex); +void sub_810967C(u8 taskId, u32 itemIndex); +void sub_8109854(u8 a0); void sub_8109BB8(u8 taskId); void Task_ItemMenuAction_Use(u8 taskId); void Task_ItemMenuAction_Toss(u8 taskId); @@ -902,10 +907,10 @@ void sub_8108F0C(u8 taskId) switch (sub_8109168(taskId, gUnknown_203ACFC.pocket)) { case 1: - sub_81091D0(taskId, -1, 0); + sub_81091D0(taskId, -1, FALSE); return; case 2: - sub_81091D0(taskId, 1, 0); + sub_81091D0(taskId, 1, FALSE); return; default: if (JOY_NEW(SELECT_BUTTON) && gUnknown_203ACFC.location == 0) @@ -958,3 +963,200 @@ void sub_81090DC(u8 taskId) sub_8109140(1); gUnknown_8452F34[gUnknown_203ACFC.location](taskId); } + +void sub_810910C(u8 taskId) +{ + sub_8109140(0); + sub_8108888(); + sub_81088D8(); + gTasks[taskId].func = sub_8108F0C; +} + +void sub_8109140(u32 a0) +{ + SetBgTilemapPalette(1, 0, 14, 30, 6, a0 + 1); + ScheduleBgCopyTilemapToVram(1); +} + +u8 sub_8109168(u8 taskId, u8 pocketId) +{ + u8 lrState; + if (gUnknown_203AD10->field_05_0 != 0) + return 0; + lrState = GetLRKeysState(); + if (JOY_NEW(DPAD_LEFT) || lrState == 1) + { + if (pocketId == POCKET_ITEMS - 1) + return 0; + PlaySE(SE_BAG2); + return 1; + } + if (JOY_NEW(DPAD_RIGHT) || lrState == 2) + { + if (pocketId >= POCKET_POKE_BALLS - 1) + return 0; + PlaySE(SE_BAG2); + return 2; + } + return 0; +} + +void sub_81091D0(u8 taskId, s16 direction, bool16 a2) +{ + s16 *data = gTasks[taskId].data; + data[13] = 0; + data[12] = 0; + data[11] = direction; + if (!a2) + { + ClearWindowTilemap(0); + ClearWindowTilemap(1); + ClearWindowTilemap(2); + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + ScheduleBgCopyTilemapToVram(0); + DestroyItemMenuIcon(gUnknown_203AD10->itemMenuIcon ^ 1); + sub_8108978(); + } + FillBgTilemapBufferRect_Palette0(1, 0x02D, 11, 1, 18, 12); + ScheduleBgCopyTilemapToVram(1); + sub_8098528(gUnknown_203ACFC.pocket + direction); + SetTaskFuncWithFollowupFunc(taskId, sub_8109298, gTasks[taskId].func); +} + +void sub_8109298(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!MenuHelpers_LinkSomething() && !sub_810ADAC()) + { + switch (sub_8109168(taskId, gUnknown_203ACFC.pocket + data[11])) + { + case 1: + gUnknown_203ACFC.pocket += data[11]; + SwitchTaskToFollowupFunc(taskId); + sub_81091D0(taskId, -1, TRUE); + return; + case 2: + gUnknown_203ACFC.pocket += data[11]; + SwitchTaskToFollowupFunc(taskId); + sub_81091D0(taskId, 1, TRUE); + return; + } + } + switch (data[13]) + { + case 0: + if (data[12] != 0x7FFF) + { + data[12]++; + sub_8109854(data[12]); + if (data[12] == 12) + data[12] = 0x7FFF; + } + if (data[12] == 0x7FFF) + data[13]++; + break; + case 1: + gUnknown_203ACFC.pocket += data[11]; + sub_81087EC(); + sub_810842C(gUnknown_203ACFC.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + PutWindowTilemap(1); + PutWindowTilemap(2); + ScheduleBgCopyTilemapToVram(0); + sub_8108888(); + sub_81088D8(); + SwitchTaskToFollowupFunc(taskId); + break; + } +} + +void sub_81093B8(u8 taskId, s16 itemIndex) +{ + u16 itemsAbove; + u16 cursorPos; + s16 *data = gTasks[taskId].data; + ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); + ListMenuSetUnkIndicatorsStructField(data[0], 0x10, 1); + data[1] = itemIndex; + gUnknown_203AD10->field_04 = itemIndex; + StringCopy(gStringVar1, ItemId_GetName(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]))); + StringExpandPlaceholders(gStringVar4, gOtherText_WhereShouldTheStrVar1BePlaced); + FillWindowPixelBuffer(1, PIXEL_FILL(0)); + sub_810B8F0(1, 2, gStringVar4, 0, 3, 2, 0, 0, 0); + sub_80986A8(0, ListMenuGetYCoordForPrintingArrowCursor(data[0])); + sub_8098660(0); + sub_810899C(); + bag_menu_print_cursor_(data[0], 2); + gTasks[taskId].func = sub_81094B0; +} + +void sub_81094B0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s32 input; + u16 itemsAbove; + u16 cursorPos; + if ((u8)sub_80BF72C() == TRUE) + return; + input = ListMenu_ProcessInput(data[0]); + ListMenuGetScrollAndRow(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_80986A8(0, ListMenuGetYCoordForPrintingArrowCursor(data[0])); + if (JOY_NEW(SELECT_BUTTON)) + { + PlaySE(SE_SELECT); + gUnknown_203AD10->field_04 = 0xFF; + ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); + sub_81095AC(taskId, cursorPos + itemsAbove); + return; + } + switch (input) + { + case -1: + return; + case -2: + PlaySE(SE_SELECT); + gUnknown_203AD10->field_04 = 0xFF; + ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); + sub_810967C(taskId, cursorPos + itemsAbove); + break; + default: + PlaySE(SE_SELECT); + gUnknown_203AD10->field_04 = 0xFF; + sub_81095AC(taskId, input); + break; + } +} + +void sub_81095AC(u8 taskId, u32 itemIndex) +{ + s16 *data = gTasks[taskId].data; + if (data[1] == itemIndex || data[1] == itemIndex - 1) + { + sub_810967C(taskId, itemIndex); + } + else + { + MoveItemSlotInList(gBagPockets[gUnknown_203ACFC.pocket].itemSlots, data[1], itemIndex); + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + if (data[1] < itemIndex) + gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]--; + sub_810842C(gUnknown_203ACFC.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_8098660(1); + sub_81088D8(); + gTasks[taskId].func = sub_8108F0C; + } +} + +void sub_810967C(u8 taskId, u32 itemIndex) +{ + s16 *data = gTasks[taskId].data; + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + if (data[1] < itemIndex) + gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]--; + sub_810842C(gUnknown_203ACFC.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_8098660(1); + sub_81088D8(); + gTasks[taskId].func = sub_8108F0C; +} -- cgit v1.2.3 From 3a235a4fc078bf6474215507bb8e78e0ed8df733 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 16:12:55 -0500 Subject: through sub_8109890 --- src/item_menu.c | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index 66656f8bf..7d03c5170 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -3,12 +3,15 @@ #include "bag.h" #include "battle_controllers.h" #include "decompress.h" +#include "field_player_avatar.h" #include "graphics.h" #include "help_system.h" #include "item.h" #include "item_menu.h" #include "item_menu_icons.h" +#include "link.h" #include "list_menu.h" +#include "mail_data.h" #include "menu.h" #include "menu_indicators.h" #include "new_menu_helpers.h" @@ -40,6 +43,9 @@ EWRAM_DATA struct BagMenuAlloc * gUnknown_203AD10 = NULL; EWRAM_DATA void * gUnknown_203AD14 = NULL; EWRAM_DATA struct ListMenuItem * gUnknown_203AD18 = NULL; EWRAM_DATA u8 (*gUnknown_203AD1C)[19] = NULL; +EWRAM_DATA u8 gUnknown_203AD20[4] = {}; +EWRAM_DATA const u8 *gUnknown_203AD24 = NULL; +EWRAM_DATA u8 gUnknown_203AD28 = 0; void sub_8107F10(void); bool8 sub_8107F3C(void); @@ -156,6 +162,12 @@ const struct MenuAction gUnknown_8452EB8[] = { [ITEMMENUACTION_DUMMY] = {gString_Dummy, {.void_u8 = NULL}} }; +extern const u8 gUnknown_8452F18[][4]; +extern const u8 gUnknown_8452F24[]; +extern const u8 gUnknown_8452F28[][2]; +extern const u8 gUnknown_8452F2E[]; +extern const u8 gUnknown_8452F30[]; +extern const u8 gUnknown_8452F32[]; extern const TaskFunc gUnknown_8452F34[]; extern const u8 gUnknown_8452F60[]; extern const u8 gUnknown_8452F66[]; @@ -1160,3 +1172,132 @@ void sub_810967C(u8 taskId, u32 itemIndex) sub_81088D8(); gTasks[taskId].func = sub_8108F0C; } + +void sub_810971C(u16 cursorPos, const u8 *str) +{ + u8 r4; + u8 r5 = sub_810B9DC(6, 2); + CopyItemName(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, cursorPos), gStringVar1); + StringExpandPlaceholders(gStringVar4, str); + sub_810B8F0(r5, 2, gStringVar4, 0, 2, 1, 0, 0, 1); + r4 = sub_810B9DC(0, 0); + ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 3); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + sub_810B8F0(r4, 0, gStringVar4, 4, 10, 1, 0, 0, 1); + sub_8108940(); +} + +void sub_81097E4(s16 value, u8 ndigits) +{ + u8 r6 = sub_810BAD8(0); + FillWindowPixelBuffer(r6, PIXEL_FILL(1)); + ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEADING_ZEROS, ndigits); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + sub_810B8F0(r6, 0, gStringVar4, 4, 10, 1, 0, 0, 1); +} + +void sub_8109854(u8 a0) +{ + CopyToBgTilemapBufferRect(1, gUnknown_8452D08[12 - a0], 11, 13 - a0, 18, 1); + ScheduleBgCopyTilemapToVram(1); +} + +void sub_8109890(void) +{ + u8 r6; + u8 r4; + switch (gUnknown_203ACFC.location) + { + case 5: + case 7: + if (gSpecialVar_ItemId == ITEM_BERRY_POUCH) + { + gUnknown_203AD20[0] = ITEMMENUACTION_OPEN_BERRIES; + gUnknown_203AD20[1] = ITEMMENUACTION_CANCEL; + gUnknown_203AD24 = gUnknown_203AD20; + gUnknown_203AD28 = 2; + } + else if (ItemId_GetBattleUsage(gSpecialVar_ItemId)) + { + gUnknown_203AD24 = gUnknown_8452F30; + gUnknown_203AD28 = 2; + } + else + { + gUnknown_203AD24 = gUnknown_8452F32; + gUnknown_203AD28 = 1; + } + break; + case 6: + case 8: + gUnknown_203AD24 = gUnknown_8452F30; + gUnknown_203AD28 = 2; + break; + default: + if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE) + { + if (gSpecialVar_ItemId == ITEM_TM_CASE || gSpecialVar_ItemId == ITEM_BERRY_POUCH) + { + gUnknown_203AD24 = gUnknown_8452F2E; + gUnknown_203AD28 = 2; + } + else + { + if (gUnknown_203ACFC.pocket == POCKET_KEY_ITEMS - 1) + gUnknown_203AD28 = 1; + else + gUnknown_203AD28 = 2; + gUnknown_203AD24 = gUnknown_8452F28[gUnknown_203ACFC.pocket]; + } + } + else + { + switch (gUnknown_203ACFC.pocket) + { + case POCKET_ITEMS - 1: + gUnknown_203AD28 = 4; + if (ItemIsMail(gSpecialVar_ItemId) == TRUE) + gUnknown_203AD24 = gUnknown_8452F24; + else + gUnknown_203AD24 = gUnknown_8452F18[gUnknown_203ACFC.pocket]; + break; + case POCKET_KEY_ITEMS - 1: + gUnknown_203AD24 = gUnknown_203AD20; + gUnknown_203AD28 = 3; + gUnknown_203AD20[2] = ITEMMENUACTION_CANCEL; + if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId) + gUnknown_203AD20[1] = ITEMMENUACTION_DESELECT; + else + gUnknown_203AD20[1] = ITEMMENUACTION_REGISTER; + if (gSpecialVar_ItemId == ITEM_TM_CASE || gSpecialVar_ItemId == ITEM_BERRY_POUCH) + gUnknown_203AD20[0] = ITEMMENUACTION_OPEN; + else if (gSpecialVar_ItemId == ITEM_BICYCLE && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE | PLAYER_AVATAR_FLAG_MACH_BIKE)) + gUnknown_203AD20[0] = ITEMMENUACTION_WALK; + else + gUnknown_203AD20[0] = ITEMMENUACTION_USE; + break; + case POCKET_POKE_BALLS - 1: + gUnknown_203AD24 = gUnknown_8452F18[gUnknown_203ACFC.pocket]; + gUnknown_203AD28 = 3; + break; + } + } + } + r6 = sub_810B9DC(10, gUnknown_203AD28 - 1); + AddItemMenuActionTextPrinters( + r6, + 2, + GetMenuCursorDimensionByFont(2, 0), + 2, + GetFontAttribute(2, FONTATTR_LETTER_SPACING), + GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, + gUnknown_203AD28, + gUnknown_8452EB8, + gUnknown_203AD24 + ); + Menu_InitCursor(r6, 2, 0, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, gUnknown_203AD28, 0); + r4 = sub_810B9DC(6, 0); + CopyItemName(gSpecialVar_ItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_StrVar1); + sub_810B8F0(r4, 2, gStringVar4, 0, 2, 1, 0, 0, 1); +} -- cgit v1.2.3 From 0ed743a582a04f178d138d51159426179c969288 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 19:54:25 -0500 Subject: through sub_810A554 --- src/item_menu.c | 486 ++++++++++++++++++++++++++++++++++++++++++++++++++--- src/menu_helpers.c | 2 +- 2 files changed, 468 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index 7d03c5170..1e2cbfa3b 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -2,6 +2,7 @@ #include "gflib.h" #include "bag.h" #include "battle_controllers.h" +#include "berry_pouch.h" #include "decompress.h" #include "field_player_avatar.h" #include "graphics.h" @@ -16,8 +17,11 @@ #include "menu_indicators.h" #include "new_menu_helpers.h" #include "overworld.h" +#include "party_menu.h" +#include "pokemon_storage_system.h" #include "scanline_effect.h" #include "strings.h" +#include "tm_case.h" #include "constants/items.h" #include "constants/songs.h" @@ -85,16 +89,29 @@ void sub_81095AC(u8 taskId, u32 itemIndex); void sub_810967C(u8 taskId, u32 itemIndex); void sub_8109854(u8 a0); void sub_8109BB8(u8 taskId); +void sub_8109BE4(u8 taskId); void Task_ItemMenuAction_Use(u8 taskId); void Task_ItemMenuAction_Toss(u8 taskId); +void sub_8109D38(u8 taskId); +void sub_8109DB0(u8 taskId); +void sub_8109DEC(u8 taskId); +void sub_8109EA8(u8 taskId); +void sub_8109F44(u8 taskId); void Task_ItemMenuAction_ToggleSelect(u8 taskId); void Task_ItemMenuAction_Give(u8 taskId); +void sub_810A170(u8 taskId); void Task_ItemMenuAction_Cancel(u8 taskId); -void sub_8109DB0(u8 taskId); -void sub_8109EA8(u8 taskId); +void sub_810A18C(u8 taskId); +void sub_810A1D0(u8 taskId); void sub_810A324(u8 taskId); void sub_810A370(u8 taskId); +void sub_810A434(void); +void sub_810A448(void); +void sub_810A45C(void); void sub_810A468(u8 taskId); +void sub_810A52C(void); +void sub_810A540(void); +void sub_810A554(void); void sub_810A568(u8 taskId); void sub_810A720(u8 taskId); void sub_810A940(u8 taskId); @@ -162,17 +179,99 @@ const struct MenuAction gUnknown_8452EB8[] = { [ITEMMENUACTION_DUMMY] = {gString_Dummy, {.void_u8 = NULL}} }; -extern const u8 gUnknown_8452F18[][4]; -extern const u8 gUnknown_8452F24[]; -extern const u8 gUnknown_8452F28[][2]; -extern const u8 gUnknown_8452F2E[]; -extern const u8 gUnknown_8452F30[]; -extern const u8 gUnknown_8452F32[]; -extern const TaskFunc gUnknown_8452F34[]; -extern const u8 gUnknown_8452F60[]; -extern const u8 gUnknown_8452F66[]; -extern const struct ScrollArrowsTemplate gUnknown_8452F6C; -extern const u8 gUnknown_8452F7C[]; +const u8 gUnknown_8452F18[][4] = { + { + ITEMMENUACTION_USE, + ITEMMENUACTION_GIVE, + ITEMMENUACTION_TOSS, + ITEMMENUACTION_CANCEL + }, { + ITEMMENUACTION_USE, + ITEMMENUACTION_REGISTER, + ITEMMENUACTION_CANCEL, + ITEMMENUACTION_DUMMY + }, { + ITEMMENUACTION_GIVE, + ITEMMENUACTION_TOSS, + ITEMMENUACTION_CANCEL, + ITEMMENUACTION_DUMMY + } +}; + +const u8 gUnknown_8452F24[] = { + ITEMMENUACTION_CHECK, + ITEMMENUACTION_GIVE, + ITEMMENUACTION_TOSS, + ITEMMENUACTION_CANCEL +}; + +const u8 gUnknown_8452F28[][2] = { + { + ITEMMENUACTION_GIVE, + ITEMMENUACTION_CANCEL + }, { + ITEMMENUACTION_CANCEL, + ITEMMENUACTION_DUMMY + }, { + ITEMMENUACTION_GIVE, + ITEMMENUACTION_CANCEL + } +}; + +const u8 gUnknown_8452F2E[] = { + ITEMMENUACTION_OPEN, + ITEMMENUACTION_CANCEL +}; + +const u8 gUnknown_8452F30[] = { + ITEMMENUACTION_BATTLE_USE, + ITEMMENUACTION_CANCEL +}; + +const u8 gUnknown_8452F32[] = { + ITEMMENUACTION_CANCEL, + ITEMMENUACTION_DUMMY +}; + +const TaskFunc gUnknown_8452F34[] = { + sub_8109BB8, + sub_810A370, + sub_810A568, + sub_810AB40, + sub_810A468, + sub_8109BB8, + NULL +}; + +const struct YesNoFuncTable gUnknown_8452F50 = { + sub_8109EA8, + sub_8109DB0 +}; + +const struct YesNoFuncTable gUnknown_8452F58 = { + sub_810A940, + sub_810A720 +}; + +const u8 gUnknown_8452F60[] = _("{COLOR_HIGHLIGHT_SHADOW RED TRANSPARENT GREEN}"); + +const u8 gUnknown_8452F66[] = _("{COLOR_HIGHLIGHT_SHADOW LIGHT_GRAY TRANSPARENT BLACK}"); + +const struct ScrollArrowsTemplate gUnknown_8452F6C = { + .firstArrowType = SCROLL_ARROW_LEFT, + .firstX = 8, + .firstY = 72, + .secondArrowType = SCROLL_ARROW_RIGHT, + .secondX = 72, + .secondY = 72, + .fullyUpThreshold = 0, + .fullyDownThreshold = 2, + .tileTag = 111, + .palTag = 111, + .palNum = 0, +}; + +const u8 gUnknown_8452F7C[] = INCBIN_U8("graphics/interface/select_button.4bpp"); void GoToBagMenu(u8 location, u8 a1, MainCallback a2) { @@ -620,7 +719,7 @@ void sub_8108818(s32 itemIndex) if (itemIndex != gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket]) description = ItemId_GetDescription(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemIndex)); else - description = gUnknown_84162F5; + description = gText_CloseBag; FillWindowPixelBuffer(1, PIXEL_FILL(0)); sub_810B8F0(1, 2, description, 0, 3, 2, 0, 0, 0); } @@ -941,9 +1040,9 @@ void sub_8108F0C(u8 taskId) ListMenuGetScrollAndRow(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); switch (input) { - case -1: + case LIST_NOTHING_CHOSEN: return; - case -2: + case LIST_CANCEL: PlaySE(SE_SELECT); gSpecialVar_ItemId = ITEM_NONE; sub_8108CB4(); @@ -1123,9 +1222,9 @@ void sub_81094B0(u8 taskId) } switch (input) { - case -1: + case LIST_NOTHING_CHOSEN: return; - case -2: + case LIST_CANCEL: PlaySE(SE_SELECT); gUnknown_203AD10->field_04 = 0xFF; ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); @@ -1202,7 +1301,7 @@ void sub_8109854(u8 a0) ScheduleBgCopyTilemapToVram(1); } -void sub_8109890(void) +void sub_8109890(u8 taskId) { u8 r6; u8 r4; @@ -1301,3 +1400,352 @@ void sub_8109890(void) StringExpandPlaceholders(gStringVar4, gOtherText_StrVar1); sub_810B8F0(r4, 2, gStringVar4, 0, 2, 1, 0, 0, 1); } + +void sub_8109BB8(u8 taskId) +{ + sub_8109890(taskId); + gTasks[taskId].func = sub_8109BE4; +} + +void sub_8109BE4(u8 taskId) +{ + s8 input; + if ((u8)sub_80BF72C() != TRUE) + { + input = Menu_ProcessInputNoWrapAround(); + switch (input) + { + case -1: + PlaySE(SE_SELECT); + gUnknown_8452EB8[ITEMMENUACTION_CANCEL].func.void_u8(taskId); + break; + case -2: + break; + default: + PlaySE(SE_SELECT); + gUnknown_8452EB8[gUnknown_203AD24[input]].func.void_u8(taskId); + break; + } + } +} + +void Task_ItemMenuAction_Use(u8 taskId) +{ + if (ItemId_GetFieldFunc(gSpecialVar_ItemId) != NULL) + { + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gSpecialVar_ItemId) == 1) + sub_810A170(taskId); + else + ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId); + } +} + +void Task_ItemMenuAction_Toss(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + ClearWindowTilemap(sub_810BAD8(10)); + ClearWindowTilemap(sub_810BAD8(6)); + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + data[8] = 1; + if (data[2] == 1) + { + sub_8109D38(taskId); + } + else + { + sub_810971C(data[1], gText_TossOutHowManyStrVar1s); + gTasks[taskId].func = sub_8109DEC; + } +} + +void sub_8109D38(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_ThrowAwayStrVar2OfThisItemQM); + sub_810B8F0(sub_810B9DC(6, 1), 2, gStringVar4, 0, 2, 1, 0, 0, 1); + sub_810BAE8(taskId, &gUnknown_8452F50); +} + +void sub_8109DB0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + sub_810BA3C(6); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + bag_menu_print_cursor_(data[0], 1); + sub_810910C(taskId); +} + +void sub_8109DEC(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) + { + sub_81097E4(data[8], 3); + } + else if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + ClearWindowTilemap(sub_810BAD8(6)); + sub_810BA3C(6); + sub_810BA3C(0); + ScheduleBgCopyTilemapToVram(0); + sub_8108978(); + sub_8109D38(taskId); + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810BA3C(6); + sub_810BA3C(0); + PutWindowTilemap(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + bag_menu_print_cursor_(data[0], 1); + sub_8108978(); + sub_810910C(taskId); + } +} + +void sub_8109EA8(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + sub_810BA3C(6); + CopyItemName(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]), gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_ThrewAwayStrVar2StrVar1s); + sub_810B8F0(sub_810B9DC(6, 3), 2, gStringVar4, 0, 2, 1, 0, 0, 1); + gTasks[taskId].func = sub_8109F44; +} + +void sub_8109F44(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + RemoveBagItem(gSpecialVar_ItemId, data[8]); + sub_810BA3C(6); + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_8108DC8(gUnknown_203ACFC.pocket); + sub_81089F4(gUnknown_203ACFC.pocket); + sub_810842C(gUnknown_203ACFC.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + bag_menu_print_cursor_(data[0], 1); + sub_810910C(taskId); + } +} + +void Task_ItemMenuAction_ToggleSelect(u8 taskId) +{ + u16 itemId; + s16 *data = gTasks[taskId].data; + itemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]); + if (gSaveBlock1Ptr->registeredItem == itemId) + gSaveBlock1Ptr->registeredItem = ITEM_NONE; + else + gSaveBlock1Ptr->registeredItem = itemId; + + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_810842C(gUnknown_203ACFC.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + CopyWindowToVram(0, 1); + Task_ItemMenuAction_Cancel(taskId); +} + +void Task_ItemMenuAction_Give(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 itemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]); + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + CopyWindowToVram(0, 1); + if (!CanWriteMailHere(itemId)) + DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, sub_810A1D0); + else if (!itemid_is_unique(itemId)) + { + if (CalculatePlayerPartyCount() == 0) + { + sub_810A170(taskId); + } + else + { + gUnknown_203AD10->exitCB = CB2_ChooseMonToGiveItem; + gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; + } + } + else + sub_810A18C(taskId); +} + +void sub_810A170(u8 taskId) +{ + DisplayItemMessageInBag(taskId, 2, gText_ThereIsNoPokemon, sub_810A1D0); +} + +void sub_810A18C(u8 taskId) +{ + CopyItemName(gSpecialVar_ItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_ItemCantBeHeld); + DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1D0); +} + +void sub_810A1D0(u8 taskId) +{ + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810A1F8(taskId); + } +} + +void sub_810A1F8(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + sub_810BA9C(5); + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_8108DC8(gUnknown_203ACFC.pocket); + sub_81089F4(gUnknown_203ACFC.pocket); + sub_810842C(gUnknown_203ACFC.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + ScheduleBgCopyTilemapToVram(0); + bag_menu_print_cursor_(data[0], 1); + sub_810910C(taskId); +} + +void sub_810A288(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 itemsAbove; + u16 cursorPos; + ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); + sub_8108818(cursorPos + itemsAbove); + PutWindowTilemap(0); + ScheduleBgCopyTilemapToVram(0); + bag_menu_print_cursor_(data[0], 1); + sub_810910C(taskId); +} + +void Task_ItemMenuAction_Cancel(u8 taskId) +{ + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + bag_menu_print_cursor_(gTasks[taskId].data[0], 1); + sub_810910C(taskId); +} + +void sub_810A324(u8 taskId) +{ + if (ItemId_GetBattleFunc(gSpecialVar_ItemId) != NULL) + { + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + CopyWindowToVram(0, 1); + ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId); + } +} + +void sub_810A370(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 itemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]); + if (!CanWriteMailHere(itemId)) + { + DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, sub_810A1D0); + } + else if (itemId == ITEM_TM_CASE) + { + ItemMenu_SetExitCallback(sub_810A434); + ItemMenu_StartFadeToExitCallback(taskId); + } + else if (itemId == ITEM_BERRY_POUCH) + { + ItemMenu_SetExitCallback(sub_810A448); + ItemMenu_StartFadeToExitCallback(taskId); + } + else if (gUnknown_203ACFC.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(itemId)) + { + sub_8108CB4(); + gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; + } + else + { + sub_810A18C(taskId); + } +} + +void sub_810A434(void) +{ + InitTMCase(1, sub_810A45C, FALSE); +} + +void sub_810A448(void) +{ + InitBerryPouch(1, sub_810A45C, FALSE); +} + +void sub_810A45C(void) +{ + CB2_SelectBagItemToGive(); +} + +void sub_810A468(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 itemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]); + if (ItemIsMail(itemId) == TRUE) + { + DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, sub_810A1D0); + } + else if (itemId == ITEM_TM_CASE) + { + ItemMenu_SetExitCallback(sub_810A52C); + ItemMenu_StartFadeToExitCallback(taskId); + } + else if (itemId == ITEM_BERRY_POUCH) + { + ItemMenu_SetExitCallback(sub_810A540); + ItemMenu_StartFadeToExitCallback(taskId); + } + else if (gUnknown_203ACFC.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(itemId)) + { + sub_8108CB4(); + gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; + } + else + { + sub_810A18C(taskId); + } +} + +void sub_810A52C(void) +{ + InitTMCase(3, sub_810A554, FALSE); +} + +void sub_810A540(void) +{ + InitBerryPouch(3, sub_810A554, FALSE); +} + +void sub_810A554(void) +{ + GoToBagMenu(4, 3, sub_808CE60); +} diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 905e3c1ea..53b9992a2 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -107,7 +107,7 @@ bool8 itemid_link_can_give_berry(u16 itemId) return FALSE; } -bool8 itemid_80BF6D8_mail_related(u16 itemId) +bool8 CanWriteMailHere(u16 itemId) { if (IsUpdateLinkStateCBActive() != TRUE && InUnionRoom() != TRUE) return TRUE; -- cgit v1.2.3 From c9cb5d931c7609bdb2ce4ad15d60993efb2d2fe3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 20:40:33 -0500 Subject: through sub_810A834 --- src/item_menu.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index 1e2cbfa3b..b73d9f1a8 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -15,6 +15,7 @@ #include "mail_data.h" #include "menu.h" #include "menu_indicators.h" +#include "money.h" #include "new_menu_helpers.h" #include "overworld.h" #include "party_menu.h" @@ -113,7 +114,15 @@ void sub_810A52C(void); void sub_810A540(void); void sub_810A554(void); void sub_810A568(u8 taskId); +void sub_810A654(void); +void sub_810A668(void); +void sub_810A67C(void); +void sub_810A690(u8 taskId); +void sub_810A70C(u8 taskId); void sub_810A720(u8 taskId); +void sub_810A770(u8 taskId); +void sub_810A834(s32 price); +void sub_810A85C(u8 taskId); void sub_810A940(u8 taskId); void sub_810AB40(u8 taskId); bool8 sub_810ADAC(void); @@ -1749,3 +1758,100 @@ void sub_810A554(void) { GoToBagMenu(4, 3, sub_808CE60); } + +void sub_810A568(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (gSpecialVar_ItemId == ITEM_TM_CASE) + { + ItemMenu_SetExitCallback(sub_810A654); + ItemMenu_StartFadeToExitCallback(taskId); + } + else if (gSpecialVar_ItemId == ITEM_BERRY_POUCH) + { + ItemMenu_SetExitCallback(sub_810A668); + ItemMenu_StartFadeToExitCallback(taskId); + } + else if (itemid_get_market_price(gSpecialVar_ItemId) == 0) + { + CopyItemName(gSpecialVar_ItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_OhNoICantBuyThat); + DisplayItemMessageInBag(taskId, sub_80BF8E4(), gStringVar4, sub_810A1F8); + } + else + { + data[8] = 1; + if (data[2] == 1) + { + sub_810BB40(); + sub_810A690(taskId); + } + else + { + if (data[2] > 99) + data[2] = 99; + CopyItemName(gSpecialVar_ItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_HowManyWouldYouLikeToSell); + DisplayItemMessageInBag(taskId, sub_80BF8E4(), gStringVar4, sub_810A770); + } + } +} + +void sub_810A654(void) +{ + InitTMCase(2, sub_810A67C, FALSE); +} + +void sub_810A668(void) +{ + InitBerryPouch(2, sub_810A67C, FALSE); +} + +void sub_810A67C(void) +{ + GoToBagMenu(2, 3, CB2_ReturnToField); +} + +void sub_810A690(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + StringExpandPlaceholders(gStringVar4, gText_ICanPayThisMuch_WouldThatBeOkay); + DisplayItemMessageInBag(taskId, sub_80BF8E4(), gStringVar4, sub_810A70C); +} + +void sub_810A70C(u8 taskId) +{ + sub_810BB14(taskId, &gUnknown_8452F58); +} + +void sub_810A720(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + sub_810BA3C(2); + sub_810BA9C(5); + PutWindowTilemap(2); + PutWindowTilemap(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + bag_menu_print_cursor_(data[0], 1); + sub_810910C(taskId); +} + +void sub_810A770(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u8 r4 = sub_810B9DC(0, 1); + ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + sub_810B8F0(r4, 0, gStringVar4, 4, 10, 1, 0, 0xFF, 1); + sub_810A834(itemid_get_market_price(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1])) / 2 * data[8]); + sub_810BB40(); + sub_8108908(); + gTasks[taskId].func = sub_810A85C; +} + +void sub_810A834(s32 amount) +{ + PrintMoneyAmount(sub_810BAD8(0), 56, 10, amount, 0); +} -- cgit v1.2.3 From 4c62d0f35f58cd5720997ffb1241d5a08dd90620 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 22:14:54 -0500 Subject: through InitTutorialBag --- src/battle_controller_oak_old_man.c | 2 +- src/item_menu.c | 238 ++++++++++++++++++++++++++++++++++++ 2 files changed, 239 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/battle_controller_oak_old_man.c b/src/battle_controller_oak_old_man.c index 6ae50d058..a027808af 100644 --- a/src/battle_controller_oak_old_man.c +++ b/src/battle_controller_oak_old_man.c @@ -381,7 +381,7 @@ static void OpenBagAndChooseItem(void) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) sub_8107ECC(); else - sub_810AF74(); + InitTutorialBag(); } } diff --git a/src/item_menu.c b/src/item_menu.c index b73d9f1a8..8efb9cd6f 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -4,15 +4,19 @@ #include "battle_controllers.h" #include "berry_pouch.h" #include "decompress.h" +#include "event_scripts.h" +#include "event_object_80688E4.h" #include "field_player_avatar.h" #include "graphics.h" #include "help_system.h" #include "item.h" #include "item_menu.h" #include "item_menu_icons.h" +#include "item_use.h" #include "link.h" #include "list_menu.h" #include "mail_data.h" +#include "map_name_popup.h" #include "menu.h" #include "menu_indicators.h" #include "money.h" @@ -21,6 +25,8 @@ #include "party_menu.h" #include "pokemon_storage_system.h" #include "scanline_effect.h" +#include "script.h" +#include "shop.h" #include "strings.h" #include "tm_case.h" #include "constants/items.h" @@ -43,6 +49,17 @@ struct BagMenuAlloc u8 data[4]; }; +struct BagSlots +{ + struct ItemSlot bagPocket_Items[BAG_ITEMS_COUNT]; + struct ItemSlot bagPocket_KeyItems[BAG_KEYITEMS_COUNT]; + struct ItemSlot bagPocket_PokeBalls[BAG_POKEBALLS_COUNT]; + u16 itemsAbove[3]; + u16 cursorPos[3]; + u16 registeredItem; + u16 pocket; +}; + EWRAM_DATA struct BagStruct gUnknown_203ACFC = {}; EWRAM_DATA struct BagMenuAlloc * gUnknown_203AD10 = NULL; EWRAM_DATA void * gUnknown_203AD14 = NULL; @@ -51,6 +68,7 @@ EWRAM_DATA u8 (*gUnknown_203AD1C)[19] = NULL; EWRAM_DATA u8 gUnknown_203AD20[4] = {}; EWRAM_DATA const u8 *gUnknown_203AD24 = NULL; EWRAM_DATA u8 gUnknown_203AD28 = 0; +EWRAM_DATA struct BagSlots * gUnknown_203AD2C = NULL; void sub_8107F10(void); bool8 sub_8107F3C(void); @@ -124,7 +142,11 @@ void sub_810A770(u8 taskId); void sub_810A834(s32 price); void sub_810A85C(u8 taskId); void sub_810A940(u8 taskId); +void sub_810A9D4(u8 taskId); +void sub_810AAF4(u8 taskId); void sub_810AB40(u8 taskId); +void sub_810AB88(u8 taskId); +void sub_810AC40(u8 taskId); bool8 sub_810ADAC(void); void sub_810AF9C(u8 taskId); void sub_810B1D4(u8 taskId); @@ -1855,3 +1877,219 @@ void sub_810A834(s32 amount) { PrintMoneyAmount(sub_810BAD8(0), 56, 10, amount, 0); } + +void sub_810A85C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) + { + sub_81097E4(data[8], 2); + sub_810A834(itemid_get_market_price(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1])) / 2 * data[8]); + } + else if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810BA3C(0); + PutWindowTilemap(0); + ScheduleBgCopyTilemapToVram(0); + sub_8108978(); + sub_810A690(taskId); + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810BA3C(0); + sub_810BA3C(2); + sub_810BA9C(5); + PutWindowTilemap(2); + PutWindowTilemap(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + sub_8108978(); + bag_menu_print_cursor_(data[0], 1); + sub_810910C(taskId); + } +} + +void sub_810A940(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + PutWindowTilemap(0); + ScheduleBgCopyTilemapToVram(0); + CopyItemName(gSpecialVar_ItemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + StringExpandPlaceholders(gStringVar4, gText_TurnedOverItemsWorthYen); + DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A9D4); +} + +void sub_810A9D4(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + PlaySE(SE_SHOP); + RemoveBagItem(gSpecialVar_ItemId, data[8]); + AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]); + RecordItemPurchase(gSpecialVar_ItemId, data[8], 2); + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_8108DC8(gUnknown_203ACFC.pocket); + sub_81089F4(gUnknown_203ACFC.pocket); + gUnknown_203AD10->field_05_6 = 1; + sub_810842C(gUnknown_203ACFC.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + bag_menu_print_cursor_(data[0], 2); + sub_810BB74(sub_810BAD8(2)); + PrintMoneyAmountInMoneyBox(sub_810BAD8(2), GetMoney(&gSaveBlock1Ptr->money), 0); + gTasks[taskId].func = sub_810AAF4; +} + +void sub_810AAF4(u8 taskId) +{ + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810BA3C(2); + PutWindowTilemap(2); + gUnknown_203AD10->field_05_6 = 0; + sub_810A1F8(taskId); + } +} + +void sub_810AB40(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + data[8] = 1; + if (data[2] == 1) + { + sub_810AC40(taskId); + } + else + { + sub_810971C(data[1], gText_DepositHowManyStrVars1); + gTasks[taskId].func = sub_810AB88; + } +} + +void sub_810AB88(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) + { + sub_81097E4(data[8], 3); + } + else if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + ClearWindowTilemap(sub_810BAD8(6)); + sub_810BA3C(6); + sub_810BA3C(0); + ScheduleBgCopyTilemapToVram(0); + sub_8108978(); + sub_810AC40(taskId); + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810BA3C(6); + sub_810BA3C(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + bag_menu_print_cursor_(data[0], 1); + sub_8108978(); + sub_810910C(taskId); + } +} + +void sub_810AC40(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (AddPCItem(gSpecialVar_ItemId, data[8]) == TRUE) + { + ItemUse_SetQuestLogEvent(28, 0, gSpecialVar_ItemId, 0xFFFF); + CopyItemName(gSpecialVar_ItemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_DepositedStrVar2StrVar1s); + sub_810B8F0(sub_810B9DC(6, 3), 2, gStringVar4, 0, 2, 1, 0, 0, 1); + gTasks[taskId].func = sub_8109F44; + } + else + { + DisplayItemMessageInBag(taskId, 2, gText_NoRoomToStoreItems, sub_810A1D0); + } +} + +bool8 UseRegisteredKeyItemOnField(void) +{ + u8 taskId; + if (InUnionRoom() == TRUE) + return FALSE; + DismissMapNamePopup(); + ChangeBgY(0, 0, 0); + if (gSaveBlock1Ptr->registeredItem != ITEM_NONE) + { + if (CheckBagHasItem(gSaveBlock1Ptr->registeredItem, 1) == TRUE) + { + ScriptContext2_Enable(); + FreezeObjectEvents(); + sub_805C270(); + sub_805C780(); + gSpecialVar_ItemId = gSaveBlock1Ptr->registeredItem; + taskId = CreateTask(ItemId_GetFieldFunc(gSaveBlock1Ptr->registeredItem), 8); + gTasks[taskId].data[3] = 1; + return TRUE; + } + gSaveBlock1Ptr->registeredItem = ITEM_NONE; + } + ScriptContext1_SetupScript(gUnknown_81A77A0); + return TRUE; +} + +bool8 sub_810ADAC(void) +{ + if (gUnknown_203ACFC.location == 6 || gUnknown_203ACFC.location == 8 || gUnknown_203ACFC.location == 7 || gUnknown_203ACFC.location == 9 || gUnknown_203ACFC.location == 10) + return TRUE; + return FALSE; +} + +void BackUpPlayerBag(void) +{ + u32 i; + gUnknown_203AD2C = AllocZeroed(sizeof(struct BagSlots)); + memcpy(gUnknown_203AD2C->bagPocket_Items, gSaveBlock1Ptr->bagPocket_Items, BAG_ITEMS_COUNT * sizeof(struct ItemSlot)); + memcpy(gUnknown_203AD2C->bagPocket_KeyItems, gSaveBlock1Ptr->bagPocket_KeyItems, BAG_KEYITEMS_COUNT * sizeof(struct ItemSlot)); + memcpy(gUnknown_203AD2C->bagPocket_PokeBalls, gSaveBlock1Ptr->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT * sizeof(struct ItemSlot)); + gUnknown_203AD2C->registeredItem = gSaveBlock1Ptr->registeredItem; + gUnknown_203AD2C->pocket = gUnknown_203ACFC.pocket; + for (i = 0; i < 3; i++) + { + gUnknown_203AD2C->itemsAbove[i] = gUnknown_203ACFC.itemsAbove[i]; + gUnknown_203AD2C->cursorPos[i] = gUnknown_203ACFC.cursorPos[i]; + } + ClearItemSlots(gSaveBlock1Ptr->bagPocket_Items, BAG_ITEMS_COUNT); + ClearItemSlots(gSaveBlock1Ptr->bagPocket_KeyItems, BAG_KEYITEMS_COUNT); + ClearItemSlots(gSaveBlock1Ptr->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT); + gSaveBlock1Ptr->registeredItem = ITEM_NONE; + sub_81089BC(); +} + +void RestorePlayerBag(void) +{ + u32 i; + memcpy(gSaveBlock1Ptr->bagPocket_Items, gUnknown_203AD2C->bagPocket_Items, BAG_ITEMS_COUNT * sizeof(struct ItemSlot)); + memcpy(gSaveBlock1Ptr->bagPocket_KeyItems, gUnknown_203AD2C->bagPocket_KeyItems, BAG_KEYITEMS_COUNT * sizeof(struct ItemSlot)); + memcpy(gSaveBlock1Ptr->bagPocket_PokeBalls, gUnknown_203AD2C->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT * sizeof(struct ItemSlot)); + gSaveBlock1Ptr->registeredItem = gUnknown_203AD2C->registeredItem; + gUnknown_203ACFC.pocket = gUnknown_203AD2C->pocket; + for (i = 0; i < 3; i++) + { + gUnknown_203ACFC.itemsAbove[i] = gUnknown_203AD2C->itemsAbove[i]; + gUnknown_203ACFC.cursorPos[i] = gUnknown_203AD2C->cursorPos[i]; + } + Free(gUnknown_203AD2C); +} + +void InitTutorialBag(void) +{ + BackUpPlayerBag(); + AddBagItem(ITEM_POTION, 1); + AddBagItem(ITEM_POKE_BALL, 1); + GoToBagMenu(6, 0, SetCB2ToReshowScreenAfterMenu2); +} -- cgit v1.2.3 From a698f43f26f16fed3e7d0bd377b2ffac9b52e78d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 19 Jan 2020 11:04:37 -0500 Subject: Finish dism of item_menu --- src/item_menu.c | 297 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 297 insertions(+) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index 8efb9cd6f..a2a6f865b 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -15,6 +15,7 @@ #include "item_use.h" #include "link.h" #include "list_menu.h" +#include "load_save.h" #include "mail_data.h" #include "map_name_popup.h" #include "menu.h" @@ -28,6 +29,7 @@ #include "script.h" #include "shop.h" #include "strings.h" +#include "teachy_tv.h" #include "tm_case.h" #include "constants/items.h" #include "constants/songs.h" @@ -149,6 +151,8 @@ void sub_810AB88(u8 taskId); void sub_810AC40(u8 taskId); bool8 sub_810ADAC(void); void sub_810AF9C(u8 taskId); +void sub_810B070(u8 taskId); +void sub_810B0AC(u8 taskId); void sub_810B1D4(u8 taskId); void sub_810B378(u8 taskId); void sub_810B4BC(u8 taskId); @@ -2093,3 +2097,296 @@ void InitTutorialBag(void) AddBagItem(ITEM_POKE_BALL, 1); GoToBagMenu(6, 0, SetCB2ToReshowScreenAfterMenu2); } + +void sub_810AF9C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!gPaletteFade.active) + { + switch (data[8]) + { + case 102: + case 204: + PlaySE(SE_BAG2); + sub_81091D0(taskId, 1, FALSE); + break; + case 306: + PlaySE(SE_SELECT); + bag_menu_print_cursor_(data[0], 2); + sub_8109140(1); + gSpecialVar_ItemId = ITEM_POKE_BALL; + sub_8109890(taskId); + break; + case 408: + PlaySE(SE_SELECT); + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + CopyWindowToVram(0, 1); + DestroyListMenuTask(data[0], NULL, NULL); + RestorePlayerBag(); + sub_8108CB4(); + gTasks[taskId].func = sub_810B070; + return; + } + data[8]++; + } +} + +void sub_810B070(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); + gTasks[taskId].func = sub_810B0AC; +} + +void sub_810B0AC(u8 taskId) +{ + if (!gPaletteFade.active && FuncIsActiveTask(sub_8108CFC) != TRUE) + { + if (gUnknown_203AD10->exitCB != NULL) + SetMainCallback2(gUnknown_203AD10->exitCB); + else + SetMainCallback2(gUnknown_203ACFC.bagCallback); + sub_8108978(); + sub_8108B04(); + DestroyTask(taskId); + } +} + +void sub_810B108(u8 a0) +{ + MainCallback cb2; + u8 location; + BackUpPlayerBag(); + AddBagItem(ITEM_POTION, 1); + AddBagItem(ITEM_ANTIDOTE, 1); + AddBagItem(ITEM_TEACHY_TV, 1); + AddBagItem(ITEM_TM_CASE, 1); + AddBagItem(ITEM_POKE_BALL, 5); + AddBagItem(ITEM_GREAT_BALL, 1); + AddBagItem(ITEM_NEST_BALL, 1); + switch (a0) + { + default: + cb2 = CB2_ReturnToTeachyTV; + location = a0; + break; + case 7: + cb2 = SetCB2ToReshowScreenAfterMenu2; + location = 7; + break; + case 8: + cb2 = SetCB2ToReshowScreenAfterMenu2; + location = 8; + break; + } + GoToBagMenu(location, POCKET_ITEMS - 1, cb2); +} + +bool8 sub_810B180(u8 taskId) +{ + if (JOY_NEW(B_BUTTON)) + { + RestorePlayerBag(); + SetTeachyTvControllerModeToResume(); + gUnknown_203AD10->exitCB = CB2_ReturnToTeachyTV; + gTasks[taskId].func = sub_810B070; + return TRUE; + } + else + { + return FALSE; + } +} + +void sub_810B1D4(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!gPaletteFade.active && sub_810B180(taskId) != TRUE) + { + switch (data[8]) + { + case 102: + PlaySE(SE_BAG2); + sub_81091D0(taskId, 1, FALSE); + break; + case 204: + PlaySE(SE_SELECT); + bag_menu_print_cursor_(data[0], 2); + sub_8109140(1); + gSpecialVar_ItemId = ITEM_TEACHY_TV; + sub_8109890(taskId); + break; + case 306: + PlaySE(SE_SELECT); + Menu_MoveCursorNoWrapAround(1); + break; + case 408: + PlaySE(SE_SELECT); + gSaveBlock1Ptr->registeredItem = gSpecialVar_ItemId; + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_810842C(gUnknown_203ACFC.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_8109140(0); + bag_menu_print_cursor_(data[0], 1); + CopyWindowToVram(0, 1); + break; + case 510: + case 612: + gMain.newKeys = 0; + gMain.newAndRepeatedKeys = DPAD_DOWN; + ListMenu_ProcessInput(data[0]); + break; + case 714: + PlaySE(SE_SELECT); + DestroyListMenuTask(data[0], NULL, NULL); + RestorePlayerBag(); + sub_8108CB4(); + gTasks[taskId].func = sub_810B070; + return; + } + data[8]++; + } +} + +void sub_810B378(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!gPaletteFade.active) + { + if (sub_810B180(taskId) == TRUE) + { + FreeRestoreBattleData(); + LoadPlayerParty(); + return; + } + switch (data[8]) + { + case 102: + case 204: + PlaySE(SE_BAG2); + sub_81091D0(taskId, 1, FALSE); + break; + case 306: + case 408: + gMain.newKeys = 0; + gMain.newAndRepeatedKeys = DPAD_DOWN; + ListMenu_ProcessInput(data[0]); + break; + case 510: + case 612: + gMain.newKeys = 0; + gMain.newAndRepeatedKeys = DPAD_UP; + ListMenu_ProcessInput(data[0]); + break; + case 714: + PlaySE(SE_SELECT); + bag_menu_print_cursor_(data[0], 2); + sub_8109140(1); + gSpecialVar_ItemId = ITEM_POKE_BALL; + sub_8109890(taskId); + break; + case 816: + PlaySE(SE_SELECT); + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + CopyWindowToVram(0, 1); + DestroyListMenuTask(data[0], NULL, NULL); + RestorePlayerBag(); + sub_8108CB4(); + gTasks[taskId].func = sub_810B070; + return; + } + data[8]++; + } +} + +void sub_810B4BC(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!gPaletteFade.active) + { + if (sub_810B180(taskId) == TRUE) + { + FreeRestoreBattleData(); + LoadPlayerParty(); + return; + } + switch (data[8]) + { + case 102: + gMain.newKeys = 0; + gMain.newAndRepeatedKeys = DPAD_DOWN; + ListMenu_ProcessInput(data[0]); + break; + case 204: + PlaySE(SE_SELECT); + bag_menu_print_cursor_(data[0], 2); + sub_8109140(1); + gSpecialVar_ItemId = ITEM_ANTIDOTE; + sub_8109890(taskId); + break; + case 306: + PlaySE(SE_SELECT); + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + CopyWindowToVram(0, 1); + DestroyListMenuTask(data[0], NULL, NULL); + RestorePlayerBag(); + gItemUseCB = ItemUseCB_MedicineStep; + ItemMenu_SetExitCallback(ChooseMonForInBattleItem); + gTasks[taskId].func = sub_810B070; + return; + } + data[8]++; + } +} + +void sub_810B5D4(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!gPaletteFade.active && sub_810B180(taskId) != TRUE) + { + switch (data[8]) + { + case 102: + PlaySE(SE_BAG2); + sub_81091D0(taskId, 1, 0); + break; + case 204: + gMain.newKeys = 0; + gMain.newAndRepeatedKeys = DPAD_DOWN; + ListMenu_ProcessInput(data[0]); + break; + case 306: + PlaySE(SE_SELECT); + bag_menu_print_cursor_(data[0], 2); + sub_8109140(1); + gSpecialVar_ItemId = ITEM_TM_CASE; + sub_8109890(taskId); + break; + case 408: + PlaySE(SE_SELECT); + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + CopyWindowToVram(0, 1); + DestroyListMenuTask(data[0], NULL, NULL); + RestorePlayerBag(); + gUnknown_203AD10->exitCB = PokeDude_InitTMCase; + gTasks[taskId].func = sub_810B070; + return; + } + data[8]++; + } +} -- cgit v1.2.3 From 6e41dd7b2120f8024bb0cfff7a5ef25f0dce0366 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 19 Jan 2020 14:47:23 -0500 Subject: Document item_menu --- src/bag.c | 272 +++--- src/battle_controller_oak_old_man.c | 4 +- src/battle_controller_player.c | 2 +- src/battle_controller_pokedude.c | 11 +- src/berry_pouch.c | 6 +- src/item_menu.c | 1581 ++++++++++++++++++----------------- src/item_menu_icons.c | 148 ++-- src/item_pc.c | 12 +- src/item_use.c | 34 +- src/menu_helpers.c | 2 +- src/new_game.c | 2 +- src/party_menu.c | 12 +- src/player_pc.c | 2 +- src/shop.c | 2 +- src/teachy_tv.c | 14 +- src/tm_case.c | 6 +- 16 files changed, 1053 insertions(+), 1057 deletions(-) (limited to 'src') diff --git a/src/bag.c b/src/bag.c index b5ba01b4d..7f000722a 100644 --- a/src/bag.c +++ b/src/bag.c @@ -10,17 +10,18 @@ #include "menu.h" #include "money.h" #include "bag.h" +#include "strings.h" -extern const u8 gText_DepositItem[]; +static const u16 sBagWindowPalF[] = INCBIN_U16("data/bag/bag_window_pal.gbapal"); -const u16 gUnknown_8453098[] = INCBIN_U16("data/bag/bag_window_pal.gbapal"); -const u8 gUnknown_84530B8[][3] = { +static const u8 sTextColors[][3] = { {0, 1, 2}, {0, 2, 3}, {0, 3, 2}, {0, 8, 9} }; -const struct WindowTemplate gUnknown_84530C4[] = { + +const struct WindowTemplate sDefaultBagWindowsStd[] = { { .bg = 0, .tilemapLeft = 0x0b, @@ -47,7 +48,8 @@ const struct WindowTemplate gUnknown_84530C4[] = { .baseBlock = 0x01f8 }, DUMMY_WIN_TEMPLATE }; -const struct WindowTemplate gUnknown_84530E4[] = { + +const struct WindowTemplate sDefaultBagWindowsDeposit[] = { { .bg = 0, .tilemapLeft = 0x0b, @@ -74,7 +76,8 @@ const struct WindowTemplate gUnknown_84530E4[] = { .baseBlock = 0x01f8 }, DUMMY_WIN_TEMPLATE }; -const struct WindowTemplate gUnknown_8453104[] = { + +const struct WindowTemplate sWindowTemplates[] = { { .bg = 0, .tilemapLeft = 24, @@ -99,122 +102,114 @@ const struct WindowTemplate gUnknown_8453104[] = { .height = 3, .paletteNum = 0xC, .baseBlock = 0x272 - } -}; - -const struct WindowTemplate gUnknown_845311C = { - .bg = 0, - .tilemapLeft = 23, - .tilemapTop = 15, - .width = 6, - .height = 4, - .paletteNum = 0xF, - .baseBlock = 0x28a -}; - -const struct WindowTemplate gUnknown_8453124 = { - .bg = 0, - .tilemapLeft = 21, - .tilemapTop = 9, - .width = 6, - .height = 4, - .paletteNum = 0xF, - .baseBlock = 0x28a -}; - -const struct WindowTemplate gUnknown_845312C[] = { - { - .bg = 0x00, - .tilemapLeft = 0x02, - .tilemapTop = 0x0f, - .width = 0x1a, - .height = 0x04, - .paletteNum = 0x0f, - .baseBlock = 0x02a2 }, { - .bg = 0x00, - .tilemapLeft = 0x06, - .tilemapTop = 0x0f, - .width = 0x0e, - .height = 0x04, - .paletteNum = 0x0c, - .baseBlock = 0x02a2 + .bg = 0, + .tilemapLeft = 23, + .tilemapTop = 15, + .width = 6, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 0x28a }, { - .bg = 0x00, - .tilemapLeft = 0x06, - .tilemapTop = 0x0f, - .width = 0x0f, - .height = 0x04, - .paletteNum = 0x0c, - .baseBlock = 0x02da + .bg = 0, + .tilemapLeft = 21, + .tilemapTop = 9, + .width = 6, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 0x28a }, { - .bg = 0x00, - .tilemapLeft = 0x06, - .tilemapTop = 0x0f, - .width = 0x10, - .height = 0x04, - .paletteNum = 0x0c, - .baseBlock = 0x0316 + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 26, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 0x2a2 }, { - .bg = 0x00, - .tilemapLeft = 0x06, - .tilemapTop = 0x0f, - .width = 0x17, - .height = 0x04, - .paletteNum = 0x0c, - .baseBlock = 0x0356 + .bg = 0, + .tilemapLeft = 6, + .tilemapTop = 15, + .width = 14, + .height = 4, + .paletteNum = 0xC, + .baseBlock = 0x2a2 }, { - .bg = 0x00, - .tilemapLeft = 0x16, - .tilemapTop = 0x11, - .width = 0x07, - .height = 0x02, - .paletteNum = 0x0f, - .baseBlock = 0x020a + .bg = 0, + .tilemapLeft = 6, + .tilemapTop = 15, + .width = 15, + .height = 4, + .paletteNum = 0xC, + .baseBlock = 0x2da }, { - .bg = 0x00, - .tilemapLeft = 0x16, - .tilemapTop = 0x0f, - .width = 0x07, - .height = 0x04, - .paletteNum = 0x0f, - .baseBlock = 0x020a + .bg = 0, + .tilemapLeft = 6, + .tilemapTop = 15, + .width = 16, + .height = 4, + .paletteNum = 0xC, + .baseBlock = 0x316 }, { - .bg = 0x00, - .tilemapLeft = 0x16, - .tilemapTop = 0x0d, - .width = 0x07, - .height = 0x06, - .paletteNum = 0x0f, - .baseBlock = 0x020a + .bg = 0, + .tilemapLeft = 6, + .tilemapTop = 15, + .width = 23, + .height = 4, + .paletteNum = 0xC, + .baseBlock = 0x356 }, { - .bg = 0x00, - .tilemapLeft = 0x16, - .tilemapTop = 0x0b, - .width = 0x07, - .height = 0x08, - .paletteNum = 0x0f, - .baseBlock = 0x020a + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 17, + .width = 7, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x20a + }, { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 15, + .width = 7, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 0x20a + }, { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 13, + .width = 7, + .height = 6, + .paletteNum = 0xF, + .baseBlock = 0x20a + }, { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 11, + .width = 7, + .height = 8, + .paletteNum = 0xF, + .baseBlock = 0x20a } }; -const u8 gUnknown_8453174[] = {16, 8, 4}; +static const u8 sUnused_8453174[] = {16, 8, 4}; -EWRAM_DATA u8 gUnknown_203AD34[11] = {}; +static EWRAM_DATA u8 sOpenWindows[11] = {}; -void sub_810B858(void) +void InitBagWindows(void) { u8 i; - if (gUnknown_203ACFC.location != 3) - InitWindows(gUnknown_84530C4); + if (gBagMenuState.location != 3) + InitWindows(sDefaultBagWindowsStd); else - InitWindows(gUnknown_84530E4); + InitWindows(sDefaultBagWindowsDeposit); DeactivateAllTextPrinters(); TextWindow_SetUserSelectedFrame(0, 0x64, 0xE0); TextWindow_LoadResourcesStdFrame0(0, 0x6D, 0xD0); TextWindow_SetStdFrame0_WithPal(0, 0x81, 0xC0); - LoadPalette(gUnknown_8453098, 0xF0, 0x20); + LoadPalette(sBagWindowPalF, 0xF0, 0x20); for (i = 0; i < 3; i++) { FillWindowPixelBuffer(i, 0x00); @@ -223,22 +218,22 @@ void sub_810B858(void) ScheduleBgCopyTilemapToVram(0); for (i = 0; i < 11; i++) { - gUnknown_203AD34[i] = 0xFF; + sOpenWindows[i] = 0xFF; } } -void sub_810B8F0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx) +void BagPrintTextOnWindow(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx) { - AddTextPrinterParameterized4(windowId, fontId, x, y, letterSpacing, lineSpacing, gUnknown_84530B8[colorIdx], speed, str); + AddTextPrinterParameterized4(windowId, fontId, x, y, letterSpacing, lineSpacing, sTextColors[colorIdx], speed, str); } -void sub_810B958(const u8 * str, u8 unused) +void BagPrintTextOnWin1CenteredColor0(const u8 * str, u8 unused) { u32 x = 0x48 - GetStringWidth(1, str, 0); - AddTextPrinterParameterized3(2, 1, x / 2, 1, gUnknown_84530B8[0], 0, str); + AddTextPrinterParameterized3(2, 1, x / 2, 1, sTextColors[0], 0, str); } -void sub_810B994(void) +void BagDrawDepositItemTextBox(void) { u32 x; DrawStdFrameWithCustomTileAndPalette(2, FALSE, 0x081, 0x0C); @@ -246,77 +241,76 @@ void sub_810B994(void) AddTextPrinterParameterized(2, 0, gText_DepositItem, x / 2, 1, 0, NULL); } -u8 sub_810B9DC(u8 a0, u8 a1) +u8 ShowBagWindow(u8 whichWindow, u8 nItems) { - if (gUnknown_203AD34[a0] == 0xFF) + if (sOpenWindows[whichWindow] == 0xFF) { - gUnknown_203AD34[a0] = AddWindow(&gUnknown_8453104[a0 + a1]); - if (a0 != 6) + sOpenWindows[whichWindow] = AddWindow(&sWindowTemplates[whichWindow + nItems]); + if (whichWindow != 6) { - DrawStdFrameWithCustomTileAndPalette(gUnknown_203AD34[a0], FALSE, 0x064, 0x0E); + DrawStdFrameWithCustomTileAndPalette(sOpenWindows[whichWindow], FALSE, 0x064, 0xE); } else { - DrawStdFrameWithCustomTileAndPalette(gUnknown_203AD34[a0], FALSE, 0x081, 0x0C); + DrawStdFrameWithCustomTileAndPalette(sOpenWindows[whichWindow], FALSE, 0x081, 0xC); } ScheduleBgCopyTilemapToVram(0); } - return gUnknown_203AD34[a0]; + return sOpenWindows[whichWindow]; } -void sub_810BA3C(u8 a0) +void HideBagWindow(u8 whichWindow) { - ClearStdWindowAndFrameToTransparent(gUnknown_203AD34[a0], FALSE); - ClearWindowTilemap(gUnknown_203AD34[a0]); - RemoveWindow(gUnknown_203AD34[a0]); + ClearStdWindowAndFrameToTransparent(sOpenWindows[whichWindow], FALSE); + ClearWindowTilemap(sOpenWindows[whichWindow]); + RemoveWindow(sOpenWindows[whichWindow]); ScheduleBgCopyTilemapToVram(0); - gUnknown_203AD34[a0] = 0xFF; + sOpenWindows[whichWindow] = 0xFF; } -u8 sub_810BA70(u8 a0) +u8 OpenBagWindow(u8 whichWindow) { - if (gUnknown_203AD34[a0] == 0xFF) + if (sOpenWindows[whichWindow] == 0xFF) { - gUnknown_203AD34[a0] = AddWindow(&gUnknown_8453104[a0]); + sOpenWindows[whichWindow] = AddWindow(&sWindowTemplates[whichWindow]); } - return gUnknown_203AD34[a0]; + return sOpenWindows[whichWindow]; } -void sub_810BA9C(u8 a0) +void CloseBagWindow(u8 whichWindow) { - if (gUnknown_203AD34[a0] != 0xFF) + if (sOpenWindows[whichWindow] != 0xFF) { - ClearDialogWindowAndFrameToTransparent(gUnknown_203AD34[a0], FALSE); - ClearWindowTilemap(gUnknown_203AD34[a0]); - RemoveWindow(gUnknown_203AD34[a0]); + ClearDialogWindowAndFrameToTransparent(sOpenWindows[whichWindow], FALSE); + ClearWindowTilemap(sOpenWindows[whichWindow]); + RemoveWindow(sOpenWindows[whichWindow]); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); - gUnknown_203AD34[a0] = 0xFF; - + sOpenWindows[whichWindow] = 0xFF; } } -u8 sub_810BAD8(u8 a0) +u8 GetBagWindow(u8 whichWindow) { - return gUnknown_203AD34[a0]; + return sOpenWindows[whichWindow]; } -void sub_810BAE8(u8 taskId, const struct YesNoFuncTable * ptrs) +void BagCreateYesNoMenuBottomRight(u8 taskId, const struct YesNoFuncTable * ptrs) { - CreateYesNoMenuWithCallbacks(taskId, &gUnknown_845311C, 2, 0, 2, 0x64, 0x0E, ptrs); + CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates[3], 2, 0, 2, 0x064, 0x0E, ptrs); } -void sub_810BB14(u8 taskId, const struct YesNoFuncTable * ptrs) +void BagCreateYesNoMenuTopRight(u8 taskId, const struct YesNoFuncTable * ptrs) { - CreateYesNoMenuWithCallbacks(taskId, &gUnknown_8453124, 2, 0, 2, 0x064, 0x0E, ptrs); + CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates[4], 2, 0, 2, 0x064, 0x0E, ptrs); } -void sub_810BB40(void) +void BagPrintMoneyAmount(void) { - PrintMoneyAmountInMoneyBoxWithBorder(sub_810B9DC(2, 0), 0x081, 0x0C, GetMoney(&gSaveBlock1Ptr->money)); + PrintMoneyAmountInMoneyBoxWithBorder(ShowBagWindow(2, 0), 0x081, 0x0C, GetMoney(&gSaveBlock1Ptr->money)); } -void sub_810BB74(u8 windowId) +void BagDrawTextBoxOnWindow(u8 windowId) { DrawTextBorderOuter(windowId, 0x064, 0x0E); } diff --git a/src/battle_controller_oak_old_man.c b/src/battle_controller_oak_old_man.c index a027808af..0807018a2 100644 --- a/src/battle_controller_oak_old_man.c +++ b/src/battle_controller_oak_old_man.c @@ -379,9 +379,9 @@ static void OpenBagAndChooseItem(void) nullsub_44(); FreeAllWindowBuffers(); if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) - sub_8107ECC(); + CB2_BagMenuFromBattle(); else - InitTutorialBag(); + InitOldManBag(); } } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 7f1f738a3..cb9e04a50 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1330,7 +1330,7 @@ static void OpenBagAndChooseItem(void) gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem; nullsub_44(); FreeAllWindowBuffers(); - sub_8107ECC(); + CB2_BagMenuFromBattle(); } } diff --git a/src/battle_controller_pokedude.c b/src/battle_controller_pokedude.c index 86da27ee3..b9df7e1ed 100644 --- a/src/battle_controller_pokedude.c +++ b/src/battle_controller_pokedude.c @@ -23,6 +23,7 @@ #include "battle_interface.h" #include "battle_message.h" #include "reshow_battle_screen.h" +#include "teachy_tv.h" #include "constants/songs.h" #include "constants/items.h" #include "constants/moves.h" @@ -733,15 +734,15 @@ static void OpenBagAndChooseItem(void) FreeAllWindowBuffers(); switch (gSpecialVar_0x8004) { - case 1: + case TTVSCR_STATUS: default: - callbackId = 7; + callbackId = ITEMMENULOCATION_TTVSCR_STATUS; break; - case 3: - callbackId = 8; + case TTVSCR_CATCHING: + callbackId = ITEMMENULOCATION_TTVSCR_CATCHING; break; } - sub_810B108(callbackId); + InitPokeDudeBag(callbackId); } } diff --git a/src/berry_pouch.c b/src/berry_pouch.c index 711a17768..63677574b 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -1269,7 +1269,7 @@ static void Task_ContextMenu_Sell(u8 taskId) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_OhNoICantBuyThat); - DisplayItemMessageInBerryPouch(taskId, sub_80BF8E4(), gStringVar4, Task_BerryPouch_DestroyDialogueWindowAndRefreshListMenu); + DisplayItemMessageInBerryPouch(taskId, GetDialogBoxFontId(), gStringVar4, Task_BerryPouch_DestroyDialogueWindowAndRefreshListMenu); } else { @@ -1285,7 +1285,7 @@ static void Task_ContextMenu_Sell(u8 taskId) data[2] = 99; CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_HowManyWouldYouLikeToSell); - DisplayItemMessageInBerryPouch(taskId, sub_80BF8E4(), gStringVar4, Task_Sell_PrintSelectMultipleUI); + DisplayItemMessageInBerryPouch(taskId, GetDialogBoxFontId(), gStringVar4, Task_Sell_PrintSelectMultipleUI); } } } @@ -1295,7 +1295,7 @@ static void Task_AskSellMultiple(u8 taskId) s16 * data = gTasks[taskId].data; ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_ICanPayThisMuch_WouldThatBeOkay); - DisplayItemMessageInBerryPouch(taskId, sub_80BF8E4(), gStringVar4, Task_SellMultiple_CreateYesNoMenu); + DisplayItemMessageInBerryPouch(taskId, GetDialogBoxFontId(), gStringVar4, Task_SellMultiple_CreateYesNoMenu); } static void Task_SellMultiple_CreateYesNoMenu(u8 taskId) diff --git a/src/item_menu.c b/src/item_menu.c index a2a6f865b..467ff4c6b 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -39,10 +39,10 @@ struct BagMenuAlloc { MainCallback exitCB; - u8 field_04; - u8 field_05_0:4; + u8 itemOriginalLocation; + u8 pocketSwitchMode:4; u8 itemMenuIcon:2; - u8 field_05_6:2; + u8 inhibitItemDescriptionPrint:2; u16 contextMenuSelectedItem; u8 pocketScrollArrowsTask; u8 pocketSwitchArrowsTask; @@ -62,103 +62,104 @@ struct BagSlots u16 pocket; }; -EWRAM_DATA struct BagStruct gUnknown_203ACFC = {}; -EWRAM_DATA struct BagMenuAlloc * gUnknown_203AD10 = NULL; -EWRAM_DATA void * gUnknown_203AD14 = NULL; -EWRAM_DATA struct ListMenuItem * gUnknown_203AD18 = NULL; -EWRAM_DATA u8 (*gUnknown_203AD1C)[19] = NULL; -EWRAM_DATA u8 gUnknown_203AD20[4] = {}; -EWRAM_DATA const u8 *gUnknown_203AD24 = NULL; -EWRAM_DATA u8 gUnknown_203AD28 = 0; -EWRAM_DATA struct BagSlots * gUnknown_203AD2C = NULL; - -void sub_8107F10(void); -bool8 sub_8107F3C(void); -void sub_810813C(void); -void sub_8108178(u8 taskId); -void sub_81081AC(void); -bool8 sub_81081D0(void); -bool8 sub_8108240(void); -u8 sub_8108388(u8 location); -bool8 sub_81083F4(void); -void sub_810842C(u8 pocket); -void sub_8108560(u8 *dest, u16 itemId); -void sub_81085A4(s32 itemIndex, bool8 onInit, struct ListMenu *list); -void sub_8108654(u8 windowId, s32 itemId, u8 y); -void bag_menu_print_cursor(u8 y, u8 colorIdx); -void sub_81087EC(void); -void sub_8108818(s32 itemIndex); -void sub_8108888(void); -void sub_81088D8(void); -void sub_810899C(void); -void sub_8108A68(void); -void sub_8108A84(void); -void sub_8108B04(void); -void sub_8108B8C(u8 taskId); -void sub_8108CFC(u8 taskId); -void sub_8108C10(void); -void sub_8108E54(void); -void sub_8108F0C(u8 taskId); -void sub_81090DC(u8 taskId); -void sub_8109140(u32 a0); -u8 sub_8109168(u8 taskId, u8 pocketId); -void sub_81091D0(u8 taskId, s16 direction, bool16 a2); -void sub_8109298(u8 taskId); -void sub_81093B8(u8 taskId, s16 itemIndex); -void sub_81094B0(u8 taskId); -void sub_81095AC(u8 taskId, u32 itemIndex); -void sub_810967C(u8 taskId, u32 itemIndex); -void sub_8109854(u8 a0); -void sub_8109BB8(u8 taskId); -void sub_8109BE4(u8 taskId); -void Task_ItemMenuAction_Use(u8 taskId); -void Task_ItemMenuAction_Toss(u8 taskId); -void sub_8109D38(u8 taskId); -void sub_8109DB0(u8 taskId); -void sub_8109DEC(u8 taskId); -void sub_8109EA8(u8 taskId); -void sub_8109F44(u8 taskId); -void Task_ItemMenuAction_ToggleSelect(u8 taskId); -void Task_ItemMenuAction_Give(u8 taskId); -void sub_810A170(u8 taskId); -void Task_ItemMenuAction_Cancel(u8 taskId); -void sub_810A18C(u8 taskId); -void sub_810A1D0(u8 taskId); -void sub_810A324(u8 taskId); -void sub_810A370(u8 taskId); -void sub_810A434(void); -void sub_810A448(void); -void sub_810A45C(void); -void sub_810A468(u8 taskId); -void sub_810A52C(void); -void sub_810A540(void); -void sub_810A554(void); -void sub_810A568(u8 taskId); -void sub_810A654(void); -void sub_810A668(void); -void sub_810A67C(void); -void sub_810A690(u8 taskId); -void sub_810A70C(u8 taskId); -void sub_810A720(u8 taskId); -void sub_810A770(u8 taskId); -void sub_810A834(s32 price); -void sub_810A85C(u8 taskId); -void sub_810A940(u8 taskId); -void sub_810A9D4(u8 taskId); -void sub_810AAF4(u8 taskId); -void sub_810AB40(u8 taskId); -void sub_810AB88(u8 taskId); -void sub_810AC40(u8 taskId); -bool8 sub_810ADAC(void); -void sub_810AF9C(u8 taskId); -void sub_810B070(u8 taskId); -void sub_810B0AC(u8 taskId); -void sub_810B1D4(u8 taskId); -void sub_810B378(u8 taskId); -void sub_810B4BC(u8 taskId); -void sub_810B5D4(u8 taskId); - -const struct BgTemplate gUnknown_8452CF4[2] = { +EWRAM_DATA struct BagStruct gBagMenuState = {}; +static EWRAM_DATA struct BagMenuAlloc * sBagMenuDisplay = NULL; +static EWRAM_DATA void * sBagBgTilemapBuffer = NULL; +static EWRAM_DATA struct ListMenuItem * sListMenuItems = NULL; +static EWRAM_DATA u8 (*sListMenuItemStrings)[19] = NULL; +static EWRAM_DATA u8 sContextMenuItemsBuffer[4] = {}; +static EWRAM_DATA const u8 *sContextMenuItemsPtr = NULL; +static EWRAM_DATA u8 sContextMenuNumItems = 0; +static EWRAM_DATA struct BagSlots * sBackupPlayerBag = NULL; +EWRAM_DATA u16 gSpecialVar_ItemId = ITEM_NONE; + +static void CB2_OpenBagMenu(void); +static bool8 LoadBagMenuGraphics(void); +static void FadeOutOfBagMenu(void); +static void Task_WaitFadeOutOfBagMenu(u8 taskId); +static void NullBagMenuBufferPtrs(void); +static bool8 BagMenuInitBgsAndAllocTilemapBuffer(void); +static bool8 DoLoadBagGraphics(void); +static u8 CreateBagInputHandlerTask(u8 location); +static bool8 TryAllocListMenuBuffers(void); +static void Bag_BuildListMenuTemplate(u8 pocket); +static void BagListMenuGetItemNameColored(u8 *dest, u16 itemId); +static void BagListMenuMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list); +static void BagListMenuItemPrintFunc(u8 windowId, s32 itemId, u8 y); +static void bag_menu_print_cursor(u8 y, u8 colorIdx); +static void PrintBagPocketName(void); +static void PrintItemDescriptionOnMessageWindow(s32 itemIndex); +static void CreatePocketScrollArrowPair(void); +static void CreatePocketSwitchArrowPair(void); +static void BagDestroyPocketSwitchArrowPair(void); +static void CalculateInitialCursorPosAndItemsAbove(void); +static void UpdatePocketScrollPositions(void); +static void DestroyBagMenuResources(void); +static void Task_ItemMenu_WaitFadeAndSwitchToExitCallback(u8 taskId); +static void Task_AnimateWin0v(u8 taskId); +static void ShowBagOrBeginWin0OpenTask(void); +static void All_CalculateNItemsAndMaxShowed(void); +static void Task_BagMenu_HandleInput(u8 taskId); +static void Task_ItemContextMenuByLocation(u8 taskId); +static void Bag_FillMessageBoxWithPalette(u32 a0); +static u8 ProcessPocketSwitchInput(u8 taskId, u8 pocketId); +static void SwitchPockets(u8 taskId, s16 direction, bool16 a2); +static void Task_AnimateSwitchPockets(u8 taskId); +static void BeginMovingItemInPocket(u8 taskId, s16 itemIndex); +static void Task_MoveItemInPocket_HandleInput(u8 taskId); +static void ExecuteMoveItemInPocket(u8 taskId, u32 itemIndex); +static void AbortMovingItemInPocket(u8 taskId, u32 itemIndex); +static void CopyBagListBgTileRowToTilemapBuffer(u8 a0); +static void Task_ItemContext_FieldOrBattle(u8 taskId); +static void Task_FieldItemContextMenuHandleInput(u8 taskId); +static void Task_ItemMenuAction_Use(u8 taskId); +static void Task_ItemMenuAction_Toss(u8 taskId); +static void Task_ConfirmTossItems(u8 taskId); +static void Task_TossItem_No(u8 taskId); +static void Task_SelectQuantityToToss(u8 taskId); +static void Task_TossItem_Yes(u8 taskId); +static void Task_WaitAB_RedrawAndReturnToBag(u8 taskId); +static void Task_ItemMenuAction_ToggleSelect(u8 taskId); +static void Task_ItemMenuAction_Give(u8 taskId); +static void Task_PrintThereIsNoPokemon(u8 taskId); +static void Task_ItemMenuAction_Cancel(u8 taskId); +static void Task_PrintItemCantBeHeld(u8 taskId); +static void Task_WaitAButtonAndCloseContextMenu(u8 taskId); +static void Task_ItemMenuAction_BattleUse(u8 taskId); +static void Task_ItemContext_FieldGive(u8 taskId); +static void GoToTMCase_Give(void); +static void GoToBerryPouch_Give(void); +static void ReturnToBagMenuFromSubmenu_Give(void); +static void Task_ItemContext_PcBoxGive(u8 taskId); +static void GoToTMCase_PCBox(void); +static void GoToBerryPouch_PCBox(void); +static void ReturnToBagMenuFromSubmenu_PCBox(void); +static void Task_ItemContext_Sell(u8 taskId); +static void GoToTMCase_Sell(void); +static void GoToBerryPouch_Sell(void); +static void ReturnToBagMenuFromSubmenu_Sell(void); +static void Task_PrintSaleConfirmationText(u8 taskId); +static void Task_ShowSellYesNoMenu(u8 taskId); +static void Task_SellItem_No(u8 taskId); +static void Task_InitSaleQuantitySelectInterface(u8 taskId); +static void UpdateSalePriceDisplay(s32 price); +static void Task_SelectQuantityToSell(u8 taskId); +static void Task_SellItem_Yes(u8 taskId); +static void Task_FinalizeSaleToShop(u8 taskId); +static void Task_WaitPressAB_AfterSell(u8 taskId); +static void Task_ItemContext_Deposit(u8 taskId); +static void Task_SelectQuantityToDeposit(u8 taskId); +static void Task_TryDoItemDeposit(u8 taskId); +static bool8 BagIsTutorial(void); +static void Task_Bag_OldManTutorial(u8 taskId); +static void Task_PokeDude_FadeFromBag(u8 taskId); +static void Task_PokeDude_WaitFadeAndExitBag(u8 taskId); +static void Task_Bag_TeachyTvRegister(u8 taskId); +static void Task_Bag_TeachyTvCatching(u8 taskId); +static void Task_Bag_TeachyTvStatus(u8 taskId); +static void Task_Bag_TeachyTvTMs(u8 taskId); + +static const struct BgTemplate sBgTemplates[2] = { { .bg = 0, .charBaseIndex = 0, @@ -178,43 +179,43 @@ const struct BgTemplate gUnknown_8452CF4[2] = { } }; -const u8 *const sPocketNames[] = { +static const u8 *const sPocketNames[] = { gText_Items2, gText_KeyItems2, gText_PokeBalls2 }; -const u16 gUnknown_8452D08[][18] = { - [ITEMMENUACTION_USE] = INCBIN_U16("graphics/item_menu/bagmap_0.bin"), - [ITEMMENUACTION_TOSS] = INCBIN_U16("graphics/item_menu/bagmap_1.bin"), - [ITEMMENUACTION_REGISTER] = INCBIN_U16("graphics/item_menu/bagmap_2.bin"), - [ITEMMENUACTION_GIVE] = INCBIN_U16("graphics/item_menu/bagmap_3.bin"), - [ITEMMENUACTION_CANCEL] = INCBIN_U16("graphics/item_menu/bagmap_4.bin"), - [ITEMMENUACTION_BATTLE_USE] = INCBIN_U16("graphics/item_menu/bagmap_5.bin"), - [ITEMMENUACTION_CHECK] = INCBIN_U16("graphics/item_menu/bagmap_6.bin"), - [ITEMMENUACTION_OPEN] = INCBIN_U16("graphics/item_menu/bagmap_7.bin"), - [ITEMMENUACTION_OPEN_BERRIES] = INCBIN_U16("graphics/item_menu/bagmap_8.bin"), - [ITEMMENUACTION_WALK] = INCBIN_U16("graphics/item_menu/bagmap_9.bin"), - [ITEMMENUACTION_DESELECT] = INCBIN_U16("graphics/item_menu/bagmap_A.bin"), - [ITEMMENUACTION_DUMMY] = INCBIN_U16("graphics/item_menu/bagmap_B.bin") +static const u16 sBagListBgTiles[][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[] = { +static const struct MenuAction sItemMenuContextActions[] = { [ITEMMENUACTION_USE] = {gOtherText_Use, {.void_u8 = Task_ItemMenuAction_Use}}, [ITEMMENUACTION_TOSS] = {gOtherText_Toss, {.void_u8 = Task_ItemMenuAction_Toss}}, [ITEMMENUACTION_REGISTER] = {gOtherText_Register, {.void_u8 = Task_ItemMenuAction_ToggleSelect}}, [ITEMMENUACTION_GIVE] = {gOtherText_Give, {.void_u8 = Task_ItemMenuAction_Give}}, [ITEMMENUACTION_CANCEL] = {gFameCheckerText_Cancel, {.void_u8 = Task_ItemMenuAction_Cancel}}, - [ITEMMENUACTION_BATTLE_USE] = {gOtherText_Use, {.void_u8 = sub_810A324}}, + [ITEMMENUACTION_BATTLE_USE] = {gOtherText_Use, {.void_u8 = Task_ItemMenuAction_BattleUse}}, [ITEMMENUACTION_CHECK] = {gOtherText_Check, {.void_u8 = Task_ItemMenuAction_Use}}, [ITEMMENUACTION_OPEN] = {gOtherText_Open, {.void_u8 = Task_ItemMenuAction_Use}}, - [ITEMMENUACTION_OPEN_BERRIES] = {gOtherText_Open, {.void_u8 = sub_810A324}}, + [ITEMMENUACTION_OPEN_BERRIES] = {gOtherText_Open, {.void_u8 = Task_ItemMenuAction_BattleUse}}, [ITEMMENUACTION_WALK] = {gOtherText_Walk, {.void_u8 = Task_ItemMenuAction_Use}}, [ITEMMENUACTION_DESELECT] = {gOtherText_Deselect, {.void_u8 = Task_ItemMenuAction_ToggleSelect}}, [ITEMMENUACTION_DUMMY] = {gString_Dummy, {.void_u8 = NULL}} }; -const u8 gUnknown_8452F18[][4] = { +static const u8 sContextMenuItems_Field[][4] = { { ITEMMENUACTION_USE, ITEMMENUACTION_GIVE, @@ -233,14 +234,14 @@ const u8 gUnknown_8452F18[][4] = { } }; -const u8 gUnknown_8452F24[] = { +static const u8 sContextMenuItems_CheckGiveTossCancel[] = { ITEMMENUACTION_CHECK, ITEMMENUACTION_GIVE, ITEMMENUACTION_TOSS, ITEMMENUACTION_CANCEL }; -const u8 gUnknown_8452F28[][2] = { +static const u8 sContextMenuItems_GiveIfNotKeyItemPocket[][2] = { { ITEMMENUACTION_GIVE, ITEMMENUACTION_CANCEL @@ -253,46 +254,46 @@ const u8 gUnknown_8452F28[][2] = { } }; -const u8 gUnknown_8452F2E[] = { +static const u8 sContextMenuItems_Open[] = { ITEMMENUACTION_OPEN, ITEMMENUACTION_CANCEL }; -const u8 gUnknown_8452F30[] = { +static const u8 sContextMenuItems_BattleUse[] = { ITEMMENUACTION_BATTLE_USE, ITEMMENUACTION_CANCEL }; -const u8 gUnknown_8452F32[] = { +static const u8 sContextMenuItems_Cancel[] = { ITEMMENUACTION_CANCEL, ITEMMENUACTION_DUMMY }; -const TaskFunc gUnknown_8452F34[] = { - sub_8109BB8, - sub_810A370, - sub_810A568, - sub_810AB40, - sub_810A468, - sub_8109BB8, - NULL +static const TaskFunc sItemContextTaskFuncs[] = { + [ITEMMENULOCATION_FIELD] = Task_ItemContext_FieldOrBattle, + [ITEMMENULOCATION_PARTY] = Task_ItemContext_FieldGive, + [ITEMMENULOCATION_SHOP] = Task_ItemContext_Sell, + [ITEMMENULOCATION_ITEMPC] = Task_ItemContext_Deposit, + [ITEMMENULOCATION_PCBOX] = Task_ItemContext_PcBoxGive, + [ITEMMENULOCATION_BATTLE] = Task_ItemContext_FieldOrBattle, + [ITEMMENULOCATION_OLDMAN] = NULL }; -const struct YesNoFuncTable gUnknown_8452F50 = { - sub_8109EA8, - sub_8109DB0 +static const struct YesNoFuncTable sYesNoMenu_Toss = { + Task_TossItem_Yes, + Task_TossItem_No }; -const struct YesNoFuncTable gUnknown_8452F58 = { - sub_810A940, - sub_810A720 +static const struct YesNoFuncTable sYesNoMenu_Sell = { + Task_SellItem_Yes, + Task_SellItem_No }; -const u8 gUnknown_8452F60[] = _("{COLOR_HIGHLIGHT_SHADOW RED TRANSPARENT GREEN}"); +static const u8 sListItemTextColor_RegularItem[] = _("{COLOR_HIGHLIGHT_SHADOW RED TRANSPARENT GREEN}"); -const u8 gUnknown_8452F66[] = _("{COLOR_HIGHLIGHT_SHADOW LIGHT_GRAY TRANSPARENT BLACK}"); +static const u8 sListItemTextColor_TmCase_BerryPouch[] = _("{COLOR_HIGHLIGHT_SHADOW LIGHT_GRAY TRANSPARENT BLACK}"); -const struct ScrollArrowsTemplate gUnknown_8452F6C = { +static const struct ScrollArrowsTemplate sPocketSwitchArrowPairTemplate = { .firstArrowType = SCROLL_ARROW_LEFT, .firstX = 8, .firstY = 72, @@ -306,57 +307,57 @@ const struct ScrollArrowsTemplate gUnknown_8452F6C = { .palNum = 0, }; -const u8 gUnknown_8452F7C[] = INCBIN_U8("graphics/interface/select_button.4bpp"); +static const u8 sBlit_SelectButton[] = INCBIN_U8("graphics/interface/select_button.4bpp"); -void GoToBagMenu(u8 location, u8 a1, MainCallback a2) +void GoToBagMenu(u8 location, u8 pocket, MainCallback bagCallback) { u8 i; - sub_81081AC(); - gUnknown_203AD10 = Alloc(sizeof(struct BagMenuAlloc)); - if (gUnknown_203AD10 == NULL) - SetMainCallback2(a2); + NullBagMenuBufferPtrs(); + sBagMenuDisplay = Alloc(sizeof(struct BagMenuAlloc)); + if (sBagMenuDisplay == NULL) + SetMainCallback2(bagCallback); else { - if (location != 11) - gUnknown_203ACFC.location = location; - if (a2 != NULL) - gUnknown_203ACFC.bagCallback = a2; - gUnknown_203AD10->exitCB = NULL; - gUnknown_203AD10->field_04 = 0xFF; - gUnknown_203AD10->itemMenuIcon = 0; - gUnknown_203AD10->field_05_6 = 0; - gUnknown_203AD10->pocketScrollArrowsTask = 0xFF; - gUnknown_203AD10->pocketSwitchArrowsTask = 0xFF; - if (location == 3) - gUnknown_203AD10->field_05_0 = 1; - else if (location == 6) - gUnknown_203AD10->field_05_0 = 2; + if (location != ITEMMENULOCATION_LAST) + gBagMenuState.location = location; + if (bagCallback != NULL) + gBagMenuState.bagCallback = bagCallback; + sBagMenuDisplay->exitCB = NULL; + sBagMenuDisplay->itemOriginalLocation = 0xFF; + sBagMenuDisplay->itemMenuIcon = 0; + sBagMenuDisplay->inhibitItemDescriptionPrint = FALSE; + sBagMenuDisplay->pocketScrollArrowsTask = 0xFF; + sBagMenuDisplay->pocketSwitchArrowsTask = 0xFF; + if (location == ITEMMENULOCATION_ITEMPC) + sBagMenuDisplay->pocketSwitchMode = 1; + else if (location == ITEMMENULOCATION_OLDMAN) + sBagMenuDisplay->pocketSwitchMode = 2; else - gUnknown_203AD10->field_05_0 = 0; + sBagMenuDisplay->pocketSwitchMode = 0; for (i = 0; i < 4; i++) { - gUnknown_203AD10->data[i] = 0; + sBagMenuDisplay->data[i] = 0; } - if (a1 == 0 || a1 == 1 || a1 == 2) - gUnknown_203ACFC.pocket = a1; + if (pocket == OPEN_BAG_ITEMS || pocket == OPEN_BAG_KEYITEMS || pocket == OPEN_BAG_POKEBALLS) + gBagMenuState.pocket = pocket; gTextFlags.autoScroll = FALSE; gSpecialVar_ItemId = ITEM_NONE; - SetMainCallback2(sub_8107F10); + SetMainCallback2(CB2_OpenBagMenu); } } void CB2_BagMenuFromStartMenu(void) { - GoToBagMenu(0, 3, CB2_ReturnToFieldWithOpenMenu); + GoToBagMenu(ITEMMENULOCATION_FIELD, OPEN_BAG_LAST, CB2_ReturnToFieldWithOpenMenu); } -void sub_8107ECC(void) +void CB2_BagMenuFromBattle(void) { - GoToBagMenu(5, 3, SetCB2ToReshowScreenAfterMenu2); + GoToBagMenu(ITEMMENULOCATION_BATTLE, OPEN_BAG_LAST, SetCB2ToReshowScreenAfterMenu2); } -void sub_8107EE0(void) +static void CB2_BagMenuRun(void) { RunTasks(); AnimateSprites(); @@ -365,27 +366,27 @@ void sub_8107EE0(void) UpdatePaletteFade(); } -void sub_8107EFC(void) +static void VBlankCB_BagMenuRun(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -void sub_8107F10(void) +static void CB2_OpenBagMenu(void) { while (1) { if ((u8)sub_80BF72C() == TRUE) break; - if (sub_8107F3C() == TRUE) + if (LoadBagMenuGraphics() == TRUE) break; if (MenuHelpers_LinkSomething() == TRUE) break; } } -bool8 sub_8107F3C(void) +static bool8 LoadBagMenuGraphics(void) { u8 taskId; @@ -425,76 +426,76 @@ bool8 sub_8107F3C(void) gMain.state++; break; case 7: - if (sub_81081D0()) + if (BagMenuInitBgsAndAllocTilemapBuffer()) { - gUnknown_203AD10->data[0] = 0; + sBagMenuDisplay->data[0] = 0; gMain.state++; } else { - sub_810813C(); + FadeOutOfBagMenu(); return TRUE; } break; case 8: - if (sub_8108240() == TRUE) + if (DoLoadBagGraphics() == TRUE) gMain.state++; break; case 9: - sub_810B858(); + InitBagWindows(); gMain.state++; break; case 10: - sub_8108E54(); - sub_8108A68(); - sub_8108A84(); + All_CalculateNItemsAndMaxShowed(); + CalculateInitialCursorPosAndItemsAbove(); + UpdatePocketScrollPositions(); gMain.state++; break; case 11: - if (!sub_81083F4()) + if (!TryAllocListMenuBuffers()) { - sub_810813C(); + FadeOutOfBagMenu(); return TRUE; } gMain.state++; break; case 12: - sub_810842C(gUnknown_203ACFC.pocket); + Bag_BuildListMenuTemplate(gBagMenuState.pocket); gMain.state++; break; case 13: - if (gUnknown_203ACFC.location != 3) - sub_81087EC(); + if (gBagMenuState.location != ITEMMENULOCATION_ITEMPC) + PrintBagPocketName(); else - sub_810B994(); + BagDrawDepositItemTextBox(); gMain.state++; break; case 14: - taskId = sub_8108388(gUnknown_203ACFC.location); - gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + taskId = CreateBagInputHandlerTask(gBagMenuState.location); + gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); gTasks[taskId].data[3] = 0; gTasks[taskId].data[8] = 0; gMain.state++; break; case 15: - sub_80984FC(gUnknown_203ACFC.pocket); + CreateBagOrSatchelSprite(gBagMenuState.pocket); gMain.state++; break; case 16: - sub_8108888(); - sub_81088D8(); + CreatePocketScrollArrowPair(); + CreatePocketSwitchArrowPair(); gMain.state++; break; case 17: - sub_80985E4(); + ItemMenuIcons_CreateInsertIndicatorBarHidden(); gMain.state++; break; case 18: - sub_8108C10(); + ShowBagOrBeginWin0OpenTask(); gMain.state++; break; case 19: - if (gUnknown_203ACFC.location == 3) + if (gBagMenuState.location == ITEMMENULOCATION_ITEMPC) HelpSystem_SetSomeVariable2(29); else HelpSystem_SetSomeVariable2(9); @@ -502,50 +503,50 @@ bool8 sub_8107F3C(void) gMain.state++; break; default: - SetVBlankCallback(sub_8107EFC); - SetMainCallback2(sub_8107EE0); + SetVBlankCallback(VBlankCB_BagMenuRun); + SetMainCallback2(CB2_BagMenuRun); return TRUE; } return FALSE; } -void sub_810813C(void) +static void FadeOutOfBagMenu(void) { BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); - CreateTask(sub_8108178, 0); - SetVBlankCallback(sub_8107EFC); - SetMainCallback2(sub_8107EE0); + CreateTask(Task_WaitFadeOutOfBagMenu, 0); + SetVBlankCallback(VBlankCB_BagMenuRun); + SetMainCallback2(CB2_BagMenuRun); } -void sub_8108178(u8 taskId) +static void Task_WaitFadeOutOfBagMenu(u8 taskId) { if (!gPaletteFade.active) { - SetMainCallback2(gUnknown_203ACFC.bagCallback); - sub_8108B04(); + SetMainCallback2(gBagMenuState.bagCallback); + DestroyBagMenuResources(); DestroyTask(taskId); } } -void sub_81081AC(void) +static void NullBagMenuBufferPtrs(void) { - gUnknown_203AD10 = NULL; - gUnknown_203AD14 = NULL; - gUnknown_203AD18 = NULL; - gUnknown_203AD1C = NULL; + sBagMenuDisplay = NULL; + sBagBgTilemapBuffer = NULL; + sListMenuItems = NULL; + sListMenuItemStrings = NULL; } -bool8 sub_81081D0(void) +static bool8 BagMenuInitBgsAndAllocTilemapBuffer(void) { void **buff; ResetAllBgsCoordinatesAndBgCntRegs(); - buff = &gUnknown_203AD14; + buff = &sBagBgTilemapBuffer; *buff = Alloc(0x800); if (*buff == NULL) return FALSE; memset(*buff, 0, 0x800); ResetBgsAndClearDma3BusyFlags(FALSE); - InitBgsFromTemplates(0, gUnknown_8452CF4, NELEMS(gUnknown_8452CF4)); + InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates)); SetBgTilemapBuffer(1, *buff); ScheduleBgCopyTilemapToVram(1); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON); @@ -555,101 +556,101 @@ bool8 sub_81081D0(void) return TRUE; } -bool8 sub_8108240(void) +static bool8 DoLoadBagGraphics(void) { - switch (gUnknown_203AD10->data[0]) + switch (sBagMenuDisplay->data[0]) { case 0: ResetTempTileDataBuffers(); DecompressAndCopyTileDataToVram(1, gUnknown_8E830CC, 0, 0, 0); - gUnknown_203AD10->data[0]++; + sBagMenuDisplay->data[0]++; break; case 1: if (FreeTempTileDataBuffersIfPossible() != TRUE) { - if (gUnknown_203ACFC.location != 3) - LZDecompressWram(gUnknown_8E832C0, gUnknown_203AD14); + if (gBagMenuState.location != ITEMMENULOCATION_ITEMPC) + LZDecompressWram(gUnknown_8E832C0, sBagBgTilemapBuffer); else - LZDecompressWram(gUnknown_8E83444, gUnknown_203AD14); - gUnknown_203AD10->data[0]++; + LZDecompressWram(gUnknown_8E83444, sBagBgTilemapBuffer); + sBagMenuDisplay->data[0]++; } break; case 2: - LoadCompressedPalette(gUnknown_8E835B4, 0x00, 0x60); - if (!sub_810ADAC() && gSaveBlock2Ptr->playerGender != MALE) - LoadCompressedPalette(gUnknown_8E83604, 0x00, 0x20); - gUnknown_203AD10->data[0]++; + LoadCompressedPalette(gBagBgPalette, 0x00, 0x60); + if (!BagIsTutorial() && gSaveBlock2Ptr->playerGender != MALE) + LoadCompressedPalette(gBagBgPalette_FemaleOverride, 0x00, 0x20); + sBagMenuDisplay->data[0]++; break; case 3: - if (sub_810ADAC() == TRUE || gSaveBlock2Ptr->playerGender == MALE) - LoadCompressedSpriteSheet(&gUnknown_83D41E4); + if (BagIsTutorial() == TRUE || gSaveBlock2Ptr->playerGender == MALE) + LoadCompressedSpriteSheet(&gSpriteSheet_Backpack); else - LoadCompressedSpriteSheet(&gUnknown_83D41EC); - gUnknown_203AD10->data[0]++; + LoadCompressedSpriteSheet(&gSpriteSheet_Satchel); + sBagMenuDisplay->data[0]++; break; case 4: - LoadCompressedSpritePalette(&gUnknown_83D41F4); - gUnknown_203AD10->data[0]++; + LoadCompressedSpritePalette(&gSpritePalette_BagOrSatchel); + sBagMenuDisplay->data[0]++; break; case 5: LoadCompressedSpriteSheet(&gBagSwapSpriteSheet); - gUnknown_203AD10->data[0]++; + sBagMenuDisplay->data[0]++; break; default: LoadCompressedSpritePalette(&gBagSwapSpritePalette); - gUnknown_203AD10->data[0] = 0; + sBagMenuDisplay->data[0] = 0; return TRUE; } return FALSE; } -u8 sub_8108388(u8 location) +static u8 CreateBagInputHandlerTask(u8 location) { switch (location) { - case 6: - return CreateTask(sub_810AF9C, 0); - case 9: - return CreateTask(sub_810B1D4, 0); - case 10: - return CreateTask(sub_810B5D4, 0); - case 7: - return CreateTask(sub_810B4BC, 0); - case 8: - return CreateTask(sub_810B378, 0); + case ITEMMENULOCATION_OLDMAN: + return CreateTask(Task_Bag_OldManTutorial, 0); + case ITEMMENULOCATION_TTVSCR_REGISTER: + return CreateTask(Task_Bag_TeachyTvRegister, 0); + case ITEMMENULOCATION_TTVSCR_TMS: + return CreateTask(Task_Bag_TeachyTvTMs, 0); + case ITEMMENULOCATION_TTVSCR_STATUS: + return CreateTask(Task_Bag_TeachyTvStatus, 0); + case ITEMMENULOCATION_TTVSCR_CATCHING: + return CreateTask(Task_Bag_TeachyTvCatching, 0); default: - return CreateTask(sub_8108F0C, 0); + return CreateTask(Task_BagMenu_HandleInput, 0); } } -bool8 sub_81083F4(void) +static bool8 TryAllocListMenuBuffers(void) { - gUnknown_203AD18 = Alloc(43 * sizeof(struct ListMenuItem)); - if (gUnknown_203AD18 == NULL) + sListMenuItems = Alloc(43 * sizeof(struct ListMenuItem)); + if (sListMenuItems == NULL) return FALSE; - gUnknown_203AD1C = Alloc(43 * 19); - if (gUnknown_203AD1C == NULL) + sListMenuItemStrings = Alloc(43 * 19); + if (sListMenuItemStrings == NULL) return FALSE; return TRUE; } -void sub_810842C(u8 pocket) +static void Bag_BuildListMenuTemplate(u8 pocket) { u16 i; struct BagPocket * bagPocket = &gBagPockets[pocket]; - 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]; - gUnknown_203AD18[i].index = i; - } - StringCopy(gUnknown_203AD1C[i], gUnknown_8452F60); - StringAppend(gUnknown_203AD1C[i], gFameCheckerText_Cancel); - gUnknown_203AD18[i].label = gUnknown_203AD1C[i]; - gUnknown_203AD18[i].index = i; - gMultiuseListMenuTemplate.items = gUnknown_203AD18; - gMultiuseListMenuTemplate.totalItems = gUnknown_203AD10->nItems[pocket] + 1; + for (i = 0; i < sBagMenuDisplay->nItems[pocket]; i++) + { + BagListMenuGetItemNameColored(sListMenuItemStrings[i], bagPocket->itemSlots[i].itemId); + sListMenuItems[i].label = sListMenuItemStrings[i]; + sListMenuItems[i].index = i; + } + StringCopy(sListMenuItemStrings[i], sListItemTextColor_RegularItem); + StringAppend(sListMenuItemStrings[i], gFameCheckerText_Cancel); + sListMenuItems[i].label = sListMenuItemStrings[i]; + sListMenuItems[i].index = i; + gMultiuseListMenuTemplate.items = sListMenuItems; + gMultiuseListMenuTemplate.totalItems = sBagMenuDisplay->nItems[pocket] + 1; gMultiuseListMenuTemplate.windowId = 0; gMultiuseListMenuTemplate.header_X = 0; gMultiuseListMenuTemplate.item_X = 9; @@ -657,80 +658,80 @@ void sub_810842C(u8 pocket) gMultiuseListMenuTemplate.lettersSpacing = 0; gMultiuseListMenuTemplate.itemVerticalPadding = 2; gMultiuseListMenuTemplate.upText_Y = 2; - gMultiuseListMenuTemplate.maxShowed = gUnknown_203AD10->maxShowed[pocket]; + gMultiuseListMenuTemplate.maxShowed = sBagMenuDisplay->maxShowed[pocket]; gMultiuseListMenuTemplate.fontId = 2; gMultiuseListMenuTemplate.cursorPal = 2; gMultiuseListMenuTemplate.fillValue = 0; gMultiuseListMenuTemplate.cursorShadowPal = 3; - gMultiuseListMenuTemplate.moveCursorFunc = sub_81085A4; - gMultiuseListMenuTemplate.itemPrintFunc = sub_8108654; + gMultiuseListMenuTemplate.moveCursorFunc = BagListMenuMoveCursorFunc; + gMultiuseListMenuTemplate.itemPrintFunc = BagListMenuItemPrintFunc; gMultiuseListMenuTemplate.cursorKind = 0; gMultiuseListMenuTemplate.scrollMultiple = 0; } -void sub_8108560(u8 *dest, u16 itemId) +static void BagListMenuGetItemNameColored(u8 *dest, u16 itemId) { if (itemId == ITEM_TM_CASE || itemId == ITEM_BERRY_POUCH) - StringCopy(dest, gUnknown_8452F66); + StringCopy(dest, sListItemTextColor_TmCase_BerryPouch); else - StringCopy(dest, gUnknown_8452F60); + StringCopy(dest, sListItemTextColor_RegularItem); StringAppend(dest, ItemId_GetName(itemId)); } -void sub_81085A4(s32 itemIndex, bool8 onInit, struct ListMenu *list) +static void BagListMenuMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list) { if (onInit != TRUE) { PlaySE(SE_BAG1); sub_8098580(); } - if (gUnknown_203AD10->field_04 == 0xFF) + if (sBagMenuDisplay->itemOriginalLocation == 0xFF) { - DestroyItemMenuIcon(gUnknown_203AD10->itemMenuIcon ^ 1); - if (gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket] != itemIndex) - CreateItemMenuIcon(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemIndex), gUnknown_203AD10->itemMenuIcon); + DestroyItemMenuIcon(sBagMenuDisplay->itemMenuIcon ^ 1); + if (sBagMenuDisplay->nItems[gBagMenuState.pocket] != itemIndex) + CreateItemMenuIcon(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, itemIndex), sBagMenuDisplay->itemMenuIcon); else - CreateItemMenuIcon(ITEM_N_A, gUnknown_203AD10->itemMenuIcon); - gUnknown_203AD10->itemMenuIcon ^= 1; - if (gUnknown_203AD10->field_05_6 == 0) - sub_8108818(itemIndex); + CreateItemMenuIcon(ITEM_N_A, sBagMenuDisplay->itemMenuIcon); + sBagMenuDisplay->itemMenuIcon ^= 1; + if (!sBagMenuDisplay->inhibitItemDescriptionPrint) + PrintItemDescriptionOnMessageWindow(itemIndex); } } -void sub_8108654(u8 windowId, s32 itemId, u8 y) +static void BagListMenuItemPrintFunc(u8 windowId, s32 itemId, u8 y) { u16 bagItemId; u16 bagItemQuantity; - if (gUnknown_203AD10->field_04 != 0xFF) + if (sBagMenuDisplay->itemOriginalLocation != 0xFF) { - if (gUnknown_203AD10->field_04 == (u8)itemId) + if (sBagMenuDisplay->itemOriginalLocation == (u8)itemId) bag_menu_print_cursor(y, 2); else bag_menu_print_cursor(y, 0xFF); } - if (itemId != -2 && gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket] != itemId) + if (itemId != -2 && sBagMenuDisplay->nItems[gBagMenuState.pocket] != itemId) { - bagItemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemId); - bagItemQuantity = BagGetQuantityByPocketPosition(gUnknown_203ACFC.pocket + 1, itemId); - if (gUnknown_203ACFC.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(bagItemId)) + bagItemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, itemId); + bagItemQuantity = BagGetQuantityByPocketPosition(gBagMenuState.pocket + 1, itemId); + if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(bagItemId)) { ConvertIntToDecimalStringN(gStringVar1, bagItemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - sub_810B8F0(windowId, 0, gStringVar4, 0x6e, y, 0, 0, 0xFF, 1); + BagPrintTextOnWindow(windowId, 0, gStringVar4, 0x6e, y, 0, 0, 0xFF, 1); } else if (gSaveBlock1Ptr->registeredItem != ITEM_NONE && gSaveBlock1Ptr->registeredItem == bagItemId) { - BlitBitmapToWindow(windowId, gUnknown_8452F7C, 0x70, y, 0x18, 0x10); + BlitBitmapToWindow(windowId, sBlit_SelectButton, 0x70, y, 0x18, 0x10); } } } -void bag_menu_print_cursor_(u8 taskId, u8 colorIdx) +static void bag_menu_print_cursor_(u8 taskId, u8 colorIdx) { bag_menu_print_cursor(ListMenuGetYCoordForPrintingArrowCursor(taskId), colorIdx); } -void bag_menu_print_cursor(u8 y, u8 colorIdx) +static void bag_menu_print_cursor(u8 y, u8 colorIdx) { if (colorIdx == 0xFF) { @@ -738,53 +739,53 @@ void bag_menu_print_cursor(u8 y, u8 colorIdx) } else { - sub_810B8F0(0, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, colorIdx); + BagPrintTextOnWindow(0, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, colorIdx); } } -void sub_81087EC(void) +static void PrintBagPocketName(void) { FillWindowPixelBuffer(2, PIXEL_FILL(0)); - sub_810B958(sPocketNames[gUnknown_203ACFC.pocket], gUnknown_203ACFC.pocket); + BagPrintTextOnWin1CenteredColor0(sPocketNames[gBagMenuState.pocket], gBagMenuState.pocket); } -void sub_8108818(s32 itemIndex) +static void PrintItemDescriptionOnMessageWindow(s32 itemIndex) { const u8 *description; - if (itemIndex != gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket]) - description = ItemId_GetDescription(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemIndex)); + if (itemIndex != sBagMenuDisplay->nItems[gBagMenuState.pocket]) + description = ItemId_GetDescription(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, itemIndex)); else description = gText_CloseBag; FillWindowPixelBuffer(1, PIXEL_FILL(0)); - sub_810B8F0(1, 2, description, 0, 3, 2, 0, 0, 0); + BagPrintTextOnWindow(1, 2, description, 0, 3, 2, 0, 0, 0); } -void sub_8108888(void) +static void CreatePocketScrollArrowPair(void) { - gUnknown_203AD10->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized( + sBagMenuDisplay->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized( SCROLL_ARROW_UP, 160, 8, 104, - gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket] - gUnknown_203AD10->maxShowed[gUnknown_203ACFC.pocket] + 1, + sBagMenuDisplay->nItems[gBagMenuState.pocket] - sBagMenuDisplay->maxShowed[gBagMenuState.pocket] + 1, 110, 110, - &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket] + &gBagMenuState.cursorPos[gBagMenuState.pocket] ); } -void sub_81088D8(void) +static void CreatePocketSwitchArrowPair(void) { - if (gUnknown_203AD10->field_05_0 != 1) + if (sBagMenuDisplay->pocketSwitchMode != 1) { - gUnknown_203AD10->pocketSwitchArrowsTask = AddScrollIndicatorArrowPair(&gUnknown_8452F6C, &gUnknown_203ACFC.pocket); + sBagMenuDisplay->pocketSwitchArrowsTask = AddScrollIndicatorArrowPair(&sPocketSwitchArrowPairTemplate, &gBagMenuState.pocket); } } -void sub_8108908(void) +static void CreatePocketScrollArrowPair_SellQuantity(void) { - gUnknown_203AD10->contextMenuSelectedItem = 1; - gUnknown_203AD10->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized( + sBagMenuDisplay->contextMenuSelectedItem = 1; + sBagMenuDisplay->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized( SCROLL_ARROW_UP, 152, 72, @@ -792,14 +793,14 @@ void sub_8108908(void) 2, 110, 110, - &gUnknown_203AD10->contextMenuSelectedItem + &sBagMenuDisplay->contextMenuSelectedItem ); } -void sub_8108940(void) +static void CreateArrowPair_QuantitySelect(void) { - gUnknown_203AD10->contextMenuSelectedItem = 1; - gUnknown_203AD10->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized( + sBagMenuDisplay->contextMenuSelectedItem = 1; + sBagMenuDisplay->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized( SCROLL_ARROW_UP, 212, 120, @@ -807,115 +808,115 @@ void sub_8108940(void) 2, 110, 110, - &gUnknown_203AD10->contextMenuSelectedItem + &sBagMenuDisplay->contextMenuSelectedItem ); } -void sub_8108978(void) +static void BagDestroyPocketScrollArrowPair(void) { - if (gUnknown_203AD10->pocketScrollArrowsTask != 0xFF) + if (sBagMenuDisplay->pocketScrollArrowsTask != 0xFF) { - RemoveScrollIndicatorArrowPair(gUnknown_203AD10->pocketScrollArrowsTask); - gUnknown_203AD10->pocketScrollArrowsTask = 0xFF; + RemoveScrollIndicatorArrowPair(sBagMenuDisplay->pocketScrollArrowsTask); + sBagMenuDisplay->pocketScrollArrowsTask = 0xFF; } - sub_810899C(); + BagDestroyPocketSwitchArrowPair(); } -void sub_810899C(void) +static void BagDestroyPocketSwitchArrowPair(void) { - if (gUnknown_203AD10->pocketSwitchArrowsTask != 0xFF) + if (sBagMenuDisplay->pocketSwitchArrowsTask != 0xFF) { - RemoveScrollIndicatorArrowPair(gUnknown_203AD10->pocketSwitchArrowsTask); - gUnknown_203AD10->pocketSwitchArrowsTask = 0xFF; + RemoveScrollIndicatorArrowPair(sBagMenuDisplay->pocketSwitchArrowsTask); + sBagMenuDisplay->pocketSwitchArrowsTask = 0xFF; } } -void sub_81089BC(void) +void ResetBagCursorPositions(void) { u8 i; - gUnknown_203ACFC.pocket = POCKET_ITEMS - 1; - gUnknown_203ACFC.unk5 = 0; + gBagMenuState.pocket = POCKET_ITEMS - 1; + gBagMenuState.bagOpen = 0; for (i = 0; i < 3; i++) { - gUnknown_203ACFC.itemsAbove[i] = 0; - gUnknown_203ACFC.cursorPos[i] = 0; + gBagMenuState.itemsAbove[i] = 0; + gBagMenuState.cursorPos[i] = 0; } } -void sub_81089F4(u8 pocketId) +void PocketCalculateInitialCursorPosAndItemsAbove(u8 pocketId) { - if (gUnknown_203ACFC.cursorPos[pocketId] != 0 && gUnknown_203ACFC.cursorPos[pocketId] + gUnknown_203AD10->maxShowed[pocketId] > gUnknown_203AD10->nItems[pocketId] + 1) + if (gBagMenuState.cursorPos[pocketId] != 0 && gBagMenuState.cursorPos[pocketId] + sBagMenuDisplay->maxShowed[pocketId] > sBagMenuDisplay->nItems[pocketId] + 1) { - gUnknown_203ACFC.cursorPos[pocketId] = (gUnknown_203AD10->nItems[pocketId] + 1) - gUnknown_203AD10->maxShowed[pocketId]; + gBagMenuState.cursorPos[pocketId] = (sBagMenuDisplay->nItems[pocketId] + 1) - sBagMenuDisplay->maxShowed[pocketId]; } - if (gUnknown_203ACFC.cursorPos[pocketId] + gUnknown_203ACFC.itemsAbove[pocketId] >= gUnknown_203AD10->nItems[pocketId] + 1) + if (gBagMenuState.cursorPos[pocketId] + gBagMenuState.itemsAbove[pocketId] >= sBagMenuDisplay->nItems[pocketId] + 1) { - if (gUnknown_203AD10->nItems[pocketId] + 1 < 2) - gUnknown_203ACFC.itemsAbove[pocketId] = 0; + if (sBagMenuDisplay->nItems[pocketId] + 1 < 2) + gBagMenuState.itemsAbove[pocketId] = 0; else - gUnknown_203ACFC.itemsAbove[pocketId] = gUnknown_203AD10->nItems[pocketId]; + gBagMenuState.itemsAbove[pocketId] = sBagMenuDisplay->nItems[pocketId]; } } -void sub_8108A68(void) +static void CalculateInitialCursorPosAndItemsAbove(void) { u8 i; for (i = 0; i < 3; i++) { - sub_81089F4(i); + PocketCalculateInitialCursorPosAndItemsAbove(i); } } -void sub_8108A84(void) +static void UpdatePocketScrollPositions(void) { u8 i; u8 j; for (i = 0; i < 3; i++) { - if (gUnknown_203ACFC.itemsAbove[i] > 3) + if (gBagMenuState.itemsAbove[i] > 3) { - for (j = 0; j <= gUnknown_203ACFC.itemsAbove[i] - 3; gUnknown_203ACFC.itemsAbove[i]--, gUnknown_203ACFC.cursorPos[i]++, j++) + for (j = 0; j <= gBagMenuState.itemsAbove[i] - 3; gBagMenuState.itemsAbove[i]--, gBagMenuState.cursorPos[i]++, j++) { - if (gUnknown_203ACFC.cursorPos[i] + gUnknown_203AD10->maxShowed[i] == gUnknown_203AD10->nItems[i] + 1) + if (gBagMenuState.cursorPos[i] + sBagMenuDisplay->maxShowed[i] == sBagMenuDisplay->nItems[i] + 1) break; } } } } -void sub_8108B04(void) +static void DestroyBagMenuResources(void) { - FREE_IF_SET(gUnknown_203AD10); - FREE_IF_SET(gUnknown_203AD14); - FREE_IF_SET(gUnknown_203AD18); - FREE_IF_SET(gUnknown_203AD1C); + FREE_IF_SET(sBagMenuDisplay); + FREE_IF_SET(sBagBgTilemapBuffer); + FREE_IF_SET(sListMenuItems); + FREE_IF_SET(sListMenuItemStrings); FreeAllWindowBuffers(); } void ItemMenu_StartFadeToExitCallback(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); - gTasks[taskId].func = sub_8108B8C; + gTasks[taskId].func = Task_ItemMenu_WaitFadeAndSwitchToExitCallback; } -void sub_8108B8C(u8 taskId) +static void Task_ItemMenu_WaitFadeAndSwitchToExitCallback(u8 taskId) { s16 *data = gTasks[taskId].data; - if (!gPaletteFade.active && FuncIsActiveTask(sub_8108CFC) != TRUE) + if (!gPaletteFade.active && FuncIsActiveTask(Task_AnimateWin0v) != TRUE) { - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - if (gUnknown_203AD10->exitCB != NULL) - SetMainCallback2(gUnknown_203AD10->exitCB); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); + if (sBagMenuDisplay->exitCB != NULL) + SetMainCallback2(sBagMenuDisplay->exitCB); else - SetMainCallback2(gUnknown_203ACFC.bagCallback); - sub_8108978(); - sub_8108B04(); + SetMainCallback2(gBagMenuState.bagCallback); + BagDestroyPocketScrollArrowPair(); + DestroyBagMenuResources(); DestroyTask(taskId); } } -void sub_8108C10(void) +static void ShowBagOrBeginWin0OpenTask(void) { u16 paldata = RGB_BLACK; u8 taskId; @@ -925,7 +926,7 @@ void sub_8108C10(void) SetGpuReg(REG_OFFSET_WINOUT, 0x3F); BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - if (gUnknown_203ACFC.unk5 == 1) + if (gBagMenuState.bagOpen == 1) { SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 240)); SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 0)); @@ -934,28 +935,28 @@ void sub_8108C10(void) { SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 240)); SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 160)); - taskId = CreateTask(sub_8108CFC, 0); + taskId = CreateTask(Task_AnimateWin0v, 0); gTasks[taskId].data[0] = 192; gTasks[taskId].data[1] = -16; - gUnknown_203ACFC.unk5 = 1; + gBagMenuState.bagOpen = 1; } } -void sub_8108CB4(void) +void Bag_BeginCloseWin0Animation(void) { - u8 taskId = CreateTask(sub_8108CFC, 0); + u8 taskId = CreateTask(Task_AnimateWin0v, 0); gTasks[taskId].data[0] = -16; gTasks[taskId].data[1] = 16; - gUnknown_203ACFC.unk5 = 0; + gBagMenuState.bagOpen = 0; } void CB2_SetUpReshowBattleScreenAfterMenu(void) { - gUnknown_203ACFC.unk5 = 0; + gBagMenuState.bagOpen = 0; } -void sub_8108CFC(u8 taskId) +static void Task_AnimateWin0v(u8 taskId) { s16 *data = gTasks[taskId].data; data[0] += data[1]; @@ -993,35 +994,35 @@ void MoveItemSlotInList(struct ItemSlot * itemSlots_, u32 from, u32 to_) } } -void sub_8108DC8(u8 pocketId) +void Pocket_CalculateNItemsAndMaxShowed(u8 pocketId) { u16 i; struct BagPocket * pocket = &gBagPockets[pocketId]; BagPocketCompaction(pocket->itemSlots, pocket->capacity); - gUnknown_203AD10->nItems[pocketId] = 0; + sBagMenuDisplay->nItems[pocketId] = 0; for (i = 0; i < pocket->capacity; i++) { if (pocket->itemSlots[i].itemId == ITEM_NONE) break; - gUnknown_203AD10->nItems[pocketId]++; + sBagMenuDisplay->nItems[pocketId]++; } - if (gUnknown_203AD10->nItems[pocketId] + 1 > 6) - gUnknown_203AD10->maxShowed[pocketId] = 6; + if (sBagMenuDisplay->nItems[pocketId] + 1 > 6) + sBagMenuDisplay->maxShowed[pocketId] = 6; else - gUnknown_203AD10->maxShowed[pocketId] = gUnknown_203AD10->nItems[pocketId] + 1; + sBagMenuDisplay->maxShowed[pocketId] = sBagMenuDisplay->nItems[pocketId] + 1; } -void sub_8108E54(void) +static void All_CalculateNItemsAndMaxShowed(void) { u8 i; for (i = 0; i < 3; i++) - sub_8108DC8(i); + Pocket_CalculateNItemsAndMaxShowed(i); } void DisplayItemMessageInBag(u8 taskId, u8 fontId, const u8 * string, TaskFunc followUpFunc) { s16 *data = gTasks[taskId].data; - data[10] = sub_810BA70(5); + data[10] = OpenBagWindow(5); FillWindowPixelBuffer(data[10], PIXEL_FILL(1)); DisplayMessageAndContinueTask(taskId, data[10], 0x06D, 0x0D, fontId, GetTextSpeedSetting(), string, followUpFunc); ScheduleBgCopyTilemapToVram(0); @@ -1029,15 +1030,15 @@ void DisplayItemMessageInBag(u8 taskId, u8 fontId, const u8 * string, TaskFunc f void ItemMenu_SetExitCallback(MainCallback cb) { - gUnknown_203AD10->exitCB = cb; + sBagMenuDisplay->exitCB = cb; } -u8 sub_8108EEC(u8 a0) +static u8 GetSelectedItemIndex(u8 pocket) { - return gUnknown_203ACFC.cursorPos[a0] + gUnknown_203ACFC.itemsAbove[a0]; + return gBagMenuState.cursorPos[pocket] + gBagMenuState.itemsAbove[pocket]; } -void sub_8108F0C(u8 taskId) +static void Task_BagMenu_HandleInput(u8 taskId) { s16 *data = gTasks[taskId].data; u16 cursorPos; @@ -1046,33 +1047,33 @@ void sub_8108F0C(u8 taskId) if (gPaletteFade.active) return; - if (FuncIsActiveTask(sub_8108CFC) == TRUE) + if (FuncIsActiveTask(Task_AnimateWin0v) == TRUE) return; if ((u8)sub_80BF72C() == TRUE) return; - switch (sub_8109168(taskId, gUnknown_203ACFC.pocket)) + switch (ProcessPocketSwitchInput(taskId, gBagMenuState.pocket)) { case 1: - sub_81091D0(taskId, -1, FALSE); + SwitchPockets(taskId, -1, FALSE); return; case 2: - sub_81091D0(taskId, 1, FALSE); + SwitchPockets(taskId, 1, FALSE); return; default: - if (JOY_NEW(SELECT_BUTTON) && gUnknown_203ACFC.location == 0) + if (JOY_NEW(SELECT_BUTTON) && gBagMenuState.location == ITEMMENULOCATION_FIELD) { ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); - if (cursorPos + itemsAbove != gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket]) + if (cursorPos + itemsAbove != sBagMenuDisplay->nItems[gBagMenuState.pocket]) { PlaySE(SE_SELECT); - sub_81093B8(taskId, cursorPos + itemsAbove); + BeginMovingItemInPocket(taskId, cursorPos + itemsAbove); return; } } break; } input = ListMenu_ProcessInput(data[0]); - ListMenuGetScrollAndRow(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + ListMenuGetScrollAndRow(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); switch (input) { case LIST_NOTHING_CHOSEN: @@ -1080,54 +1081,54 @@ void sub_8108F0C(u8 taskId) case LIST_CANCEL: PlaySE(SE_SELECT); gSpecialVar_ItemId = ITEM_NONE; - sub_8108CB4(); + Bag_BeginCloseWin0Animation(); gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; break; default: PlaySE(SE_SELECT); - if (input == gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket]) + if (input == sBagMenuDisplay->nItems[gBagMenuState.pocket]) { gSpecialVar_ItemId = ITEM_NONE; - sub_8108CB4(); + Bag_BeginCloseWin0Animation(); gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; } else { - sub_8108978(); + BagDestroyPocketScrollArrowPair(); bag_menu_print_cursor_(data[0], 2); data[1] = input; - data[2] = BagGetQuantityByPocketPosition(gUnknown_203ACFC.pocket + 1, input); - gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, input); - gTasks[taskId].func = sub_81090DC; + data[2] = BagGetQuantityByPocketPosition(gBagMenuState.pocket + 1, input); + gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, input); + gTasks[taskId].func = Task_ItemContextMenuByLocation; } break; } } -void sub_81090DC(u8 taskId) +static void Task_ItemContextMenuByLocation(u8 taskId) { - sub_8109140(1); - gUnknown_8452F34[gUnknown_203ACFC.location](taskId); + Bag_FillMessageBoxWithPalette(1); + sItemContextTaskFuncs[gBagMenuState.location](taskId); } -void sub_810910C(u8 taskId) +static void Task_RedrawArrowsAndReturnToBagMenuSelect(u8 taskId) { - sub_8109140(0); - sub_8108888(); - sub_81088D8(); - gTasks[taskId].func = sub_8108F0C; + Bag_FillMessageBoxWithPalette(0); + CreatePocketScrollArrowPair(); + CreatePocketSwitchArrowPair(); + gTasks[taskId].func = Task_BagMenu_HandleInput; } -void sub_8109140(u32 a0) +static void Bag_FillMessageBoxWithPalette(u32 a0) { SetBgTilemapPalette(1, 0, 14, 30, 6, a0 + 1); ScheduleBgCopyTilemapToVram(1); } -u8 sub_8109168(u8 taskId, u8 pocketId) +static u8 ProcessPocketSwitchInput(u8 taskId, u8 pocketId) { u8 lrState; - if (gUnknown_203AD10->field_05_0 != 0) + if (sBagMenuDisplay->pocketSwitchMode != 0) return 0; lrState = GetLRKeysState(); if (JOY_NEW(DPAD_LEFT) || lrState == 1) @@ -1147,7 +1148,7 @@ u8 sub_8109168(u8 taskId, u8 pocketId) return 0; } -void sub_81091D0(u8 taskId, s16 direction, bool16 a2) +static void SwitchPockets(u8 taskId, s16 direction, bool16 a2) { s16 *data = gTasks[taskId].data; data[13] = 0; @@ -1158,33 +1159,33 @@ void sub_81091D0(u8 taskId, s16 direction, bool16 a2) ClearWindowTilemap(0); ClearWindowTilemap(1); ClearWindowTilemap(2); - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); ScheduleBgCopyTilemapToVram(0); - DestroyItemMenuIcon(gUnknown_203AD10->itemMenuIcon ^ 1); - sub_8108978(); + DestroyItemMenuIcon(sBagMenuDisplay->itemMenuIcon ^ 1); + BagDestroyPocketScrollArrowPair(); } FillBgTilemapBufferRect_Palette0(1, 0x02D, 11, 1, 18, 12); ScheduleBgCopyTilemapToVram(1); - sub_8098528(gUnknown_203ACFC.pocket + direction); - SetTaskFuncWithFollowupFunc(taskId, sub_8109298, gTasks[taskId].func); + sub_8098528(gBagMenuState.pocket + direction); + SetTaskFuncWithFollowupFunc(taskId, Task_AnimateSwitchPockets, gTasks[taskId].func); } -void sub_8109298(u8 taskId) +static void Task_AnimateSwitchPockets(u8 taskId) { s16 *data = gTasks[taskId].data; - if (!MenuHelpers_LinkSomething() && !sub_810ADAC()) + if (!MenuHelpers_LinkSomething() && !BagIsTutorial()) { - switch (sub_8109168(taskId, gUnknown_203ACFC.pocket + data[11])) + switch (ProcessPocketSwitchInput(taskId, gBagMenuState.pocket + data[11])) { case 1: - gUnknown_203ACFC.pocket += data[11]; + gBagMenuState.pocket += data[11]; SwitchTaskToFollowupFunc(taskId); - sub_81091D0(taskId, -1, TRUE); + SwitchPockets(taskId, -1, TRUE); return; case 2: - gUnknown_203ACFC.pocket += data[11]; + gBagMenuState.pocket += data[11]; SwitchTaskToFollowupFunc(taskId); - sub_81091D0(taskId, 1, TRUE); + SwitchPockets(taskId, 1, TRUE); return; } } @@ -1194,7 +1195,7 @@ void sub_8109298(u8 taskId) if (data[12] != 0x7FFF) { data[12]++; - sub_8109854(data[12]); + CopyBagListBgTileRowToTilemapBuffer(data[12]); if (data[12] == 12) data[12] = 0x7FFF; } @@ -1202,21 +1203,21 @@ void sub_8109298(u8 taskId) data[13]++; break; case 1: - gUnknown_203ACFC.pocket += data[11]; - sub_81087EC(); - sub_810842C(gUnknown_203ACFC.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + gBagMenuState.pocket += data[11]; + PrintBagPocketName(); + Bag_BuildListMenuTemplate(gBagMenuState.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); PutWindowTilemap(1); PutWindowTilemap(2); ScheduleBgCopyTilemapToVram(0); - sub_8108888(); - sub_81088D8(); + CreatePocketScrollArrowPair(); + CreatePocketSwitchArrowPair(); SwitchTaskToFollowupFunc(taskId); break; } } -void sub_81093B8(u8 taskId, s16 itemIndex) +static void BeginMovingItemInPocket(u8 taskId, s16 itemIndex) { u16 itemsAbove; u16 cursorPos; @@ -1224,19 +1225,19 @@ void sub_81093B8(u8 taskId, s16 itemIndex) ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); ListMenuSetUnkIndicatorsStructField(data[0], 0x10, 1); data[1] = itemIndex; - gUnknown_203AD10->field_04 = itemIndex; - StringCopy(gStringVar1, ItemId_GetName(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]))); + sBagMenuDisplay->itemOriginalLocation = itemIndex; + StringCopy(gStringVar1, ItemId_GetName(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]))); StringExpandPlaceholders(gStringVar4, gOtherText_WhereShouldTheStrVar1BePlaced); FillWindowPixelBuffer(1, PIXEL_FILL(0)); - sub_810B8F0(1, 2, gStringVar4, 0, 3, 2, 0, 0, 0); - sub_80986A8(0, ListMenuGetYCoordForPrintingArrowCursor(data[0])); - sub_8098660(0); - sub_810899C(); + BagPrintTextOnWindow(1, 2, gStringVar4, 0, 3, 2, 0, 0, 0); + ItemMenuIcons_MoveInsertIndicatorBar(0, ListMenuGetYCoordForPrintingArrowCursor(data[0])); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(FALSE); + BagDestroyPocketSwitchArrowPair(); bag_menu_print_cursor_(data[0], 2); - gTasks[taskId].func = sub_81094B0; + gTasks[taskId].func = Task_MoveItemInPocket_HandleInput; } -void sub_81094B0(u8 taskId) +static void Task_MoveItemInPocket_HandleInput(u8 taskId) { s16 *data = gTasks[taskId].data; s32 input; @@ -1245,14 +1246,14 @@ void sub_81094B0(u8 taskId) if ((u8)sub_80BF72C() == TRUE) return; input = ListMenu_ProcessInput(data[0]); - ListMenuGetScrollAndRow(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_80986A8(0, ListMenuGetYCoordForPrintingArrowCursor(data[0])); + ListMenuGetScrollAndRow(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); + ItemMenuIcons_MoveInsertIndicatorBar(0, ListMenuGetYCoordForPrintingArrowCursor(data[0])); if (JOY_NEW(SELECT_BUTTON)) { PlaySE(SE_SELECT); - gUnknown_203AD10->field_04 = 0xFF; + sBagMenuDisplay->itemOriginalLocation = 0xFF; ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); - sub_81095AC(taskId, cursorPos + itemsAbove); + ExecuteMoveItemInPocket(taskId, cursorPos + itemsAbove); return; } switch (input) @@ -1261,163 +1262,163 @@ void sub_81094B0(u8 taskId) return; case LIST_CANCEL: PlaySE(SE_SELECT); - gUnknown_203AD10->field_04 = 0xFF; + sBagMenuDisplay->itemOriginalLocation = 0xFF; ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); - sub_810967C(taskId, cursorPos + itemsAbove); + AbortMovingItemInPocket(taskId, cursorPos + itemsAbove); break; default: PlaySE(SE_SELECT); - gUnknown_203AD10->field_04 = 0xFF; - sub_81095AC(taskId, input); + sBagMenuDisplay->itemOriginalLocation = 0xFF; + ExecuteMoveItemInPocket(taskId, input); break; } } -void sub_81095AC(u8 taskId, u32 itemIndex) +static void ExecuteMoveItemInPocket(u8 taskId, u32 itemIndex) { s16 *data = gTasks[taskId].data; if (data[1] == itemIndex || data[1] == itemIndex - 1) { - sub_810967C(taskId, itemIndex); + AbortMovingItemInPocket(taskId, itemIndex); } else { - MoveItemSlotInList(gBagPockets[gUnknown_203ACFC.pocket].itemSlots, data[1], itemIndex); - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + MoveItemSlotInList(gBagPockets[gBagMenuState.pocket].itemSlots, data[1], itemIndex); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); if (data[1] < itemIndex) - gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]--; - sub_810842C(gUnknown_203ACFC.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_8098660(1); - sub_81088D8(); - gTasks[taskId].func = sub_8108F0C; + gBagMenuState.itemsAbove[gBagMenuState.pocket]--; + Bag_BuildListMenuTemplate(gBagMenuState.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(TRUE); + CreatePocketSwitchArrowPair(); + gTasks[taskId].func = Task_BagMenu_HandleInput; } } -void sub_810967C(u8 taskId, u32 itemIndex) +static void AbortMovingItemInPocket(u8 taskId, u32 itemIndex) { s16 *data = gTasks[taskId].data; - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); if (data[1] < itemIndex) - gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]--; - sub_810842C(gUnknown_203ACFC.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_8098660(1); - sub_81088D8(); - gTasks[taskId].func = sub_8108F0C; + gBagMenuState.itemsAbove[gBagMenuState.pocket]--; + Bag_BuildListMenuTemplate(gBagMenuState.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(TRUE); + CreatePocketSwitchArrowPair(); + gTasks[taskId].func = Task_BagMenu_HandleInput; } -void sub_810971C(u16 cursorPos, const u8 *str) +static void InitQuantityToTossOrDeposit(u16 cursorPos, const u8 *str) { u8 r4; - u8 r5 = sub_810B9DC(6, 2); - CopyItemName(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, cursorPos), gStringVar1); + u8 r5 = ShowBagWindow(6, 2); + CopyItemName(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, cursorPos), gStringVar1); StringExpandPlaceholders(gStringVar4, str); - sub_810B8F0(r5, 2, gStringVar4, 0, 2, 1, 0, 0, 1); - r4 = sub_810B9DC(0, 0); + BagPrintTextOnWindow(r5, 2, gStringVar4, 0, 2, 1, 0, 0, 1); + r4 = ShowBagWindow(0, 0); ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - sub_810B8F0(r4, 0, gStringVar4, 4, 10, 1, 0, 0, 1); - sub_8108940(); + BagPrintTextOnWindow(r4, 0, gStringVar4, 4, 10, 1, 0, 0, 1); + CreateArrowPair_QuantitySelect(); } -void sub_81097E4(s16 value, u8 ndigits) +static void UpdateQuantityToTossOrDeposit(s16 value, u8 ndigits) { - u8 r6 = sub_810BAD8(0); + u8 r6 = GetBagWindow(0); FillWindowPixelBuffer(r6, PIXEL_FILL(1)); ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEADING_ZEROS, ndigits); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - sub_810B8F0(r6, 0, gStringVar4, 4, 10, 1, 0, 0, 1); + BagPrintTextOnWindow(r6, 0, gStringVar4, 4, 10, 1, 0, 0, 1); } -void sub_8109854(u8 a0) +static void CopyBagListBgTileRowToTilemapBuffer(u8 frame) { - CopyToBgTilemapBufferRect(1, gUnknown_8452D08[12 - a0], 11, 13 - a0, 18, 1); + CopyToBgTilemapBufferRect(1, sBagListBgTiles[12 - frame], 11, 13 - frame, 18, 1); ScheduleBgCopyTilemapToVram(1); } -void sub_8109890(u8 taskId) +static void OpenContextMenu(u8 taskId) { u8 r6; u8 r4; - switch (gUnknown_203ACFC.location) + switch (gBagMenuState.location) { - case 5: - case 7: + case ITEMMENULOCATION_BATTLE: + case ITEMMENULOCATION_TTVSCR_STATUS: if (gSpecialVar_ItemId == ITEM_BERRY_POUCH) { - gUnknown_203AD20[0] = ITEMMENUACTION_OPEN_BERRIES; - gUnknown_203AD20[1] = ITEMMENUACTION_CANCEL; - gUnknown_203AD24 = gUnknown_203AD20; - gUnknown_203AD28 = 2; + sContextMenuItemsBuffer[0] = ITEMMENUACTION_OPEN_BERRIES; + sContextMenuItemsBuffer[1] = ITEMMENUACTION_CANCEL; + sContextMenuItemsPtr = sContextMenuItemsBuffer; + sContextMenuNumItems = 2; } else if (ItemId_GetBattleUsage(gSpecialVar_ItemId)) { - gUnknown_203AD24 = gUnknown_8452F30; - gUnknown_203AD28 = 2; + sContextMenuItemsPtr = sContextMenuItems_BattleUse; + sContextMenuNumItems = 2; } else { - gUnknown_203AD24 = gUnknown_8452F32; - gUnknown_203AD28 = 1; + sContextMenuItemsPtr = sContextMenuItems_Cancel; + sContextMenuNumItems = 1; } break; - case 6: - case 8: - gUnknown_203AD24 = gUnknown_8452F30; - gUnknown_203AD28 = 2; + case ITEMMENULOCATION_OLDMAN: + case ITEMMENULOCATION_TTVSCR_CATCHING: + sContextMenuItemsPtr = sContextMenuItems_BattleUse; + sContextMenuNumItems = 2; break; default: if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE) { if (gSpecialVar_ItemId == ITEM_TM_CASE || gSpecialVar_ItemId == ITEM_BERRY_POUCH) { - gUnknown_203AD24 = gUnknown_8452F2E; - gUnknown_203AD28 = 2; + sContextMenuItemsPtr = sContextMenuItems_Open; + sContextMenuNumItems = 2; } else { - if (gUnknown_203ACFC.pocket == POCKET_KEY_ITEMS - 1) - gUnknown_203AD28 = 1; + if (gBagMenuState.pocket == POCKET_KEY_ITEMS - 1) + sContextMenuNumItems = 1; else - gUnknown_203AD28 = 2; - gUnknown_203AD24 = gUnknown_8452F28[gUnknown_203ACFC.pocket]; + sContextMenuNumItems = 2; + sContextMenuItemsPtr = sContextMenuItems_GiveIfNotKeyItemPocket[gBagMenuState.pocket]; } } else { - switch (gUnknown_203ACFC.pocket) + switch (gBagMenuState.pocket) { - case POCKET_ITEMS - 1: - gUnknown_203AD28 = 4; + case OPEN_BAG_ITEMS: + sContextMenuNumItems = 4; if (ItemIsMail(gSpecialVar_ItemId) == TRUE) - gUnknown_203AD24 = gUnknown_8452F24; + sContextMenuItemsPtr = sContextMenuItems_CheckGiveTossCancel; else - gUnknown_203AD24 = gUnknown_8452F18[gUnknown_203ACFC.pocket]; + sContextMenuItemsPtr = sContextMenuItems_Field[gBagMenuState.pocket]; break; - case POCKET_KEY_ITEMS - 1: - gUnknown_203AD24 = gUnknown_203AD20; - gUnknown_203AD28 = 3; - gUnknown_203AD20[2] = ITEMMENUACTION_CANCEL; + case OPEN_BAG_KEYITEMS: + sContextMenuItemsPtr = sContextMenuItemsBuffer; + sContextMenuNumItems = 3; + sContextMenuItemsBuffer[2] = ITEMMENUACTION_CANCEL; if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId) - gUnknown_203AD20[1] = ITEMMENUACTION_DESELECT; + sContextMenuItemsBuffer[1] = ITEMMENUACTION_DESELECT; else - gUnknown_203AD20[1] = ITEMMENUACTION_REGISTER; + sContextMenuItemsBuffer[1] = ITEMMENUACTION_REGISTER; if (gSpecialVar_ItemId == ITEM_TM_CASE || gSpecialVar_ItemId == ITEM_BERRY_POUCH) - gUnknown_203AD20[0] = ITEMMENUACTION_OPEN; + sContextMenuItemsBuffer[0] = ITEMMENUACTION_OPEN; else if (gSpecialVar_ItemId == ITEM_BICYCLE && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE | PLAYER_AVATAR_FLAG_MACH_BIKE)) - gUnknown_203AD20[0] = ITEMMENUACTION_WALK; + sContextMenuItemsBuffer[0] = ITEMMENUACTION_WALK; else - gUnknown_203AD20[0] = ITEMMENUACTION_USE; + sContextMenuItemsBuffer[0] = ITEMMENUACTION_USE; break; - case POCKET_POKE_BALLS - 1: - gUnknown_203AD24 = gUnknown_8452F18[gUnknown_203ACFC.pocket]; - gUnknown_203AD28 = 3; + case OPEN_BAG_POKEBALLS: + sContextMenuItemsPtr = sContextMenuItems_Field[gBagMenuState.pocket]; + sContextMenuNumItems = 3; break; } } } - r6 = sub_810B9DC(10, gUnknown_203AD28 - 1); + r6 = ShowBagWindow(10, sContextMenuNumItems - 1); AddItemMenuActionTextPrinters( r6, 2, @@ -1425,24 +1426,24 @@ void sub_8109890(u8 taskId) 2, GetFontAttribute(2, FONTATTR_LETTER_SPACING), GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, - gUnknown_203AD28, - gUnknown_8452EB8, - gUnknown_203AD24 + sContextMenuNumItems, + sItemMenuContextActions, + sContextMenuItemsPtr ); - Menu_InitCursor(r6, 2, 0, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, gUnknown_203AD28, 0); - r4 = sub_810B9DC(6, 0); + Menu_InitCursor(r6, 2, 0, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumItems, 0); + r4 = ShowBagWindow(6, 0); CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_StrVar1); - sub_810B8F0(r4, 2, gStringVar4, 0, 2, 1, 0, 0, 1); + BagPrintTextOnWindow(r4, 2, gStringVar4, 0, 2, 1, 0, 0, 1); } -void sub_8109BB8(u8 taskId) +static void Task_ItemContext_FieldOrBattle(u8 taskId) { - sub_8109890(taskId); - gTasks[taskId].func = sub_8109BE4; + OpenContextMenu(taskId); + gTasks[taskId].func = Task_FieldItemContextMenuHandleInput; } -void sub_8109BE4(u8 taskId) +static void Task_FieldItemContextMenuHandleInput(u8 taskId) { s8 input; if ((u8)sub_80BF72C() != TRUE) @@ -1452,244 +1453,244 @@ void sub_8109BE4(u8 taskId) { case -1: PlaySE(SE_SELECT); - gUnknown_8452EB8[ITEMMENUACTION_CANCEL].func.void_u8(taskId); + sItemMenuContextActions[ITEMMENUACTION_CANCEL].func.void_u8(taskId); break; case -2: break; default: PlaySE(SE_SELECT); - gUnknown_8452EB8[gUnknown_203AD24[input]].func.void_u8(taskId); + sItemMenuContextActions[sContextMenuItemsPtr[input]].func.void_u8(taskId); break; } } } -void Task_ItemMenuAction_Use(u8 taskId) +static void Task_ItemMenuAction_Use(u8 taskId) { if (ItemId_GetFieldFunc(gSpecialVar_ItemId) != NULL) { - sub_810BA3C(10); - sub_810BA3C(6); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gSpecialVar_ItemId) == 1) - sub_810A170(taskId); + Task_PrintThereIsNoPokemon(taskId); else ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId); } } -void Task_ItemMenuAction_Toss(u8 taskId) +static void Task_ItemMenuAction_Toss(u8 taskId) { s16 *data = gTasks[taskId].data; - ClearWindowTilemap(sub_810BAD8(10)); - ClearWindowTilemap(sub_810BAD8(6)); - sub_810BA3C(10); - sub_810BA3C(6); + ClearWindowTilemap(GetBagWindow(10)); + ClearWindowTilemap(GetBagWindow(6)); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); data[8] = 1; if (data[2] == 1) { - sub_8109D38(taskId); + Task_ConfirmTossItems(taskId); } else { - sub_810971C(data[1], gText_TossOutHowManyStrVar1s); - gTasks[taskId].func = sub_8109DEC; + InitQuantityToTossOrDeposit(data[1], gText_TossOutHowManyStrVar1s); + gTasks[taskId].func = Task_SelectQuantityToToss; } } -void sub_8109D38(u8 taskId) +static void Task_ConfirmTossItems(u8 taskId) { s16 *data = gTasks[taskId].data; ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_ThrowAwayStrVar2OfThisItemQM); - sub_810B8F0(sub_810B9DC(6, 1), 2, gStringVar4, 0, 2, 1, 0, 0, 1); - sub_810BAE8(taskId, &gUnknown_8452F50); + BagPrintTextOnWindow(ShowBagWindow(6, 1), 2, gStringVar4, 0, 2, 1, 0, 0, 1); + BagCreateYesNoMenuBottomRight(taskId, &sYesNoMenu_Toss); } -void sub_8109DB0(u8 taskId) +static void Task_TossItem_No(u8 taskId) { s16 *data = gTasks[taskId].data; - sub_810BA3C(6); + HideBagWindow(6); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); bag_menu_print_cursor_(data[0], 1); - sub_810910C(taskId); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } -void sub_8109DEC(u8 taskId) +static void Task_SelectQuantityToToss(u8 taskId) { s16 *data = gTasks[taskId].data; if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) { - sub_81097E4(data[8], 3); + UpdateQuantityToTossOrDeposit(data[8], 3); } else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - ClearWindowTilemap(sub_810BAD8(6)); - sub_810BA3C(6); - sub_810BA3C(0); + ClearWindowTilemap(GetBagWindow(6)); + HideBagWindow(6); + HideBagWindow(0); ScheduleBgCopyTilemapToVram(0); - sub_8108978(); - sub_8109D38(taskId); + BagDestroyPocketScrollArrowPair(); + Task_ConfirmTossItems(taskId); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_810BA3C(6); - sub_810BA3C(0); + HideBagWindow(6); + HideBagWindow(0); PutWindowTilemap(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); bag_menu_print_cursor_(data[0], 1); - sub_8108978(); - sub_810910C(taskId); + BagDestroyPocketScrollArrowPair(); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } } -void sub_8109EA8(u8 taskId) +static void Task_TossItem_Yes(u8 taskId) { s16 *data = gTasks[taskId].data; - sub_810BA3C(6); - CopyItemName(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]), gStringVar1); + HideBagWindow(6); + CopyItemName(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]), gStringVar1); ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_ThrewAwayStrVar2StrVar1s); - sub_810B8F0(sub_810B9DC(6, 3), 2, gStringVar4, 0, 2, 1, 0, 0, 1); - gTasks[taskId].func = sub_8109F44; + BagPrintTextOnWindow(ShowBagWindow(6, 3), 2, gStringVar4, 0, 2, 1, 0, 0, 1); + gTasks[taskId].func = Task_WaitAB_RedrawAndReturnToBag; } -void sub_8109F44(u8 taskId) +static void Task_WaitAB_RedrawAndReturnToBag(u8 taskId) { s16 *data = gTasks[taskId].data; if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); RemoveBagItem(gSpecialVar_ItemId, data[8]); - sub_810BA3C(6); - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_8108DC8(gUnknown_203ACFC.pocket); - sub_81089F4(gUnknown_203ACFC.pocket); - sub_810842C(gUnknown_203ACFC.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + HideBagWindow(6); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); + Pocket_CalculateNItemsAndMaxShowed(gBagMenuState.pocket); + PocketCalculateInitialCursorPosAndItemsAbove(gBagMenuState.pocket); + Bag_BuildListMenuTemplate(gBagMenuState.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); bag_menu_print_cursor_(data[0], 1); - sub_810910C(taskId); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } } -void Task_ItemMenuAction_ToggleSelect(u8 taskId) +static void Task_ItemMenuAction_ToggleSelect(u8 taskId) { u16 itemId; s16 *data = gTasks[taskId].data; - itemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]); + itemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]); if (gSaveBlock1Ptr->registeredItem == itemId) gSaveBlock1Ptr->registeredItem = ITEM_NONE; else gSaveBlock1Ptr->registeredItem = itemId; - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_810842C(gUnknown_203ACFC.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); + Bag_BuildListMenuTemplate(gBagMenuState.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); CopyWindowToVram(0, 1); Task_ItemMenuAction_Cancel(taskId); } -void Task_ItemMenuAction_Give(u8 taskId) +static void Task_ItemMenuAction_Give(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 itemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]); - sub_810BA3C(10); - sub_810BA3C(6); + u16 itemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); CopyWindowToVram(0, 1); if (!CanWriteMailHere(itemId)) - DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, sub_810A1D0); + DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); else if (!itemid_is_unique(itemId)) { if (CalculatePlayerPartyCount() == 0) { - sub_810A170(taskId); + Task_PrintThereIsNoPokemon(taskId); } else { - gUnknown_203AD10->exitCB = CB2_ChooseMonToGiveItem; + sBagMenuDisplay->exitCB = CB2_ChooseMonToGiveItem; gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; } } else - sub_810A18C(taskId); + Task_PrintItemCantBeHeld(taskId); } -void sub_810A170(u8 taskId) +static void Task_PrintThereIsNoPokemon(u8 taskId) { - DisplayItemMessageInBag(taskId, 2, gText_ThereIsNoPokemon, sub_810A1D0); + DisplayItemMessageInBag(taskId, 2, gText_ThereIsNoPokemon, Task_WaitAButtonAndCloseContextMenu); } -void sub_810A18C(u8 taskId) +static void Task_PrintItemCantBeHeld(u8 taskId) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_ItemCantBeHeld); - DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1D0); + DisplayItemMessageInBag(taskId, 2, gStringVar4, Task_WaitAButtonAndCloseContextMenu); } -void sub_810A1D0(u8 taskId) +static void Task_WaitAButtonAndCloseContextMenu(u8 taskId) { if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - sub_810A1F8(taskId); + Task_ReturnToBagFromContextMenu(taskId); } } -void sub_810A1F8(u8 taskId) +void Task_ReturnToBagFromContextMenu(u8 taskId) { s16 *data = gTasks[taskId].data; - sub_810BA9C(5); - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_8108DC8(gUnknown_203ACFC.pocket); - sub_81089F4(gUnknown_203ACFC.pocket); - sub_810842C(gUnknown_203ACFC.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + CloseBagWindow(5); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); + Pocket_CalculateNItemsAndMaxShowed(gBagMenuState.pocket); + PocketCalculateInitialCursorPosAndItemsAbove(gBagMenuState.pocket); + Bag_BuildListMenuTemplate(gBagMenuState.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); ScheduleBgCopyTilemapToVram(0); bag_menu_print_cursor_(data[0], 1); - sub_810910C(taskId); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } -void sub_810A288(u8 taskId) +static void unref_sub_810A288(u8 taskId) { s16 *data = gTasks[taskId].data; u16 itemsAbove; u16 cursorPos; ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); - sub_8108818(cursorPos + itemsAbove); + PrintItemDescriptionOnMessageWindow(cursorPos + itemsAbove); PutWindowTilemap(0); ScheduleBgCopyTilemapToVram(0); bag_menu_print_cursor_(data[0], 1); - sub_810910C(taskId); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } -void Task_ItemMenuAction_Cancel(u8 taskId) +static void Task_ItemMenuAction_Cancel(u8 taskId) { - sub_810BA3C(10); - sub_810BA3C(6); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); bag_menu_print_cursor_(gTasks[taskId].data[0], 1); - sub_810910C(taskId); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } -void sub_810A324(u8 taskId) +static void Task_ItemMenuAction_BattleUse(u8 taskId) { if (ItemId_GetBattleFunc(gSpecialVar_ItemId) != NULL) { - sub_810BA3C(10); - sub_810BA3C(6); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); CopyWindowToVram(0, 1); @@ -1697,120 +1698,120 @@ void sub_810A324(u8 taskId) } } -void sub_810A370(u8 taskId) +static void Task_ItemContext_FieldGive(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 itemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]); + u16 itemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]); if (!CanWriteMailHere(itemId)) { - DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, sub_810A1D0); + DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); } else if (itemId == ITEM_TM_CASE) { - ItemMenu_SetExitCallback(sub_810A434); + ItemMenu_SetExitCallback(GoToTMCase_Give); ItemMenu_StartFadeToExitCallback(taskId); } else if (itemId == ITEM_BERRY_POUCH) { - ItemMenu_SetExitCallback(sub_810A448); + ItemMenu_SetExitCallback(GoToBerryPouch_Give); ItemMenu_StartFadeToExitCallback(taskId); } - else if (gUnknown_203ACFC.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(itemId)) + else if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(itemId)) { - sub_8108CB4(); + Bag_BeginCloseWin0Animation(); gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; } else { - sub_810A18C(taskId); + Task_PrintItemCantBeHeld(taskId); } } -void sub_810A434(void) +static void GoToTMCase_Give(void) { - InitTMCase(1, sub_810A45C, FALSE); + InitTMCase(TMCASE_FROMPARTYGIVE, ReturnToBagMenuFromSubmenu_Give, FALSE); } -void sub_810A448(void) +static void GoToBerryPouch_Give(void) { - InitBerryPouch(1, sub_810A45C, FALSE); + InitBerryPouch(BERRYPOUCH_FROMPARTYGIVE, ReturnToBagMenuFromSubmenu_Give, FALSE); } -void sub_810A45C(void) +static void ReturnToBagMenuFromSubmenu_Give(void) { CB2_SelectBagItemToGive(); } -void sub_810A468(u8 taskId) +static void Task_ItemContext_PcBoxGive(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 itemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]); + u16 itemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]); if (ItemIsMail(itemId) == TRUE) { - DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, sub_810A1D0); + DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); } else if (itemId == ITEM_TM_CASE) { - ItemMenu_SetExitCallback(sub_810A52C); + ItemMenu_SetExitCallback(GoToTMCase_PCBox); ItemMenu_StartFadeToExitCallback(taskId); } else if (itemId == ITEM_BERRY_POUCH) { - ItemMenu_SetExitCallback(sub_810A540); + ItemMenu_SetExitCallback(GoToBerryPouch_PCBox); ItemMenu_StartFadeToExitCallback(taskId); } - else if (gUnknown_203ACFC.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(itemId)) + else if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(itemId)) { - sub_8108CB4(); + Bag_BeginCloseWin0Animation(); gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; } else { - sub_810A18C(taskId); + Task_PrintItemCantBeHeld(taskId); } } -void sub_810A52C(void) +static void GoToTMCase_PCBox(void) { - InitTMCase(3, sub_810A554, FALSE); + InitTMCase(TMCASE_FROMPOKEMONSTORAGEPC, ReturnToBagMenuFromSubmenu_PCBox, FALSE); } -void sub_810A540(void) +static void GoToBerryPouch_PCBox(void) { - InitBerryPouch(3, sub_810A554, FALSE); + InitBerryPouch(BERRYPOUCH_FROMPOKEMONSTORAGEPC, ReturnToBagMenuFromSubmenu_PCBox, FALSE); } -void sub_810A554(void) +static void ReturnToBagMenuFromSubmenu_PCBox(void) { - GoToBagMenu(4, 3, sub_808CE60); + GoToBagMenu(ITEMMENULOCATION_PCBOX, OPEN_BAG_LAST, sub_808CE60); } -void sub_810A568(u8 taskId) +static void Task_ItemContext_Sell(u8 taskId) { s16 *data = gTasks[taskId].data; if (gSpecialVar_ItemId == ITEM_TM_CASE) { - ItemMenu_SetExitCallback(sub_810A654); + ItemMenu_SetExitCallback(GoToTMCase_Sell); ItemMenu_StartFadeToExitCallback(taskId); } else if (gSpecialVar_ItemId == ITEM_BERRY_POUCH) { - ItemMenu_SetExitCallback(sub_810A668); + ItemMenu_SetExitCallback(GoToBerryPouch_Sell); ItemMenu_StartFadeToExitCallback(taskId); } else if (itemid_get_market_price(gSpecialVar_ItemId) == 0) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_OhNoICantBuyThat); - DisplayItemMessageInBag(taskId, sub_80BF8E4(), gStringVar4, sub_810A1F8); + DisplayItemMessageInBag(taskId, GetDialogBoxFontId(), gStringVar4, Task_ReturnToBagFromContextMenu); } else { data[8] = 1; if (data[2] == 1) { - sub_810BB40(); - sub_810A690(taskId); + BagPrintMoneyAmount(); + Task_PrintSaleConfirmationText(taskId); } else { @@ -1818,191 +1819,191 @@ void sub_810A568(u8 taskId) data[2] = 99; CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_HowManyWouldYouLikeToSell); - DisplayItemMessageInBag(taskId, sub_80BF8E4(), gStringVar4, sub_810A770); + DisplayItemMessageInBag(taskId, GetDialogBoxFontId(), gStringVar4, Task_InitSaleQuantitySelectInterface); } } } -void sub_810A654(void) +static void GoToTMCase_Sell(void) { - InitTMCase(2, sub_810A67C, FALSE); + InitTMCase(TMCASE_FROMMARTSELL, ReturnToBagMenuFromSubmenu_Sell, FALSE); } -void sub_810A668(void) +static void GoToBerryPouch_Sell(void) { - InitBerryPouch(2, sub_810A67C, FALSE); + InitBerryPouch(BERRYPOUCH_FROMMARTSELL, ReturnToBagMenuFromSubmenu_Sell, FALSE); } -void sub_810A67C(void) +static void ReturnToBagMenuFromSubmenu_Sell(void) { - GoToBagMenu(2, 3, CB2_ReturnToField); + GoToBagMenu(ITEMMENULOCATION_SHOP, OPEN_BAG_LAST, CB2_ReturnToField); } -void sub_810A690(u8 taskId) +static void Task_PrintSaleConfirmationText(u8 taskId) { s16 *data = gTasks[taskId].data; - ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_ICanPayThisMuch_WouldThatBeOkay); - DisplayItemMessageInBag(taskId, sub_80BF8E4(), gStringVar4, sub_810A70C); + DisplayItemMessageInBag(taskId, GetDialogBoxFontId(), gStringVar4, Task_ShowSellYesNoMenu); } -void sub_810A70C(u8 taskId) +static void Task_ShowSellYesNoMenu(u8 taskId) { - sub_810BB14(taskId, &gUnknown_8452F58); + BagCreateYesNoMenuTopRight(taskId, &sYesNoMenu_Sell); } -void sub_810A720(u8 taskId) +static void Task_SellItem_No(u8 taskId) { s16 *data = gTasks[taskId].data; - sub_810BA3C(2); - sub_810BA9C(5); + HideBagWindow(2); + CloseBagWindow(5); PutWindowTilemap(2); PutWindowTilemap(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); bag_menu_print_cursor_(data[0], 1); - sub_810910C(taskId); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } -void sub_810A770(u8 taskId) +static void Task_InitSaleQuantitySelectInterface(u8 taskId) { s16 *data = gTasks[taskId].data; - u8 r4 = sub_810B9DC(0, 1); + u8 r4 = ShowBagWindow(0, 1); ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - sub_810B8F0(r4, 0, gStringVar4, 4, 10, 1, 0, 0xFF, 1); - sub_810A834(itemid_get_market_price(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1])) / 2 * data[8]); - sub_810BB40(); - sub_8108908(); - gTasks[taskId].func = sub_810A85C; + BagPrintTextOnWindow(r4, 0, gStringVar4, 4, 10, 1, 0, 0xFF, 1); + UpdateSalePriceDisplay(itemid_get_market_price(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8]); + BagPrintMoneyAmount(); + CreatePocketScrollArrowPair_SellQuantity(); + gTasks[taskId].func = Task_SelectQuantityToSell; } -void sub_810A834(s32 amount) +static void UpdateSalePriceDisplay(s32 amount) { - PrintMoneyAmount(sub_810BAD8(0), 56, 10, amount, 0); + PrintMoneyAmount(GetBagWindow(0), 56, 10, amount, 0); } -void sub_810A85C(u8 taskId) +static void Task_SelectQuantityToSell(u8 taskId) { s16 *data = gTasks[taskId].data; if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) { - sub_81097E4(data[8], 2); - sub_810A834(itemid_get_market_price(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1])) / 2 * data[8]); + UpdateQuantityToTossOrDeposit(data[8], 2); + UpdateSalePriceDisplay(itemid_get_market_price(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8]); } else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - sub_810BA3C(0); + HideBagWindow(0); PutWindowTilemap(0); ScheduleBgCopyTilemapToVram(0); - sub_8108978(); - sub_810A690(taskId); + BagDestroyPocketScrollArrowPair(); + Task_PrintSaleConfirmationText(taskId); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_810BA3C(0); - sub_810BA3C(2); - sub_810BA9C(5); + HideBagWindow(0); + HideBagWindow(2); + CloseBagWindow(5); PutWindowTilemap(2); PutWindowTilemap(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); - sub_8108978(); + BagDestroyPocketScrollArrowPair(); bag_menu_print_cursor_(data[0], 1); - sub_810910C(taskId); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } } -void sub_810A940(u8 taskId) +static void Task_SellItem_Yes(u8 taskId) { s16 *data = gTasks[taskId].data; PutWindowTilemap(0); ScheduleBgCopyTilemapToVram(0); CopyItemName(gSpecialVar_ItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_TurnedOverItemsWorthYen); - DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A9D4); + DisplayItemMessageInBag(taskId, 2, gStringVar4, Task_FinalizeSaleToShop); } -void sub_810A9D4(u8 taskId) +static void Task_FinalizeSaleToShop(u8 taskId) { s16 *data = gTasks[taskId].data; PlaySE(SE_SHOP); RemoveBagItem(gSpecialVar_ItemId, data[8]); AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]); RecordItemPurchase(gSpecialVar_ItemId, data[8], 2); - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_8108DC8(gUnknown_203ACFC.pocket); - sub_81089F4(gUnknown_203ACFC.pocket); - gUnknown_203AD10->field_05_6 = 1; - sub_810842C(gUnknown_203ACFC.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); + Pocket_CalculateNItemsAndMaxShowed(gBagMenuState.pocket); + PocketCalculateInitialCursorPosAndItemsAbove(gBagMenuState.pocket); + sBagMenuDisplay->inhibitItemDescriptionPrint = TRUE; + Bag_BuildListMenuTemplate(gBagMenuState.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); bag_menu_print_cursor_(data[0], 2); - sub_810BB74(sub_810BAD8(2)); - PrintMoneyAmountInMoneyBox(sub_810BAD8(2), GetMoney(&gSaveBlock1Ptr->money), 0); - gTasks[taskId].func = sub_810AAF4; + BagDrawTextBoxOnWindow(GetBagWindow(2)); + PrintMoneyAmountInMoneyBox(GetBagWindow(2), GetMoney(&gSaveBlock1Ptr->money), 0); + gTasks[taskId].func = Task_WaitPressAB_AfterSell; } -void sub_810AAF4(u8 taskId) +static void Task_WaitPressAB_AfterSell(u8 taskId) { if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_810BA3C(2); + HideBagWindow(2); PutWindowTilemap(2); - gUnknown_203AD10->field_05_6 = 0; - sub_810A1F8(taskId); + sBagMenuDisplay->inhibitItemDescriptionPrint = FALSE; + Task_ReturnToBagFromContextMenu(taskId); } } -void sub_810AB40(u8 taskId) +static void Task_ItemContext_Deposit(u8 taskId) { s16 *data = gTasks[taskId].data; data[8] = 1; if (data[2] == 1) { - sub_810AC40(taskId); + Task_TryDoItemDeposit(taskId); } else { - sub_810971C(data[1], gText_DepositHowManyStrVars1); - gTasks[taskId].func = sub_810AB88; + InitQuantityToTossOrDeposit(data[1], gText_DepositHowManyStrVars1); + gTasks[taskId].func = Task_SelectQuantityToDeposit; } } -void sub_810AB88(u8 taskId) +static void Task_SelectQuantityToDeposit(u8 taskId) { s16 *data = gTasks[taskId].data; if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) { - sub_81097E4(data[8], 3); + UpdateQuantityToTossOrDeposit(data[8], 3); } else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - ClearWindowTilemap(sub_810BAD8(6)); - sub_810BA3C(6); - sub_810BA3C(0); + ClearWindowTilemap(GetBagWindow(6)); + HideBagWindow(6); + HideBagWindow(0); ScheduleBgCopyTilemapToVram(0); - sub_8108978(); - sub_810AC40(taskId); + BagDestroyPocketScrollArrowPair(); + Task_TryDoItemDeposit(taskId); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_810BA3C(6); - sub_810BA3C(0); + HideBagWindow(6); + HideBagWindow(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); bag_menu_print_cursor_(data[0], 1); - sub_8108978(); - sub_810910C(taskId); + BagDestroyPocketScrollArrowPair(); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } } -void sub_810AC40(u8 taskId) +static void Task_TryDoItemDeposit(u8 taskId) { s16 *data = gTasks[taskId].data; if (AddPCItem(gSpecialVar_ItemId, data[8]) == TRUE) @@ -2011,12 +2012,12 @@ void sub_810AC40(u8 taskId) CopyItemName(gSpecialVar_ItemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_DepositedStrVar2StrVar1s); - sub_810B8F0(sub_810B9DC(6, 3), 2, gStringVar4, 0, 2, 1, 0, 0, 1); - gTasks[taskId].func = sub_8109F44; + BagPrintTextOnWindow(ShowBagWindow(6, 3), 2, gStringVar4, 0, 2, 1, 0, 0, 1); + gTasks[taskId].func = Task_WaitAB_RedrawAndReturnToBag; } else { - DisplayItemMessageInBag(taskId, 2, gText_NoRoomToStoreItems, sub_810A1D0); + DisplayItemMessageInBag(taskId, 2, gText_NoRoomToStoreItems, Task_WaitAButtonAndCloseContextMenu); } } @@ -2042,63 +2043,69 @@ bool8 UseRegisteredKeyItemOnField(void) } gSaveBlock1Ptr->registeredItem = ITEM_NONE; } - ScriptContext1_SetupScript(gUnknown_81A77A0); + ScriptContext1_SetupScript(EventScript_BagItemCanBeRegistered); return TRUE; } -bool8 sub_810ADAC(void) +static bool8 BagIsTutorial(void) { - if (gUnknown_203ACFC.location == 6 || gUnknown_203ACFC.location == 8 || gUnknown_203ACFC.location == 7 || gUnknown_203ACFC.location == 9 || gUnknown_203ACFC.location == 10) + if ( + gBagMenuState.location == ITEMMENULOCATION_OLDMAN + || gBagMenuState.location == ITEMMENULOCATION_TTVSCR_CATCHING + || gBagMenuState.location == ITEMMENULOCATION_TTVSCR_STATUS + || gBagMenuState.location == ITEMMENULOCATION_TTVSCR_REGISTER + || gBagMenuState.location == ITEMMENULOCATION_TTVSCR_TMS + ) return TRUE; return FALSE; } -void BackUpPlayerBag(void) +static void BackUpPlayerBag(void) { u32 i; - gUnknown_203AD2C = AllocZeroed(sizeof(struct BagSlots)); - memcpy(gUnknown_203AD2C->bagPocket_Items, gSaveBlock1Ptr->bagPocket_Items, BAG_ITEMS_COUNT * sizeof(struct ItemSlot)); - memcpy(gUnknown_203AD2C->bagPocket_KeyItems, gSaveBlock1Ptr->bagPocket_KeyItems, BAG_KEYITEMS_COUNT * sizeof(struct ItemSlot)); - memcpy(gUnknown_203AD2C->bagPocket_PokeBalls, gSaveBlock1Ptr->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT * sizeof(struct ItemSlot)); - gUnknown_203AD2C->registeredItem = gSaveBlock1Ptr->registeredItem; - gUnknown_203AD2C->pocket = gUnknown_203ACFC.pocket; + sBackupPlayerBag = AllocZeroed(sizeof(struct BagSlots)); + memcpy(sBackupPlayerBag->bagPocket_Items, gSaveBlock1Ptr->bagPocket_Items, BAG_ITEMS_COUNT * sizeof(struct ItemSlot)); + memcpy(sBackupPlayerBag->bagPocket_KeyItems, gSaveBlock1Ptr->bagPocket_KeyItems, BAG_KEYITEMS_COUNT * sizeof(struct ItemSlot)); + memcpy(sBackupPlayerBag->bagPocket_PokeBalls, gSaveBlock1Ptr->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT * sizeof(struct ItemSlot)); + sBackupPlayerBag->registeredItem = gSaveBlock1Ptr->registeredItem; + sBackupPlayerBag->pocket = gBagMenuState.pocket; for (i = 0; i < 3; i++) { - gUnknown_203AD2C->itemsAbove[i] = gUnknown_203ACFC.itemsAbove[i]; - gUnknown_203AD2C->cursorPos[i] = gUnknown_203ACFC.cursorPos[i]; + sBackupPlayerBag->itemsAbove[i] = gBagMenuState.itemsAbove[i]; + sBackupPlayerBag->cursorPos[i] = gBagMenuState.cursorPos[i]; } ClearItemSlots(gSaveBlock1Ptr->bagPocket_Items, BAG_ITEMS_COUNT); ClearItemSlots(gSaveBlock1Ptr->bagPocket_KeyItems, BAG_KEYITEMS_COUNT); ClearItemSlots(gSaveBlock1Ptr->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT); gSaveBlock1Ptr->registeredItem = ITEM_NONE; - sub_81089BC(); + ResetBagCursorPositions(); } -void RestorePlayerBag(void) +static void RestorePlayerBag(void) { u32 i; - memcpy(gSaveBlock1Ptr->bagPocket_Items, gUnknown_203AD2C->bagPocket_Items, BAG_ITEMS_COUNT * sizeof(struct ItemSlot)); - memcpy(gSaveBlock1Ptr->bagPocket_KeyItems, gUnknown_203AD2C->bagPocket_KeyItems, BAG_KEYITEMS_COUNT * sizeof(struct ItemSlot)); - memcpy(gSaveBlock1Ptr->bagPocket_PokeBalls, gUnknown_203AD2C->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT * sizeof(struct ItemSlot)); - gSaveBlock1Ptr->registeredItem = gUnknown_203AD2C->registeredItem; - gUnknown_203ACFC.pocket = gUnknown_203AD2C->pocket; + memcpy(gSaveBlock1Ptr->bagPocket_Items, sBackupPlayerBag->bagPocket_Items, BAG_ITEMS_COUNT * sizeof(struct ItemSlot)); + memcpy(gSaveBlock1Ptr->bagPocket_KeyItems, sBackupPlayerBag->bagPocket_KeyItems, BAG_KEYITEMS_COUNT * sizeof(struct ItemSlot)); + memcpy(gSaveBlock1Ptr->bagPocket_PokeBalls, sBackupPlayerBag->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT * sizeof(struct ItemSlot)); + gSaveBlock1Ptr->registeredItem = sBackupPlayerBag->registeredItem; + gBagMenuState.pocket = sBackupPlayerBag->pocket; for (i = 0; i < 3; i++) { - gUnknown_203ACFC.itemsAbove[i] = gUnknown_203AD2C->itemsAbove[i]; - gUnknown_203ACFC.cursorPos[i] = gUnknown_203AD2C->cursorPos[i]; + gBagMenuState.itemsAbove[i] = sBackupPlayerBag->itemsAbove[i]; + gBagMenuState.cursorPos[i] = sBackupPlayerBag->cursorPos[i]; } - Free(gUnknown_203AD2C); + Free(sBackupPlayerBag); } -void InitTutorialBag(void) +void InitOldManBag(void) { BackUpPlayerBag(); AddBagItem(ITEM_POTION, 1); AddBagItem(ITEM_POKE_BALL, 1); - GoToBagMenu(6, 0, SetCB2ToReshowScreenAfterMenu2); + GoToBagMenu(ITEMMENULOCATION_OLDMAN, OPEN_BAG_ITEMS, SetCB2ToReshowScreenAfterMenu2); } -void sub_810AF9C(u8 taskId) +static void Task_Bag_OldManTutorial(u8 taskId) { s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) @@ -2108,53 +2115,53 @@ void sub_810AF9C(u8 taskId) case 102: case 204: PlaySE(SE_BAG2); - sub_81091D0(taskId, 1, FALSE); + SwitchPockets(taskId, 1, FALSE); break; case 306: PlaySE(SE_SELECT); bag_menu_print_cursor_(data[0], 2); - sub_8109140(1); + Bag_FillMessageBoxWithPalette(1); gSpecialVar_ItemId = ITEM_POKE_BALL; - sub_8109890(taskId); + OpenContextMenu(taskId); break; case 408: PlaySE(SE_SELECT); - sub_810BA3C(10); - sub_810BA3C(6); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); CopyWindowToVram(0, 1); DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); - sub_8108CB4(); - gTasks[taskId].func = sub_810B070; + Bag_BeginCloseWin0Animation(); + gTasks[taskId].func = Task_PokeDude_FadeFromBag; return; } data[8]++; } } -void sub_810B070(u8 taskId) +static void Task_PokeDude_FadeFromBag(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); - gTasks[taskId].func = sub_810B0AC; + gTasks[taskId].func = Task_PokeDude_WaitFadeAndExitBag; } -void sub_810B0AC(u8 taskId) +static void Task_PokeDude_WaitFadeAndExitBag(u8 taskId) { - if (!gPaletteFade.active && FuncIsActiveTask(sub_8108CFC) != TRUE) + if (!gPaletteFade.active && FuncIsActiveTask(Task_AnimateWin0v) != TRUE) { - if (gUnknown_203AD10->exitCB != NULL) - SetMainCallback2(gUnknown_203AD10->exitCB); + if (sBagMenuDisplay->exitCB != NULL) + SetMainCallback2(sBagMenuDisplay->exitCB); else - SetMainCallback2(gUnknown_203ACFC.bagCallback); - sub_8108978(); - sub_8108B04(); + SetMainCallback2(gBagMenuState.bagCallback); + BagDestroyPocketScrollArrowPair(); + DestroyBagMenuResources(); DestroyTask(taskId); } } -void sub_810B108(u8 a0) +void InitPokeDudeBag(u8 a0) { MainCallback cb2; u8 location; @@ -2174,24 +2181,24 @@ void sub_810B108(u8 a0) break; case 7: cb2 = SetCB2ToReshowScreenAfterMenu2; - location = 7; + location = ITEMMENULOCATION_TTVSCR_STATUS; break; case 8: cb2 = SetCB2ToReshowScreenAfterMenu2; - location = 8; + location = ITEMMENULOCATION_TTVSCR_CATCHING; break; } - GoToBagMenu(location, POCKET_ITEMS - 1, cb2); + GoToBagMenu(location, OPEN_BAG_ITEMS, cb2); } -bool8 sub_810B180(u8 taskId) +static bool8 Task_BButtonInterruptTeachyTv(u8 taskId) { if (JOY_NEW(B_BUTTON)) { RestorePlayerBag(); SetTeachyTvControllerModeToResume(); - gUnknown_203AD10->exitCB = CB2_ReturnToTeachyTV; - gTasks[taskId].func = sub_810B070; + sBagMenuDisplay->exitCB = CB2_ReturnToTeachyTV; + gTasks[taskId].func = Task_PokeDude_FadeFromBag; return TRUE; } else @@ -2200,23 +2207,23 @@ bool8 sub_810B180(u8 taskId) } } -void sub_810B1D4(u8 taskId) +static void Task_Bag_TeachyTvRegister(u8 taskId) { s16 *data = gTasks[taskId].data; - if (!gPaletteFade.active && sub_810B180(taskId) != TRUE) + if (!gPaletteFade.active && Task_BButtonInterruptTeachyTv(taskId) != TRUE) { switch (data[8]) { case 102: PlaySE(SE_BAG2); - sub_81091D0(taskId, 1, FALSE); + SwitchPockets(taskId, 1, FALSE); break; case 204: PlaySE(SE_SELECT); bag_menu_print_cursor_(data[0], 2); - sub_8109140(1); + Bag_FillMessageBoxWithPalette(1); gSpecialVar_ItemId = ITEM_TEACHY_TV; - sub_8109890(taskId); + OpenContextMenu(taskId); break; case 306: PlaySE(SE_SELECT); @@ -2225,14 +2232,14 @@ void sub_810B1D4(u8 taskId) case 408: PlaySE(SE_SELECT); gSaveBlock1Ptr->registeredItem = gSpecialVar_ItemId; - sub_810BA3C(10); - sub_810BA3C(6); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_810842C(gUnknown_203ACFC.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_8109140(0); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); + Bag_BuildListMenuTemplate(gBagMenuState.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); + Bag_FillMessageBoxWithPalette(0); bag_menu_print_cursor_(data[0], 1); CopyWindowToVram(0, 1); break; @@ -2246,20 +2253,20 @@ void sub_810B1D4(u8 taskId) PlaySE(SE_SELECT); DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); - sub_8108CB4(); - gTasks[taskId].func = sub_810B070; + Bag_BeginCloseWin0Animation(); + gTasks[taskId].func = Task_PokeDude_FadeFromBag; return; } data[8]++; } } -void sub_810B378(u8 taskId) +static void Task_Bag_TeachyTvCatching(u8 taskId) { s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) { - if (sub_810B180(taskId) == TRUE) + if (Task_BButtonInterruptTeachyTv(taskId) == TRUE) { FreeRestoreBattleData(); LoadPlayerParty(); @@ -2270,7 +2277,7 @@ void sub_810B378(u8 taskId) case 102: case 204: PlaySE(SE_BAG2); - sub_81091D0(taskId, 1, FALSE); + SwitchPockets(taskId, 1, FALSE); break; case 306: case 408: @@ -2287,33 +2294,33 @@ void sub_810B378(u8 taskId) case 714: PlaySE(SE_SELECT); bag_menu_print_cursor_(data[0], 2); - sub_8109140(1); + Bag_FillMessageBoxWithPalette(1); gSpecialVar_ItemId = ITEM_POKE_BALL; - sub_8109890(taskId); + OpenContextMenu(taskId); break; case 816: PlaySE(SE_SELECT); - sub_810BA3C(10); - sub_810BA3C(6); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); CopyWindowToVram(0, 1); DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); - sub_8108CB4(); - gTasks[taskId].func = sub_810B070; + Bag_BeginCloseWin0Animation(); + gTasks[taskId].func = Task_PokeDude_FadeFromBag; return; } data[8]++; } } -void sub_810B4BC(u8 taskId) +static void Task_Bag_TeachyTvStatus(u8 taskId) { s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) { - if (sub_810B180(taskId) == TRUE) + if (Task_BButtonInterruptTeachyTv(taskId) == TRUE) { FreeRestoreBattleData(); LoadPlayerParty(); @@ -2329,14 +2336,14 @@ void sub_810B4BC(u8 taskId) case 204: PlaySE(SE_SELECT); bag_menu_print_cursor_(data[0], 2); - sub_8109140(1); + Bag_FillMessageBoxWithPalette(1); gSpecialVar_ItemId = ITEM_ANTIDOTE; - sub_8109890(taskId); + OpenContextMenu(taskId); break; case 306: PlaySE(SE_SELECT); - sub_810BA3C(10); - sub_810BA3C(6); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); CopyWindowToVram(0, 1); @@ -2344,23 +2351,23 @@ void sub_810B4BC(u8 taskId) RestorePlayerBag(); gItemUseCB = ItemUseCB_MedicineStep; ItemMenu_SetExitCallback(ChooseMonForInBattleItem); - gTasks[taskId].func = sub_810B070; + gTasks[taskId].func = Task_PokeDude_FadeFromBag; return; } data[8]++; } } -void sub_810B5D4(u8 taskId) +static void Task_Bag_TeachyTvTMs(u8 taskId) { s16 *data = gTasks[taskId].data; - if (!gPaletteFade.active && sub_810B180(taskId) != TRUE) + if (!gPaletteFade.active && Task_BButtonInterruptTeachyTv(taskId) != TRUE) { switch (data[8]) { case 102: PlaySE(SE_BAG2); - sub_81091D0(taskId, 1, 0); + SwitchPockets(taskId, 1, 0); break; case 204: gMain.newKeys = 0; @@ -2370,21 +2377,21 @@ void sub_810B5D4(u8 taskId) case 306: PlaySE(SE_SELECT); bag_menu_print_cursor_(data[0], 2); - sub_8109140(1); + Bag_FillMessageBoxWithPalette(1); gSpecialVar_ItemId = ITEM_TM_CASE; - sub_8109890(taskId); + OpenContextMenu(taskId); break; case 408: PlaySE(SE_SELECT); - sub_810BA3C(10); - sub_810BA3C(6); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); CopyWindowToVram(0, 1); DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); - gUnknown_203AD10->exitCB = PokeDude_InitTMCase; - gTasks[taskId].func = sub_810B070; + sBagMenuDisplay->exitCB = PokeDude_InitTMCase; + gTasks[taskId].func = Task_PokeDude_FadeFromBag; return; } data[8]++; diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c index 0c2c60437..d389c7781 100644 --- a/src/item_menu_icons.c +++ b/src/item_menu_icons.c @@ -5,14 +5,14 @@ #include "malloc.h" #include "constants/items.h" -static EWRAM_DATA u8 gUnknown_2039878[12] = {0}; -EWRAM_DATA void * gUnknown_2039884 = NULL; -static EWRAM_DATA void * gUnknown_2039888 = NULL; +static EWRAM_DATA u8 sItemMenuIconSpriteIds[12] = {0}; +static EWRAM_DATA void * sItemIconTilesBuffer = NULL; +static EWRAM_DATA void * sItemIconTilesBufferPadded = NULL; static void sub_8098560(struct Sprite * sprite); static void sub_80985BC(struct Sprite * sprite); -static const struct OamData gUnknown_83D416C = { +static const struct OamData sOamData_BagOrSatchel = { .affineMode = ST_OAM_AFFINE_NORMAL, .shape = ST_OAM_SQUARE, .size = 3, @@ -20,36 +20,36 @@ static const struct OamData gUnknown_83D416C = { .paletteNum = 0 }; -static const union AnimCmd gUnknown_83D4174[] = { +static const union AnimCmd sAnim_BagOrSatchel_OpenItemPocket[] = { ANIMCMD_FRAME( 0, 5), ANIMCMD_FRAME(0x40, 0), ANIMCMD_END }; -static const union AnimCmd gUnknown_83D4180[] = { +static const union AnimCmd sAnim_BagOrSatchel_OpenKeyItemPocket[] = { ANIMCMD_FRAME( 0, 5), ANIMCMD_FRAME(0x80, 0), ANIMCMD_END }; -static const union AnimCmd gUnknown_83D418C[] = { +static const union AnimCmd sAnim_BagOrSatchel_OpenPokeBallsPocket[] = { ANIMCMD_FRAME( 0, 5), ANIMCMD_FRAME(0xc0, 0), ANIMCMD_END }; -static const union AnimCmd *const gUnknown_83D4198[] = { - gUnknown_83D4180, - gUnknown_83D418C, - gUnknown_83D4174 +static const union AnimCmd *const sAnimTable_BagOrSatchel[] = { + sAnim_BagOrSatchel_OpenKeyItemPocket, + sAnim_BagOrSatchel_OpenPokeBallsPocket, + sAnim_BagOrSatchel_OpenItemPocket }; -static const union AffineAnimCmd gUnknown_83D41A4[] = { +static const union AffineAnimCmd sAffineAnim_Idle[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gUnknown_83D41B4[] = { +static const union AffineAnimCmd sAffineAnim_Wobble[] = { AFFINEANIMCMD_FRAME(0, 0, -2, 2), AFFINEANIMCMD_FRAME(0, 0, 2, 4), AFFINEANIMCMD_FRAME(0, 0, -2, 4), @@ -57,35 +57,35 @@ static const union AffineAnimCmd gUnknown_83D41B4[] = { AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const gUnknown_83D41DC[] = { - gUnknown_83D41A4, - gUnknown_83D41B4 +static const union AffineAnimCmd *const sAffineAnimTable_BagOrSatchel[] = { + sAffineAnim_Idle, + sAffineAnim_Wobble }; -const struct CompressedSpriteSheet gUnknown_83D41E4 = { +const struct CompressedSpriteSheet gSpriteSheet_Backpack = { gUnknown_8E8362C, 0x2000, 100 }; -const struct CompressedSpriteSheet gUnknown_83D41EC = { +const struct CompressedSpriteSheet gSpriteSheet_Satchel = { gUnknown_8E83DBC, 0x2000, 100 }; -const struct CompressedSpritePalette gUnknown_83D41F4 = { +const struct CompressedSpritePalette gSpritePalette_BagOrSatchel = { gUnknown_8E84560, 100 }; -static const struct SpriteTemplate gUnknown_83D41FC = { +static const struct SpriteTemplate sSpriteTemplate_BagOrSatchel = { 100, 100, - &gUnknown_83D416C, - gUnknown_83D4198, + &sOamData_BagOrSatchel, + sAnimTable_BagOrSatchel, NULL, - gUnknown_83D41DC, + sAffineAnimTable_BagOrSatchel, SpriteCallbackDummy }; @@ -139,7 +139,7 @@ static const struct SpriteTemplate gUnknown_83D4250 = { SpriteCallbackDummy }; -static const struct OamData gUnknown_83D4268 = { +static const struct OamData sOamData_ItemIcon = { .affineMode = ST_OAM_AFFINE_OFF, .shape = ST_OAM_SQUARE, .size = 2, @@ -147,26 +147,26 @@ static const struct OamData gUnknown_83D4268 = { .paletteNum = 2 }; -static const union AnimCmd gUnknown_83D4270[] = { +static const union AnimCmd sAnim_ItemIcon_0[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END }; -static const union AnimCmd *const gUnknown_83D4278[] = { - gUnknown_83D4270 +static const union AnimCmd *const sAnimTable_ItemIcon[] = { + sAnim_ItemIcon_0 }; -static const struct SpriteTemplate gUnknown_83D427C = { +static const struct SpriteTemplate sSpriteTemplate_ItemIcon = { 102, 102, - &gUnknown_83D4268, - gUnknown_83D4278, + &sOamData_ItemIcon, + sAnimTable_ItemIcon, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }; -static const void *const gUnknown_83D4294[][2] = { +static const void *const sItemIconGfxPtrs[][2] = { {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette}, {gFile_graphics_items_icons_master_ball_sheet, gFile_graphics_items_icon_palettes_master_ball_palette}, {gFile_graphics_items_icons_ultra_ball_sheet, gFile_graphics_items_icon_palettes_ultra_ball_palette}, @@ -549,19 +549,19 @@ void ResetItemMenuIconState(void) { u16 i; - for (i = 0; i < NELEMS(gUnknown_2039878); i++) - gUnknown_2039878[i] = 0xFF; + for (i = 0; i < NELEMS(sItemMenuIconSpriteIds); i++) + sItemMenuIconSpriteIds[i] = 0xFF; } -void sub_80984FC(u8 animNum) +void CreateBagOrSatchelSprite(u8 animNum) { - gUnknown_2039878[0] = CreateSprite(&gUnknown_83D41FC, 40, 68, 0); + sItemMenuIconSpriteIds[0] = CreateSprite(&sSpriteTemplate_BagOrSatchel, 40, 68, 0); sub_8098528(animNum); } void sub_8098528(u8 animNum) { - struct Sprite * sprite = &gSprites[gUnknown_2039878[0]]; + struct Sprite * sprite = &gSprites[sItemMenuIconSpriteIds[0]]; sprite->pos2.y = -5; sprite->callback = sub_8098560; StartSpriteAnim(sprite, animNum); @@ -577,7 +577,7 @@ static void sub_8098560(struct Sprite * sprite) void sub_8098580(void) { - struct Sprite * sprite = &gSprites[gUnknown_2039878[0]]; + struct Sprite * sprite = &gSprites[sItemMenuIconSpriteIds[0]]; if (sprite->affineAnimEnded) { StartSpriteAffineAnim(sprite, 1); @@ -594,40 +594,44 @@ static void sub_80985BC(struct Sprite * sprite) } } -void sub_80985E4(void) +void ItemMenuIcons_CreateInsertIndicatorBarHidden(void) { u8 i; - u8 * ptr = &gUnknown_2039878[1]; + u8 * ptr = &sItemMenuIconSpriteIds[1]; for (i = 0; i < 9; i++) { ptr[i] = CreateSprite(&gUnknown_83D4250, i * 16 + 0x60, 7, 0); - if (i != 0) + switch (i) { - if (i == 8) - StartSpriteAnim(&gSprites[ptr[i]], 2); - else - StartSpriteAnim(&gSprites[ptr[i]], 1); + case 0: + break; + case 8: + StartSpriteAnim(&gSprites[ptr[i]], 2); + break; + default: + StartSpriteAnim(&gSprites[ptr[i]], 1); + break; } gSprites[ptr[i]].invisible = TRUE; } } -void sub_8098660(u8 flag) +void ItemMenuIcons_ToggleInsertIndicatorBarVisibility(bool8 invisible) { u8 i; - u8 * ptr = &gUnknown_2039878[1]; + u8 * ptr = &sItemMenuIconSpriteIds[1]; for (i = 0; i < 9; i++) { - gSprites[ptr[i]].invisible = flag; + gSprites[ptr[i]].invisible = invisible; } } -void sub_80986A8(s16 x, u16 y) +void ItemMenuIcons_MoveInsertIndicatorBar(s16 x, u16 y) { u8 i; - u8 * ptr = &gUnknown_2039878[1]; + u8 * ptr = &sItemMenuIconSpriteIds[1]; for (i = 0; i < 9; i++) { @@ -636,15 +640,15 @@ void sub_80986A8(s16 x, u16 y) } } -static bool8 sub_80986EC(void) +static bool8 TryAllocItemIconTilesBuffers(void) { void ** ptr1, ** ptr2; - ptr1 = &gUnknown_2039884; + ptr1 = &sItemIconTilesBuffer; *ptr1 = Alloc(0x120); if (*ptr1 == NULL) return FALSE; - ptr2 = &gUnknown_2039888; + ptr2 = &sItemIconTilesBufferPadded; *ptr2 = AllocZeroed(0x200); if (*ptr2 == NULL) { @@ -671,27 +675,27 @@ u8 AddItemIconObject(u16 tilesTag, u16 paletteTag, u16 itemId) struct CompressedSpritePalette spritePalette; u8 spriteId; - if (!sub_80986EC()) + if (!TryAllocItemIconTilesBuffers()) return MAX_SPRITES; - LZDecompressWram(sub_8098974(itemId, 0), gUnknown_2039884); - CopyItemIconPicTo4x4Buffer(gUnknown_2039884, gUnknown_2039888); - spriteSheet.data = gUnknown_2039888; + LZDecompressWram(GetItemIconGfxPtr(itemId, 0), sItemIconTilesBuffer); + CopyItemIconPicTo4x4Buffer(sItemIconTilesBuffer, sItemIconTilesBufferPadded); + spriteSheet.data = sItemIconTilesBufferPadded; spriteSheet.size = 0x200; spriteSheet.tag = tilesTag; LoadSpriteSheet(&spriteSheet); - spritePalette.data = sub_8098974(itemId, 1); + spritePalette.data = GetItemIconGfxPtr(itemId, 1); spritePalette.tag = paletteTag; LoadCompressedSpritePalette(&spritePalette); - CpuCopy16(&gUnknown_83D427C, &template, sizeof(struct SpriteTemplate)); + CpuCopy16(&sSpriteTemplate_ItemIcon, &template, sizeof(struct SpriteTemplate)); template.tileTag = tilesTag; template.paletteTag = paletteTag; spriteId = CreateSprite(&template, 0, 0, 0); - Free(gUnknown_2039884); - Free(gUnknown_2039888); + Free(sItemIconTilesBuffer); + Free(sItemIconTilesBufferPadded); return spriteId; } @@ -702,17 +706,17 @@ u8 AddItemIconObjectWithCustomObjectTemplate(const struct SpriteTemplate * origT struct CompressedSpritePalette spritePalette; u8 spriteId; - if (!sub_80986EC()) + if (!TryAllocItemIconTilesBuffers()) return MAX_SPRITES; - LZDecompressWram(sub_8098974(itemId, 0), gUnknown_2039884); - CopyItemIconPicTo4x4Buffer(gUnknown_2039884, gUnknown_2039888); - spriteSheet.data = gUnknown_2039888; + LZDecompressWram(GetItemIconGfxPtr(itemId, 0), sItemIconTilesBuffer); + CopyItemIconPicTo4x4Buffer(sItemIconTilesBuffer, sItemIconTilesBufferPadded); + spriteSheet.data = sItemIconTilesBufferPadded; spriteSheet.size = 0x200; spriteSheet.tag = tilesTag; LoadSpriteSheet(&spriteSheet); - spritePalette.data = sub_8098974(itemId, 1); + spritePalette.data = GetItemIconGfxPtr(itemId, 1); spritePalette.tag = paletteTag; LoadCompressedSpritePalette(&spritePalette); @@ -721,14 +725,14 @@ u8 AddItemIconObjectWithCustomObjectTemplate(const struct SpriteTemplate * origT template.paletteTag = paletteTag; spriteId = CreateSprite(&template, 0, 0, 0); - Free(gUnknown_2039884); - Free(gUnknown_2039888); + Free(sItemIconTilesBuffer); + Free(sItemIconTilesBufferPadded); return spriteId; } void CreateItemMenuIcon(u16 itemId, u8 idx) { - u8 * ptr = &gUnknown_2039878[10]; + u8 * ptr = &sItemMenuIconSpriteIds[10]; u8 spriteId; if (ptr[idx] == 0xFF) @@ -747,7 +751,7 @@ void CreateItemMenuIcon(u16 itemId, u8 idx) void DestroyItemMenuIcon(u8 idx) { - u8 * ptr = &gUnknown_2039878[10]; + u8 * ptr = &sItemMenuIconSpriteIds[10]; if (ptr[idx] != 0xFF) { @@ -756,16 +760,16 @@ void DestroyItemMenuIcon(u8 idx) } } -const void * sub_8098974(u16 itemId, u8 attrId) +const void * GetItemIconGfxPtr(u16 itemId, u8 attrId) { if (itemId > ITEM_N_A) itemId = ITEM_NONE; - return gUnknown_83D4294[itemId][attrId]; + return sItemIconGfxPtrs[itemId][attrId]; } void sub_80989A0(u16 itemId, u8 idx) { - u8 * ptr = &gUnknown_2039878[10]; + u8 * ptr = &sItemMenuIconSpriteIds[10]; u8 spriteId; if (ptr[idx] == 0xFF) diff --git a/src/item_pc.c b/src/item_pc.c index 3134d9f6b..12a81f53e 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -348,7 +348,7 @@ static bool8 ItemPc_DoGfxSetup(void) gMain.state++; break; case 14: - sub_80985E4(); + ItemMenuIcons_CreateInsertIndicatorBarHidden(); gMain.state++; break; case 15: @@ -780,8 +780,8 @@ static void ItemPc_MoveItemModeInit(u8 taskId, s16 pos) StringExpandPlaceholders(gStringVar4, gOtherText_WhereShouldTheStrVar1BePlaced); FillWindowPixelBuffer(1, 0x00); ItemPc_AddTextPrinterParameterized(1, 2, gStringVar4, 0, 3, 2, 3, 0, 0); - sub_80986A8(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0])); - sub_8098660(0); + ItemMenuIcons_MoveInsertIndicatorBar(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0])); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(0); ItemPc_PrintOrRemoveCursor(data[0], 2); gTasks[taskId].func = Task_ItemPcMoveItemModeRun; } @@ -792,7 +792,7 @@ static void Task_ItemPcMoveItemModeRun(u8 taskId) ListMenu_ProcessInput(data[0]); ListMenuGetScrollAndRow(data[0], &sListMenuState.scroll, &sListMenuState.row); - sub_80986A8(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0])); + ItemMenuIcons_MoveInsertIndicatorBar(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0])); if (JOY_NEW(A_BUTTON | SELECT_BUTTON)) { PlaySE(SE_SELECT); @@ -820,7 +820,7 @@ static void ItemPc_InsertItemIntoNewSlot(u8 taskId, u32 pos) sListMenuState.row--; ItemPc_BuildListMenuTemplate(); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sListMenuState.scroll, sListMenuState.row); - sub_8098660(1); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(1); gTasks[taskId].func = Task_ItemPcMain; } } @@ -834,7 +834,7 @@ static void ItemPc_MoveItemModeCancel(u8 taskId, u32 pos) sListMenuState.row--; ItemPc_BuildListMenuTemplate(); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sListMenuState.scroll, sListMenuState.row); - sub_8098660(1); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(1); gTasks[taskId].func = Task_ItemPcMain; } diff --git a/src/item_use.c b/src/item_use.c index d5db22ca1..fc5703a75 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -154,7 +154,7 @@ static void sub_80A0FBC(u8 taskId) { ItemMenu_SetExitCallback(gUnknown_83E2954[itemType]); if (itemType == 1) - sub_8108CB4(); + Bag_BeginCloseWin0Animation(); ItemMenu_StartFadeToExitCallback(taskId); } } @@ -188,7 +188,7 @@ static void sub_80A10C4(u8 taskId, bool8 a1, u8 a2, const u8 * str) { StringExpandPlaceholders(gStringVar4, str); if (a1 == FALSE) - DisplayItemMessageInBag(taskId, a2, gStringVar4, sub_810A1F8); + DisplayItemMessageInBag(taskId, a2, gStringVar4, Task_ReturnToBagFromContextMenu); else DisplayItemMessageOnField(taskId, a2, gStringVar4, sub_80A112C); } @@ -345,7 +345,7 @@ void FieldUseFunc_CoinCase(u8 taskId) StringExpandPlaceholders(gStringVar4, gUnknown_8416537); ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF); if (gTasks[taskId].data[3] == 0) - DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gStringVar4, Task_ReturnToBagFromContextMenu); else DisplayItemMessageOnField(taskId, 2, gStringVar4, sub_80A112C); } @@ -356,7 +356,7 @@ void FieldUseFunc_PowderJar(u8 taskId) StringExpandPlaceholders(gStringVar4, gUnknown_8416644); ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF); if (gTasks[taskId].data[3] == 0) - DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gStringVar4, Task_ReturnToBagFromContextMenu); else DisplayItemMessageOnField(taskId, 2, gStringVar4, sub_80A112C); } @@ -384,7 +384,7 @@ void FieldUseFunc_PokeFlute(u8 taskId) { // Now that's a catchy tune! if (gTasks[taskId].data[3] == 0) - DisplayItemMessageInBag(taskId, 2, gUnknown_841665C, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gUnknown_841665C, Task_ReturnToBagFromContextMenu); else DisplayItemMessageOnField(taskId, 2, gUnknown_841665C, sub_80A112C); } @@ -401,7 +401,7 @@ static void sub_80A1674(u8 taskId) if (WaitFanfare(FALSE)) { if (gTasks[taskId].data[3] == 0) - DisplayItemMessageInBag(taskId, 2, gUnknown_84166A7, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gUnknown_84166A7, Task_ReturnToBagFromContextMenu); else DisplayItemMessageOnField(taskId, 2, gUnknown_84166A7, sub_80A112C); } @@ -518,7 +518,7 @@ void BattleUseFunc_BerryPouch(u8 taskId) static void InitBerryPouchFromBattle(void) { - InitBerryPouch(BERRYPOUCH_FROMBATTLE, sub_8107ECC, 0); + InitBerryPouch(BERRYPOUCH_FROMBATTLE, CB2_BagMenuFromBattle, 0); } void FieldUseFunc_TeachyTv(u8 taskId) @@ -562,7 +562,7 @@ void FieldUseFunc_SuperRepel(u8 taskId) } else // An earlier repel is still in effect - DisplayItemMessageInBag(taskId, 2, gUnknown_841659E, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gUnknown_841659E, Task_ReturnToBagFromContextMenu); } static void sub_80A19E8(u8 taskId) @@ -572,15 +572,15 @@ static void sub_80A19E8(u8 taskId) ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF); VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId)); sub_80A1A44(); - DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gStringVar4, Task_ReturnToBagFromContextMenu); } } static void sub_80A1A44(void) { RemoveBagItem(gSpecialVar_ItemId, 1); - sub_8108DC8(ItemId_GetPocket(gSpecialVar_ItemId)); - sub_81089F4(ItemId_GetPocket(gSpecialVar_ItemId)); + Pocket_CalculateNItemsAndMaxShowed(ItemId_GetPocket(gSpecialVar_ItemId)); + PocketCalculateInitialCursorPosAndItemsAbove(ItemId_GetPocket(gSpecialVar_ItemId)); CopyItemName(gSpecialVar_ItemId, gStringVar2); StringExpandPlaceholders(gStringVar4, gUnknown_841658C); } @@ -613,7 +613,7 @@ static void sub_80A1B48(u8 taskId) if (++gTasks[taskId].data[8] > 7) { PlaySE(SE_BIDORO); - DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gStringVar4, Task_ReturnToBagFromContextMenu); } } @@ -745,18 +745,18 @@ void BattleUseFunc_PokeBallEtc(u8 taskId) if (!IsPlayerPartyAndPokemonStorageFull()) { RemoveBagItem(gSpecialVar_ItemId, 1); - sub_8108CB4(); + Bag_BeginCloseWin0Animation(); ItemMenu_StartFadeToExitCallback(taskId); } else { - DisplayItemMessageInBag(taskId, 2, gUnknown_8416631, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gUnknown_8416631, Task_ReturnToBagFromContextMenu); } } void BattleUseFunc_PokeFlute(u8 taskId) { - sub_8108CB4(); + Bag_BeginCloseWin0Animation(); ItemMenu_StartFadeToExitCallback(taskId); } @@ -764,7 +764,7 @@ void BattleUseFunc_GuardSpec(u8 taskId) { if (ExecuteTableBasedItemEffect(&gPlayerParty[gBattlerPartyIndexes[gBattlerInMenuId]], gSpecialVar_ItemId, gBattlerPartyIndexes[gBattlerInMenuId], 0)) { - DisplayItemMessageInBag(taskId, 2, gText_WontHaveEffect, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gText_WontHaveEffect, Task_ReturnToBagFromContextMenu); } else { @@ -790,7 +790,7 @@ static void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId) { if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { - sub_8108CB4(); + Bag_BeginCloseWin0Animation(); ItemMenu_StartFadeToExitCallback(taskId); } } diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 53b9992a2..dedd7aa9e 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -242,7 +242,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) return FALSE; } -u8 sub_80BF8E4(void) +u8 GetDialogBoxFontId(void) { if (!ContextNpcGetTextColor()) return 4; diff --git a/src/new_game.c b/src/new_game.c index 471c49e67..381ba28c8 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -98,7 +98,7 @@ void ResetMenuAndMonGlobals(void) gDifferentSaveFile = FALSE; ZeroPlayerPartyMons(); ZeroEnemyPartyMons(); - sub_81089BC(); + ResetBagCursorPositions(); ResetTMCaseCursorPos(); BerryPouch_CursorResetToTop(); ResetQuestLog(); diff --git a/src/party_menu.c b/src/party_menu.c index d12a17e6c..b6ec995ff 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3451,7 +3451,7 @@ static void CursorCB_Give(u8 taskId) void CB2_SelectBagItemToGive(void) { - GoToBagMenu(1, 3, CB2_GiveHoldItem); + GoToBagMenu(ITEMMENULOCATION_PARTY, OPEN_BAG_LAST, CB2_GiveHoldItem); } void CB2_GiveHoldItem(void) @@ -4283,12 +4283,12 @@ void CB2_ShowPartyMenuForItemUse(void) static void CB2_ReturnToBagMenu(void) { - GoToBagMenu(11, 3, NULL); + GoToBagMenu(ITEMMENULOCATION_LAST, OPEN_BAG_LAST, NULL); } static void CB2_ReturnToTMCaseMenu(void) { - InitTMCase(5, NULL, 0xFF); + InitTMCase(TMCASE_NA, NULL, 0xFF); } static void CB2_ReturnToBerryPouchMenu(void) @@ -5904,7 +5904,7 @@ void OpenPartyMenuInBattle(void) void ChooseMonForInBattleItem(void) { - InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_REUSABLE_ITEM, FALSE, PARTY_MSG_USE_ON_WHICH_MON, sub_8120FCC, sub_8107ECC); + InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_REUSABLE_ITEM, FALSE, PARTY_MSG_USE_ON_WHICH_MON, sub_8120FCC, CB2_BagMenuFromBattle); nullsub_44(); UpdatePartyToBattleOrder(); } @@ -5919,7 +5919,7 @@ void sub_81279E0(void) FALSE, PARTY_MSG_NONE, sub_8120C3C, - sub_8107ECC); + CB2_BagMenuFromBattle); sub_80EB2F4(8); } else @@ -5929,7 +5929,7 @@ void sub_81279E0(void) if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH) callback = CB2_ReturnToBerryPouchMenu; else - callback = sub_8107ECC; + callback = CB2_BagMenuFromBattle; InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_USE_ITEM, diff --git a/src/player_pc.c b/src/player_pc.c index 00d41abe6..63870c86a 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -322,7 +322,7 @@ static void Task_DepositItem_WaitFadeAndGoToBag(u8 taskId) if (!gPaletteFade.active) { CleanupOverworldWindowsAndTilemaps(); - GoToBagMenu(3, POCKET_ITEMS - 1, CB2_ReturnToField); + GoToBagMenu(ITEMMENULOCATION_ITEMPC, OPEN_BAG_ITEMS, CB2_ReturnToField); gFieldCallback = CB2_ReturnFromDepositMenu; DestroyTask(taskId); } diff --git a/src/shop.c b/src/shop.c index b410b32b9..865688928 100644 --- a/src/shop.c +++ b/src/shop.c @@ -307,7 +307,7 @@ static void Task_HandleShopMenuSell(u8 taskId) static void CB2_GoToSellMenu(void) { - GoToBagMenu(2, POCKET_POKE_BALLS, CB2_ReturnToField); + GoToBagMenu(ITEMMENULOCATION_SHOP, OPEN_BAG_LAST, CB2_ReturnToField); gFieldCallback = MapPostLoadHook_ReturnToShopMenu; } diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 11d4a80b1..318803d88 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -34,16 +34,6 @@ #include "fieldmap.h" #include "strings.h" -enum TeachyTvScript -{ - TTVSCR_BATTLE, - TTVSCR_STATUS, - TTVSCR_MATCHUPS, - TTVSCR_CATCHING, - TTVSCR_TMS, - TTVSCR_REGISTER -}; - struct TeachyTvCtrlBlk { MainCallback callback; @@ -1103,9 +1093,9 @@ static void TTVcmd_TaskBattleOrFadeByOptionChosen(u8 taskId) static void TeachyTvSetupBagItemsByOptionChosen(void) { if (sStaticResources.whichScript == TTVSCR_TMS) - sub_810B108(10); + InitPokeDudeBag(10); else - sub_810B108(9); + InitPokeDudeBag(9); } static void TeachyTvPostBattleFadeControl(u8 taskId) diff --git a/src/tm_case.c b/src/tm_case.c index 40509ed1b..3da69c412 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -977,7 +977,7 @@ static void Task_SelectTMAction_FromSellMenu(u8 taskId) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_OhNoICantBuyThat); - TMCase_PrintMessageWithFollowupTask(taskId, sub_80BF8E4(), gStringVar4, Subtask_CloseContextMenuAndReturnToMain); + TMCase_PrintMessageWithFollowupTask(taskId, GetDialogBoxFontId(), gStringVar4, Subtask_CloseContextMenuAndReturnToMain); } else { @@ -993,7 +993,7 @@ static void Task_SelectTMAction_FromSellMenu(u8 taskId) data[2] = 99; CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_HowManyWouldYouLikeToSell); - TMCase_PrintMessageWithFollowupTask(taskId, sub_80BF8E4(), gStringVar4, Task_InitQuantitySelectUI); + TMCase_PrintMessageWithFollowupTask(taskId, GetDialogBoxFontId(), gStringVar4, Task_InitQuantitySelectUI); } } } @@ -1004,7 +1004,7 @@ static void Task_AskConfirmSaleWithAmount(u8 taskId) ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_TM_CASE, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_ICanPayThisMuch_WouldThatBeOkay); - TMCase_PrintMessageWithFollowupTask(taskId, sub_80BF8E4(), gStringVar4, Task_PlaceYesNoBox); + TMCase_PrintMessageWithFollowupTask(taskId, GetDialogBoxFontId(), gStringVar4, Task_PlaceYesNoBox); } static void Task_PlaceYesNoBox(u8 taskId) -- cgit v1.2.3 From 4723b1df96370705a695c7600ecb20de22bb7c70 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 19 Jan 2020 14:53:31 -0500 Subject: bag static rodata --- src/bag.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/bag.c b/src/bag.c index 7f000722a..049aa9f8f 100644 --- a/src/bag.c +++ b/src/bag.c @@ -21,7 +21,7 @@ static const u8 sTextColors[][3] = { {0, 8, 9} }; -const struct WindowTemplate sDefaultBagWindowsStd[] = { +static const struct WindowTemplate sDefaultBagWindowsStd[] = { { .bg = 0, .tilemapLeft = 0x0b, @@ -49,7 +49,7 @@ const struct WindowTemplate sDefaultBagWindowsStd[] = { }, DUMMY_WIN_TEMPLATE }; -const struct WindowTemplate sDefaultBagWindowsDeposit[] = { +static const struct WindowTemplate sDefaultBagWindowsDeposit[] = { { .bg = 0, .tilemapLeft = 0x0b, @@ -77,7 +77,7 @@ const struct WindowTemplate sDefaultBagWindowsDeposit[] = { }, DUMMY_WIN_TEMPLATE }; -const struct WindowTemplate sWindowTemplates[] = { +static const struct WindowTemplate sWindowTemplates[] = { { .bg = 0, .tilemapLeft = 24, -- cgit v1.2.3 From 23949274b62c7b4c43b3012da89831662d8de6dd Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 19 Jan 2020 14:59:40 -0500 Subject: Use IML defines in InitPokeDudeBag args --- src/teachy_tv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 318803d88..a8763333b 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1093,9 +1093,9 @@ static void TTVcmd_TaskBattleOrFadeByOptionChosen(u8 taskId) static void TeachyTvSetupBagItemsByOptionChosen(void) { if (sStaticResources.whichScript == TTVSCR_TMS) - InitPokeDudeBag(10); + InitPokeDudeBag(ITEMMENULOCATION_TTVSCR_TMS); else - InitPokeDudeBag(9); + InitPokeDudeBag(ITEMMENULOCATION_TTVSCR_REGISTER); } static void TeachyTvPostBattleFadeControl(u8 taskId) -- cgit v1.2.3 From c365f58833d60606b2a759b190b1f35f09f7ee66 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 19 Jan 2020 16:19:35 -0500 Subject: Address review comments --- src/battle_controller_pokedude.c | 2 +- src/battle_main.c | 6 ++-- src/battle_message.c | 4 +-- src/data.c | 10 +++--- src/data/trainer_graphics/back_pic_anims.h | 8 ++--- src/data/trainer_graphics/back_pic_tables.h | 4 +-- src/graphics.c | 0 src/item_menu.c | 55 +++++++++++++++-------------- src/item_pc.c | 6 ++-- src/pokemon.c | 2 +- src/teachy_tv.c | 6 ++-- src/tm_case.c | 28 +++++++-------- 12 files changed, 66 insertions(+), 65 deletions(-) create mode 100644 src/graphics.c (limited to 'src') diff --git a/src/battle_controller_pokedude.c b/src/battle_controller_pokedude.c index b9df7e1ed..d8ebe5ba4 100644 --- a/src/battle_controller_pokedude.c +++ b/src/battle_controller_pokedude.c @@ -742,7 +742,7 @@ static void OpenBagAndChooseItem(void) callbackId = ITEMMENULOCATION_TTVSCR_CATCHING; break; } - InitPokeDudeBag(callbackId); + InitPokedudeBag(callbackId); } } diff --git a/src/battle_main.c b/src/battle_main.c index 9f3477659..15c264369 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -86,7 +86,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum); static void CB2_HandleStartBattle(void); static void TryCorrectShedinjaLanguage(struct Pokemon *mon); static void BattleMainCB1(void); -static void CB2_QuitPokeDudeBattle(void); +static void CB2_QuitPokedudeBattle(void); static void sub_80111FC(struct Sprite *sprite); static void sub_8011B94(void); static void sub_8011BB0(void); @@ -1438,7 +1438,7 @@ void BattleMainCB2(void) gSpecialVar_Result = gBattleOutcome = B_OUTCOME_DREW; ResetPaletteFadeControl(); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); - SetMainCallback2(CB2_QuitPokeDudeBattle); + SetMainCallback2(CB2_QuitPokedudeBattle); } } @@ -1454,7 +1454,7 @@ void FreeRestoreBattleData(void) FreeBattleResources(); } -static void CB2_QuitPokeDudeBattle(void) +static void CB2_QuitPokedudeBattle(void) { UpdatePaletteFade(); if (!gPaletteFade.active) diff --git a/src/battle_message.c b/src/battle_message.c index 568682031..5bc0f113f 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -463,7 +463,7 @@ const u8 *const gPokeblockWasTooXStringTable[] = { static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!"); static const u8 sText_OldManUsedItem[] = _("The old man used\n{B_LAST_ITEM}!"); -static const u8 sText_PokeDudeUsedItem[] = _("The POKé DUDE used\n{B_LAST_ITEM}!"); +static const u8 sText_PokedudeUsedItem[] = _("The POKé DUDE used\n{B_LAST_ITEM}!"); static const u8 sText_Trainer1UsedItem[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nused {B_LAST_ITEM}!"); static const u8 sText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!"); static const u8 sText_DontBeAThief[] = _("Don't be a thief!"); @@ -876,7 +876,7 @@ const u8 *const gBattleStringsTable[] = { Text_1A5D31, Text_1A5D6E, Text_1A5DB1, - sText_PokeDudeUsedItem, + sText_PokedudeUsedItem, gUnknown_83FDA4D, gUnknown_83FDA7A, gUnknown_83FDA8C, diff --git a/src/data.c b/src/data.c index dddeeac51..891c9f94f 100644 --- a/src/data.c +++ b/src/data.c @@ -60,12 +60,12 @@ const struct SpriteFrameImage gTrainerBackPicTable_Leaf[] = gTrainerBackPic_Leaf + 0x2000, 0x0800, }; -const struct SpriteFrameImage gTrainerBackPicTable_PokeDude[] = +const struct SpriteFrameImage gTrainerBackPicTable_Pokedude[] = { - gTrainerBackPic_PokeDude, 0x0800, - gTrainerBackPic_PokeDude + 0x0800, 0x0800, - gTrainerBackPic_PokeDude + 0x1000, 0x0800, - gTrainerBackPic_PokeDude + 0x1800, 0x0800, + gTrainerBackPic_Pokedude, 0x0800, + gTrainerBackPic_Pokedude + 0x0800, 0x0800, + gTrainerBackPic_Pokedude + 0x1000, 0x0800, + gTrainerBackPic_Pokedude + 0x1800, 0x0800, }; const struct SpriteFrameImage gTrainerBackPicTable_OldMan[] = diff --git a/src/data/trainer_graphics/back_pic_anims.h b/src/data/trainer_graphics/back_pic_anims.h index 2e107c21e..833a0cb28 100644 --- a/src/data/trainer_graphics/back_pic_anims.h +++ b/src/data/trainer_graphics/back_pic_anims.h @@ -16,7 +16,7 @@ static const union AnimCmd sAnimCmd_Leaf_1[] = { ANIMCMD_END }; -static const union AnimCmd sAnimCmd_PokeDude_1[] = { +static const union AnimCmd sAnimCmd_Pokedude_1[] = { ANIMCMD_FRAME(1, 24), ANIMCMD_FRAME(2, 9), ANIMCMD_FRAME(3, 24), @@ -60,9 +60,9 @@ const union AnimCmd *const sBackAnims_Leaf[] = { sAnimCmd_Leaf_1 }; -const union AnimCmd *const sBackAnims_PokeDude[] = { +const union AnimCmd *const sBackAnims_Pokedude[] = { sAnim_GeneralFrame0, - sAnimCmd_PokeDude_1 + sAnimCmd_Pokedude_1 }; const union AnimCmd *const sBackAnims_OldMan[] = { @@ -85,6 +85,6 @@ const union AnimCmd *const *const gTrainerBackAnimsPtrTable[] = { sBackAnims_Leaf, sBackAnims_RSBrendan, sBackAnims_RSMay, - sBackAnims_PokeDude, + sBackAnims_Pokedude, sBackAnims_OldMan }; diff --git a/src/data/trainer_graphics/back_pic_tables.h b/src/data/trainer_graphics/back_pic_tables.h index 86e7824c1..4d0c129a8 100644 --- a/src/data/trainer_graphics/back_pic_tables.h +++ b/src/data/trainer_graphics/back_pic_tables.h @@ -12,7 +12,7 @@ const struct CompressedSpriteSheet gTrainerBackPicTable[] = { { (const u32 *)gTrainerBackPic_Leaf, 0x2800, 1 }, { (const u32 *)gTrainerBackPic_RSBrendan, 0x2000, 2 }, { (const u32 *)gTrainerBackPic_RSMay, 0x2000, 3 }, - { (const u32 *)gTrainerBackPic_PokeDude, 0x2000, 4 }, + { (const u32 *)gTrainerBackPic_Pokedude, 0x2000, 4 }, { (const u32 *)gTrainerBackPic_OldMan, 0x2000, 5 } }; @@ -21,6 +21,6 @@ const struct CompressedSpritePalette gTrainerBackPicPaletteTable[] = { { gTrainerPalette_LeafBackPic, 1 }, { gTrainerPalette_RSBrendan1, 2 }, { gTrainerPalette_RSMay1, 3 }, - { gTrainerPalette_PokeDudeBackPic, 4 }, + { gTrainerPalette_PokedudeBackPic, 4 }, { gTrainerPalette_OldManBackPic, 5 } }; diff --git a/src/graphics.c b/src/graphics.c new file mode 100644 index 000000000..e69de29bb diff --git a/src/item_menu.c b/src/item_menu.c index 467ff4c6b..ffba2eae9 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -152,8 +152,8 @@ static void Task_SelectQuantityToDeposit(u8 taskId); static void Task_TryDoItemDeposit(u8 taskId); static bool8 BagIsTutorial(void); static void Task_Bag_OldManTutorial(u8 taskId); -static void Task_PokeDude_FadeFromBag(u8 taskId); -static void Task_PokeDude_WaitFadeAndExitBag(u8 taskId); +static void Task_Pokedude_FadeFromBag(u8 taskId); +static void Task_Pokedude_WaitFadeAndExitBag(u8 taskId); static void Task_Bag_TeachyTvRegister(u8 taskId); static void Task_Bag_TeachyTvCatching(u8 taskId); static void Task_Bag_TeachyTvStatus(u8 taskId); @@ -276,7 +276,7 @@ static const TaskFunc sItemContextTaskFuncs[] = { [ITEMMENULOCATION_ITEMPC] = Task_ItemContext_Deposit, [ITEMMENULOCATION_PCBOX] = Task_ItemContext_PcBoxGive, [ITEMMENULOCATION_BATTLE] = Task_ItemContext_FieldOrBattle, - [ITEMMENULOCATION_OLDMAN] = NULL + [ITEMMENULOCATION_OLD_MAN] = NULL }; static const struct YesNoFuncTable sYesNoMenu_Toss = { @@ -331,7 +331,7 @@ void GoToBagMenu(u8 location, u8 pocket, MainCallback bagCallback) sBagMenuDisplay->pocketSwitchArrowsTask = 0xFF; if (location == ITEMMENULOCATION_ITEMPC) sBagMenuDisplay->pocketSwitchMode = 1; - else if (location == ITEMMENULOCATION_OLDMAN) + else if (location == ITEMMENULOCATION_OLD_MAN) sBagMenuDisplay->pocketSwitchMode = 2; else sBagMenuDisplay->pocketSwitchMode = 0; @@ -609,7 +609,7 @@ static u8 CreateBagInputHandlerTask(u8 location) { switch (location) { - case ITEMMENULOCATION_OLDMAN: + case ITEMMENULOCATION_OLD_MAN: return CreateTask(Task_Bag_OldManTutorial, 0); case ITEMMENULOCATION_TTVSCR_REGISTER: return CreateTask(Task_Bag_TeachyTvRegister, 0); @@ -626,10 +626,11 @@ static u8 CreateBagInputHandlerTask(u8 location) static bool8 TryAllocListMenuBuffers(void) { - sListMenuItems = Alloc(43 * sizeof(struct ListMenuItem)); + // The items pocket has the highest capacity, + 1 for CANCEL + sListMenuItems = Alloc((BAG_ITEMS_COUNT + 1) * sizeof(struct ListMenuItem)); if (sListMenuItems == NULL) return FALSE; - sListMenuItemStrings = Alloc(43 * 19); + sListMenuItemStrings = Alloc((BAG_ITEMS_COUNT + 1) * sizeof(*sListMenuItemStrings)); if (sListMenuItemStrings == NULL) return FALSE; return TRUE; @@ -835,7 +836,7 @@ void ResetBagCursorPositions(void) { u8 i; gBagMenuState.pocket = POCKET_ITEMS - 1; - gBagMenuState.bagOpen = 0; + gBagMenuState.bagOpen = FALSE; for (i = 0; i < 3; i++) { gBagMenuState.itemsAbove[i] = 0; @@ -923,10 +924,10 @@ static void ShowBagOrBeginWin0OpenTask(void) LoadPalette(&paldata, 0x00, 0x02); SetGpuReg(REG_OFFSET_WININ, 0); - SetGpuReg(REG_OFFSET_WINOUT, 0x3F); + SetGpuReg(REG_OFFSET_WINOUT, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - if (gBagMenuState.bagOpen == 1) + if (gBagMenuState.bagOpen == TRUE) { SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 240)); SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 0)); @@ -938,7 +939,7 @@ static void ShowBagOrBeginWin0OpenTask(void) taskId = CreateTask(Task_AnimateWin0v, 0); gTasks[taskId].data[0] = 192; gTasks[taskId].data[1] = -16; - gBagMenuState.bagOpen = 1; + gBagMenuState.bagOpen = TRUE; } } @@ -948,12 +949,12 @@ void Bag_BeginCloseWin0Animation(void) u8 taskId = CreateTask(Task_AnimateWin0v, 0); gTasks[taskId].data[0] = -16; gTasks[taskId].data[1] = 16; - gBagMenuState.bagOpen = 0; + gBagMenuState.bagOpen = FALSE; } void CB2_SetUpReshowBattleScreenAfterMenu(void) { - gBagMenuState.bagOpen = 0; + gBagMenuState.bagOpen = FALSE; } static void Task_AnimateWin0v(u8 taskId) @@ -1363,7 +1364,7 @@ static void OpenContextMenu(u8 taskId) sContextMenuNumItems = 1; } break; - case ITEMMENULOCATION_OLDMAN: + case ITEMMENULOCATION_OLD_MAN: case ITEMMENULOCATION_TTVSCR_CATCHING: sContextMenuItemsPtr = sContextMenuItems_BattleUse; sContextMenuNumItems = 2; @@ -2050,7 +2051,7 @@ bool8 UseRegisteredKeyItemOnField(void) static bool8 BagIsTutorial(void) { if ( - gBagMenuState.location == ITEMMENULOCATION_OLDMAN + gBagMenuState.location == ITEMMENULOCATION_OLD_MAN || gBagMenuState.location == ITEMMENULOCATION_TTVSCR_CATCHING || gBagMenuState.location == ITEMMENULOCATION_TTVSCR_STATUS || gBagMenuState.location == ITEMMENULOCATION_TTVSCR_REGISTER @@ -2102,7 +2103,7 @@ void InitOldManBag(void) BackUpPlayerBag(); AddBagItem(ITEM_POTION, 1); AddBagItem(ITEM_POKE_BALL, 1); - GoToBagMenu(ITEMMENULOCATION_OLDMAN, OPEN_BAG_ITEMS, SetCB2ToReshowScreenAfterMenu2); + GoToBagMenu(ITEMMENULOCATION_OLD_MAN, OPEN_BAG_ITEMS, SetCB2ToReshowScreenAfterMenu2); } static void Task_Bag_OldManTutorial(u8 taskId) @@ -2134,20 +2135,20 @@ static void Task_Bag_OldManTutorial(u8 taskId) DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); Bag_BeginCloseWin0Animation(); - gTasks[taskId].func = Task_PokeDude_FadeFromBag; + gTasks[taskId].func = Task_Pokedude_FadeFromBag; return; } data[8]++; } } -static void Task_PokeDude_FadeFromBag(u8 taskId) +static void Task_Pokedude_FadeFromBag(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); - gTasks[taskId].func = Task_PokeDude_WaitFadeAndExitBag; + gTasks[taskId].func = Task_Pokedude_WaitFadeAndExitBag; } -static void Task_PokeDude_WaitFadeAndExitBag(u8 taskId) +static void Task_Pokedude_WaitFadeAndExitBag(u8 taskId) { if (!gPaletteFade.active && FuncIsActiveTask(Task_AnimateWin0v) != TRUE) { @@ -2161,7 +2162,7 @@ static void Task_PokeDude_WaitFadeAndExitBag(u8 taskId) } } -void InitPokeDudeBag(u8 a0) +void InitPokedudeBag(u8 a0) { MainCallback cb2; u8 location; @@ -2198,7 +2199,7 @@ static bool8 Task_BButtonInterruptTeachyTv(u8 taskId) RestorePlayerBag(); SetTeachyTvControllerModeToResume(); sBagMenuDisplay->exitCB = CB2_ReturnToTeachyTV; - gTasks[taskId].func = Task_PokeDude_FadeFromBag; + gTasks[taskId].func = Task_Pokedude_FadeFromBag; return TRUE; } else @@ -2254,7 +2255,7 @@ static void Task_Bag_TeachyTvRegister(u8 taskId) DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); Bag_BeginCloseWin0Animation(); - gTasks[taskId].func = Task_PokeDude_FadeFromBag; + gTasks[taskId].func = Task_Pokedude_FadeFromBag; return; } data[8]++; @@ -2308,7 +2309,7 @@ static void Task_Bag_TeachyTvCatching(u8 taskId) DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); Bag_BeginCloseWin0Animation(); - gTasks[taskId].func = Task_PokeDude_FadeFromBag; + gTasks[taskId].func = Task_Pokedude_FadeFromBag; return; } data[8]++; @@ -2351,7 +2352,7 @@ static void Task_Bag_TeachyTvStatus(u8 taskId) RestorePlayerBag(); gItemUseCB = ItemUseCB_MedicineStep; ItemMenu_SetExitCallback(ChooseMonForInBattleItem); - gTasks[taskId].func = Task_PokeDude_FadeFromBag; + gTasks[taskId].func = Task_Pokedude_FadeFromBag; return; } data[8]++; @@ -2390,8 +2391,8 @@ static void Task_Bag_TeachyTvTMs(u8 taskId) CopyWindowToVram(0, 1); DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); - sBagMenuDisplay->exitCB = PokeDude_InitTMCase; - gTasks[taskId].func = Task_PokeDude_FadeFromBag; + sBagMenuDisplay->exitCB = Pokedude_InitTMCase; + gTasks[taskId].func = Task_Pokedude_FadeFromBag; return; } data[8]++; diff --git a/src/item_pc.c b/src/item_pc.c index 12a81f53e..7c7abdce3 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -781,7 +781,7 @@ static void ItemPc_MoveItemModeInit(u8 taskId, s16 pos) FillWindowPixelBuffer(1, 0x00); ItemPc_AddTextPrinterParameterized(1, 2, gStringVar4, 0, 3, 2, 3, 0, 0); ItemMenuIcons_MoveInsertIndicatorBar(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0])); - ItemMenuIcons_ToggleInsertIndicatorBarVisibility(0); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(FALSE); ItemPc_PrintOrRemoveCursor(data[0], 2); gTasks[taskId].func = Task_ItemPcMoveItemModeRun; } @@ -820,7 +820,7 @@ static void ItemPc_InsertItemIntoNewSlot(u8 taskId, u32 pos) sListMenuState.row--; ItemPc_BuildListMenuTemplate(); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sListMenuState.scroll, sListMenuState.row); - ItemMenuIcons_ToggleInsertIndicatorBarVisibility(1); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(TRUE); gTasks[taskId].func = Task_ItemPcMain; } } @@ -834,7 +834,7 @@ static void ItemPc_MoveItemModeCancel(u8 taskId, u32 pos) sListMenuState.row--; ItemPc_BuildListMenuTemplate(); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sListMenuState.scroll, sListMenuState.row); - ItemMenuIcons_ToggleInsertIndicatorBarVisibility(1); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(TRUE); gTasks[taskId].func = Task_ItemPcMain; } diff --git a/src/pokemon.c b/src/pokemon.c index 1270a25ed..5b715133b 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1547,7 +1547,7 @@ const struct SpriteTemplate gUnknown_825DF50[] = .paletteTag = 0, .oam = &gOamData_824F018, .anims = NULL, - .images = gTrainerBackPicTable_PokeDude, + .images = gTrainerBackPicTable_Pokedude, .affineAnims = gSpriteAffineAnimTable_82348C8, .callback = sub_80120C4, }, diff --git a/src/teachy_tv.c b/src/teachy_tv.c index a8763333b..1467131b0 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -795,7 +795,7 @@ static void TTVcmd_NpcMoveAndSetupTextPrinter(u8 taskId) if (spriteAddr->pos2.x == 0x78) { StartSpriteAnim(&gSprites[data[1]], 0); - TeachyTvInitTextPrinter(gTeachyTvText_PokeDudeSaysHello); + TeachyTvInitTextPrinter(gTeachyTvText_PokedudeSaysHello); data[2] = 0; ++data[3]; } @@ -1093,9 +1093,9 @@ static void TTVcmd_TaskBattleOrFadeByOptionChosen(u8 taskId) static void TeachyTvSetupBagItemsByOptionChosen(void) { if (sStaticResources.whichScript == TTVSCR_TMS) - InitPokeDudeBag(ITEMMENULOCATION_TTVSCR_TMS); + InitPokedudeBag(ITEMMENULOCATION_TTVSCR_TMS); else - InitPokeDudeBag(ITEMMENULOCATION_TTVSCR_REGISTER); + InitPokedudeBag(ITEMMENULOCATION_TTVSCR_REGISTER); } static void TeachyTvPostBattleFadeControl(u8 taskId) diff --git a/src/tm_case.c b/src/tm_case.c index 3da69c412..d45061bde 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -67,7 +67,7 @@ struct UnkStruct_203B11C static EWRAM_DATA struct UnkStruct_203B10C sTMCaseStaticResources = {}; static EWRAM_DATA struct UnkStruct_203B118 * sTMCaseDynamicResources = NULL; -static EWRAM_DATA struct UnkStruct_203B11C * sPokeDudePackBackup = NULL; +static EWRAM_DATA struct UnkStruct_203B11C * sPokedudePackBackup = NULL; static EWRAM_DATA void * sTilemapBuffer = NULL; // tilemap buffer static EWRAM_DATA struct ListMenuItem * sListMenuItemsBuffer = NULL; static EWRAM_DATA u8 (* sListMenuStringsBuffer)[29] = NULL; @@ -1133,13 +1133,13 @@ static void Task_AfterSale_ReturnToList(u8 taskId) } } -void PokeDude_InitTMCase(void) +void Pokedude_InitTMCase(void) { - sPokeDudePackBackup = AllocZeroed(sizeof(*sPokeDudePackBackup)); - memcpy(sPokeDudePackBackup->bagPocket_TMHM, gSaveBlock1Ptr->bagPocket_TMHM, sizeof(gSaveBlock1Ptr->bagPocket_TMHM)); - memcpy(sPokeDudePackBackup->bagPocket_KeyItems, gSaveBlock1Ptr->bagPocket_KeyItems, sizeof(gSaveBlock1Ptr->bagPocket_KeyItems)); - sPokeDudePackBackup->unk_160 = sTMCaseStaticResources.selectedRow; - sPokeDudePackBackup->unk_162 = sTMCaseStaticResources.scrollOffset; + sPokedudePackBackup = AllocZeroed(sizeof(*sPokedudePackBackup)); + memcpy(sPokedudePackBackup->bagPocket_TMHM, gSaveBlock1Ptr->bagPocket_TMHM, sizeof(gSaveBlock1Ptr->bagPocket_TMHM)); + memcpy(sPokedudePackBackup->bagPocket_KeyItems, gSaveBlock1Ptr->bagPocket_KeyItems, sizeof(gSaveBlock1Ptr->bagPocket_KeyItems)); + sPokedudePackBackup->unk_160 = sTMCaseStaticResources.selectedRow; + sPokedudePackBackup->unk_162 = sTMCaseStaticResources.scrollOffset; ClearItemSlots(gSaveBlock1Ptr->bagPocket_TMHM, NELEMS(gSaveBlock1Ptr->bagPocket_TMHM)); ClearItemSlots(gSaveBlock1Ptr->bagPocket_KeyItems, NELEMS(gSaveBlock1Ptr->bagPocket_KeyItems)); ResetTMCaseCursorPos(); @@ -1234,7 +1234,7 @@ static void Task_TMCaseDude_Playback(u8 taskId) break; case 8: FillBG2RowWithPalette_2timesNplus1(1); - TMCase_PrintMessageWithFollowupTask(taskId, 4, gPokeDudeText_TMTypes, 0); + TMCase_PrintMessageWithFollowupTask(taskId, 4, gPokedudeText_TMTypes, 0); gTasks[taskId].func = Task_TMCaseDude_Playback; data[8]++; break; @@ -1256,7 +1256,7 @@ static void Task_TMCaseDude_Playback(u8 taskId) break; case 18: FillBG2RowWithPalette_2timesNplus1(1); - TMCase_PrintMessageWithFollowupTask(taskId, 4, gPokeDudeText_ReadTMDescription, NULL); + TMCase_PrintMessageWithFollowupTask(taskId, 4, gPokedudeText_ReadTMDescription, NULL); gTasks[taskId].func = Task_TMCaseDude_Playback; // this function data[8]++; break; @@ -1267,12 +1267,12 @@ static void Task_TMCaseDude_Playback(u8 taskId) case 21: if (!gPaletteFade.active) { - memcpy(gSaveBlock1Ptr->bagPocket_TMHM, sPokeDudePackBackup->bagPocket_TMHM, sizeof(gSaveBlock1Ptr->bagPocket_TMHM)); - memcpy(gSaveBlock1Ptr->bagPocket_KeyItems, sPokeDudePackBackup->bagPocket_KeyItems, sizeof(gSaveBlock1Ptr->bagPocket_KeyItems)); + memcpy(gSaveBlock1Ptr->bagPocket_TMHM, sPokedudePackBackup->bagPocket_TMHM, sizeof(gSaveBlock1Ptr->bagPocket_TMHM)); + memcpy(gSaveBlock1Ptr->bagPocket_KeyItems, sPokedudePackBackup->bagPocket_KeyItems, sizeof(gSaveBlock1Ptr->bagPocket_KeyItems)); DestroyListMenuTask(data[0], NULL, NULL); - sTMCaseStaticResources.selectedRow = sPokeDudePackBackup->unk_160; - sTMCaseStaticResources.scrollOffset = sPokeDudePackBackup->unk_162; - Free(sPokeDudePackBackup); + sTMCaseStaticResources.selectedRow = sPokedudePackBackup->unk_160; + sTMCaseStaticResources.scrollOffset = sPokedudePackBackup->unk_162; + Free(sPokedudePackBackup); CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); CB2_SetUpReshowBattleScreenAfterMenu(); BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, 0); -- cgit v1.2.3 From 44337a41dbfcc4d2fe5f1e22cd87769a27c006c9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 19 Jan 2020 20:23:15 -0500 Subject: through TryBecomeLinkLeader --- src/union_room.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/union_room.c (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c new file mode 100644 index 000000000..070c43a09 --- /dev/null +++ b/src/union_room.c @@ -0,0 +1,79 @@ +#include "global.h" +#include "gflib.h" +#include "event_data.h" +#include "link_rfu.h" +#include "task.h" +#include "union_room.h" + +EWRAM_DATA union UnkUnion_Main gUnknown_203B05C = {}; + +IWRAM_DATA struct UnkStruct_Leader *gUnknown_3002024; + +void sub_8115A68(u8 taskId); +u16 sub_8118658(const u8 *data); +void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx); + +extern const u8 *const gUnknown_845742C[][5]; +extern const u8 gUnknown_84571B4[]; +extern const u8 gUnknown_8457234[]; + +void sub_811586C(u8 windowId, u8 arg1, u8 stringId) +{ + FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); + switch (arg1 << 8) + { + case 0x200: + sub_811A444(windowId, 2, gUnknown_845742C[0][stringId - 1], 0, 2, 0); + break; + case 0x400: + sub_811A444(windowId, 2, gUnknown_845742C[1][stringId - 1], 0, 2, 0); + break; + case 0x2500: + sub_811A444(windowId, 2, gUnknown_845742C[2][stringId - 1], 0, 2, 0); + break; + case 0x3500: + sub_811A444(windowId, 2, gUnknown_845742C[3][stringId - 1], 0, 2, 0); + break; + } + + CopyWindowToVram(windowId, 2); +} + +void sub_8115924(u8 windowId) +{ + u8 text[12]; + u8 text2[12]; + + sub_811A444(windowId, 2, gSaveBlock2Ptr->playerName, 0, 2, 0); + StringCopy(text2, gUnknown_84571B4); + ConvertIntToDecimalStringN(text, sub_8118658(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5); + StringAppend(text2, text); + sub_811A444(windowId, 0, text2, 0, 0x10, 0); +} + +void sub_811599C(u8 *dst, u8 caseId) +{ + switch (caseId) + { + case 1 ... 4: + case 9 ... 11: + case 21 ... 22: + // UB: argument *dst isn't used, instead it always prints to gStringVar4 + StringExpandPlaceholders(gStringVar4, gUnknown_8457234); + break; + } +} + +void TryBecomeLinkLeader(void) +{ + u8 taskId; + struct UnkStruct_Leader *dataPtr; + + taskId = CreateTask(sub_8115A68, 0); + gUnknown_203B05C.leader = dataPtr = (void*)(gTasks[taskId].data); + gUnknown_3002024 = dataPtr; + + dataPtr->state = 0; + dataPtr->textState = 0; + gSpecialVar_Result = 0; +} -- cgit v1.2.3 From 2cd1460cc5910a78cd25929692cf12646fd7d4b7 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 19 Jan 2020 21:48:48 -0500 Subject: Document Fuchsia City scripts --- src/field_specials.c | 2 +- src/safari_zone.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/field_specials.c b/src/field_specials.c index 8d6014fba..57bf53830 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1816,7 +1816,7 @@ static const struct { {MAP_GROUP(ROCKET_HIDEOUT_B1F), MAP_NUM(ROCKET_HIDEOUT_B1F), MAP_GROUP(CELADON_CITY_GAME_CORNER), MAP_NUM(CELADON_CITY_GAME_CORNER)}, {MAP_GROUP(SAFARI_ZONE_CENTER), MAP_NUM(SAFARI_ZONE_CENTER), MAP_GROUP(FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE), MAP_NUM(FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE)}, {MAP_GROUP(FUCHSIA_CITY_GYM), MAP_NUM(FUCHSIA_CITY_GYM), MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY)}, - {MAP_GROUP(FUCHSIA_CITY_BUILDING1), MAP_NUM(FUCHSIA_CITY_BUILDING1), MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY)}, + {MAP_GROUP(FUCHSIA_CITY_WARDENS_HOUSE), MAP_NUM(FUCHSIA_CITY_WARDENS_HOUSE), MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY)}, {MAP_GROUP(SAFFRON_CITY_DOJO), MAP_NUM(SAFFRON_CITY_DOJO), MAP_GROUP(SAFFRON_CITY), MAP_NUM(SAFFRON_CITY)}, {MAP_GROUP(SAFFRON_CITY_GYM), MAP_NUM(SAFFRON_CITY_GYM), MAP_GROUP(SAFFRON_CITY), MAP_NUM(SAFFRON_CITY)}, {MAP_GROUP(SILPH_CO_1F), MAP_NUM(SILPH_CO_1F), MAP_GROUP(SAFFRON_CITY), MAP_NUM(SAFFRON_CITY)}, diff --git a/src/safari_zone.c b/src/safari_zone.c index cb0a58586..65fb89bca 100644 --- a/src/safari_zone.c +++ b/src/safari_zone.c @@ -47,7 +47,7 @@ bool8 SafariZoneTakeStep(void) gSafariZoneStepCounter--; if (gSafariZoneStepCounter == 0) { - ScriptContext1_SetupScript(EventScript_SafariTimesUp); + ScriptContext1_SetupScript(SafariZone_EventScript_TimesUp); return TRUE; } return FALSE; @@ -55,7 +55,7 @@ bool8 SafariZoneTakeStep(void) void SafariZoneRetirePrompt(void) { - ScriptContext1_SetupScript(EventScript_SafariRetire); + ScriptContext1_SetupScript(SafariZone_EventScript_RetirePrompt); } void CB2_EndSafariBattle(void) @@ -66,14 +66,14 @@ void CB2_EndSafariBattle(void) } else if (gBattleOutcome == B_OUTCOME_NO_SAFARI_BALLS) { - ScriptContext2_RunNewScript(EventScript_SafariWarpOut); + ScriptContext2_RunNewScript(SafariZone_EventScript_OutOfBallsMidBattle); WarpIntoMap(); gFieldCallback = sub_807E3EC; SetMainCallback2(CB2_LoadMap); } else if (gBattleOutcome == B_OUTCOME_CAUGHT) { - ScriptContext1_SetupScript(EventScript_SafariOutOfBalls); + ScriptContext1_SetupScript(SafariZone_EventScript_OutOfBalls); ScriptContext1_Stop(); SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); } -- cgit v1.2.3 From cedebf15ee3595228d6fa212b74e1c5aa6fac3f1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 20 Jan 2020 09:09:02 -0500 Subject: sub_8115A68 --- src/link_rfu_3.c | 2 +- src/union_room.c | 330 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 330 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 87197f57f..2e09dc0a0 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -681,7 +681,7 @@ bool8 sub_80FCCF4(struct GFtgtGname *gname, u8 *uname, u8 idx) return retVal; } -void sub_80FCD50(struct GFtgtGname *gname, u8 *uname) +void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *gname, u8 *uname) { memcpy(gname, &gHostRFUtgtGnameBuffer, RFU_GAME_NAME_LENGTH); memcpy(uname, gHostRFUtgtUnameBuffer, RFU_USER_NAME_LENGTH); diff --git a/src/union_room.c b/src/union_room.c index 070c43a09..fd59ded3e 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1,21 +1,49 @@ #include "global.h" #include "gflib.h" #include "event_data.h" +#include "link.h" #include "link_rfu.h" +#include "list_menu.h" +#include "new_menu_helpers.h" +#include "script.h" #include "task.h" #include "union_room.h" EWRAM_DATA union UnkUnion_Main gUnknown_203B05C = {}; +EWRAM_DATA u8 gUnknown_203B058 = 0; +EWRAM_DATA u8 gUnknown_203B059 = 0; IWRAM_DATA struct UnkStruct_Leader *gUnknown_3002024; void sub_8115A68(u8 taskId); +void sub_81161E4(struct UnkStruct_Leader * leader); +bool8 sub_8116444(struct UnkStruct_Leader * leader, u32 a1, u32 a2); +u8 sub_81165E8(struct UnkStruct_Main0 * a0); +void sub_8117990(void); u16 sub_8118658(const u8 *data); +u8 sub_811A054(struct UnkStruct_Main4 *arg0, u32 arg1); +bool8 sub_811A0F8(u8 *textState, const u8 *str); +s8 sub_811A14C(u8 *dest, bool32 arg1); void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx); +void sub_811A5E4(struct UnkStruct_x20 *arg0, u8 count); +void sub_811A650(struct UnkStruct_Main4 *arg0, u8 count); -extern const u8 *const gUnknown_845742C[][5]; +extern const u8 *const gUnknown_8456C74[]; +extern const struct WindowTemplate gUnknown_8456CD0; +extern const u32 gUnknown_8456CD8[]; +extern const struct WindowTemplate gUnknown_8456CFC; +extern const struct WindowTemplate gUnknown_8456D04; +extern const struct ListMenuTemplate gUnknown_8456D34; extern const u8 gUnknown_84571B4[]; extern const u8 gUnknown_8457234[]; +extern const u8 gUnknown_8457264[]; +extern const u8 gUnknown_845747C[]; +extern const u8 gUnknown_8457514[]; +extern const u8 gUnknown_8457530[]; +extern const u8 gUnknown_8457554[]; +extern const u8 gUnknown_8457610[]; +extern const u8 *const gUnknown_845767C[]; +extern const u8 *const gUnknown_845742C[][5]; void sub_811586C(u8 windowId, u8 arg1, u8 stringId) { @@ -77,3 +105,303 @@ void TryBecomeLinkLeader(void) dataPtr->textState = 0; gSpecialVar_Result = 0; } + +void sub_8115A68(u8 taskId) +{ + u32 id, val; + struct UnkStruct_Leader *data = gUnknown_203B05C.leader; + + switch (data->state) + { + case 0: + gUnknown_203B058 = gUnknown_8456CD8[gSpecialVar_0x8004]; + gUnknown_203B059 = gUnknown_8456CD8[gSpecialVar_0x8004] >> 8; + sub_80FAF58(gUnknown_203B058, 0, 0); + sub_800B1F4(); + OpenLink(); + sub_80FBB8C(gUnknown_203B059 & 0xF); + data->state = 3; + break; + case 3: + data->field_4 = AllocZeroed(0x70); + data->field_0 = AllocZeroed(0xA0); + data->field_8 = AllocZeroed(0xA0); + sub_811A650(data->field_4, 4); + sub_811A5E4(data->field_0->arr, 5); + LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].unk.field_0, data->field_0->arr[0].unk.playerName); + data->field_0->arr[0].field_18 = 0; + data->field_0->arr[0].field_1A_0 = 1; + data->field_0->arr[0].field_1A_1 = 0; + data->field_0->arr[0].field_1B = 0; + data->field_17 = sub_811A054(data->field_4, 0xFF); + data->field_10 = AddWindow(&gUnknown_8456CD0); + data->listWindowId = AddWindow(&gUnknown_8456CFC); + data->field_11 = AddWindow(&gUnknown_8456D04); + + FillWindowPixelBuffer(data->field_10, PIXEL_FILL(2)); + sub_811A444(data->field_10, 0, gUnknown_845747C, 8, 2, 4); + PutWindowTilemap(data->field_10); + CopyWindowToVram(data->field_10, 2); + + DrawStdWindowFrame(data->listWindowId, FALSE); + gMultiuseListMenuTemplate = gUnknown_8456D34; + gMultiuseListMenuTemplate.windowId = data->listWindowId; + data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + + DrawStdWindowFrame(data->field_11, FALSE); + PutWindowTilemap(data->field_11); + CopyWindowToVram(data->field_11, 2); + + CopyBgTilemapBufferToVram(0); + data->field_13 = 1; + data->state = 4; + break; + case 4: + StringCopy(gStringVar1, gUnknown_8456C74[gUnknown_203B058]); + if ((gUnknown_203B059 >> 4) != 0) + { + if (data->field_13 > (gUnknown_203B059 >> 4) - 1 && (gUnknown_203B059 & 0xF) != 0) + StringExpandPlaceholders(gStringVar4, gUnknown_8457264); + else + StringExpandPlaceholders(gStringVar4, gUnknown_8457234); + } + else + { + sub_811599C(gStringVar4, gUnknown_203B058); + } + + sub_811586C(data->field_11, gUnknown_203B059, data->field_13); + data->state = 5; + break; + case 5: + if (sub_811A0F8(&data->textState, gStringVar4)) + data->state = 6; + break; + case 6: + sub_8116444(data, 7, 10); + if (gMain.newKeys & B_BUTTON) + { + if (data->field_13 == 1) + data->state = 23; + else if ((gUnknown_203B059 & 0xF0) != 0) + data->state = 30; + else + data->state = 19; + } + if ((gUnknown_203B059 >> 4) != 0 + && data->field_13 > (gUnknown_203B059 >> 4) - 1 + && (gUnknown_203B059 & 0xF) != 0 + && sub_80FC1CC() + && gMain.newKeys & START_BUTTON) + { + data->state = 15; + sub_80F8F5C(); + } + if (data->state == 6 && sub_80FA5D4()) + { + data->state = 9; + } + break; + case 9: + if (!sub_80FA5D4()) + { + data->state = 6; + data->field_13 = sub_81165E8(data->field_0); + } + break; + case 10: + id = ((gUnknown_203B058 & 0xF) == 2) ? 1 : 0; + if (sub_811A0F8(&data->textState, gUnknown_845767C[id])) + { + data->field_13 = sub_81165E8(data->field_0); + RedrawListMenu(data->listTaskId); + data->state = 4; + } + break; + case 29: + id = ((gUnknown_203B059 & 0xF) == 2) ? 0 : 1; + if (sub_811A0F8(&data->textState, gUnknown_845767C[id])) + { + data->state = 21; + } + break; + case 7: + if (sub_811A0F8(&data->textState, gStringVar4)) + { + data->state = 11; + } + break; + case 11: + switch (sub_811A14C(&data->textState, sub_80FA634(sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName))) + { + case 0: + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(0, 0); + data->field_19 = 5; + sub_80FA670(5, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + data->state = 12; + break; + case 1: + case -1: + data->field_19 = 6; + sub_80FA670(6, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + data->state = 12; + break; + case -3: + data->state = 9; + break; + } + break; + case 12: + val = sub_80FA6FC(sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + if (val == 1) + { + if (data->field_19 == 5) + { + data->field_0->arr[data->field_13].field_1B = 0; + RedrawListMenu(data->listTaskId); + data->field_13++; + if (data->field_13 == (gUnknown_203B059 & 0xF)) + { + if ((gUnknown_203B059 & 0xF0) != 0 || data->field_13 == 4) + { + data->state = 15; + } + else + { + StringCopy7(gStringVar1, data->field_0->arr[data->field_13 - 1].unk.playerName); + ConvertInternationalString(gStringVar1, data->field_0->arr[data->field_13 - 1].unk.field_0.unk_00.unk_00_0); + StringExpandPlaceholders(gStringVar4, gUnknown_8457554); + data->state = 13; + } + + sub_80F8F5C(); + sub_811586C(data->field_11, gUnknown_203B059, data->field_13); + } + else + { + data->state = 4; + } + } + else + { + sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId)); + data->field_0->arr[data->field_13].field_1A_0 = 0; + sub_81165E8(data->field_0); + RedrawListMenu(data->listTaskId); + data->state = 4; + } + + data->field_19 = 0; + } + else if (val == 2) + { + sub_80FB9E4(0, 0); + data->state = 4; + } + break; + case 13: + if (sub_811A0F8(&data->textState, gStringVar4)) + data->state = 14; + break; + case 14: + if (++data->field_E > 120) + data->state = 17; + break; + case 15: + if (sub_811A0F8(&data->textState, gUnknown_8457514)) + data->state = 16; + break; + case 16: + switch (sub_811A14C(&data->textState, FALSE)) + { + case 0: + data->state = 17; + break; + case 1: + case -1: + if ((gUnknown_203B059 & 0xF0) != 0) + data->state = 30; + else + data->state = 19; + break; + } + break; + case 19: + if (sub_811A0F8(&data->textState, gUnknown_8457530)) + data->state = 20; + break; + case 20: + switch (sub_811A14C(&data->textState, FALSE)) + { + case 0: + data->state = 23; + break; + case 1: + case -1: + if ((gUnknown_203B059 & 0xF0) != 0) + data->state = 15; + else if (data->field_13 == (gUnknown_203B059 & 0xF)) + data->state = 15; + else + data->state = 4; + break; + } + break; + case 17: + if (!sub_8116444(data, 7, 23)) + data->state = 18; + break; + case 18: + if (sub_80F8F40()) + { + if (sub_80F8F7C(FALSE)) + { + data->state = 26; + } + } + else + { + data->state = 29; + data->textState = 0; + } + break; + case 30: + if (sub_811A0F8(&data->textState, gUnknown_8457610)) + data->state = 23; + break; + case 21: + case 23: + DestroyWirelessStatusIndicatorSprite(); + sub_80F8DC0(); + sub_81161E4(data); + data->state++; + break; + case 24: + EnableBothScriptContexts(); + DestroyTask(taskId); + gSpecialVar_Result = 5; + break; + case 22: + EnableBothScriptContexts(); + DestroyTask(taskId); + gSpecialVar_Result = 8; + break; + case 26: + if (sub_80FBA00()) + { + data->state = 29; + } + else + { + if (gReceivedRemoteLinkPlayers != 0) + { + sub_80FAFE0(1); + sub_8117990(); + sub_81161E4(data); + DestroyTask(taskId); + } + } + break; + } +} -- cgit v1.2.3 From 8a5386899adf1c70049a039b041529b0d287b96a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 20 Jan 2020 09:33:46 -0500 Subject: through sub_81163B0 --- src/graphics.c | 0 src/union_room.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 105 insertions(+), 1 deletion(-) delete mode 100644 src/graphics.c (limited to 'src') diff --git a/src/graphics.c b/src/graphics.c deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/union_room.c b/src/union_room.c index fd59ded3e..389b13132 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -37,13 +37,22 @@ extern const struct ListMenuTemplate gUnknown_8456D34; extern const u8 gUnknown_84571B4[]; extern const u8 gUnknown_8457234[]; extern const u8 gUnknown_8457264[]; +extern const u8 *const gUnknown_845742C[][5]; extern const u8 gUnknown_845747C[]; +extern const u8 gUnknown_84574A0[]; +extern const u8 gUnknown_84574C4[]; +extern const u8 gUnknown_84574EC[]; extern const u8 gUnknown_8457514[]; extern const u8 gUnknown_8457530[]; extern const u8 gUnknown_8457554[]; extern const u8 gUnknown_8457610[]; extern const u8 *const gUnknown_845767C[]; -extern const u8 *const gUnknown_845742C[][5]; +extern const u8 gUnknown_84576AC[]; +extern const u8 gUnknown_84576C4[]; +extern const u8 gUnknown_8457E28[]; +extern const u8 gUnknown_8457E44[]; +extern const u8 gUnknown_8459238[]; +extern const u8 gUnknown_8459250[]; void sub_811586C(u8 windowId, u8 arg1, u8 stringId) { @@ -405,3 +414,98 @@ void sub_8115A68(u8 taskId) break; } } + +void sub_81161E4(struct UnkStruct_Leader *data) +{ + ClearWindowTilemap(data->field_11); + ClearStdWindowAndFrame(data->field_11, FALSE); + DestroyListMenuTask(data->listTaskId, 0, 0); + ClearWindowTilemap(data->field_10); + ClearStdWindowAndFrame(data->listWindowId, FALSE); + CopyBgTilemapBufferToVram(0); + RemoveWindow(data->field_11); + RemoveWindow(data->listWindowId); + RemoveWindow(data->field_10); + DestroyTask(data->field_17); + + Free(data->field_8); + Free(data->field_0); + Free(data->field_4); +} + +void sub_8116244(u8 *dst, u8 caseId) +{ + switch (caseId) + { + case 1: + case 2: + case 4: + StringExpandPlaceholders(dst, gUnknown_84574A0); + break; + case 21: + case 22: + StringExpandPlaceholders(dst, gUnknown_84574C4); + break; + case 3: + case 9: + case 10: + case 11: + StringExpandPlaceholders(dst, gUnknown_84574EC); + break; + } +} + +void sub_81162E0(u8 *dst, u8 caseId) +{ + switch (caseId) + { + case 65: + case 68: + StringExpandPlaceholders(dst, gUnknown_8457E28); + break; + case 69: + case 72: + StringExpandPlaceholders(dst, gUnknown_8457E44); + break; + } +} + +void sub_811631C(u8 *dst, u8 caseId) +{ + switch (caseId) + { + case 1: + case 2: + case 4: + case 21: + case 22: + StringExpandPlaceholders(dst, gUnknown_8459238); + break; + case 3: + case 9: + case 10: + case 11: + StringExpandPlaceholders(dst, gUnknown_8459250); + break; + } +} + +void sub_81163B0(u8 *dst, u8 caseId) +{ + switch (caseId) + { + case 1: + case 2: + case 4: + case 21: + case 22: + StringExpandPlaceholders(dst, gUnknown_84576AC); + break; + case 3: + case 9: + case 10: + case 11: + StringExpandPlaceholders(dst, gUnknown_84576C4); + break; + } +} -- cgit v1.2.3 From bc0fbb5d6ec21a7aaeab5f0392038844d0d23b25 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 20 Jan 2020 10:00:19 -0500 Subject: through sub_81165E8 --- src/union_room.c | 139 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 137 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index 389b13132..8874ea816 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -8,6 +8,12 @@ #include "script.h" #include "task.h" #include "union_room.h" +#include "constants/songs.h" + +#define sub_8018404(dest, arg1) ({ \ + StringCopy7(dest, (arg1).unk.playerName); \ + ConvertInternationalString(dest, (arg1).unk.field_0.unk_00.unk_00_0); \ +}) EWRAM_DATA union UnkUnion_Main gUnknown_203B05C = {}; EWRAM_DATA u8 gUnknown_203B058 = 0; @@ -18,6 +24,7 @@ IWRAM_DATA struct UnkStruct_Leader *gUnknown_3002024; void sub_8115A68(u8 taskId); void sub_81161E4(struct UnkStruct_Leader * leader); bool8 sub_8116444(struct UnkStruct_Leader * leader, u32 a1, u32 a2); +u8 sub_8116524(struct UnkStruct_Main0 * a0); u8 sub_81165E8(struct UnkStruct_Main0 * a0); void sub_8117990(void); u16 sub_8118658(const u8 *data); @@ -27,6 +34,9 @@ s8 sub_811A14C(u8 *dest, bool32 arg1); void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx); void sub_811A5E4(struct UnkStruct_x20 *arg0, u8 count); void sub_811A650(struct UnkStruct_Main4 *arg0, u8 count); +u32 sub_811A748(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1); +u8 sub_811A798(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2); +void sub_811A910(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id); extern const u8 *const gUnknown_8456C74[]; extern const struct WindowTemplate gUnknown_8456CD0; @@ -34,6 +44,7 @@ extern const u32 gUnknown_8456CD8[]; extern const struct WindowTemplate gUnknown_8456CFC; extern const struct WindowTemplate gUnknown_8456D04; extern const struct ListMenuTemplate gUnknown_8456D34; +extern const struct UnkStruct_Shared gUnknown_8457034; extern const u8 gUnknown_84571B4[]; extern const u8 gUnknown_8457234[]; extern const u8 gUnknown_8457264[]; @@ -278,8 +289,7 @@ void sub_8115A68(u8 taskId) } else { - StringCopy7(gStringVar1, data->field_0->arr[data->field_13 - 1].unk.playerName); - ConvertInternationalString(gStringVar1, data->field_0->arr[data->field_13 - 1].unk.field_0.unk_00.unk_00_0); + sub_8018404(gStringVar1, data->field_0->arr[data->field_13 - 1]); StringExpandPlaceholders(gStringVar4, gUnknown_8457554); data->state = 13; } @@ -509,3 +519,128 @@ void sub_81163B0(u8 *dst, u8 caseId) break; } } + +bool8 sub_8116444(struct UnkStruct_Leader *data, u32 arg1, u32 arg2) +{ + switch (sub_8116524(data->field_0)) + { + case 1: + PlaySE(SE_PC_LOGIN); + RedrawListMenu(data->listTaskId); + sub_8018404(gStringVar2, data->field_0->arr[data->field_13]); + sub_8116244(gStringVar4, gUnknown_203B058); + data->state = arg1; + break; + case 2: + sub_80FB9E4(0, 0); + RedrawListMenu(data->listTaskId); + data->state = arg2; + return TRUE; + } + + return FALSE; +} + +void sub_81164C8(u8 arg0, s32 id, u8 arg2) +{ + struct UnkStruct_Leader *data = gUnknown_203B05C.leader; + u8 var = 0; + + switch (data->field_0->arr[id].field_1A_0) + { + case 1: + if (data->field_0->arr[id].field_1B != 0) + var = 2; + break; + case 2: + var = 1; + break; + } + + sub_811A910(arg0, 0, arg2, &data->field_0->arr[id], var, id); +} + +u8 sub_8116524(struct UnkStruct_Main0 *arg0) +{ + struct UnkStruct_Leader *data = gUnknown_203B05C.leader; + u8 ret = 0; + u8 i; + s32 id; + + for (i = 1; i < 5; i++) + { + u16 var = data->field_0->arr[i].field_1A_0; + if (var == 1) + { + id = sub_811A748(&data->field_0->arr[i], data->field_4->arr); + if (id != 0xFF) + { + data->field_0->arr[i].unk = data->field_4->arr[id].unk0; + data->field_0->arr[i].field_18 = var; + } + else + { + data->field_0->arr[i].field_1A_0 = 2; + ret = 2; + } + } + } + + for (id = 0; id < 4; id++) + sub_811A798(data->field_0->arr, &data->field_4->arr[id], 5); + + if (ret != 2) + { + for (id = 0; id < 5; id++) + { + if (data->field_0->arr[id].field_1B != 0) + ret = 1; + } + } + + return ret; +} + +u8 sub_81165E8(struct UnkStruct_Main0 *arg0) +{ + struct UnkStruct_Leader *data = gUnknown_203B05C.leader; + u8 copiedCount; + s32 i; + u8 ret; + + for (i = 0; i < 5; i++) + data->field_8->arr[i] = data->field_0->arr[i]; + + copiedCount = 0; + for (i = 0; i < 5; i++) + { + if (data->field_8->arr[i].field_1A_0 == 1) + { + data->field_0->arr[copiedCount] = data->field_8->arr[i]; + copiedCount++; + } + } + + ret = copiedCount; + for (; copiedCount < 5; copiedCount++) + { + data->field_0->arr[copiedCount].unk = gUnknown_8457034; + data->field_0->arr[copiedCount].field_18 = 0; + data->field_0->arr[copiedCount].field_1A_0 = 0; + data->field_0->arr[copiedCount].field_1A_1 = 0; + data->field_0->arr[copiedCount].field_1B = 0; + } + + for (i = 0; i < 5; i++) + { + if (data->field_0->arr[i].field_1A_0 != 1) + continue; + if (data->field_0->arr[i].field_1B != 0x40) + continue; + + ret = i; + break; + } + + return ret; +} -- cgit v1.2.3 From 8d5af5332934f47f022907d2acb2e71d96b04449 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 20 Jan 2020 12:14:55 -0500 Subject: through sub_8116738 --- src/union_room.c | 273 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 273 insertions(+) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index 8874ea816..37c3e7c0a 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -20,17 +20,23 @@ EWRAM_DATA u8 gUnknown_203B058 = 0; EWRAM_DATA u8 gUnknown_203B059 = 0; IWRAM_DATA struct UnkStruct_Leader *gUnknown_3002024; +IWRAM_DATA struct UnkStruct_Group *gUnknown_3002028; void sub_8115A68(u8 taskId); void sub_81161E4(struct UnkStruct_Leader * leader); bool8 sub_8116444(struct UnkStruct_Leader * leader, u32 a1, u32 a2); u8 sub_8116524(struct UnkStruct_Main0 * a0); u8 sub_81165E8(struct UnkStruct_Main0 * a0); +void sub_8116738(u8 taskId); +u32 sub_8116D10(struct UnkStruct_Group * group, s32 id); +void sub_8116D60(struct UnkStruct_Group * group, s32 id); +u8 sub_8116FE4(void); void sub_8117990(void); u16 sub_8118658(const u8 *data); u8 sub_811A054(struct UnkStruct_Main4 *arg0, u32 arg1); bool8 sub_811A0F8(u8 *textState, const u8 *str); s8 sub_811A14C(u8 *dest, bool32 arg1); +void sub_811A41C(void); void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx); void sub_811A5E4(struct UnkStruct_x20 *arg0, u8 count); void sub_811A650(struct UnkStruct_Main4 *arg0, u8 count); @@ -44,7 +50,11 @@ extern const u32 gUnknown_8456CD8[]; extern const struct WindowTemplate gUnknown_8456CFC; extern const struct WindowTemplate gUnknown_8456D04; extern const struct ListMenuTemplate gUnknown_8456D34; +extern const struct WindowTemplate gUnknown_8456D4C; +extern const struct WindowTemplate gUnknown_8456D54; +extern const struct ListMenuTemplate gUnknown_8456DDC; extern const struct UnkStruct_Shared gUnknown_8457034; +extern const u8 gUnknown_84570C8[]; extern const u8 gUnknown_84571B4[]; extern const u8 gUnknown_8457234[]; extern const u8 gUnknown_8457264[]; @@ -56,12 +66,18 @@ extern const u8 gUnknown_84574EC[]; extern const u8 gUnknown_8457514[]; extern const u8 gUnknown_8457530[]; extern const u8 gUnknown_8457554[]; +extern const u8 *const gUnknown_8457608[]; extern const u8 gUnknown_8457610[]; extern const u8 *const gUnknown_845767C[]; extern const u8 gUnknown_84576AC[]; extern const u8 gUnknown_84576C4[]; +extern const u8 gUnknown_8457700[]; +extern const u8 gUnknown_845771C[]; +extern const u8 *const gUnknown_8457754[]; extern const u8 gUnknown_8457E28[]; extern const u8 gUnknown_8457E44[]; +extern const u8 gUnknown_8458FC8[]; +extern const u8 *const gUnknown_84591B8[]; extern const u8 gUnknown_8459238[]; extern const u8 gUnknown_8459250[]; @@ -644,3 +660,260 @@ u8 sub_81165E8(struct UnkStruct_Main0 *arg0) return ret; } + +void TryJoinLinkGroup(void) +{ + u8 taskId; + struct UnkStruct_Group *dataPtr; + + taskId = CreateTask(sub_8116738, 0); + gUnknown_203B05C.group = dataPtr = (void*)(gTasks[taskId].data); + gUnknown_3002028 = dataPtr; + + dataPtr->state = 0; + dataPtr->textState = 0; + gSpecialVar_Result = 0; +} + +void sub_8116738(u8 taskId) +{ + s32 id; + struct UnkStruct_Group *data = gUnknown_203B05C.group; + + switch (data->state) + { + case 0: + sub_80FAF58(gUnknown_84570C8[gSpecialVar_0x8004], 0, 0); + gUnknown_203B058 = gUnknown_84570C8[gSpecialVar_0x8004]; + sub_800B1F4(); + OpenLink(); + sub_80FBBD8(); + data->field_4 = AllocZeroed(0x70); + data->field_0 = AllocZeroed(0x200); + data->state = 1; + break; + case 1: + if (sub_811A0F8(&data->textState, gUnknown_84591B8[gSpecialVar_0x8004])) + data->state = 2; + break; + case 2: + sub_811A650(data->field_4, 4); + sub_811A5E4(data->field_0->arr, 16); + data->field_11 = sub_811A054(data->field_4, gSpecialVar_0x8004); + data->field_C = AddWindow(&gUnknown_8456CD0); + data->listWindowId = AddWindow(&gUnknown_8456D4C); + data->field_D = AddWindow(&gUnknown_8456D54); + + FillWindowPixelBuffer(data->field_C, PIXEL_FILL(2)); + sub_811A444(data->field_C, 0, gUnknown_8458FC8, 8, 2, 4); + PutWindowTilemap(data->field_C); + CopyWindowToVram(data->field_C, 2); + + DrawStdWindowFrame(data->listWindowId, FALSE); + gMultiuseListMenuTemplate = gUnknown_8456DDC; + gMultiuseListMenuTemplate.windowId = data->listWindowId; + data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + + DrawStdWindowFrame(data->field_D, FALSE); + PutWindowTilemap(data->field_D); + sub_8115924(data->field_D); + CopyWindowToVram(data->field_D, 2); + + CopyBgTilemapBufferToVram(0); + data->field_F = 0; + data->state = 3; + break; + case 3: + id = sub_8116FE4(); + switch (id) + { + case 1: + PlaySE(SE_PC_LOGIN); + RedrawListMenu(data->listTaskId); + break; + case 0: + id = ListMenu_ProcessInput(data->listTaskId); + if (gMain.newKeys & A_BUTTON && id != -1) + { + // this unused variable along with the assignment is needed to match + u32 unusedVar; + unusedVar = data->field_0->arr[id].unk.field_0.unk_0a_0; + + if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.field_0.unk_0a_7) + { + u32 var = sub_8116D10(data, id); + if (var == 0) + { + sub_8116D60(data, id); + data->state = 5; + PlaySE(SE_PN_ON); + } + else + { + StringCopy(gStringVar4, gUnknown_8457608[var - 1]); + data->state = 18; + PlaySE(SE_PN_ON); + } + } + else + { + PlaySE(SE_WALL_HIT); + } + } + else if (gMain.newKeys & B_BUTTON) + { + data->state = 10; + } + break; + default: + RedrawListMenu(data->listTaskId); + break; + } + break; + case 5: + sub_811631C(gStringVar4, gUnknown_203B058); + if (sub_811A0F8(&data->textState, gStringVar4)) + { + sub_8018404(gStringVar1, data->field_0->arr[data->field_F]); + data->state = 6; + } + break; + case 6: + if (gReceivedRemoteLinkPlayers != 0) + { + gUnknown_203B058 = data->field_0->arr[data->field_F].unk.field_0.unk_0a_0; + sub_80FB9E4(0, 0); + switch (gUnknown_203B058) + { + case 1 ... 5: + case 9 ... 11: + case 13 ... 14: + case 21 ... 22: + data->state = 20; + break; + } + } + + switch (sub_80FB9F4()) + { + case 1: + data->state = 12; + break; + case 2: + case 6: + case 9: + data->state = 14; + break; + case 5: + sub_81163B0(gStringVar4, gUnknown_203B058); + if (sub_811A0F8(&data->textState, gStringVar4)) + { + sub_80FB9E4(7, 0); + StringCopy(gStringVar1, gUnknown_8456C74[gUnknown_203B058]); + StringExpandPlaceholders(gStringVar4, gUnknown_8457700); + } + break; + case 7: + if (data->field_15 > 0xF0) + { + if (sub_811A0F8(&data->textState, gStringVar4)) + { + sub_80FB9E4(12, 0); + data->field_15 = 0; + } + } + else + { + data->field_15++; + } + break; + } + + if (!sub_80FB9F4() && gMain.newKeys & B_BUTTON) + data->state = 7; + break; + case 7: + if (sub_811A0F8(&data->textState, gUnknown_845771C)) + data->state = 8; + break; + case 8: + switch (sub_811A14C(&data->textState, sub_80FB9F4())) + { + case 0: + sub_80FA6BC(); + data->state = 9; + RedrawListMenu(data->listTaskId); + break; + case 1: + case -1: + data->state = 5; + RedrawListMenu(data->listTaskId); + break; + case -3: + data->state = 6; + RedrawListMenu(data->listTaskId); + break; + } + break; + case 9: + if (sub_80FB9F4()) + data->state = 6; + break; + case 10: + case 12: + case 14: + case 18: + case 20: + ClearWindowTilemap(data->field_D); + ClearStdWindowAndFrame(data->field_D, FALSE); + DestroyListMenuTask(data->listTaskId, 0, 0); + ClearWindowTilemap(data->field_C); + ClearStdWindowAndFrame(data->listWindowId, FALSE); + CopyBgTilemapBufferToVram(0); + RemoveWindow(data->field_D); + RemoveWindow(data->listWindowId); + RemoveWindow(data->field_C); + DestroyTask(data->field_11); + Free(data->field_0); + Free(data->field_4); + data->state++; + break; + case 13: + DestroyWirelessStatusIndicatorSprite(); + if (sub_811A0F8(&data->textState, gUnknown_8457754[sub_80FB9F4()])) + { + gSpecialVar_Result = 6; + data->state = 23; + } + break; + case 11: + DestroyWirelessStatusIndicatorSprite(); + gSpecialVar_Result = 5; + data->state = 23; + break; + case 15: + DestroyWirelessStatusIndicatorSprite(); + if (sub_811A0F8(&data->textState, gUnknown_8457754[sub_80FB9F4()])) + { + gSpecialVar_Result = 8; + data->state = 23; + } + break; + case 19: + if (sub_811A0F8(&data->textState, gStringVar4)) + { + gSpecialVar_Result = 8; + data->state = 23; + } + break; + case 23: + DestroyTask(taskId); + sub_811A41C(); + sub_80F8DC0(); + break; + case 21: + sub_8117990(); + DestroyTask(taskId); + break; + } +} -- cgit v1.2.3 From ac5bfcf1ce9c0f1dfe240dca3aeb0f3fcaa83280 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 20 Jan 2020 14:46:01 -0500 Subject: through sub_8117A0C --- src/credits.c | 4 +- src/field_fadetransition.c | 22 +- src/item_use.c | 10 +- src/mevent.c | 4 +- src/player_pc.c | 8 +- src/quest_log.c | 4 +- src/scrcmd.c | 4 +- src/shop.c | 4 +- src/start_menu.c | 4 +- src/union_room.c | 767 ++++++++++++++++++++++++++++++++++++++++++++- 10 files changed, 794 insertions(+), 37 deletions(-) (limited to 'src') diff --git a/src/credits.c b/src/credits.c index a0138e57a..ceb2028f9 100644 --- a/src/credits.c +++ b/src/credits.c @@ -920,7 +920,7 @@ static s32 RollCredits(void) case CREDITSSCRCMD_MON: sCreditsMgr->mainseqno = CREDITSSCENE_MON_DESTROY_ASSETS; sCreditsMgr->whichMon = sCreditsScript[sCreditsMgr->scrcmdidx].param; - fade_screen(1, 0); + FadeScreen(1, 0); break; case CREDITSSCRCMD_THEENDGFX: sCreditsMgr->mainseqno = CREDITSSCENE_THEEND_DESTROY_ASSETS; @@ -1342,7 +1342,7 @@ static s32 RollCredits(void) "\tstrb r0, [r2, 0x9]\n" "\tmovs r0, 0x1\n" "\tmovs r1, 0\n" - "\tbl fade_screen\n" + "\tbl FadeScreen\n" "\tb _080F3E94\n" "\t.align 2, 0\n" "_080F3E50: .4byte sCreditsMgr\n" diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index dbc5f23b5..0af5f462c 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -56,12 +56,12 @@ void pal_fill_for_maplights(void) { case 0: palette_bg_faded_fill_black(); - fade_screen(0, 0); + FadeScreen(0, 0); palette_bg_faded_fill_black(); break; case 1: palette_bg_faded_fill_white(); - fade_screen(2, 0); + FadeScreen(2, 0); palette_bg_faded_fill_white(); break; } @@ -73,12 +73,12 @@ static void sub_807DBAC(void) { case 0: palette_bg_faded_fill_black(); - fade_screen(0, 3); + FadeScreen(0, 3); palette_bg_faded_fill_black(); break; case 1: palette_bg_faded_fill_white(); - fade_screen(2, 3); + FadeScreen(2, 3); palette_bg_faded_fill_white(); break; } @@ -87,7 +87,7 @@ static void sub_807DBAC(void) void sub_807DC00(void) { palette_bg_faded_fill_black(); - fade_screen(0, 0); + FadeScreen(0, 0); palette_bg_faded_fill_black(); } @@ -95,16 +95,16 @@ void sub_807DC18(void) { const struct MapHeader *header = warp1_get_mapheader(); if (header->regionMapSectionId != gMapHeader.regionMapSectionId && sub_80F8110(header->regionMapSectionId, FALSE)) - fade_screen(1, 0); + FadeScreen(1, 0); else { switch (sub_80C9D7C(GetCurrentMapType(), header->mapType)) { case 0: - fade_screen(1, 0); + FadeScreen(1, 0); break; case 1: - fade_screen(3, 0); + FadeScreen(3, 0); break; } } @@ -115,10 +115,10 @@ static void sub_807DC70(void) switch (sub_80C9D7C(GetCurrentMapType(), warp1_get_mapheader()->mapType)) { case 0: - fade_screen(1, 3); + FadeScreen(1, 3); break; case 1: - fade_screen(3, 3); + FadeScreen(3, 3); break; } } @@ -654,7 +654,7 @@ static void sub_807E678(u8 taskId) { case 0: ClearLinkCallback_2(); - fade_screen(1, 0); + FadeScreen(1, 0); sub_8055F88(); PlaySE(SE_KAIDAN); data[0]++; diff --git a/src/item_use.c b/src/item_use.c index fc5703a75..57771754a 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -458,7 +458,7 @@ void FieldUseFunc_TmCase(u8 taskId) else { StopPokemonLeagueLightingEffectTask(); - fade_screen(1, 0); + FadeScreen(1, 0); gTasks[taskId].func = Task_InitTMCaseFromField; } } @@ -489,7 +489,7 @@ void FieldUseFunc_BerryPouch(u8 taskId) else { StopPokemonLeagueLightingEffectTask(); - fade_screen(1, 0); + FadeScreen(1, 0); gTasks[taskId].func = Task_InitBerryPouchFromField; } } @@ -532,7 +532,7 @@ void FieldUseFunc_TeachyTv(u8 taskId) else { StopPokemonLeagueLightingEffectTask(); - fade_screen(1, 0); + FadeScreen(1, 0); gTasks[taskId].func = Task_InitTeachyTvFromField; } } @@ -662,7 +662,7 @@ void FieldUseFunc_TownMap(u8 taskId) else { StopPokemonLeagueLightingEffectTask(); - fade_screen(1, 0); + FadeScreen(1, 0); gTasks[taskId].func = sub_80A1CC0; } } @@ -694,7 +694,7 @@ void FieldUseFunc_FameChecker(u8 taskId) else { StopPokemonLeagueLightingEffectTask(); - fade_screen(1, 0); + FadeScreen(1, 0); gTasks[taskId].func = sub_80A1D68; } } diff --git a/src/mevent.c b/src/mevent.c index b22d02cbc..c8ce39e23 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -652,7 +652,7 @@ void BlankMEventBuffer2(void) gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.crc = 0; } -u16 sub_81440E8(void) +u16 GetWonderCardFlagID(void) { if (ValidateReceivedWonderCard()) return gSaveBlock1Ptr->mysteryEventBuffers.mecard.data.unk_00; @@ -674,7 +674,7 @@ bool32 sub_8144124(u16 a0) bool32 CheckReceivedGiftFromWonderCard(void) { - u16 value = sub_81440E8(); + u16 value = GetWonderCardFlagID(); if (!sub_8144124(value)) return FALSE; if (FlagGet(gUnknown_8466F00[value - 1000]) == TRUE) diff --git a/src/player_pc.c b/src/player_pc.c index 63870c86a..928676844 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -331,7 +331,7 @@ static void Task_DepositItem_WaitFadeAndGoToBag(u8 taskId) static void Task_PlayerPcDepositItem(u8 taskId) { gTasks[taskId].func = Task_DepositItem_WaitFadeAndGoToBag; - fade_screen(1, 0); + FadeScreen(1, 0); } static void Task_ReturnToItemStorageSubmenu(u8 taskId) @@ -394,7 +394,7 @@ static void Task_WithdrawItemBeginFade(u8 taskId) { gTasks[taskId].func = Task_WithdrawItem_WaitFadeAndGoToItemStorage; ItemPc_SetInitializedFlag(0); - fade_screen(1, 0); + FadeScreen(1, 0); } static void Task_PlayerPcCancel(u8 taskId) @@ -556,7 +556,7 @@ static void Task_MailSubmenuHandleInput(u8 taskId) static void Task_PlayerPcReadMail(u8 taskId) { - fade_screen(1, 0); + FadeScreen(1, 0); gTasks[taskId].func = Task_WaitFadeAndReadSelectedMail; } @@ -663,7 +663,7 @@ static void Task_PlayerPcGiveMailToMon(u8 taskId) } else { - fade_screen(1, 0); + FadeScreen(1, 0); gTasks[taskId].func = Task_WaitFadeAndGoToPartyMenu; } } diff --git a/src/quest_log.c b/src/quest_log.c index 38b3733ea..0cda4eb77 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -1049,7 +1049,7 @@ static void sub_811175C(u8 sceneNum, struct UnkStruct_203AE98 * a1) static void sub_81118F4(s8 a0) { - fade_screen(1, a0); + FadeScreen(1, a0); sQuestLogCB = QuestLog_AdvancePlayhead; } @@ -1309,7 +1309,7 @@ static void QuestLog_CloseTextWindow(void) static void QuestLog_SkipToEndOfPlayback(s8 a0) { - fade_screen(1, a0); + FadeScreen(1, a0); sQuestLogCB = QuestLog_WaitFadeAndCancelPlayback; } diff --git a/src/scrcmd.c b/src/scrcmd.c index 51e7d2c35..c083546eb 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -630,7 +630,7 @@ static bool8 IsPaletteNotActive(void) bool8 ScrCmd_fadescreen(struct ScriptContext *ctx) { - fade_screen(ScriptReadByte(ctx), 0); + FadeScreen(ScriptReadByte(ctx), 0); SetupNativeScript(ctx, IsPaletteNotActive); return TRUE; } @@ -640,7 +640,7 @@ bool8 ScrCmd_fadescreenspeed(struct ScriptContext *ctx) u8 mode = ScriptReadByte(ctx); u8 speed = ScriptReadByte(ctx); - fade_screen(mode, speed); + FadeScreen(mode, speed); SetupNativeScript(ctx, IsPaletteNotActive); return TRUE; } diff --git a/src/shop.c b/src/shop.c index 865688928..97061f8c0 100644 --- a/src/shop.c +++ b/src/shop.c @@ -294,14 +294,14 @@ static void Task_ShopMenu(u8 taskId) static void Task_HandleShopMenuBuy(u8 taskId) { SetWordTaskArg(taskId, 0xE, (u32)CB2_InitBuyMenu); - fade_screen(1, 0); + FadeScreen(1, 0); gTasks[taskId].func = Task_GoToBuyOrSellMenu; } static void Task_HandleShopMenuSell(u8 taskId) { SetWordTaskArg(taskId, 0xE, (u32)CB2_GoToSellMenu); - fade_screen(1, 0); + FadeScreen(1, 0); gTasks[taskId].func = Task_GoToBuyOrSellMenu; } diff --git a/src/start_menu.c b/src/start_menu.c index 59bfb8643..b159f0375 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -446,7 +446,7 @@ static void StartMenu_FadeScreenIfLeavingOverworld(void) && sStartMenuCallback != StartMenuSafariZoneRetireCallback) { StopPokemonLeagueLightingEffectTask(); - fade_screen(1, 0); + FadeScreen(1, 0); } } @@ -554,7 +554,7 @@ static bool8 StartMenuLinkPlayerCallback(void) { PlayRainStoppingSoundEffect(); CleanupOverworldWindowsAndTilemaps(); - ShowTrainerCardInLink(gUnknown_300502C, CB2_ReturnToFieldWithOpenMenu); + ShowTrainerCardInLink(gLocalLinkPlayerId, CB2_ReturnToFieldWithOpenMenu); return TRUE; } return FALSE; diff --git a/src/union_room.c b/src/union_room.c index 37c3e7c0a..6b6ef5b98 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1,23 +1,41 @@ #include "global.h" #include "gflib.h" +#include "battle.h" +#include "berry_crush.h" +#include "cable_club.h" +#include "dodrio_berry_picking.h" #include "event_data.h" +#include "field_control_avatar.h" +#include "field_weather.h" #include "link.h" #include "link_rfu.h" #include "list_menu.h" +#include "load_save.h" +#include "mevent.h" +#include "mystery_gift_menu.h" #include "new_menu_helpers.h" +#include "overworld.h" +#include "party_menu.h" +#include "pokemon_jump.h" +#include "save_location.h" #include "script.h" +#include "script_pokemon_util.h" #include "task.h" +#include "trade.h" +#include "trade_scene.h" +#include "trainer_card.h" #include "union_room.h" +#include "union_room_chat.h" +#include "union_room_player_avatar.h" #include "constants/songs.h" - -#define sub_8018404(dest, arg1) ({ \ - StringCopy7(dest, (arg1).unk.playerName); \ - ConvertInternationalString(dest, (arg1).unk.field_0.unk_00.unk_00_0); \ -}) +#include "constants/maps.h" +#include "constants/cable_club.h" +#include "constants/field_weather.h" EWRAM_DATA union UnkUnion_Main gUnknown_203B05C = {}; EWRAM_DATA u8 gUnknown_203B058 = 0; EWRAM_DATA u8 gUnknown_203B059 = 0; +EWRAM_DATA struct UnionRoomTrade gUnknown_203B06C = {}; IWRAM_DATA struct UnkStruct_Leader *gUnknown_3002024; IWRAM_DATA struct UnkStruct_Group *gUnknown_3002028; @@ -30,8 +48,11 @@ u8 sub_81165E8(struct UnkStruct_Main0 * a0); void sub_8116738(u8 taskId); u32 sub_8116D10(struct UnkStruct_Group * group, s32 id); void sub_8116D60(struct UnkStruct_Group * group, s32 id); +void sub_8116E1C(u8 taskId); u8 sub_8116FE4(void); void sub_8117990(void); +void sub_81179A4(void); +void sub_8117A0C(u8 taskId); u16 sub_8118658(const u8 *data); u8 sub_811A054(struct UnkStruct_Main4 *arg0, u32 arg1); bool8 sub_811A0F8(u8 *textState, const u8 *str); @@ -40,9 +61,13 @@ void sub_811A41C(void); void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx); void sub_811A5E4(struct UnkStruct_x20 *arg0, u8 count); void sub_811A650(struct UnkStruct_Main4 *arg0, u8 count); +bool32 sub_811A6DC(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared *arg1); u32 sub_811A748(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1); u8 sub_811A798(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2); +void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id); void sub_811A910(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id); +void sub_811B148(struct UnionRoomTrade *trade); +u32 sub_811B1EC(struct UnionRoomTrade *trade, u8 mpId); extern const u8 *const gUnknown_8456C74[]; extern const struct WindowTemplate gUnknown_8456CD0; @@ -54,8 +79,10 @@ extern const struct WindowTemplate gUnknown_8456D4C; extern const struct WindowTemplate gUnknown_8456D54; extern const struct ListMenuTemplate gUnknown_8456DDC; extern const struct UnkStruct_Shared gUnknown_8457034; +extern const u8 *const gUnknown_8457094[13]; extern const u8 gUnknown_84570C8[]; extern const u8 gUnknown_84571B4[]; +extern const u8 gUnknown_84571B8[]; extern const u8 gUnknown_8457234[]; extern const u8 gUnknown_8457264[]; extern const u8 *const gUnknown_845742C[][5]; @@ -74,6 +101,7 @@ extern const u8 gUnknown_84576C4[]; extern const u8 gUnknown_8457700[]; extern const u8 gUnknown_845771C[]; extern const u8 *const gUnknown_8457754[]; +extern const u8 gUnknown_84577F8[]; extern const u8 gUnknown_8457E28[]; extern const u8 gUnknown_8457E44[]; extern const u8 gUnknown_8458FC8[]; @@ -81,6 +109,18 @@ extern const u8 *const gUnknown_84591B8[]; extern const u8 gUnknown_8459238[]; extern const u8 gUnknown_8459250[]; +// These are functions in Emmerald but inlined in FireRed + +#define sub_8018404(dest, arg1) ({ \ + StringCopy7(dest, (arg1).unk.playerName); \ + ConvertInternationalString(dest, (arg1).unk.field_0.unk_00.unk_00_0); \ +}) + +#define CopyTrainerCardData(dest, src, _version) ({ \ + (dest) = *((struct TrainerCard *)(src)); \ + (dest).version = _version; \ +}) + void sub_811586C(u8 windowId, u8 arg1, u8 stringId) { FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); @@ -917,3 +957,720 @@ void sub_8116738(u8 taskId) break; } } + +u32 sub_8116D10(struct UnkStruct_Group *arg0, s32 id) +{ + struct UnkStruct_x20 *structPtr = &arg0->field_0->arr[id]; + + if (gUnknown_203B058 == 4 && structPtr->unk.field_0.unk_00.unk_01_2 != VERSION_FIRE_RED && structPtr->unk.field_0.unk_00.unk_01_2 != VERSION_LEAF_GREEN) + { + if (!(gSaveBlock2Ptr->specialSaveWarpFlags & CHAMPION_SAVEWARP)) + return 1; + else if (structPtr->unk.field_0.unk_00.isChampion) + return 0; + } + else + { + return 0; + } + + return 2; +} + +void sub_8116D60(struct UnkStruct_Group *data, s32 id) +{ + data->field_F = id; + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(0, 0); + RedrawListMenu(data->listTaskId); + sub_8018404(gStringVar1, data->field_0->arr[data->field_F]); + sub_80FB008(gUnknown_84570C8[gSpecialVar_0x8004], 0, 1); + sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, sub_8118658(data->field_0->arr[data->field_F].unk.field_0.unk_00.playerTrainerId)); +} + +u8 sub_8116DE0(void) +{ + u8 taskId; + struct UnkStruct_Group *dataPtr; + + taskId = CreateTask(sub_8116E1C, 0); + gUnknown_203B05C.group = dataPtr = (void*)(gTasks[taskId].data); + + dataPtr->state = 0; + dataPtr->textState = 0; + + gUnknown_3002028 = dataPtr; + + return taskId; +} + +void sub_8116E1C(u8 taskId) +{ + struct UnkStruct_Group *data = gUnknown_203B05C.group; + + switch (data->state) + { + case 0: + sub_80FAF58(0, 0, 0); + sub_800B1F4(); + OpenLink(); + sub_80FBBD8(); + sub_80FB128(TRUE); + data->field_4 = AllocZeroed(0x70); + data->field_0 = AllocZeroed(0x200); + data->state = 2; + break; + case 2: + sub_811A650(data->field_4, 4); + sub_811A5E4(data->field_0->arr, 16); + data->field_11 = sub_811A054(data->field_4, 0xFF); + data->field_F = 0; + data->state = 3; + break; + case 3: + if (sub_8116FE4() == 1) + PlaySE(SE_PC_LOGIN); + if (gTasks[taskId].data[15] == 0xFF) + data->state = 10; + break; + case 10: + DestroyTask(data->field_11); + Free(data->field_0); + Free(data->field_4); + sub_80F8DC0(); + data->state++; + break; + case 11: + sub_80F8DC0(); + DestroyTask(taskId); + break; + } +} + +bool32 sub_8116F28(u32 arg0, u32 id) +{ + if (id == 0xFF) + return TRUE; + + if (id <= NELEMS(gUnknown_8457094)) // UB: <= may access data outside the array + { + const u8 *bytes = gUnknown_8457094[id]; + + while ((*(bytes) != 0xFF)) + { + if ((*bytes) == arg0) + return TRUE; + bytes++; + } + } + + return FALSE; +} + +u8 sub_8116F5C(struct UnkStruct_Group *data, u32 id) +{ + if (data->field_0->arr[id].field_1A_0 == 1) + { + if (data->field_0->arr[id].unk.field_0.unk_0a_7) + return 3; + else if (data->field_0->arr[id].field_1A_1 != 0) + return 1; + else if (data->field_0->arr[id].field_1B != 0) + return 2; + } + + return 0; +} + +void sub_8116F94(u8 arg0, s32 id, u8 arg2) +{ + struct UnkStruct_Group *data = gUnknown_203B05C.group; + u8 var = sub_8116F5C(data, id); + + sub_811A81C(arg0, 8, arg2, &data->field_0->arr[id], var, id); +} + +u8 sub_8116FE4(void) +{ + struct UnkStruct_Group *data = gUnknown_203B05C.group; + u8 ret = 0; + u8 i; + s32 id; + + for (i = 0; i < 16; i++) + { + if (data->field_0->arr[i].field_1A_0 != 0) + { + id = sub_811A748(&data->field_0->arr[i], data->field_4->arr); + if (id != 0xFF) + { + if (data->field_0->arr[i].field_1A_0 == 1) + { + if (sub_811A6DC(&data->field_0->arr[i].unk, &data->field_4->arr[id].unk0)) + { + data->field_0->arr[i].unk = data->field_4->arr[id].unk0; + data->field_0->arr[i].field_1B = 0x40; + ret = 1; + } + else + { + if (data->field_0->arr[i].field_1B != 0) + { + data->field_0->arr[i].field_1B--; + if (data->field_0->arr[i].field_1B == 0) + ret = 2; + } + } + } + else + { + data->field_0->arr[i].field_1A_0 = 1; + data->field_0->arr[i].field_1B = 0x40; + ret = 1; + } + + data->field_0->arr[i].field_18 = 0; + } + else + { + if (data->field_0->arr[i].field_1A_0 != 2) + { + data->field_0->arr[i].field_18++; + if (data->field_0->arr[i].field_18 >= 300) + { + data->field_0->arr[i].field_1A_0 = 2; + ret = 2; + } + } + } + } + } + + for (id = 0; id < 4; id++) + { + if (sub_811A798(data->field_0->arr, &data->field_4->arr[id], 16) != 0xFF) + ret = 1; + } + + return ret; +} + +void sub_8117100(u8 taskId) +{ + CB2_ReturnFromLinkTrade(); + DestroyTask(taskId); +} + +u8 sub_8117118(void) +{ + u8 taskId = CreateTask(sub_8117100, 0); + + return taskId; +} + +void sub_8117130(u8 taskId) +{ + u32 monId = sub_811B1EC(&gUnknown_203B06C, GetMultiplayerId()); + + switch (gTasks[taskId].data[0]) + { + case 0: + gTasks[taskId].data[0]++; + SendBlock(0, &gPlayerParty[monId], sizeof(struct Pokemon)); + break; + case 1: + if (GetBlockReceivedStatus() == 3) + { + gEnemyParty[0] = *(struct Pokemon*)(gBlockRecvBuffer[GetMultiplayerId() ^ 1]); + IncrementGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES); + ResetBlockReceivedFlags(); + gTasks[taskId].data[0]++; + } + break; + case 2: + memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, sizeof(struct MailStruct) * PARTY_SIZE + 4); + if (SendBlock(0, gBlockSendBuffer, sizeof(struct MailStruct) * PARTY_SIZE + 4)) + gTasks[taskId].data[0]++; + break; + case 3: + if (GetBlockReceivedStatus() == 3) + { + memcpy(gLinkPartnerMail, gBlockRecvBuffer[GetMultiplayerId() ^ 1], sizeof(struct MailStruct) * PARTY_SIZE); + ResetBlockReceivedFlags(); + gSelectedTradeMonPositions[TRADE_PLAYER] = monId; + gSelectedTradeMonPositions[TRADE_PARTNER] = PARTY_SIZE; + gMain.savedCallback = CB2_ReturnToField; + SetMainCallback2(CB2_InitTradeAnim_LinkTrade); + sub_811B148(&gUnknown_203B06C); + DestroyTask(taskId); + } + break; + } +} + +void sub_8117280(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + if (GetMultiplayerId() == 0) + sub_800A474(2); + gTasks[taskId].data[0]++; + break; + case 1: + if (GetBlockReceivedStatus() == sub_800A8D4()) + { + s32 i; + u16 *recvBuff; + + for (i = 0; i < GetLinkPlayerCount(); i++) + { + recvBuff = gBlockRecvBuffer[i]; + CopyTrainerCardData(gTrainerCards[i], recvBuff, gLinkPlayers[i].version); + } + + if (GetLinkPlayerCount() == 2) + { + recvBuff = gBlockRecvBuffer[GetMultiplayerId() ^ 1]; + sub_81446D0(recvBuff[48]); + } + else + { + sub_81446C4(); + } + + ResetBlockReceivedFlags(); + DestroyTask(taskId); + } + break; + } +} + +void sub_8117354(void) +{ + switch (gMain.state) + { + case 0: + CreateTask(sub_8117280, 5); + gMain.state++; + break; + case 1: + if (!FuncIsActiveTask(sub_8117280)) + ShowTrainerCardInLink(GetMultiplayerId() ^ 1, CB2_ReturnToField); + break; + } + + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); +} + +void sub_81173C0(u16 battleFlags) +{ + HealPlayerParty(); + SavePlayerParty(); + LoadPlayerBag(); + gLinkPlayers[0].linkType = LINKTYPE_BATTLE; + gLinkPlayers[GetMultiplayerId()].id = GetMultiplayerId(); + gLinkPlayers[GetMultiplayerId() ^ 1].id = GetMultiplayerId() ^ 1; + gMain.savedCallback = sub_8081668; + gBattleTypeFlags = battleFlags; + PlayBattleBGM(); +} + +void sub_8117440(u16 linkService, u16 x, u16 y) +{ + VarSet(VAR_CABLE_CLUB_STATE, linkService); + SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y); + SetDynamicWarpWithCoords(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y); + WarpIntoMap(); +} + +void sub_81174B4(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService) +{ + gSpecialVar_0x8004 = linkService; + VarSet(VAR_CABLE_CLUB_STATE, linkService); + gFieldLinkPlayerCount = GetLinkPlayerCount(); + gLocalLinkPlayerId = GetMultiplayerId(); + SetCableClubWarp(); + SetWarpDestination(mapGroup, mapNum, -1, x, y); + WarpIntoMap(); +} + +void sub_8117534(void) +{ + switch (gMain.state) + { + case 0: + CreateTask(sub_8117280, 5); + gMain.state++; + break; + case 1: + if (!FuncIsActiveTask(sub_8117280)) + SetMainCallback2(sub_8056788); + break; + } + + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); +} + +void sub_8117594(void *arg0, bool32 arg1) +{ + TrainerCard_GenerateCardForLinkPlayer((struct TrainerCard *)arg0); + if (arg1) + *((u16 *)(arg0 + sizeof(struct TrainerCard))) = GetWonderCardFlagID(); + else + *((u16 *)(arg0 + sizeof(struct TrainerCard))) = 0; +} + +void sub_81175BC(u8 taskId) +{ + sub_81446C4(); + switch (gUnknown_203B058) + { + case 1 ... 4: + case 9 ... 11: + case 13: + case 14: + RecordMixTrainerNames(); + break; + } + + switch (gUnknown_203B058) + { + case 65: + case 81: + CleanupOverworldWindowsAndTilemaps(); + gMain.savedCallback = sub_811C1C8; + InitChooseHalfPartyForBattle(2); + break; + case 1: + CleanupOverworldWindowsAndTilemaps(); + sub_8117594(gBlockSendBuffer, TRUE); + HealPlayerParty(); + SavePlayerParty(); + LoadPlayerBag(); + sub_81174B4(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_SINGLE_BATTLE); + SetMainCallback2(sub_8117534); + break; + case 2: + CleanupOverworldWindowsAndTilemaps(); + HealPlayerParty(); + SavePlayerParty(); + LoadPlayerBag(); + sub_8117594(gBlockSendBuffer, TRUE); + sub_81174B4(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_DOUBLE_BATTLE); + SetMainCallback2(sub_8117534); + break; + case 3: + CleanupOverworldWindowsAndTilemaps(); + HealPlayerParty(); + SavePlayerParty(); + LoadPlayerBag(); + sub_8117594(gBlockSendBuffer, TRUE); + sub_81174B4(MAP_GROUP(BATTLE_COLOSSEUM_4P), MAP_NUM(BATTLE_COLOSSEUM_4P), 5, 8, USING_MULTI_BATTLE); + SetMainCallback2(sub_8117534); + break; + case 4: + sub_8117594(gBlockSendBuffer, TRUE); + CleanupOverworldWindowsAndTilemaps(); + sub_81174B4(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, USING_TRADE_CENTER); + SetMainCallback2(sub_8117534); + break; + case 68: + CreateTask(sub_8117130, 0); + break; + case 5: + case 69: + if (GetMultiplayerId() == 0) + { + sub_80F8CFC(); + } + else + { + sub_80F8D14(); + sub_80FAF58(69, 0, 1); + } + sub_8128420(); + break; + case 8: + case 72: + sub_8117594(gBlockSendBuffer, FALSE); + SetMainCallback2(sub_8117354); + break; + case 9: + sub_8117440(USING_MINIGAME, 5, 1); + sub_8147AA8(GetCursorSelectionMonId(), CB2_LoadMap); + break; + case 10: + sub_8117440(USING_BERRY_CRUSH, 9, 1); + sub_814B754(CB2_LoadMap); + break; + case 11: + sub_8117440(USING_MINIGAME, 5, 1); + sub_81507FC(GetCursorSelectionMonId(), CB2_LoadMap); + break; + } + + DestroyTask(taskId); + gSpecialVar_Result = 1; + ScriptContext2_Disable(); +} + +void sub_8117900(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 *sendBuff = (u16*)(gBlockSendBuffer); + + switch (data[0]) + { + case 0: + gSpecialVar_Result = 1; + EnableBothScriptContexts(); + data[0]++; + break; + case 1: + if (!ScriptContext1_IsScriptSetUp()) + { + FadeScreen(FADE_TO_BLACK, 0); + data[0]++; + } + break; + case 2: + if (!gPaletteFade.active) + { + sub_800AB9C(); + data[0]++; + } + break; + case 3: + if (IsLinkTaskFinished()) + { + DestroyTask(taskId); + sub_81179A4(); + } + break; + } +} + +void sub_8117990(void) +{ + CreateTask(sub_8117900, 0); +} + +void sub_81179A4(void) +{ + u8 taskId = CreateTask(sub_81175BC, 0); + gTasks[taskId].data[0] = 0; +} + +void MEvent_CreateTask_Leader(u32 arg0) +{ + u8 taskId; + struct UnkStruct_Leader *dataPtr; + + taskId = CreateTask(sub_8117A0C, 0); + gUnknown_203B05C.leader = dataPtr = (void*)(gTasks[taskId].data); + + dataPtr->state = 0; + dataPtr->textState = 0; + dataPtr->field_18 = arg0; + gSpecialVar_Result = 0; +} + +void sub_8117A0C(u8 taskId) +{ + struct UnkStruct_Leader *data = gUnknown_203B05C.leader; + struct WindowTemplate winTemplate; + s32 val; + + switch (data->state) + { + case 0: + gUnknown_203B058 = data->field_18; + gUnknown_203B059 = 2; + sub_80FAF58(data->field_18, 0, 0); + sub_80FAF74(FALSE, FALSE); + sub_800B1F4(); + OpenLink(); + sub_80FBB8C(2); + data->state = 1; + break; + case 1: + data->field_4 = AllocZeroed(0x70); + data->field_0 = AllocZeroed(0xA0); + data->field_8 = AllocZeroed(0xA0); + sub_811A650(data->field_4, 4); + sub_811A5E4(data->field_0->arr, 5); + LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].unk.field_0, data->field_0->arr[0].unk.playerName); + data->field_0->arr[0].field_18 = 0; + data->field_0->arr[0].field_1A_0 = 1; + data->field_0->arr[0].field_1A_1 = 0; + data->field_0->arr[0].field_1B = 0; + data->field_17 = sub_811A054(data->field_4, 0xFF); + + winTemplate = gUnknown_8456CFC; + winTemplate.baseBlock = GetMysteryGiftBaseBlock(); + data->listWindowId = AddWindow(&winTemplate); + MG_DrawTextBorder(data->listWindowId); + gMultiuseListMenuTemplate = gUnknown_8456D34; + gMultiuseListMenuTemplate.windowId = data->listWindowId; + data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + + CopyBgTilemapBufferToVram(0); + data->field_13 = 1; + data->state = 2; + break; + case 2: + StringCopy(gStringVar1, gUnknown_8456C74[gUnknown_203B058]); + sub_811599C(gStringVar4, gUnknown_203B058); + data->state = 3; + break; + case 3: + AddTextPrinterToWindow1(gStringVar4); + data->state = 4; + break; + case 4: + sub_8116444(data, 5, 6); + if (gMain.newKeys & B_BUTTON) + { + data->state = 13; + DestroyWirelessStatusIndicatorSprite(); + } + break; + case 6: + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_84577F8)) + { + data->field_13 = sub_81165E8(data->field_0); + RedrawListMenu(data->listTaskId); + data->state = 2; + } + break; + case 5: + data->state = 7; + break; + case 7: + switch (mevent_message_print_and_prompt_yes_no(&data->textState, (u16 *)&data->field_14, FALSE, gStringVar4)) + { + case 0: + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(0, 0); + data->field_0->arr[data->field_13].field_1B = 0; + RedrawListMenu(data->listTaskId); + data->field_19 = 5; + sub_80FA670(5, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + data->state = 8; + break; + case 1: + case -1: + data->field_19 = 6; + sub_80FA670(6, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + data->state = 8; + break; + } + break; + case 8: + val = sub_80FA6FC(sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + if (val == 1) + { + if (data->field_19 == 5) + { + data->field_0->arr[data->field_13].field_1B = 0; + RedrawListMenu(data->listTaskId); + data->field_13++; + sub_8018404(gStringVar1, data->field_0->arr[data->field_13 - 1]); + StringExpandPlaceholders(gStringVar4, gUnknown_8457554); + data->state = 9; + sub_80F8F5C(); + } + else + { + sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId)); + data->field_0->arr[data->field_13].field_1A_0 = 0; + sub_81165E8(data->field_0); + RedrawListMenu(data->listTaskId); + data->state = 2; + } + + data->field_19 = 0; + } + else if (val == 2) + { + sub_80FB9E4(0, 0); + data->state = 2; + } + break; + case 9: + AddTextPrinterToWindow1(gStringVar4); + data->state = 10; + break; + case 10: + if (++data->field_E > 120) + data->state = 11; + break; + case 11: + if (!sub_8116444(data, 5, 6)) + data->state = 12; + break; + case 12: + if (sub_80F8F40()) + { + sub_80F8F7C(FALSE); + data->state = 15; + } + else + { + data->state = 6; + } + break; + case 13: + DestroyWirelessStatusIndicatorSprite(); + sub_80F8DC0(); + DestroyListMenuTask(data->listTaskId, 0, 0); + CopyBgTilemapBufferToVram(0); + RemoveWindow(data->listWindowId); + DestroyTask(data->field_17); + Free(data->field_8); + Free(data->field_0); + Free(data->field_4); + data->state++; + break; + case 14: + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_84571B8)) + { + DestroyTask(taskId); + gSpecialVar_Result = 5; + } + break; + case 15: + if (sub_80FB9F4() == 1 || sub_80FB9F4() == 2) + { + data->state = 13; + } + else if (gReceivedRemoteLinkPlayers != 0) + { + sub_80FAFE0(1); + data->state++; + } + break; + case 16: + DestroyListMenuTask(data->listTaskId, 0, 0); + CopyBgTilemapBufferToVram(0); + RemoveWindow(data->listWindowId); + DestroyTask(data->field_17); + Free(data->field_8); + Free(data->field_0); + Free(data->field_4); + sub_800AB9C(); + data->state++; + break; + case 17: + if (IsLinkTaskFinished()) + DestroyTask(taskId); + break; + } +} -- cgit v1.2.3 From 2908c9fa954b2e4b6afa70f3686853ea69cf8569 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 20 Jan 2020 15:17:34 -0500 Subject: Document some misc small scripts --- src/battle_setup.c | 4 +- src/daycare.c | 235 ++++++++++++++++++++++++++--------------------------- src/script_menu.c | 59 +++++++------- src/trade_scene.c | 2 +- 4 files changed, 146 insertions(+), 154 deletions(-) (limited to 'src') diff --git a/src/battle_setup.c b/src/battle_setup.c index a46191509..06f65dae2 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -978,7 +978,7 @@ const u8 *BattleSetup_GetScriptAddrAfterBattle(void) if (sTrainerBattleEndScript != NULL) return sTrainerBattleEndScript; else - return EventScript_1C555B; + return Test_EventScript_Sign; } const u8 *BattleSetup_GetTrainerPostBattleScript(void) @@ -986,7 +986,7 @@ const u8 *BattleSetup_GetTrainerPostBattleScript(void) if (sTrainerABattleScriptRetAddr != NULL) return sTrainerABattleScriptRetAddr; else - return EventScript_1C555B; + return Test_EventScript_Sign; } void ScrSpecial_ShowTrainerNonBattlingSpeech(void) diff --git a/src/daycare.c b/src/daycare.c index b3e76faba..a377e97f5 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -37,9 +37,11 @@ #include "naming_screen.h" #include "help_system.h" #include "field_fadetransition.h" +#include "constants/daycare.h" +#include "constants/pokemon.h" +#include "constants/region_map.h" -#define EGG_MOVES_ARRAY_COUNT 10 -#define EGG_LVL_UP_MOVES_ARRAY_COUNT 50 +// Combination of RSE's Day-Care (re-used on Four Island), FRLG's Day-Care, and egg_hatch.c struct EggHatchData { @@ -119,7 +121,7 @@ static const struct ListMenuItem sLevelMenuItems[] = { {gExpandedPlaceholder_Empty, 0}, {gExpandedPlaceholder_Empty, 1}, - {gOtherText_Exit, 5} + {gOtherText_Exit, DAYCARE_LEVEL_MENU_EXIT} }; static const struct ListMenuTemplate sDaycareListMenuLevelTemplate = @@ -372,7 +374,7 @@ static const s16 sEggShardVelocities[][2] = // code -u8 *GetMonNick(struct Pokemon *mon, u8 *dest) +static u8 *DayCare_GetMonNickname(struct Pokemon *mon, u8 *dest) { u8 nickname[POKEMON_NAME_LENGTH * 2]; @@ -380,7 +382,7 @@ u8 *GetMonNick(struct Pokemon *mon, u8 *dest) return StringCopy10(dest, nickname); } -u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest) +static u8 *DayCare_GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest) { u8 nickname[POKEMON_NAME_LENGTH * 2]; @@ -450,7 +452,7 @@ static void StorePokemonInDaycare(struct Pokemon *mon, struct DaycareMon *daycar u8 mailId; StringCopy(daycareMon->mail.OT_name, gSaveBlock2Ptr->playerName); - GetMonNick(mon, daycareMon->mail.monName); + DayCare_GetMonNickname(mon, daycareMon->mail.monName); // StripExtCtrlCodes(daycareMon->mail.monName); // daycareMon->mail.gameLanguage = LANGUAGE_ENGLISH; // daycareMon->mail.monLanguage = GetMonData(mon, MON_DATA_LANGUAGE); @@ -483,8 +485,8 @@ void StoreSelectedPokemonInDaycare(void) static void ShiftDaycareSlots(struct DayCare *daycare) { // This condition is only satisfied when the player takes out the first pokemon from the daycare. - if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != 0 - && GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) == 0) + if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != SPECIES_NONE + && GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) == SPECIES_NONE) { daycare->mons[0].mon = daycare->mons[1].mon; ZeroBoxMonData(&daycare->mons[1].mon); @@ -512,11 +514,8 @@ static void ApplyDaycareExperience(struct Pokemon *mon) while ((learnedMove = MonTryLearningNewMove(mon, firstMove)) != 0) { firstMove = FALSE; - if (learnedMove == 0xFFFF) - { - // Mon already knows 4 moves. + if (learnedMove == MON_HAS_MAX_MOVES) DeleteFirstMoveAndGiveMoveToMon(mon, gMoveToLearn); - } } } else @@ -535,7 +534,7 @@ static u16 TakeSelectedPokemonFromDaycare(struct DaycareMon *daycareMon) u32 experience; struct Pokemon pokemon; - GetBoxMonNick(&daycareMon->mon, gStringVar1); + DayCare_GetBoxMonNickname(&daycareMon->mon, gStringVar1); species = GetBoxMonData(&daycareMon->mon, MON_DATA_SPECIES); BoxMonToMon(&daycareMon->mon, &pokemon); @@ -595,7 +594,7 @@ static u8 GetNumLevelsGainedForDaycareMon(struct DaycareMon *daycareMon) { u8 numLevelsGained = GetNumLevelsGainedFromSteps(daycareMon); ConvertIntToDecimalStringN(gStringVar2, numLevelsGained, STR_CONV_MODE_LEFT_ALIGN, 2); - GetBoxMonNick(&daycareMon->mon, gStringVar1); + DayCare_GetBoxMonNickname(&daycareMon->mon, gStringVar1); return numLevelsGained; } @@ -604,7 +603,7 @@ static u32 GetDaycareCostForSelectedMon(struct DaycareMon *daycareMon) u32 cost; u8 numLevelsGained = GetNumLevelsGainedFromSteps(daycareMon); - GetBoxMonNick(&daycareMon->mon, gStringVar1); + DayCare_GetBoxMonNickname(&daycareMon->mon, gStringVar1); cost = 100 + 100 * numLevelsGained; ConvertIntToDecimalStringN(gStringVar2, cost, STR_CONV_MODE_LEFT_ALIGN, 5); return cost; @@ -639,7 +638,7 @@ static void ClearDaycareMonMail(struct DayCareMail *mail) { s32 i; - for (i = 0; i < PLAYER_NAME_LENGTH; i++) + for (i = 0; i < PLAYER_NAME_LENGTH/* + 1*/; i++) mail->OT_name[i] = 0; for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++) mail->monName[i] = 0; @@ -777,7 +776,7 @@ static void _TriggerPendingDaycareEgg(struct DayCare *daycare) static void _TriggerPendingDaycareMaleEgg(struct DayCare *daycare) { - daycare->offspringPersonality = (Random()) | (0x8000); + daycare->offspringPersonality = (Random()) | (EGG_GENDER_MALE); FlagSet(FLAG_PENDING_DAYCARE_EGG); } @@ -815,7 +814,7 @@ static void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv) static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) { u8 i; - u8 selectedIvs[3]; + u8 selectedIvs[INHERITED_IV_COUNT]; u8 availableIVs[NUM_STATS]; u8 whichParent[ARRAY_COUNT(selectedIvs)]; u8 iv; @@ -829,17 +828,15 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) // Select the 3 IVs that will be inherited. for (i = 0; i < ARRAY_COUNT(selectedIvs); i++) { - // Randomly pick an IV from the available list. + // Randomly pick an IV from the available list and stop from being chosen again. selectedIvs[i] = availableIVs[Random() % (NUM_STATS - i)]; - - // Remove the selected IV index from the available IV indices. RemoveIVIndexFromList(availableIVs, selectedIvs[i]); } // Determine which parent each of the selected IVs should inherit from. for (i = 0; i < ARRAY_COUNT(selectedIvs); i++) { - whichParent[i] = Random() % 2; + whichParent[i] = Random() % DAYCARE_MON_COUNT; } // Set each of inherited IVs on the egg mon. @@ -921,14 +918,14 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru numSharedParentMoves = 0; for (i = 0; i < MAX_MON_MOVES; i++) { - sHatchedEggMotherMoves[i] = 0; - sHatchedEggFatherMoves[i] = 0; - sHatchedEggFinalMoves[i] = 0; + sHatchedEggMotherMoves[i] = MOVE_NONE; + sHatchedEggFatherMoves[i] = MOVE_NONE; + sHatchedEggFinalMoves[i] = MOVE_NONE; } for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++) - sHatchedEggEggMoves[i] = 0; + sHatchedEggEggMoves[i] = MOVE_NONE; for (i = 0; i < EGG_LVL_UP_MOVES_ARRAY_COUNT; i++) - sHatchedEggLevelUpMoves[i] = 0; + sHatchedEggLevelUpMoves[i] = MOVE_NONE; numLevelUpMoves = GetLevelUpMovesBySpecies(GetMonData(egg, MON_DATA_SPECIES), sHatchedEggLevelUpMoves); for (i = 0; i < MAX_MON_MOVES; i++) @@ -947,7 +944,7 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru { if (sHatchedEggFatherMoves[i] == sHatchedEggEggMoves[j]) { - if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == 0xFFFF) + if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == MON_HAS_MAX_MOVES) DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggFatherMoves[i]); break; } @@ -966,7 +963,7 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru { if (sHatchedEggFatherMoves[i] == ItemIdToBattleMoveId(ITEM_TM01/*_FOCUS_PUNCH*/ + j) && CanMonLearnTMHM(egg, j)) { - if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == 0xFFFF) + if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == MON_HAS_MAX_MOVES) DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggFatherMoves[i]); } } @@ -991,7 +988,7 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru { if (sHatchedEggLevelUpMoves[j] != MOVE_NONE && sHatchedEggFinalMoves[i] == sHatchedEggLevelUpMoves[j]) { - if (GiveMoveToMon(egg, sHatchedEggFinalMoves[i]) == 0xFFFF) + if (GiveMoveToMon(egg, sHatchedEggFinalMoves[i]) == MON_HAS_MAX_MOVES) DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggFinalMoves[i]); break; } @@ -1036,7 +1033,7 @@ static void AlterEggSpeciesWithIncenseItem(u16 *species, struct DayCare *daycare if (motherItem == ITEM_LIGHT_BALL || fatherItem == ITEM_LIGHT_BALL) { - if (GiveMoveToMon(mon, MOVE_VOLT_TACKLE) == 0xFFFF) + if (GiveMoveToMon(mon, MOVE_VOLT_TACKLE) == MON_HAS_MAX_MOVES) DeleteFirstMoveAndGiveMoveToMon(mon, MOVE_VOLT_TACKLE); } }*/ @@ -1044,13 +1041,13 @@ static void AlterEggSpeciesWithIncenseItem(u16 *species, struct DayCare *daycare static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parentSlots) { u16 i; - u16 species[2]; + u16 species[DAYCARE_MON_COUNT]; u16 eggSpecies; // Determine which of the daycare mons is the mother and father of the egg. // The 0th index of the parentSlots array is considered the mother slot, and the // 1st index is the father slot. - for (i = 0; i < 2; i++) + for (i = 0; i < DAYCARE_MON_COUNT; i++) { species[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES); if (species[i] == SPECIES_DITTO) @@ -1066,11 +1063,11 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent } eggSpecies = GetEggSpecies(species[parentSlots[0]]); - if (eggSpecies == SPECIES_NIDORAN_F && daycare->offspringPersonality & 0x8000) + if (eggSpecies == SPECIES_NIDORAN_F && daycare->offspringPersonality & EGG_GENDER_MALE) { eggSpecies = SPECIES_NIDORAN_M; } - if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & 0x8000) + if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & EGG_GENDER_MALE) { eggSpecies = SPECIES_VOLBEAT; } @@ -1078,19 +1075,19 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent // Make Ditto the "mother" slot if the other daycare mon is male. if (species[parentSlots[1]] == SPECIES_DITTO && GetBoxMonGender(&daycare->mons[parentSlots[0]].mon) != MON_FEMALE) { - u8 temp = parentSlots[1]; + u8 ditto = parentSlots[1]; parentSlots[1] = parentSlots[0]; - parentSlots[0] = temp; + parentSlots[0] = ditto; } return eggSpecies; } -static void _GiveEggFromDaycare(struct DayCare *daycare) // give_egg +static void _GiveEggFromDaycare(struct DayCare *daycare) { struct Pokemon egg; u16 species; - u8 parentSlots[2]; // 0th index is "mother" daycare slot, 1st is "father" + u8 parentSlots[DAYCARE_MON_COUNT]; bool8 isEgg; species = DetermineEggSpeciesAndParentSlots(daycare, parentSlots); @@ -1118,7 +1115,7 @@ void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation) u8 metLocation; u8 isEgg; - CreateMon(mon, species, EGG_HATCH_LEVEL, 0x20, FALSE, 0, FALSE, 0); + CreateMon(mon, species, EGG_HATCH_LEVEL, 32, FALSE, 0, OT_ID_PLAYER_ID, 0); metLevel = 0; ball = ITEM_POKE_BALL; language = LANGUAGE_JAPANESE; @@ -1129,7 +1126,7 @@ void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation) SetMonData(mon, MON_DATA_LANGUAGE, &language); if (setHotSpringsLocation) { - metLocation = 253; // hot springs; see PokemonSummaryScreen_PrintEggTrainerMemo + metLocation = METLOC_SPECIAL_EGG; SetMonData(mon, MON_DATA_MET_LOCATION, &metLocation); } @@ -1145,7 +1142,7 @@ static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare * u8 language; personality = daycare->offspringPersonality | (Random() << 16); - CreateMon(mon, species, EGG_HATCH_LEVEL, 0x20, TRUE, personality, FALSE, 0); + CreateMon(mon, species, EGG_HATCH_LEVEL, 32, TRUE, personality, OT_ID_PLAYER_ID, 0); metLevel = 0; ball = ITEM_POKE_BALL; language = LANGUAGE_JAPANESE; @@ -1161,7 +1158,7 @@ void GiveEggFromDaycare(void) _GiveEggFromDaycare(&gSaveBlock1Ptr->daycare); } -static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare) +static bool8 TryProduceOrHatchEgg(struct DayCare *daycare) { u32 i, validEggs = 0; @@ -1171,15 +1168,16 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare) daycare->mons[i].steps++, validEggs++; } - // try to trigger poke sex - if (daycare->offspringPersonality == 0 && validEggs == 2 && (daycare->mons[1].steps & 0xFF) == 0xFF) + // Check if an egg should be produced + if (daycare->offspringPersonality == 0 && validEggs == DAYCARE_MON_COUNT && (daycare->mons[1].steps & 0xFF) == 0xFF) { - u8 loveScore = GetDaycareCompatibilityScore(daycare); - if (loveScore > (Random() * 100u) / USHRT_MAX) + u8 compatability = GetDaycareCompatibilityScore(daycare); + if (compatability > (Random() * 100u) / USHRT_MAX) TriggerPendingDaycareEgg(); } - if (++daycare->stepCounter == 255) // hatch an egg + // Hatch Egg + if (++daycare->stepCounter == 255) { u32 steps; @@ -1191,10 +1189,9 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare) continue; steps = GetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP); - if (steps != 0) // subtract needed steps + if (steps != 0) { steps -= 1; - SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &steps); } else // hatch the egg @@ -1212,7 +1209,7 @@ bool8 ShouldEggHatch(void) { if (GetBoxMonData(&gSaveBlock1Ptr->route5DayCareMon.mon, MON_DATA_SANITY_HAS_SPECIES)) gSaveBlock1Ptr->route5DayCareMon.steps++; - return _DoEggActions_CheckHatch(&gSaveBlock1Ptr->daycare); + return TryProduceOrHatchEgg(&gSaveBlock1Ptr->daycare); } static bool8 IsEggPending(struct DayCare *daycare) @@ -1226,22 +1223,22 @@ static bool8 IsEggPending(struct DayCare *daycare) static void _GetDaycareMonNicknames(struct DayCare *daycare) { u8 text[12]; - if (GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) != 0) + if (GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) != SPECIES_NONE) { - GetBoxMonNick(&daycare->mons[0].mon, gStringVar1); + DayCare_GetBoxMonNickname(&daycare->mons[0].mon, gStringVar1); GetBoxMonData(&daycare->mons[0].mon, MON_DATA_OT_NAME, text); StringCopy(gStringVar3, text); } - if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != 0) + if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != SPECIES_NONE) { - GetBoxMonNick(&daycare->mons[1].mon, gStringVar2); + DayCare_GetBoxMonNickname(&daycare->mons[1].mon, gStringVar2); } } -u16 GetSelectedMonNickAndSpecies(void) +u16 GetSelectedMonNicknameAndSpecies(void) { - GetBoxMonNick(&gPlayerParty[GetCursorSelectionMonId()].box, gStringVar1); + DayCare_GetBoxMonNickname(&gPlayerParty[GetCursorSelectionMonId()].box, gStringVar1); return GetBoxMonData(&gPlayerParty[GetCursorSelectionMonId()].box, MON_DATA_SPECIES); } @@ -1252,26 +1249,19 @@ void GetDaycareMonNicknames(void) u8 GetDaycareState(void) { - // The daycare can be in 4 possible states: - // 0: default state--no deposited mons, no egg - // 1: there is an egg waiting for the player to pick it up - // 2: there is a single pokemon in the daycare - // 3: there are two pokemon in the daycare, no egg - u8 numMons; if (IsEggPending(&gSaveBlock1Ptr->daycare)) { - // There is an Egg waiting for the player. - return 1; + return DAYCARE_EGG_WAITING; } numMons = CountPokemonInDaycare(&gSaveBlock1Ptr->daycare); if (numMons != 0) { - return numMons + 1; + return numMons + 1; // DAYCARE_ONE_MON or DAYCARE_TWO_MONS } - return 0; + return DAYCARE_NO_MONS; } u8 GetDaycarePokemonCount(void) @@ -1283,15 +1273,15 @@ u8 GetDaycarePokemonCount(void) return 0; } +// Determine if the two given egg group lists contain any of the +// same egg groups. static bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2) { - // Determine if the two given egg group lists contain any of the - // same egg groups. s32 i, j; - for (i = 0; i < 2; i++) + for (i = 0; i < EGG_GROUPS_PER_MON; i++) { - for (j = 0; j < 2; j++) + for (j = 0; j < EGG_GROUPS_PER_MON; j++) { if (eggGroups1[i] == eggGroups2[j]) return TRUE; @@ -1304,12 +1294,12 @@ static bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2) static u8 GetDaycareCompatibilityScore(struct DayCare *daycare) { u32 i; - u16 eggGroups[2][2]; - u16 species[2]; - u32 trainerIds[2]; - u32 genders[2]; + u16 eggGroups[DAYCARE_MON_COUNT][EGG_GROUPS_PER_MON]; + u16 species[DAYCARE_MON_COUNT]; + u32 trainerIds[DAYCARE_MON_COUNT]; + u32 genders[DAYCARE_MON_COUNT]; - for (i = 0; i < 2; i++) + for (i = 0; i < DAYCARE_MON_COUNT; i++) { u32 personality; @@ -1323,41 +1313,42 @@ static u8 GetDaycareCompatibilityScore(struct DayCare *daycare) // check unbreedable egg group if (eggGroups[0][0] == EGG_GROUP_UNDISCOVERED || eggGroups[1][0] == EGG_GROUP_UNDISCOVERED) - return 0; + return PARENTS_INCOMPATIBLE; // two Ditto can't breed if (eggGroups[0][0] == EGG_GROUP_DITTO && eggGroups[1][0] == EGG_GROUP_DITTO) - return 0; + return PARENTS_INCOMPATIBLE; - // now that we checked, one ditto can breed with any other mon + // one parent is Ditto if (eggGroups[0][0] == EGG_GROUP_DITTO || eggGroups[1][0] == EGG_GROUP_DITTO) { - if (trainerIds[0] == trainerIds[1]) // same trainer - return 20; + if (trainerIds[0] == trainerIds[1]) + return PARENTS_LOW_COMPATIBILITY; - return 50; // different trainers, more chance of poke sex + return PARENTS_MED_COMPATABILITY; } + // neither parent is Ditto else { - if (genders[0] == genders[1]) // no homo - return 0; + if (genders[0] == genders[1]) + return PARENTS_INCOMPATIBLE; if (genders[0] == MON_GENDERLESS || genders[1] == MON_GENDERLESS) - return 0; - if (!EggGroupsOverlap(eggGroups[0], eggGroups[1])) // not compatible with each other - return 0; + return PARENTS_INCOMPATIBLE; + if (!EggGroupsOverlap(eggGroups[0], eggGroups[1])) + return PARENTS_INCOMPATIBLE; - if (species[0] == species[1]) // same species + if (species[0] == species[1]) { - if (trainerIds[0] == trainerIds[1]) // same species and trainer - return 50; + if (trainerIds[0] == trainerIds[1]) + return PARENTS_MED_COMPATABILITY; // same species, same trainer - return 70; // different trainers, same species + return PARENTS_MAX_COMPATABILITY; // same species, different trainers } else { - if (trainerIds[0] != trainerIds[1]) // different trainers, different species - return 50; + if (trainerIds[0] != trainerIds[1]) + return PARENTS_MED_COMPATABILITY; // different species, different trainers - return 20; // different species, same trainer + return PARENTS_LOW_COMPATIBILITY; // different species, same trainer } } } @@ -1374,13 +1365,13 @@ void SetDaycareCompatibilityString(void) relationshipScore = GetDaycareCompatibilityScoreFromSave(); whichString = 0; - if (relationshipScore == 0) + if (relationshipScore == PARENTS_INCOMPATIBLE) whichString = 3; - if (relationshipScore == 20) + if (relationshipScore == PARENTS_LOW_COMPATIBILITY) whichString = 2; - if (relationshipScore == 50) + if (relationshipScore == PARENTS_MED_COMPATABILITY) whichString = 1; - if (relationshipScore == 70) + if (relationshipScore == PARENTS_MAX_COMPATABILITY) whichString = 0; StringCopy(gStringVar4, sCompatibilityMessages[whichString]); @@ -1389,20 +1380,20 @@ void SetDaycareCompatibilityString(void) bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio) { u8 i; - u8 symbolsCount[2]; // male, female - symbolsCount[0] = symbolsCount[1] = 0; + u8 symbolsCount[GENDER_COUNT]; + symbolsCount[MALE] = symbolsCount[FEMALE] = 0; for (i = 0; name[i] != EOS; i++) { if (name[i] == CHAR_MALE) - symbolsCount[0]++; + symbolsCount[MALE]++; if (name[i] == CHAR_FEMALE) - symbolsCount[1]++; + symbolsCount[FEMALE]++; } - if (genderRatio == MON_MALE && symbolsCount[0] != 0 && symbolsCount[1] == 0) + if (genderRatio == MON_MALE && symbolsCount[MALE] != 0 && symbolsCount[FEMALE] == 0) return TRUE; - if (genderRatio == MON_FEMALE && symbolsCount[1] != 0 && symbolsCount[0] == 0) + if (genderRatio == MON_FEMALE && symbolsCount[FEMALE] != 0 && symbolsCount[MALE] == 0) return TRUE; return FALSE; @@ -1431,13 +1422,13 @@ static u8 *AppendMonGenderSymbol(u8 *name, struct BoxPokemon *boxMon) static void GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest) { - u8 monNames[2][20]; + u8 monNames[DAYCARE_MON_COUNT][20]; u8 i; *dest = EOS; - for (i = 0; i < 2; i++) + for (i = 0; i < DAYCARE_MON_COUNT; i++) { - GetBoxMonNick(&daycare->mons[i].mon, monNames[i]); + DayCare_GetBoxMonNickname(&daycare->mons[i].mon, monNames[i]); AppendMonGenderSymbol(monNames[i], &daycare->mons[i].mon); } @@ -1455,7 +1446,7 @@ static void GetDaycareLevelMenuLevelText(struct DayCare *daycare, u8 *dest) u8 text[20]; *dest = EOS; - for (i = 0; i < 2; i++) + for (i = 0; i < DAYCARE_MON_COUNT; i++) { StringAppend(dest, gText_Lv); level = GetLevelAfterDaycareSteps(&daycare->mons[i].mon, daycare->mons[i].steps); @@ -1487,13 +1478,13 @@ static void DaycareAddTextPrinter(u8 windowId, const u8 *text, u32 x, u32 y) AddTextPrinter(&printer, 0xFF, NULL); } -static void DaycarePrintMonNick(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y) +static void DaycarePrintMonNickname(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y) { - u8 nick[POKEMON_NAME_LENGTH * 2]; + u8 nickname[POKEMON_NAME_LENGTH * 2]; - GetBoxMonNick(&daycare->mons[daycareSlotId].mon, nick); - AppendMonGenderSymbol(nick, &daycare->mons[daycareSlotId].mon); - DaycareAddTextPrinter(windowId, nick, 8, y); + DayCare_GetBoxMonNickname(&daycare->mons[daycareSlotId].mon, nickname); + AppendMonGenderSymbol(nickname, &daycare->mons[daycareSlotId].mon); + DaycareAddTextPrinter(windowId, nickname, 8, y); } static void DaycarePrintMonLvl(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y) @@ -1519,7 +1510,7 @@ static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y) { if (daycareSlotId < (unsigned) DAYCARE_MON_COUNT) { - DaycarePrintMonNick(&gSaveBlock1Ptr->daycare, windowId, daycareSlotId, y); + DaycarePrintMonNickname(&gSaveBlock1Ptr->daycare, windowId, daycareSlotId, y); DaycarePrintMonLvl(&gSaveBlock1Ptr->daycare, windowId, daycareSlotId, y); } } @@ -1539,8 +1530,8 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId) case 1: gSpecialVar_Result = input; break; - case 5: - gSpecialVar_Result = 2; + case DAYCARE_LEVEL_MENU_EXIT: + gSpecialVar_Result = DAYCARE_EXITED_LEVEL_MENU; break; } DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL); @@ -1551,7 +1542,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId) } else if (gMain.newKeys & B_BUTTON) { - gSpecialVar_Result = 2; + gSpecialVar_Result = DAYCARE_EXITED_LEVEL_MENU; DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL); ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); RemoveWindow(gTasks[taskId].tWindowId); @@ -1697,7 +1688,7 @@ static void AddHatchedMonToParty(u8 id) GetSetPokedexFlag(pokeNum, FLAG_SET_SEEN); GetSetPokedexFlag(pokeNum, FLAG_SET_CAUGHT); - GetMonNick(mon, gStringVar1); + DayCare_GetMonNickname(mon, gStringVar1); ball = ITEM_POKE_BALL; SetMonData(mon, MON_DATA_POKEBALL, &ball); @@ -1722,7 +1713,7 @@ static bool8 sub_8046E34(struct DayCare *daycare, u8 daycareId) u8 nick[0x20]; struct DaycareMon *daycareMon = &daycare->mons[daycareId]; - GetBoxMonNick(&daycareMon->mon, nick); + DayCare_GetBoxMonNickname(&daycareMon->mon, nick); if (daycareMon->mail.message.itemId != 0 && (StringCompare(nick, daycareMon->mail.monName) != 0 || StringCompare(gSaveBlock2Ptr->playerName, daycareMon->mail.OT_name) != 0)) @@ -1963,7 +1954,7 @@ static void CB2_EggHatch_1(void) } break; case 5: - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); + DayCare_GetMonNickname(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_HatchedFromEgg); EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, 0xFF); PlayFanfare(MUS_FANFA5); @@ -1980,7 +1971,7 @@ static void CB2_EggHatch_1(void) sEggHatchData->CB2_state++; break; case 8: - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); + DayCare_GetMonNickname(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_NickHatchPrompt); EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 2, 1); sEggHatchData->CB2_state++; @@ -1997,7 +1988,7 @@ static void CB2_EggHatch_1(void) switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 0: - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3); + DayCare_GetMonNickname(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3); species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyID]); personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0); diff --git a/src/script_menu.c b/src/script_menu.c index 42be3b539..72ff1dc9e 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -565,36 +565,37 @@ const struct MultichoiceListStruct gScriptMultiChoiceMenus[] = { { sScriptMultiChoiceMenu_TrainerTowerMode, NELEMS(sScriptMultiChoiceMenu_TrainerTowerMode) } }; +// From Cool to Berries goes unused const u8 *const gStdStringPtrs[] = { - gText_Cool, - gText_Beauty, - gText_Cute, - gText_Smart, - gText_Tough, - gText_Cool_2, - gText_Beauty_2, - gText_Cute_2, - gText_Smart_2, - gText_Tough_2, - gText_Items, - gText_KeyItems, - gText_PokeBalls, - gText_TMsAndHMs, - gText_Berries, - gText_Boulderbadge, - gText_Cascadebadge, - gText_Thunderbadge, - gText_Rainbowbadge, - gText_Soulbadge, - gText_Marshbadge, - gText_Volcanobadge, - gText_Earthbadge, - gText_Coins_2, - gText_ItemsPocket, - gText_KeyItemsPocket, - gText_PokeBallsPocket, - gText_TmCase, - gText_BerryPouch_2 + [STDSTRING_COOL] = gText_Cool, + [STDSTRING_BEAUTY] = gText_Beauty, + [STDSTRING_CUTE] = gText_Cute, + [STDSTRING_SMART] = gText_Smart, + [STDSTRING_TOUGH] = gText_Tough, + [STDSTRING_COOL2] = gText_Cool_2, + [STDSTRING_BEAUTY2] = gText_Beauty_2, + [STDSTRING_CUTE2] = gText_Cute_2, + [STDSTRING_SMART2] = gText_Smart_2, + [STDSTRING_TOUGH2] = gText_Tough_2, + [STDSTRING_ITEMS] = gText_Items, + [STDSTRING_KEY_ITEMS] = gText_KeyItems, + [STDSTRING_POKEBALLS] = gText_PokeBalls, + [STDSTRING_TMHMS] = gText_TMsAndHMs, + [STDSTRING_BERRIES] = gText_Berries, + [STDSTRING_BOULDER_BADGE] = gText_Boulderbadge, + [STDSTRING_CASCADE_BADGE] = gText_Cascadebadge, + [STDSTRING_THUNDER_BADGE] = gText_Thunderbadge, + [STDSTRING_RAINBOW_BADGE] = gText_Rainbowbadge, + [STDSTRING_SOUL_BADGE] = gText_Soulbadge, + [STDSTRING_MARSH_BADGE] = gText_Marshbadge, + [STDSTRING_VOLCANO_BADGE] = gText_Volcanobadge, + [STDSTRING_EARTH_BADGE] = gText_Earthbadge, + [STDSTRING_COINS] = gText_Coins_2, + [STDSTRING_ITEMS_POCKET] = gText_ItemsPocket, + [STDSTRING_KEY_ITEMS_POCKET] = gText_KeyItemsPocket, + [STDSTRING_POKEBALLS_POCKET] = gText_PokeBallsPocket, + [STDSTRING_TM_CASE] = gText_TmCase, + [STDSTRING_BERRY_POUCH] = gText_BerryPouch_2 }; static const u8 *const sDescriptionPtrs_CableClub_TradeBattleCancel[] = { diff --git a/src/trade_scene.c b/src/trade_scene.c index 9e3c1d0ce..b420cb196 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -2443,7 +2443,7 @@ static void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx) const struct InGameTrade * inGameTrade = &sInGameTrades[inGameTradeIdx]; u8 level = GetMonData(&gPlayerParty[playerSlot], MON_DATA_LEVEL); struct MailStruct mail; - u8 metLocation = MAPSEC_IN_GAME_TRADE; + u8 metLocation = METLOC_IN_GAME_TRADE; struct Pokemon * tradeMon = &gEnemyParty[0]; u8 mailNum; CreateMon(tradeMon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, TRUE, inGameTrade->otId); -- cgit v1.2.3 From a083f0f57f684eba3bb0f9ae3aeb09edb41f2fc2 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 20 Jan 2020 15:24:36 -0500 Subject: through sub_81186C8 --- src/union_room.c | 463 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 443 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index 6b6ef5b98..ac1f081fb 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -3,6 +3,7 @@ #include "battle.h" #include "berry_crush.h" #include "cable_club.h" +#include "decompress.h" #include "dodrio_berry_picking.h" #include "event_data.h" #include "field_control_avatar.h" @@ -11,6 +12,7 @@ #include "link_rfu.h" #include "list_menu.h" #include "load_save.h" +#include "menu.h" #include "mevent.h" #include "mystery_gift_menu.h" #include "new_menu_helpers.h" @@ -37,8 +39,9 @@ EWRAM_DATA u8 gUnknown_203B058 = 0; EWRAM_DATA u8 gUnknown_203B059 = 0; EWRAM_DATA struct UnionRoomTrade gUnknown_203B06C = {}; -IWRAM_DATA struct UnkStruct_Leader *gUnknown_3002024; -IWRAM_DATA struct UnkStruct_Group *gUnknown_3002028; +IWRAM_DATA struct UnkStruct_Leader * gUnknown_3002024; +IWRAM_DATA struct UnkStruct_Group * gUnknown_3002028; +IWRAM_DATA struct UnkStruct_URoom * gUnknown_300202C; void sub_8115A68(u8 taskId); void sub_81161E4(struct UnkStruct_Leader * leader); @@ -53,8 +56,13 @@ u8 sub_8116FE4(void); void sub_8117990(void); void sub_81179A4(void); void sub_8117A0C(u8 taskId); -u16 sub_8118658(const u8 *data); +void sub_8117F20(u8 taskId); +void sub_81182DC(u8 taskId); +void sub_81186E0(u8 taskId); +u16 ReadAsU16(const u8 *data); +bool32 sub_8119FB0(struct GFtgtGname *arg0, s16 arg1); u8 sub_811A054(struct UnkStruct_Main4 *arg0, u32 arg1); +u8 sub_811A084(struct UnkStruct_Main4 *arg0, u32 arg1); bool8 sub_811A0F8(u8 *textState, const u8 *str); s8 sub_811A14C(u8 *dest, bool32 arg1); void sub_811A41C(void); @@ -83,6 +91,7 @@ extern const u8 *const gUnknown_8457094[13]; extern const u8 gUnknown_84570C8[]; extern const u8 gUnknown_84571B4[]; extern const u8 gUnknown_84571B8[]; +extern const u8 gUnknown_84571E0[]; extern const u8 gUnknown_8457234[]; extern const u8 gUnknown_8457264[]; extern const u8 *const gUnknown_845742C[][5]; @@ -101,13 +110,20 @@ extern const u8 gUnknown_84576C4[]; extern const u8 gUnknown_8457700[]; extern const u8 gUnknown_845771C[]; extern const u8 *const gUnknown_8457754[]; +extern const u8 gUnknown_845777C[]; +extern const u8 gUnknown_84577BC[]; extern const u8 gUnknown_84577F8[]; +extern const u8 *const gUnknown_8457838[]; extern const u8 gUnknown_8457E28[]; extern const u8 gUnknown_8457E44[]; extern const u8 gUnknown_8458FC8[]; +extern const u8 gUnknown_8458FE4[]; +extern const u8 gUnknown_84591DC[]; extern const u8 *const gUnknown_84591B8[]; extern const u8 gUnknown_8459238[]; extern const u8 gUnknown_8459250[]; +extern const u8 gUnknown_845928C[]; +extern const u8 *const gUnknown_845933C[]; // These are functions in Emmerald but inlined in FireRed @@ -116,6 +132,11 @@ extern const u8 gUnknown_8459250[]; ConvertInternationalString(dest, (arg1).unk.field_0.unk_00.unk_00_0); \ }) +#define sub_8018404_2(dest, arg1) ({ \ + StringCopy(dest, (arg1).unk.playerName); \ + ConvertInternationalString(dest, (arg1).unk.field_0.unk_00.unk_00_0); \ +}) + #define CopyTrainerCardData(dest, src, _version) ({ \ (dest) = *((struct TrainerCard *)(src)); \ (dest).version = _version; \ @@ -150,7 +171,7 @@ void sub_8115924(u8 windowId) sub_811A444(windowId, 2, gSaveBlock2Ptr->playerName, 0, 2, 0); StringCopy(text2, gUnknown_84571B4); - ConvertIntToDecimalStringN(text, sub_8118658(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5); + ConvertIntToDecimalStringN(text, ReadAsU16(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5); StringAppend(text2, text); sub_811A444(windowId, 0, text2, 0, 0x10, 0); } @@ -255,7 +276,7 @@ void sub_8115A68(u8 taskId) break; case 6: sub_8116444(data, 7, 10); - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { if (data->field_13 == 1) data->state = 23; @@ -268,7 +289,7 @@ void sub_8115A68(u8 taskId) && data->field_13 > (gUnknown_203B059 >> 4) - 1 && (gUnknown_203B059 & 0xF) != 0 && sub_80FC1CC() - && gMain.newKeys & START_BUTTON) + && JOY_NEW(START_BUTTON)) { data->state = 15; sub_80F8F5C(); @@ -308,19 +329,19 @@ void sub_8115A68(u8 taskId) } break; case 11: - switch (sub_811A14C(&data->textState, sub_80FA634(sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName))) + switch (sub_811A14C(&data->textState, sub_80FA634(ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName))) { case 0: LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); data->field_19 = 5; - sub_80FA670(5, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + sub_80FA670(5, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); data->state = 12; break; case 1: case -1: data->field_19 = 6; - sub_80FA670(6, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + sub_80FA670(6, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); data->state = 12; break; case -3: @@ -329,7 +350,7 @@ void sub_8115A68(u8 taskId) } break; case 12: - val = sub_80FA6FC(sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + val = sub_80FA6FC(ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); if (val == 1) { if (data->field_19 == 5) @@ -360,7 +381,7 @@ void sub_8115A68(u8 taskId) } else { - sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId)); + sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId)); data->field_0->arr[data->field_13].field_1A_0 = 0; sub_81165E8(data->field_0); RedrawListMenu(data->listTaskId); @@ -773,7 +794,7 @@ void sub_8116738(u8 taskId) break; case 0: id = ListMenu_ProcessInput(data->listTaskId); - if (gMain.newKeys & A_BUTTON && id != -1) + if (JOY_NEW(A_BUTTON) && id != -1) { // this unused variable along with the assignment is needed to match u32 unusedVar; @@ -800,7 +821,7 @@ void sub_8116738(u8 taskId) PlaySE(SE_WALL_HIT); } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { data->state = 10; } @@ -869,7 +890,7 @@ void sub_8116738(u8 taskId) break; } - if (!sub_80FB9F4() && gMain.newKeys & B_BUTTON) + if (!sub_80FB9F4() && JOY_NEW(B_BUTTON)) data->state = 7; break; case 7: @@ -985,7 +1006,7 @@ void sub_8116D60(struct UnkStruct_Group *data, s32 id) RedrawListMenu(data->listTaskId); sub_8018404(gStringVar1, data->field_0->arr[data->field_F]); sub_80FB008(gUnknown_84570C8[gSpecialVar_0x8004], 0, 1); - sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, sub_8118658(data->field_0->arr[data->field_F].unk.field_0.unk_00.playerTrainerId)); + sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.field_0.unk_00.playerTrainerId)); } u8 sub_8116DE0(void) @@ -1536,7 +1557,7 @@ void sub_8117A0C(u8 taskId) break; case 4: sub_8116444(data, 5, 6); - if (gMain.newKeys & B_BUTTON) + if (JOY_NEW(B_BUTTON)) { data->state = 13; DestroyWirelessStatusIndicatorSprite(); @@ -1562,19 +1583,19 @@ void sub_8117A0C(u8 taskId) data->field_0->arr[data->field_13].field_1B = 0; RedrawListMenu(data->listTaskId); data->field_19 = 5; - sub_80FA670(5, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + sub_80FA670(5, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); data->state = 8; break; case 1: case -1: data->field_19 = 6; - sub_80FA670(6, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + sub_80FA670(6, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); data->state = 8; break; } break; case 8: - val = sub_80FA6FC(sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + val = sub_80FA6FC(ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); if (val == 1) { if (data->field_19 == 5) @@ -1589,7 +1610,7 @@ void sub_8117A0C(u8 taskId) } else { - sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, sub_8118658(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId)); + sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId)); data->field_0->arr[data->field_13].field_1A_0 = 0; sub_81165E8(data->field_0); RedrawListMenu(data->listTaskId); @@ -1674,3 +1695,405 @@ void sub_8117A0C(u8 taskId) break; } } + +void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0) +{ + u8 taskId; + struct UnkStruct_Group *dataPtr; + + taskId = CreateTask(sub_8117F20, 0); + gUnknown_203B05C.group = dataPtr = (void*)(gTasks[taskId].data); + gUnknown_3002028 = dataPtr; + + dataPtr->state = 0; + dataPtr->textState = 0; + dataPtr->field_12 = arg0 - 21; + gSpecialVar_Result = 0; +} + +void sub_8117F20(u8 taskId) +{ + s32 id; + struct WindowTemplate winTemplate1, winTemplate2; + struct UnkStruct_Group *data = gUnknown_203B05C.group; + + switch (data->state) + { + case 0: + sub_80FAF58(data->field_12 + 21, 0, 0); + sub_800B1F4(); + OpenLink(); + sub_80FBBD8(); + data->field_4 = AllocZeroed(0x70); + data->field_0 = AllocZeroed(0x200); + data->state = 1; + break; + case 1: + AddTextPrinterToWindow1(gUnknown_8458FE4); + data->state = 2; + break; + case 2: + sub_811A650(data->field_4, 4); + sub_811A5E4(data->field_0->arr, 16); + data->field_11 = sub_811A054(data->field_4, data->field_12 + 7); + + winTemplate1 = gUnknown_8456D4C; + winTemplate1.baseBlock = GetMysteryGiftBaseBlock(); + data->listWindowId = AddWindow(&winTemplate1); + + data->field_D = AddWindow(&gUnknown_8456D54); + + MG_DrawTextBorder(data->listWindowId); + gMultiuseListMenuTemplate = gUnknown_8456DDC; + gMultiuseListMenuTemplate.windowId = data->listWindowId; + data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + + MG_DrawTextBorder(data->field_D); + FillWindowPixelBuffer(data->field_D, PIXEL_FILL(1)); + PutWindowTilemap(data->field_D); + sub_8115924(data->field_D); + CopyWindowToVram(data->field_D, 2); + + CopyBgTilemapBufferToVram(0); + data->field_F = 0; + data->state = 3; + break; + case 3: + id = sub_8116FE4(); + switch (id) + { + case 1: + PlaySE(SE_PC_LOGIN); + default: + RedrawListMenu(data->listTaskId); + break; + case 0: + id = ListMenu_ProcessInput(data->listTaskId); + if (JOY_NEW(A_BUTTON) && id != -1) + { + // this unused variable along with the assignment is needed to match + u32 unusedVar; + unusedVar = data->field_0->arr[id].unk.field_0.unk_0a_0; + + if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.field_0.unk_0a_7) + { + data->field_F = id; + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(0, 0); + RedrawListMenu(data->listTaskId); + sub_8018404_2(gStringVar1, data->field_0->arr[data->field_F]); + sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.field_0.unk_00.playerTrainerId)); + PlaySE(SE_PN_ON); + data->state = 4; + } + else + { + PlaySE(SE_WALL_HIT); + } + } + else if (JOY_NEW(B_BUTTON)) + { + data->state = 6; + } + break; + } + break; + case 4: + AddTextPrinterToWindow1(gUnknown_8459238); + sub_8018404_2(gStringVar1, data->field_0->arr[data->field_F]); + data->state = 5; + break; + case 5: + if (gReceivedRemoteLinkPlayers != 0) + { + gUnknown_203B058 = data->field_0->arr[data->field_F].unk.field_0.unk_0a_0; + data->state = 10; + } + + switch (sub_80FB9F4()) + { + case 1: + case 2: + case 6: + data->state = 8; + break; + case 5: + AddTextPrinterToWindow1(gUnknown_84576AC); + sub_80FB9E4(0, 0); + break; + } + break; + case 6: + case 8: + case 10: + DestroyListMenuTask(data->listTaskId, 0, 0); + CopyBgTilemapBufferToVram(0); + RemoveWindow(data->field_D); + RemoveWindow(data->listWindowId); + DestroyTask(data->field_11); + Free(data->field_0); + Free(data->field_4); + data->state++; + break; + case 9: + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_8457838[sub_80FB9F4()])) + { + DestroyWirelessStatusIndicatorSprite(); + DestroyTask(taskId); + sub_80F8DC0(); + gSpecialVar_Result = 5; + } + break; + case 7: + DestroyWirelessStatusIndicatorSprite(); + AddTextPrinterToWindow1(gUnknown_84571B8); + DestroyTask(taskId); + sub_80F8DC0(); + gSpecialVar_Result = 5; + break; + case 11: + data->state++; + sub_800AB9C(); + break; + case 12: + if (IsLinkTaskFinished()) + DestroyTask(taskId); + break; + } +} + +void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0) +{ + u8 taskId; + struct UnkStruct_Group *dataPtr; + + taskId = CreateTask(sub_81182DC, 0); + gUnknown_203B05C.group = dataPtr = (void*)(gTasks[taskId].data); + gUnknown_3002028 = dataPtr; + + dataPtr->state = 0; + dataPtr->textState = 0; + dataPtr->field_12 = arg0 - 21; + gSpecialVar_Result = 0; +} + +void sub_81182DC(u8 taskId) +{ + s32 id; + struct WindowTemplate winTemplate; + struct UnkStruct_Group *data = gUnknown_203B05C.group; + + switch (data->state) + { + case 0: + sub_80FAF58(0, 0, 0); + sub_800B1F4(); + OpenLink(); + sub_80FBBD8(); + data->field_4 = AllocZeroed(0x70); + data->field_0 = AllocZeroed(0x200); + data->state = 1; + break; + case 1: + AddTextPrinterToWindow1(gUnknown_84591DC); + data->state = 2; + break; + case 2: + sub_811A650(data->field_4, 4); + sub_811A5E4(data->field_0->arr, 16); + data->field_11 = sub_811A084(data->field_4, data->field_12 + 7); + + if (data->field_13 != 0) + { + winTemplate = gUnknown_8456D4C; + winTemplate.baseBlock = GetMysteryGiftBaseBlock(); + data->listWindowId = AddWindow(&winTemplate); + + MG_DrawTextBorder(data->listWindowId); + gMultiuseListMenuTemplate = gUnknown_8456DDC; + gMultiuseListMenuTemplate.windowId = data->listWindowId; + data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + + CopyBgTilemapBufferToVram(0); + } + + data->field_F = 0; + data->state = 3; + break; + case 3: + id = sub_8116FE4(); + switch (id) + { + case 1: + PlaySE(SE_PC_LOGIN); + default: + if (data->field_13 != 0) + RedrawListMenu(data->listTaskId); + break; + case 0: + if (data->field_13 != 0) + id = ListMenu_ProcessInput(data->listTaskId); + if (data->field_14 > 120) + { + if (data->field_0->arr[0].field_1A_0 == 1 && !data->field_0->arr[0].unk.field_0.unk_0a_7) + { + if (sub_8119FB0(&data->field_0->arr[0].unk.field_0, data->field_12 + 7)) + { + data->field_F = 0; + data->field_14 = 0; + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(0, 0); + sub_80FBF54(data->field_0->arr[0].unk.playerName, ReadAsU16(data->field_0->arr[0].unk.field_0.unk_00.playerTrainerId)); + PlaySE(SE_PN_ON); + data->state = 4; + } + else + { + PlaySE(SE_BOO); + data->state = 10; + } + } + } + else if (gMain.newKeys & B_BUTTON) + { + data->state = 6; + data->field_14 = 0; + } + data->field_14++; + break; + } + break; + case 4: + AddTextPrinterToWindow1(gUnknown_845928C); + sub_8018404_2(gStringVar1, data->field_0->arr[data->field_F]); + data->state = 5; + break; + case 5: + if (gReceivedRemoteLinkPlayers != 0) + { + gUnknown_203B058 = data->field_0->arr[data->field_F].unk.field_0.unk_0a_0; + data->state = 12; + } + + switch (sub_80FB9F4()) + { + case 1: + case 2: + case 6: + data->state = 8; + break; + case 5: + AddTextPrinterToWindow1(gUnknown_845777C); + sub_80FB9E4(0, 0); + break; + } + break; + case 6: + case 8: + case 10: + case 12: + if (data->field_13 != 0) + { + DestroyListMenuTask(data->listTaskId, 0, 0); + CopyBgTilemapBufferToVram(0); + RemoveWindow(data->listWindowId); + } + DestroyTask(data->field_11); + Free(data->field_0); + Free(data->field_4); + data->state++; + break; + case 9: + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_84577BC)) + { + DestroyWirelessStatusIndicatorSprite(); + DestroyTask(taskId); + sub_80F8DC0(); + gSpecialVar_Result = 5; + } + break; + case 7: + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_84571E0)) + { + DestroyWirelessStatusIndicatorSprite(); + DestroyTask(taskId); + sub_80F8DC0(); + gSpecialVar_Result = 5; + } + break; + case 11: + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_845933C[data->field_12])) + { + DestroyWirelessStatusIndicatorSprite(); + DestroyTask(taskId); + sub_80F8DC0(); + gSpecialVar_Result = 5; + } + break; + case 13: + data->state++; + sub_800AB9C(); + break; + case 14: + if (IsLinkTaskFinished()) + DestroyTask(taskId); + break; + } +} + +void UnionRoomSpecial(void) +{ + struct UnkStruct_URoom *dataPtr; + + ClearAndInitHostRFUtgtGname(); + CreateTask(sub_81186E0, 10); + + // dumb line needed to match + gUnknown_203B05C.uRoom = gUnknown_203B05C.uRoom; + + dataPtr = AllocZeroed(sizeof(*gUnknown_203B05C.uRoom)); + gUnknown_203B05C.uRoom = dataPtr; + gUnknown_300202C = dataPtr; + + dataPtr->state = 0; + dataPtr->textState = 0; + dataPtr->field_10 = 0; + dataPtr->field_12 = 0; + + gSpecialVar_Result = 0; + sub_8107D38(0xD0, 1); +} + +u16 ReadAsU16(const u8 *ptr) +{ + return (ptr[1] << 8) | (ptr[0]); +} + +void sub_8118664(u32 nextState, const u8 *src) +{ + struct UnkStruct_URoom *data = gUnknown_203B05C.uRoom; + + data->state = 8; + data->stateAfterPrint = nextState; + if (src != gStringVar4) + StringExpandPlaceholders(gStringVar4, src); +} + +void sub_811868C(const u8 *src) +{ + struct UnkStruct_URoom *data = gUnknown_203B05C.uRoom; + + data->state = 26; + if (src != gStringVar4) + StringExpandPlaceholders(gStringVar4, src); +} + +void sub_81186B0(struct UnkStruct_URoom *data) +{ + memcpy(&gDecompressionBuffer[0x3F00], data->field_0, sizeof(*data->field_0)); +} + +void sub_81186C8(struct UnkStruct_URoom *data) +{ + memcpy(data->field_0, &gDecompressionBuffer[0x3F00], sizeof(*data->field_0)); +} -- cgit v1.2.3 From 1fd20be8e10d9b810095186903acf9a405ce97c4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 20 Jan 2020 17:08:24 -0500 Subject: sub_81186E0 --- src/party_menu.c | 2 +- src/union_room.c | 862 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 841 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/party_menu.c b/src/party_menu.c index b6ec995ff..df0e70b37 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -5818,7 +5818,7 @@ static void Task_ContinueChoosingHalfParty(u8 taskId) } } -void sub_81277F4(u8 menuType, MainCallback callback) +void ChooseMonForTradingBoard(u8 menuType, MainCallback callback) { InitPartyMenu(menuType, PARTY_LAYOUT_SINGLE, diff --git a/src/union_room.c b/src/union_room.c index ac1f081fb..babacd299 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -3,10 +3,12 @@ #include "battle.h" #include "berry_crush.h" #include "cable_club.h" +#include "data.h" #include "decompress.h" #include "dodrio_berry_picking.h" #include "event_data.h" #include "field_control_avatar.h" +#include "field_fadetransition.h" #include "field_weather.h" #include "link.h" #include "link_rfu.h" @@ -22,6 +24,7 @@ #include "save_location.h" #include "script.h" #include "script_pokemon_util.h" +#include "start_menu.h" #include "task.h" #include "trade.h" #include "trade_scene.h" @@ -33,11 +36,12 @@ #include "constants/maps.h" #include "constants/cable_club.h" #include "constants/field_weather.h" +#include "constants/species.h" EWRAM_DATA union UnkUnion_Main gUnknown_203B05C = {}; EWRAM_DATA u8 gUnknown_203B058 = 0; EWRAM_DATA u8 gUnknown_203B059 = 0; -EWRAM_DATA struct UnionRoomTrade gUnknown_203B06C = {}; +EWRAM_DATA struct UnionRoomTrade sUnionRoomTrade = {}; IWRAM_DATA struct UnkStruct_Leader * gUnknown_3002024; IWRAM_DATA struct UnkStruct_Group * gUnknown_3002028; @@ -60,11 +64,20 @@ void sub_8117F20(u8 taskId); void sub_81182DC(u8 taskId); void sub_81186E0(u8 taskId); u16 ReadAsU16(const u8 *data); +void sub_8119904(struct UnkStruct_URoom * uRoom); +bool32 sub_8119944(struct UnkStruct_URoom * uRoom); +u8 sub_8119B94(void); +u8 sub_8119E84(struct UnkStruct_Main4 *arg0, struct UnkStruct_Main4 *arg1, u32 arg2); bool32 sub_8119FB0(struct GFtgtGname *arg0, s16 arg1); u8 sub_811A054(struct UnkStruct_Main4 *arg0, u32 arg1); u8 sub_811A084(struct UnkStruct_Main4 *arg0, u32 arg1); -bool8 sub_811A0F8(u8 *textState, const u8 *str); +void sub_811A0B4(const u8 * str); +void sub_811A0E0(void); +bool8 PrintOnTextbox(u8 *textState, const u8 *str); s8 sub_811A14C(u8 *dest, bool32 arg1); +s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate); +s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6); +void sub_811A3F8(void); void sub_811A41C(void); void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx); void sub_811A5E4(struct UnkStruct_x20 *arg0, u8 count); @@ -74,8 +87,27 @@ u32 sub_811A748(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1); u8 sub_811A798(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2); void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id); void sub_811A910(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id); -void sub_811B148(struct UnionRoomTrade *trade); +bool32 sub_811A9B8(void); +u32 sub_811A9FC(u32 a0); +u32 sub_811AA24(struct UnkStruct_x20 * unkX20); +s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 playerGender); +u32 sub_811ADC4(s16 a0, struct UnkStruct_Main0 * a1); +s32 sub_811ADD0(u32 type, u32 species); +void sub_811AE68(u8 *dst, s32 arg1, u32 playerGender); +void sub_811AECC(u8 *dst, u8 arg1); +bool32 sub_811B0A4(struct UnkStruct_URoom *arg0); +bool32 HasAtLeastTwoMonsOfLevel30OrLower(void); +void ResetUnionRoomTrade(struct UnionRoomTrade *trade); +bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trade); +void RegisterTradeMon(u32 monId, struct UnionRoomTrade *trade); u32 sub_811B1EC(struct UnionRoomTrade *trade, u8 mpId); +void sub_811B258(bool32 a0); +void sub_811B298(void); +u8 sub_811B2A8(s32 a0); +u8 sub_811B2D8(struct UnkStruct_URoom *arg0); +void sub_811B31C(u8 *dest, struct UnkStruct_URoom *uRoom, bool8 gender); +u8 sub_811B754(struct UnkStruct_8019BA8 * ptr); +void sub_811BA78(void); extern const u8 *const gUnknown_8456C74[]; extern const struct WindowTemplate gUnknown_8456CD0; @@ -86,6 +118,14 @@ extern const struct ListMenuTemplate gUnknown_8456D34; extern const struct WindowTemplate gUnknown_8456D4C; extern const struct WindowTemplate gUnknown_8456D54; extern const struct ListMenuTemplate gUnknown_8456DDC; +extern const struct WindowTemplate gUnknown_8456DF4; +extern const struct ListMenuTemplate gUnknown_8456E1C; +extern const struct WindowTemplate gUnknown_8456E34; +extern const struct ListMenuTemplate gUnknown_8456E54; +extern const struct WindowTemplate gUnknown_8456E6C; +extern const struct ListMenuTemplate gUnknown_8456F04; +extern const struct WindowTemplate gUnknown_8456F24; +extern const struct ListMenuTemplate gUnknown_8456F7C; extern const struct UnkStruct_Shared gUnknown_8457034; extern const u8 *const gUnknown_8457094[13]; extern const u8 gUnknown_84570C8[]; @@ -114,8 +154,36 @@ extern const u8 gUnknown_845777C[]; extern const u8 gUnknown_84577BC[]; extern const u8 gUnknown_84577F8[]; extern const u8 *const gUnknown_8457838[]; +extern const u8 gUnknown_84578BC[]; +extern const u8 *const gUnknown_8457A34[]; +extern const u8 *const gUnknown_8457B04[][2]; +extern const u8 *const gUnknown_8457BCC[]; +extern const u8 *const gUnknown_8457C20[]; extern const u8 gUnknown_8457E28[]; extern const u8 gUnknown_8457E44[]; +extern const u8 gUnknown_8457E60[]; +extern const u8 gUnknown_8457F90[]; +extern const u8 *const gUnknown_84580F4[][4]; +extern const u8 *const gUnknown_845842C[]; +extern const u8 gUnknown_8458434[]; +extern const u8 gUnknown_845847C[]; +extern const u8 gUnknown_84584C0[]; +extern const u8 *const gUnknown_8458548[]; +extern const u8 *const gUnknown_84585E8[]; +extern const u8 gUnknown_8458A98[]; +extern const u8 gUnknown_8458AB8[]; +extern const u8 gUnknown_8458B44[]; +extern const u8 gUnknown_8458CD4[]; +extern const u8 gUnknown_8458D1C[]; +extern const u8 gUnknown_8458D54[]; +extern const u8 gUnknown_8458D78[]; +extern const u8 gUnknown_8458D9C[]; +extern const u8 gUnknown_8458DBC[]; +extern const u8 gUnknown_8458DE8[]; +extern const u8 gUnknown_8458E10[]; +extern const u8 gUnknown_8458E70[]; +extern const u8 gUnknown_8458ED0[]; +extern const u8 gUnknown_8458F04[]; extern const u8 gUnknown_8458FC8[]; extern const u8 gUnknown_8458FE4[]; extern const u8 gUnknown_84591DC[]; @@ -271,7 +339,7 @@ void sub_8115A68(u8 taskId) data->state = 5; break; case 5: - if (sub_811A0F8(&data->textState, gStringVar4)) + if (PrintOnTextbox(&data->textState, gStringVar4)) data->state = 6; break; case 6: @@ -308,7 +376,7 @@ void sub_8115A68(u8 taskId) break; case 10: id = ((gUnknown_203B058 & 0xF) == 2) ? 1 : 0; - if (sub_811A0F8(&data->textState, gUnknown_845767C[id])) + if (PrintOnTextbox(&data->textState, gUnknown_845767C[id])) { data->field_13 = sub_81165E8(data->field_0); RedrawListMenu(data->listTaskId); @@ -317,13 +385,13 @@ void sub_8115A68(u8 taskId) break; case 29: id = ((gUnknown_203B059 & 0xF) == 2) ? 0 : 1; - if (sub_811A0F8(&data->textState, gUnknown_845767C[id])) + if (PrintOnTextbox(&data->textState, gUnknown_845767C[id])) { data->state = 21; } break; case 7: - if (sub_811A0F8(&data->textState, gStringVar4)) + if (PrintOnTextbox(&data->textState, gStringVar4)) { data->state = 11; } @@ -397,7 +465,7 @@ void sub_8115A68(u8 taskId) } break; case 13: - if (sub_811A0F8(&data->textState, gStringVar4)) + if (PrintOnTextbox(&data->textState, gStringVar4)) data->state = 14; break; case 14: @@ -405,7 +473,7 @@ void sub_8115A68(u8 taskId) data->state = 17; break; case 15: - if (sub_811A0F8(&data->textState, gUnknown_8457514)) + if (PrintOnTextbox(&data->textState, gUnknown_8457514)) data->state = 16; break; case 16: @@ -424,7 +492,7 @@ void sub_8115A68(u8 taskId) } break; case 19: - if (sub_811A0F8(&data->textState, gUnknown_8457530)) + if (PrintOnTextbox(&data->textState, gUnknown_8457530)) data->state = 20; break; case 20: @@ -463,7 +531,7 @@ void sub_8115A68(u8 taskId) } break; case 30: - if (sub_811A0F8(&data->textState, gUnknown_8457610)) + if (PrintOnTextbox(&data->textState, gUnknown_8457610)) data->state = 23; break; case 21: @@ -754,7 +822,7 @@ void sub_8116738(u8 taskId) data->state = 1; break; case 1: - if (sub_811A0F8(&data->textState, gUnknown_84591B8[gSpecialVar_0x8004])) + if (PrintOnTextbox(&data->textState, gUnknown_84591B8[gSpecialVar_0x8004])) data->state = 2; break; case 2: @@ -833,7 +901,7 @@ void sub_8116738(u8 taskId) break; case 5: sub_811631C(gStringVar4, gUnknown_203B058); - if (sub_811A0F8(&data->textState, gStringVar4)) + if (PrintOnTextbox(&data->textState, gStringVar4)) { sub_8018404(gStringVar1, data->field_0->arr[data->field_F]); data->state = 6; @@ -867,7 +935,7 @@ void sub_8116738(u8 taskId) break; case 5: sub_81163B0(gStringVar4, gUnknown_203B058); - if (sub_811A0F8(&data->textState, gStringVar4)) + if (PrintOnTextbox(&data->textState, gStringVar4)) { sub_80FB9E4(7, 0); StringCopy(gStringVar1, gUnknown_8456C74[gUnknown_203B058]); @@ -877,7 +945,7 @@ void sub_8116738(u8 taskId) case 7: if (data->field_15 > 0xF0) { - if (sub_811A0F8(&data->textState, gStringVar4)) + if (PrintOnTextbox(&data->textState, gStringVar4)) { sub_80FB9E4(12, 0); data->field_15 = 0; @@ -894,7 +962,7 @@ void sub_8116738(u8 taskId) data->state = 7; break; case 7: - if (sub_811A0F8(&data->textState, gUnknown_845771C)) + if (PrintOnTextbox(&data->textState, gUnknown_845771C)) data->state = 8; break; case 8: @@ -941,7 +1009,7 @@ void sub_8116738(u8 taskId) break; case 13: DestroyWirelessStatusIndicatorSprite(); - if (sub_811A0F8(&data->textState, gUnknown_8457754[sub_80FB9F4()])) + if (PrintOnTextbox(&data->textState, gUnknown_8457754[sub_80FB9F4()])) { gSpecialVar_Result = 6; data->state = 23; @@ -954,14 +1022,14 @@ void sub_8116738(u8 taskId) break; case 15: DestroyWirelessStatusIndicatorSprite(); - if (sub_811A0F8(&data->textState, gUnknown_8457754[sub_80FB9F4()])) + if (PrintOnTextbox(&data->textState, gUnknown_8457754[sub_80FB9F4()])) { gSpecialVar_Result = 8; data->state = 23; } break; case 19: - if (sub_811A0F8(&data->textState, gStringVar4)) + if (PrintOnTextbox(&data->textState, gStringVar4)) { gSpecialVar_Result = 8; data->state = 23; @@ -1191,7 +1259,7 @@ u8 sub_8117118(void) void sub_8117130(u8 taskId) { - u32 monId = sub_811B1EC(&gUnknown_203B06C, GetMultiplayerId()); + u32 monId = sub_811B1EC(&sUnionRoomTrade, GetMultiplayerId()); switch (gTasks[taskId].data[0]) { @@ -1222,7 +1290,7 @@ void sub_8117130(u8 taskId) gSelectedTradeMonPositions[TRADE_PARTNER] = PARTY_SIZE; gMain.savedCallback = CB2_ReturnToField; SetMainCallback2(CB2_InitTradeAnim_LinkTrade); - sub_811B148(&gUnknown_203B06C); + ResetUnionRoomTrade(&sUnionRoomTrade); DestroyTask(taskId); } break; @@ -1954,7 +2022,7 @@ void sub_81182DC(u8 taskId) } } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { data->state = 6; data->field_14 = 0; @@ -2097,3 +2165,753 @@ void sub_81186C8(struct UnkStruct_URoom *data) { memcpy(data->field_0, &gDecompressionBuffer[0x3F00], sizeof(*data->field_0)); } + +void sub_81186E0(u8 taskId) +{ + u32 id = 0; + s32 var5 = 0; + s32 playerGender = 0; + struct UnkStruct_URoom * data = gUnknown_203B05C.uRoom; + s16 *taskData = gTasks[taskId].data; + + switch (data->state) + { + case 0: + data->field_4 = AllocZeroed(0x70); + data->field_C = AllocZeroed(0x70); + data->field_0 = AllocZeroed(0x100); + data->field_8 = AllocZeroed(0x20); + sub_811A5E4(data->field_0->arr, 8); + gUnknown_203B058 = 0x40; + data->field_20 = sub_8119E84(data->field_C, data->field_4, 9); + sub_811B754(data->field_A0); + sub_811BB68(); + data->state = 1; + break; + case 1: + sub_811BAAC(data->spriteIds, taskData[0]); + if (++taskData[0] == 8) + data->state = 2; + break; + case 2: + sub_80FAF58(0x40, 0, 0); + sub_80FAFA0(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); + sub_800B1F4(); + OpenLink(); + sub_80FBC00(); + sub_811A5E4(&data->field_8->arr[0], 1); + sub_811A650(data->field_4, 4); + sub_811A650(data->field_C, 4); + gSpecialVar_Result = 0; + data->state = 3; + break; + case 3: + if ((GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_REGISTER + || GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_TRADE) + && sUnionRoomTrade.field_0 != 0) + { + id = GetCursorSelectionMonId(); + switch (sUnionRoomTrade.field_0) + { + case 1: + sub_80FB008(0x54, 0, 1); + if (id >= PARTY_SIZE) + { + ResetUnionRoomTrade(&sUnionRoomTrade); + sub_80FAFA0(0, 0, 0); + sub_811868C(gUnknown_8458D54); + } + else if (!RegisterTradeMonAndGetIsEgg(GetCursorSelectionMonId(), &sUnionRoomTrade)) + { + sub_8118664(0x34, gUnknown_8458CD4); + } + else + { + data->state = 55; + } + break; + case 2: + sub_81186C8(data); + taskData[1] = sUnionRoomTrade.field_8; + if (id >= PARTY_SIZE) + { + sub_811868C(gUnknown_8458D9C); + } + else + { + sub_80FB008(0x54, 0, 1); + gUnknown_203B058 = 0x44; + RegisterTradeMon(GetCursorSelectionMonId(), &sUnionRoomTrade); + data->state = 51; + } + break; + } + sUnionRoomTrade.field_0 = 0; + } + else + { + data->state = 4; + } + break; + case 4: + if (gSpecialVar_Result != 0) + { + if (gSpecialVar_Result == 9) + { + sub_80FB008(0x54, 0, 1); + PlaySE(SE_PC_LOGIN); + StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); + data->state = 42; + gSpecialVar_Result = 0; + } + else if (gSpecialVar_Result == 11) + { + sub_80FB008(0x54, 0, 1); + data->state = 23; + gSpecialVar_Result = 0; + } + else + { + taskData[0] = 0; + taskData[1] = gSpecialVar_Result - 1; + data->state = 24; + gSpecialVar_Result = 0; + } + } + else if (ScriptContext2_IsEnabled() != TRUE) + { + if (JOY_NEW(A_BUTTON)) + { + if (sub_811BF00(data->field_0, &taskData[0], &taskData[1], data->spriteIds)) + { + PlaySE(SE_SELECT); + sub_811B298(); + data->state = 24; + break; + } + else if (sub_811A9B8()) + { + sub_80FB008(0x54, 0, 1); + PlaySE(SE_PC_LOGIN); + sub_811B298(); + StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); + data->state = 45; + break; + } + } + + switch (sub_8119B94()) + { + case 1: + PlaySE(SE_TOY_C); + case 2: + sub_811BECC(data); + break; + case 4: + data->state = 11; + sub_811B298(); + sub_80FAFA0(0, 0, 0); + sub_80FB008(0x53, sub_811B2D8(data), 0); + break; + } + sub_811BEDC(data); + } + break; + case 23: + if (!FuncIsActiveTask(Task_StartMenuHandleInput)) + { + sub_80FB008(0x40, 0, 0); + data->state = 4; + } + break; + case 24: + sub_811A0E0(); + playerGender = sub_811ADC4(taskData[1], data->field_0); + sub_80FB008(0x54, 0, 1); + switch (sub_811AA5C(data->field_0, taskData[0], taskData[1], playerGender)) + { + case 0: + data->state = 26; + break; + case 1: + sub_80FC114(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.field_0, gUnknown_203B058); + data->field_12 = id; // Should be just 0, but won't match any other way. + data->state = 25; + break; + case 2: + sub_8118664(0x13, gStringVar4); + break; + } + break; + case 25: + sub_811A0E0(); + switch (sub_80FB9F4()) + { + case 4: + sub_811B258(TRUE); + data->state = 4; + break; + case 1: + case 2: + if (sub_80FBB0C() == TRUE) + sub_811868C(gUnknown_8457F90); + else + sub_8118664(30, gUnknown_8457F90); + + gUnknown_203B058 = 0x40; + break; + } + + if (gReceivedRemoteLinkPlayers != 0) + { + sub_8117594(gBlockSendBuffer, TRUE); + CreateTask(sub_8117280, 5); + data->state = 38; + } + break; + case 38: + if (!FuncIsActiveTask(sub_8117280)) + { + if (gUnknown_203B058 == 0x44) + sub_8118664(31, gUnknown_84578BC); + else + data->state = 5; + } + break; + case 30: + if (gReceivedRemoteLinkPlayers == 0) + { + sub_811B258(FALSE); + sub_811C028(taskData[0], taskData[1], data->field_0); + data->state = 2; + } + break; + case 5: + id = sub_811AA24(&data->field_0->arr[taskData[1]]); + playerGender = sub_811ADC4(taskData[1], data->field_0); + sub_8118664(6, gUnknown_8457B04[id][playerGender]); + break; + case 6: + var5 = sub_811A218(&data->textState, &data->field_1B, &data->field_1C, &gUnknown_8456DF4, &gUnknown_8456E1C); + if (var5 != -1) + { + if (gReceivedRemoteLinkPlayers == 0) + { + data->state = 28; + } + else + { + data->field_98 = 0; + playerGender = sub_811ADC4(taskData[1], data->field_0); + if (var5 == -2 || var5 == 0x40) + { + data->field_4C[0] = 0x40; + sub_80F9E2C(data->field_4C); + StringCopy(gStringVar4, gUnknown_845842C[gLinkPlayers[0].gender]); + data->state = 32; + } + else + { + gUnknown_203B058 = var5; + gUnknown_203B059 = (u32)(var5) >> 8; + if (gUnknown_203B058 == 0x41 && !HasAtLeastTwoMonsOfLevel30OrLower()) + { + sub_8118664(5, gUnknown_845847C); + } + else + { + data->field_4C[0] = gUnknown_203B058 | 0x40; + sub_80F9E2C(data->field_4C); + data->state = 27; + } + } + } + } + break; + case 28: + StringCopy(gStringVar4, gUnknown_8458434); + data->state = 36; + break; + case 27: + sub_811B0A4(data); + playerGender = sub_811ADC4(taskData[1], data->field_0); + id = sub_811A9FC(data->field_4C[0] & 0x3F); + if (PrintOnTextbox(&data->textState, gUnknown_84580F4[playerGender][id])) + { + taskData[3] = 0; + data->state = 29; + } + break; + case 32: + sub_800AAC0(); + data->state = 36; + break; + case 31: + data->field_4C[0] = 0x44; + data->field_4C[1] = sUnionRoomTrade.species; + data->field_4C[2] = sUnionRoomTrade.level; + sub_80F9E2C(data->field_4C); + data->state = 29; + break; + case 29: + if (gReceivedRemoteLinkPlayers == 0) + { + StringCopy(gStringVar4, gUnknown_8458434); + data->state = 28; + } + else + { + sub_811B0A4(data); + if (data->field_98 == 0x51) + { + if (gUnknown_203B058 == 8) + { + sub_811B31C(gStringVar4, data, FALSE); + data->state = 40; + } + else + { + data->state = 13; + } + } + else if (data->field_98 == 0x52) + { + data->state = 32; + sub_811AE68(gStringVar4, gUnknown_203B058 | 0x40, gLinkPlayers[0].gender); + gUnknown_203B058 = 0; + } + } + break; + + case 7: + id = sub_811AA24(&data->field_0->arr[taskData[1]]); + playerGender = sub_811ADC4(taskData[1], data->field_0); + sub_8118664(6, gUnknown_8457B04[id][playerGender]); + break; + case 40: + if (PrintOnTextbox(&data->textState, gStringVar4)) + { + data->state = 41; + sub_800AB9C(); + data->field_98 = 0; + data->field_9A[0] = 0; + } + break; + case 41: + if (IsLinkTaskFinished()) + { + if (GetMultiplayerId() == 0) + { + StringCopy(gStringVar1, gLinkPlayers[GetMultiplayerId() ^ 1].name); + id = sub_80FD338(gLinkPlayers[1].trainerId, gLinkPlayers[1].name); + StringExpandPlaceholders(gStringVar4, gUnknown_8457C20[id]); + data->state = 33; + } + else + { + data->state = 7; + } + } + break; + case 19: + switch (sub_811A14C(&data->textState, FALSE)) + { + case 0: + CopyBgTilemapBufferToVram(0); + gUnknown_203B058 = 0x45; + sub_80FB008(0x45, 0, 1); + sub_80FC114(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.field_0, gUnknown_203B058); + data->field_12 = taskData[1]; + data->state = 20; + taskData[3] = 0; + break; + case 1: + case -1: + playerGender = sub_811ADC4(taskData[1], data->field_0); + sub_811868C(gUnknown_8458548[playerGender]); + break; + } + break; + case 20: + if (++taskData[2] > 60) + { + data->state = 21; + taskData[2] = 0; + } + break; + case 21: + switch (sub_80FB9F4()) + { + case 4: + sub_811B258(TRUE); + data->state = 4; + break; + case 1: + case 2: + playerGender = sub_811ADC4(taskData[1], data->field_0); + sub_80FB008(0x54, 0, 1); + if (sub_80FBB0C() == TRUE) + sub_811868C(gUnknown_84585E8[playerGender]); + else + sub_8118664(30, gUnknown_84585E8[playerGender]); + break; + case 3: + data->state = 22; + break; + } + taskData[3]++; + break; + case 22: + if (sub_80FBA00()) + { + playerGender = sub_811ADC4(taskData[1], data->field_0); + sub_80FB008(0x54, 0, 1); + if (sub_80FBB0C() == TRUE) + sub_811868C(gUnknown_84585E8[playerGender]); + else + sub_8118664(30, gUnknown_84585E8[playerGender]); + } + if (gReceivedRemoteLinkPlayers != 0) + data->state = 16; + break; + case 11: + PlaySE(SE_PINPON); + sub_80F8FA0(); + data->state = 12; + data->field_9A[0] = 0; + break; + case 12: + if (sub_80FBA00()) + { + sub_811B258(FALSE); + data->state = 2; + } + else if (gReceivedRemoteLinkPlayers != 0) + { + sub_8117594(gBlockSendBuffer, TRUE); + CreateTask(sub_8117280, 5); + data->state = 39; + } + break; + case 39: + sub_8119904(data); + if (!FuncIsActiveTask(sub_8117280)) + { + data->state = 33; + StringCopy(gStringVar1, gLinkPlayers[1].name); + id = sub_80FD338(gLinkPlayers[1].trainerId, gLinkPlayers[1].name); + StringExpandPlaceholders(gStringVar4, gUnknown_8457BCC[id]); + } + break; + case 33: + sub_8119904(data); + if (PrintOnTextbox(&data->textState, gStringVar4)) + data->state = 34; + break; + case 34: + sub_8119904(data); + if (sub_8119944(data) && JOY_NEW(B_BUTTON)) + { + sub_80FBD6C(1); + StringCopy(gStringVar4, gUnknown_8457E60); + data->state = 36; + } + break; + case 35: + sub_8118664(9, gStringVar4); + break; + case 9: + switch (sub_811A14C(&data->textState, FALSE)) + { + case 0: + data->field_4C[0] = 0x51; + if (gUnknown_203B058 == 0x45) + sub_80FB008(gUnknown_203B058 | 0x40, sub_811B2A8(1), 0); + else + sub_80FB008(gUnknown_203B058 | 0x40, sub_811B2A8(1), 1); + + data->field_8->arr[0].field_1B = 0; + taskData[3] = 0; + if (gUnknown_203B058 == 0x41) + { + if (!HasAtLeastTwoMonsOfLevel30OrLower()) + { + data->field_4C[0] = 0x52; + sub_80F9E2C(data->field_4C); + data->state = 10; + StringCopy(gStringVar4, gUnknown_84584C0); + } + else + { + sub_80F9E2C(data->field_4C); + data->state = 13; + } + } + else if (gUnknown_203B058 == 0x48) + { + sub_80F9E2C(data->field_4C); + sub_811B31C(gStringVar4, data, 1); + data->state = 40; + } + else + { + sub_80F9E2C(data->field_4C); + data->state = 13; + } + break; + case 1: + case -1: + data->field_4C[0] = 0x52; + sub_80F9E2C(data->field_4C); + data->state = 10; + sub_81162E0(gStringVar4, gUnknown_203B058); + break; + } + break; + case 10: + sub_800AAC0(); + data->state = 36; + break; + case 36: + if (gReceivedRemoteLinkPlayers == 0) + { + gUnknown_203B058 = 0x40; + sub_8118664(0x25, gStringVar4); + memset(data->field_4C, 0, sizeof(data->field_4C)); + data->field_9A[0] = 0; + data->field_98 = 0; + } + break; + case 37: + data->state = 2; + sub_811B258(FALSE); + break; + case 13: + sub_811AECC(gStringVar4, gUnknown_203B058 | 0x40); + sub_8118664(14, gStringVar4); + break; + case 14: + sub_800AB9C(); + data->state = 15; + break; + case 15: + if (IsLinkTaskFinished()) + data->state = 16; + break; + case 16: + Free(data->field_8); + Free(data->field_0); + Free(data->field_C); + Free(data->field_4); + DestroyTask(data->field_20); + sub_811BB40(data->spriteIds); + data->state = 17; + break; + case 17: + BeginNormalPaletteFade(-1, 0, 0, 0x10, RGB_BLACK); + data->state = 18; + break; + case 18: + if (!UpdatePaletteFade()) + { + sub_811BA78(); + DestroyTask(taskId); + Free(gUnknown_203B05C.uRoom); + sub_81179A4(); + } + break; + case 42: + if (sub_80F9800()->species == SPECIES_NONE) + { + data->state = 43; + } + else + { + if (sub_80F9800()->species == SPECIES_EGG) + { + StringCopy(gStringVar4, gUnknown_8458DE8); + } + else + { + StringCopy(gStringVar1, gSpeciesNames[sub_80F9800()->species]); + ConvertIntToDecimalStringN(gStringVar2, sub_80F9800()->level, STR_CONV_MODE_LEFT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gUnknown_8458DBC); + } + sub_8118664(44, gStringVar4); + } + break; + case 43: + if (PrintOnTextbox(&data->textState, gUnknown_8458AB8)) + data->state = 47; + break; + case 47: + var5 = sub_811A218(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_8456E34, &gUnknown_8456E54); + if (var5 != -1) + { + if (var5 == -2 || var5 == 3) + { + data->state = 4; + sub_811B258(TRUE); + } + else + { + switch (var5) + { + case 1: // REGISTER + sub_8118664(53, gUnknown_8458D1C); + break; + case 2: // INFO + sub_8118664(47, gUnknown_8458B44); + break; + } + } + DestroyHelpMessageWindow_(); + } + break; + case 53: + BeginNormalPaletteFade(-1, 0, 0, 0x10, RGB_BLACK); + data->state = 54; + break; + case 54: + if (!gPaletteFade.active) + { + sUnionRoomTrade.field_0 = 1; + gFieldCallback = sub_807DCE4; + ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_REGISTER, CB2_ReturnToField); + } + break; + case 52: + var5 = sub_811A218(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_8456E6C, &gUnknown_8456F04); + if (var5 != -1) + { + switch (var5) + { + case -2: + case 18: + ResetUnionRoomTrade(&sUnionRoomTrade); + sub_80FAFA0(0, 0, 0); + sub_811868C(gUnknown_8458D54); + break; + default: + sUnionRoomTrade.type = var5; + data->state = 55; + break; + } + } + break; + case 55: + sub_80FAFA0(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); + sub_811868C(gUnknown_8458D78); + break; + case 44: + switch (sub_811A14C(&data->textState, FALSE)) + { + case 0: + data->state = 56; + break; + case 1: + case -1: + sub_811B258(TRUE); + data->state = 4; + break; + } + break; + case 56: + if (PrintOnTextbox(&data->textState, gUnknown_8458E10)) + { + sub_80FAFA0(0, 0, 0); + ResetUnionRoomTrade(&sUnionRoomTrade); + sub_811B258(TRUE); + data->state = 4; + } + break; + case 45: + if (PrintOnTextbox(&data->textState, gUnknown_8458A98)) + data->state = 46; + break; + case 46: + sub_811A3F8(); + data->state = 48; + break; + case 48: + var5 = sub_811A2EC(&data->textState, &data->field_1D, &data->field_4A, &data->field_1E, &gUnknown_8456F24, &gUnknown_8456F7C, data->field_0); + if (var5 != -1) + { + switch (var5) + { + case -2: + case 8: + sub_811B258(TRUE); + DestroyHelpMessageWindow_(); + data->state = 4; + break; + default: + switch (sub_811ADD0(data->field_0->arr[var5].unk.field_0.type, data->field_0->arr[var5].unk.field_0.species)) + { + case 0: + sub_8018404_2(gStringVar1, data->field_0->arr[var5]); + sub_8118664(49, gUnknown_8458E70); + taskData[1] = var5; + break; + case 1: + sub_8018404_2(gStringVar1, data->field_0->arr[var5]); + StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.field_0.type]); + sub_8118664(46, gUnknown_8458ED0); + break; + case 2: + sub_8018404_2(gStringVar1, data->field_0->arr[var5]); + StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.field_0.type]); + sub_8118664(46, gUnknown_8458F04); + break; + } + break; + } + } + break; + case 49: + switch (sub_811A14C(&data->textState, FALSE)) + { + case 0: + data->state = 50; + break; + case -1: + case 1: + sub_811B258(TRUE); + data->state = 4; + break; + } + break; + case 50: + if (PrintOnTextbox(&data->textState, gUnknown_8458D1C)) + { + sUnionRoomTrade.field_0 = 2; + memcpy(&gUnknown_203B064, &data->field_0->arr[taskData[1]].unk.field_0.unk_00, sizeof(gUnknown_203B064)); + gUnionRoomRequestedMonType = data->field_0->arr[taskData[1]].unk.field_0.type; + gUnionRoomOfferedSpecies = data->field_0->arr[taskData[1]].unk.field_0.species; + gFieldCallback = sub_807DCE4; + ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_TRADE, CB2_ReturnToField); + sub_81186B0(data); + sUnionRoomTrade.field_8 = taskData[1]; + } + break; + case 51: + gUnknown_203B058 = 0x44; + sub_80FC114(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.field_0, 0x44); + sub_8018404_2(gStringVar1, data->field_0->arr[taskData[1]]); + sub_811A0B4(gUnknown_8457A34[2]); + data->state = 25; + break; + case 26: + if (PrintOnTextbox(&data->textState, gStringVar4)) + { + sub_811B258(TRUE); + sub_811C028(taskData[0], taskData[1], data->field_0); + data->state = 4; + } + break; + case 8: + if (PrintOnTextbox(&data->textState, gStringVar4)) + data->state = data->stateAfterPrint; + break; + } +} -- cgit v1.2.3 From 5e0a845fc491590a7bf7d9e9cb99cf1f57733665 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 20 Jan 2020 20:21:58 -0500 Subject: finish union_room.s code decomp --- src/event_object_lock.c | 2 +- src/union_room.c | 1476 +++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 1420 insertions(+), 58 deletions(-) (limited to 'src') diff --git a/src/event_object_lock.c b/src/event_object_lock.c index ea4fa00b9..e91642aa2 100644 --- a/src/event_object_lock.c +++ b/src/event_object_lock.c @@ -9,7 +9,7 @@ bool8 walkrun_is_standing_still(void) { - if (gPlayerAvatar.running1 == 1) + if (gPlayerAvatar.tileTransitionState == 1) return FALSE; else return TRUE; diff --git a/src/union_room.c b/src/union_room.c index babacd299..dc1c2a3fa 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -6,9 +6,13 @@ #include "data.h" #include "decompress.h" #include "dodrio_berry_picking.h" +#include "dynamic_placeholder_text_util.h" +#include "easy_chat.h" #include "event_data.h" +#include "event_object_lock.h" #include "field_control_avatar.h" #include "field_fadetransition.h" +#include "field_player_avatar.h" #include "field_weather.h" #include "link.h" #include "link_rfu.h" @@ -21,6 +25,8 @@ #include "overworld.h" #include "party_menu.h" #include "pokemon_jump.h" +#include "quest_log.h" +#include "random.h" #include "save_location.h" #include "script.h" #include "script_pokemon_util.h" @@ -38,6 +44,7 @@ #include "constants/field_weather.h" #include "constants/species.h" +EWRAM_DATA u8 sUnionRoomPlayerName[12] = {}; EWRAM_DATA union UnkUnion_Main gUnknown_203B05C = {}; EWRAM_DATA u8 gUnknown_203B058 = 0; EWRAM_DATA u8 gUnknown_203B059 = 0; @@ -66,46 +73,50 @@ void sub_81186E0(u8 taskId); u16 ReadAsU16(const u8 *data); void sub_8119904(struct UnkStruct_URoom * uRoom); bool32 sub_8119944(struct UnkStruct_URoom * uRoom); +void sub_81199FC(u8 taskId); u8 sub_8119B94(void); -u8 sub_8119E84(struct UnkStruct_Main4 *arg0, struct UnkStruct_Main4 *arg1, u32 arg2); -bool32 sub_8119FB0(struct GFtgtGname *arg0, s16 arg1); -u8 sub_811A054(struct UnkStruct_Main4 *arg0, u32 arg1); -u8 sub_811A084(struct UnkStruct_Main4 *arg0, u32 arg1); -void sub_811A0B4(const u8 * str); -void sub_811A0E0(void); +u8 sub_8119E84(struct UnkStruct_Main4 * arg0, struct UnkStruct_Main4 * arg1, u32 arg2); +bool32 sub_8119FB0(struct GFtgtGname * arg0, s16 arg1); +u8 sub_811A054(struct UnkStruct_Main4 * arg0, u32 arg1); +u8 sub_811A084(struct UnkStruct_Main4 * arg0, u32 arg1); +bool32 sub_811A0B4(const u8 * str); +bool32 sub_811A0E0(void); bool8 PrintOnTextbox(u8 *textState, const u8 *str); s8 sub_811A14C(u8 *dest, bool32 arg1); -s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate); -s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6); +s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate); +s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * arg6); void sub_811A3F8(void); void sub_811A41C(void); void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx); -void sub_811A5E4(struct UnkStruct_x20 *arg0, u8 count); -void sub_811A650(struct UnkStruct_Main4 *arg0, u8 count); -bool32 sub_811A6DC(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared *arg1); -u32 sub_811A748(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1); -u8 sub_811A798(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2); -void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id); -void sub_811A910(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id); +void sub_811A5E4(struct UnkStruct_x20 * arg0, u8 count); +void sub_811A650(struct UnkStruct_Main4 * arg0, u8 count); +bool8 sub_811A694(struct UnkStruct_Shared * arg0, const struct UnkStruct_Shared * arg1); +bool32 sub_811A6DC(struct UnkStruct_Shared * arg0, struct UnkStruct_Shared * arg1); +u32 sub_811A748(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1); +u8 sub_811A798(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1, u8 arg2); +void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 * arg3, u8 arg4, u8 id); +void sub_811A910(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 * arg3, u8 arg4, u8 id); bool32 sub_811A9B8(void); -u32 sub_811A9FC(u32 a0); +u32 sub_811A9FC(s32 a0); u32 sub_811AA24(struct UnkStruct_x20 * unkX20); s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 playerGender); -u32 sub_811ADC4(s16 a0, struct UnkStruct_Main0 * a1); +s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1); +s32 sub_811ADC4(s32 a0, struct UnkStruct_Main0 * a1); s32 sub_811ADD0(u32 type, u32 species); void sub_811AE68(u8 *dst, s32 arg1, u32 playerGender); void sub_811AECC(u8 *dst, u8 arg1); -bool32 sub_811B0A4(struct UnkStruct_URoom *arg0); +s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom * arg3); +bool32 sub_811B0A4(struct UnkStruct_URoom * arg0); bool32 HasAtLeastTwoMonsOfLevel30OrLower(void); -void ResetUnionRoomTrade(struct UnionRoomTrade *trade); -bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trade); -void RegisterTradeMon(u32 monId, struct UnionRoomTrade *trade); -u32 sub_811B1EC(struct UnionRoomTrade *trade, u8 mpId); +void ResetUnionRoomTrade(struct UnionRoomTrade * trade); +bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade * trade); +void RegisterTradeMon(u32 monId, struct UnionRoomTrade * trade); +u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade * trade, u8 mpId); void sub_811B258(bool32 a0); void sub_811B298(void); u8 sub_811B2A8(s32 a0); -u8 sub_811B2D8(struct UnkStruct_URoom *arg0); -void sub_811B31C(u8 *dest, struct UnkStruct_URoom *uRoom, bool8 gender); +u8 sub_811B2D8(struct UnkStruct_URoom * arg0); +void sub_811B31C(u8 *dest, struct UnkStruct_URoom * uRoom, bool8 gender); u8 sub_811B754(struct UnkStruct_8019BA8 * ptr); void sub_811BA78(void); @@ -124,11 +135,13 @@ extern const struct WindowTemplate gUnknown_8456E34; extern const struct ListMenuTemplate gUnknown_8456E54; extern const struct WindowTemplate gUnknown_8456E6C; extern const struct ListMenuTemplate gUnknown_8456F04; +extern const struct WindowTemplate gUnknown_8456F1C; extern const struct WindowTemplate gUnknown_8456F24; extern const struct ListMenuTemplate gUnknown_8456F7C; extern const struct UnkStruct_Shared gUnknown_8457034; extern const u8 *const gUnknown_8457094[13]; extern const u8 gUnknown_84570C8[]; +extern const u8 gUnknown_84571B0[]; extern const u8 gUnknown_84571B4[]; extern const u8 gUnknown_84571B8[]; extern const u8 gUnknown_84571E0[]; @@ -159,17 +172,31 @@ extern const u8 *const gUnknown_8457A34[]; extern const u8 *const gUnknown_8457B04[][2]; extern const u8 *const gUnknown_8457BCC[]; extern const u8 *const gUnknown_8457C20[]; +extern const u8 gUnknown_8457C48[]; +extern const u8 gUnknown_8457CA4[]; +extern const u8 gUnknown_8457CF8[]; +extern const u8 gUnknown_8457D44[]; +extern const u8 gUnknown_8457DB8[]; +extern const u8 gUnknown_8457E0C[]; extern const u8 gUnknown_8457E28[]; extern const u8 gUnknown_8457E44[]; extern const u8 gUnknown_8457E60[]; +extern const u8 *const gUnknown_8457F80[][2]; extern const u8 gUnknown_8457F90[]; extern const u8 *const gUnknown_84580F4[][4]; +extern const u8 *const gUnknown_8458230[][2][3]; +extern const u8 *const gUnknown_8458314[]; +extern const u8 *const gUnknown_84583B4[]; extern const u8 *const gUnknown_845842C[]; extern const u8 gUnknown_8458434[]; extern const u8 gUnknown_845847C[]; extern const u8 gUnknown_84584C0[]; extern const u8 *const gUnknown_8458548[]; extern const u8 *const gUnknown_84585E8[]; +extern const u8 *const gUnknown_8458758[2][4]; +extern const u8 *const gUnknown_84588BC[2][4]; +extern const u8 *const gUnknown_84589AC[2][2]; +extern const u8 *const gUnknown_8458A78[2][4]; extern const u8 gUnknown_8458A98[]; extern const u8 gUnknown_8458AB8[]; extern const u8 gUnknown_8458B44[]; @@ -184,6 +211,8 @@ extern const u8 gUnknown_8458E10[]; extern const u8 gUnknown_8458E70[]; extern const u8 gUnknown_8458ED0[]; extern const u8 gUnknown_8458F04[]; +extern const u8 gUnknown_8458F9C[]; +extern const u8 gUnknown_8458FBC[]; extern const u8 gUnknown_8458FC8[]; extern const u8 gUnknown_8458FE4[]; extern const u8 gUnknown_84591DC[]; @@ -192,6 +221,12 @@ extern const u8 gUnknown_8459238[]; extern const u8 gUnknown_8459250[]; extern const u8 gUnknown_845928C[]; extern const u8 *const gUnknown_845933C[]; +extern const u8 gUnknown_8459378[]; +extern const u8 *const gUnknown_84594B0[]; +extern const u8 gUnknown_84594C4[]; +extern const u8 gUnknown_8459504[]; +extern const u8 *const gUnknown_8459580[]; +extern const u8 gUnknown_8459588[]; // These are functions in Emmerald but inlined in FireRed @@ -206,10 +241,15 @@ extern const u8 *const gUnknown_845933C[]; }) #define CopyTrainerCardData(dest, src, _version) ({ \ - (dest) = *((struct TrainerCard *)(src)); \ + (dest) = *((struct TrainerCard * )(src)); \ (dest).version = _version; \ }) +#define GetStringRightAlignXOffset(_fontId, _string, _maxWidth) ({ \ + u16 strWidth = GetStringWidth(_fontId, _string, 0); \ + _maxWidth - strWidth; \ +}) + void sub_811586C(u8 windowId, u8 arg1, u8 stringId) { FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); @@ -260,7 +300,7 @@ void sub_811599C(u8 *dst, u8 caseId) void TryBecomeLinkLeader(void) { u8 taskId; - struct UnkStruct_Leader *dataPtr; + struct UnkStruct_Leader * dataPtr; taskId = CreateTask(sub_8115A68, 0); gUnknown_203B05C.leader = dataPtr = (void*)(gTasks[taskId].data); @@ -274,7 +314,7 @@ void TryBecomeLinkLeader(void) void sub_8115A68(u8 taskId) { u32 id, val; - struct UnkStruct_Leader *data = gUnknown_203B05C.leader; + struct UnkStruct_Leader * data = gUnknown_203B05C.leader; switch (data->state) { @@ -570,7 +610,7 @@ void sub_8115A68(u8 taskId) } } -void sub_81161E4(struct UnkStruct_Leader *data) +void sub_81161E4(struct UnkStruct_Leader * data) { ClearWindowTilemap(data->field_11); ClearStdWindowAndFrame(data->field_11, FALSE); @@ -665,7 +705,7 @@ void sub_81163B0(u8 *dst, u8 caseId) } } -bool8 sub_8116444(struct UnkStruct_Leader *data, u32 arg1, u32 arg2) +bool8 sub_8116444(struct UnkStruct_Leader * data, u32 arg1, u32 arg2) { switch (sub_8116524(data->field_0)) { @@ -688,7 +728,7 @@ bool8 sub_8116444(struct UnkStruct_Leader *data, u32 arg1, u32 arg2) void sub_81164C8(u8 arg0, s32 id, u8 arg2) { - struct UnkStruct_Leader *data = gUnknown_203B05C.leader; + struct UnkStruct_Leader * data = gUnknown_203B05C.leader; u8 var = 0; switch (data->field_0->arr[id].field_1A_0) @@ -705,9 +745,9 @@ void sub_81164C8(u8 arg0, s32 id, u8 arg2) sub_811A910(arg0, 0, arg2, &data->field_0->arr[id], var, id); } -u8 sub_8116524(struct UnkStruct_Main0 *arg0) +u8 sub_8116524(struct UnkStruct_Main0 * arg0) { - struct UnkStruct_Leader *data = gUnknown_203B05C.leader; + struct UnkStruct_Leader * data = gUnknown_203B05C.leader; u8 ret = 0; u8 i; s32 id; @@ -746,9 +786,9 @@ u8 sub_8116524(struct UnkStruct_Main0 *arg0) return ret; } -u8 sub_81165E8(struct UnkStruct_Main0 *arg0) +u8 sub_81165E8(struct UnkStruct_Main0 * arg0) { - struct UnkStruct_Leader *data = gUnknown_203B05C.leader; + struct UnkStruct_Leader * data = gUnknown_203B05C.leader; u8 copiedCount; s32 i; u8 ret; @@ -793,7 +833,7 @@ u8 sub_81165E8(struct UnkStruct_Main0 *arg0) void TryJoinLinkGroup(void) { u8 taskId; - struct UnkStruct_Group *dataPtr; + struct UnkStruct_Group * dataPtr; taskId = CreateTask(sub_8116738, 0); gUnknown_203B05C.group = dataPtr = (void*)(gTasks[taskId].data); @@ -807,7 +847,7 @@ void TryJoinLinkGroup(void) void sub_8116738(u8 taskId) { s32 id; - struct UnkStruct_Group *data = gUnknown_203B05C.group; + struct UnkStruct_Group * data = gUnknown_203B05C.group; switch (data->state) { @@ -1047,9 +1087,9 @@ void sub_8116738(u8 taskId) } } -u32 sub_8116D10(struct UnkStruct_Group *arg0, s32 id) +u32 sub_8116D10(struct UnkStruct_Group * arg0, s32 id) { - struct UnkStruct_x20 *structPtr = &arg0->field_0->arr[id]; + struct UnkStruct_x20 * structPtr = &arg0->field_0->arr[id]; if (gUnknown_203B058 == 4 && structPtr->unk.field_0.unk_00.unk_01_2 != VERSION_FIRE_RED && structPtr->unk.field_0.unk_00.unk_01_2 != VERSION_LEAF_GREEN) { @@ -1066,7 +1106,7 @@ u32 sub_8116D10(struct UnkStruct_Group *arg0, s32 id) return 2; } -void sub_8116D60(struct UnkStruct_Group *data, s32 id) +void sub_8116D60(struct UnkStruct_Group * data, s32 id) { data->field_F = id; LoadWirelessStatusIndicatorSpriteGfx(); @@ -1080,7 +1120,7 @@ void sub_8116D60(struct UnkStruct_Group *data, s32 id) u8 sub_8116DE0(void) { u8 taskId; - struct UnkStruct_Group *dataPtr; + struct UnkStruct_Group * dataPtr; taskId = CreateTask(sub_8116E1C, 0); gUnknown_203B05C.group = dataPtr = (void*)(gTasks[taskId].data); @@ -1095,7 +1135,7 @@ u8 sub_8116DE0(void) void sub_8116E1C(u8 taskId) { - struct UnkStruct_Group *data = gUnknown_203B05C.group; + struct UnkStruct_Group * data = gUnknown_203B05C.group; switch (data->state) { @@ -1156,7 +1196,7 @@ bool32 sub_8116F28(u32 arg0, u32 id) return FALSE; } -u8 sub_8116F5C(struct UnkStruct_Group *data, u32 id) +u8 sub_8116F5C(struct UnkStruct_Group * data, u32 id) { if (data->field_0->arr[id].field_1A_0 == 1) { @@ -1173,7 +1213,7 @@ u8 sub_8116F5C(struct UnkStruct_Group *data, u32 id) void sub_8116F94(u8 arg0, s32 id, u8 arg2) { - struct UnkStruct_Group *data = gUnknown_203B05C.group; + struct UnkStruct_Group * data = gUnknown_203B05C.group; u8 var = sub_8116F5C(data, id); sub_811A81C(arg0, 8, arg2, &data->field_0->arr[id], var, id); @@ -1181,7 +1221,7 @@ void sub_8116F94(u8 arg0, s32 id, u8 arg2) u8 sub_8116FE4(void) { - struct UnkStruct_Group *data = gUnknown_203B05C.group; + struct UnkStruct_Group * data = gUnknown_203B05C.group; u8 ret = 0; u8 i; s32 id; @@ -1259,7 +1299,7 @@ u8 sub_8117118(void) void sub_8117130(u8 taskId) { - u32 monId = sub_811B1EC(&sUnionRoomTrade, GetMultiplayerId()); + u32 monId = GetPartyPositionOfRegisteredMon(&sUnionRoomTrade, GetMultiplayerId()); switch (gTasks[taskId].data[0]) { @@ -1409,7 +1449,7 @@ void sub_8117534(void) void sub_8117594(void *arg0, bool32 arg1) { - TrainerCard_GenerateCardForLinkPlayer((struct TrainerCard *)arg0); + TrainerCard_GenerateCardForLinkPlayer((struct TrainerCard * )arg0); if (arg1) *((u16 *)(arg0 + sizeof(struct TrainerCard))) = GetWonderCardFlagID(); else @@ -1560,7 +1600,7 @@ void sub_81179A4(void) void MEvent_CreateTask_Leader(u32 arg0) { u8 taskId; - struct UnkStruct_Leader *dataPtr; + struct UnkStruct_Leader * dataPtr; taskId = CreateTask(sub_8117A0C, 0); gUnknown_203B05C.leader = dataPtr = (void*)(gTasks[taskId].data); @@ -1573,7 +1613,7 @@ void MEvent_CreateTask_Leader(u32 arg0) void sub_8117A0C(u8 taskId) { - struct UnkStruct_Leader *data = gUnknown_203B05C.leader; + struct UnkStruct_Leader * data = gUnknown_203B05C.leader; struct WindowTemplate winTemplate; s32 val; @@ -1767,7 +1807,7 @@ void sub_8117A0C(u8 taskId) void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0) { u8 taskId; - struct UnkStruct_Group *dataPtr; + struct UnkStruct_Group * dataPtr; taskId = CreateTask(sub_8117F20, 0); gUnknown_203B05C.group = dataPtr = (void*)(gTasks[taskId].data); @@ -1783,7 +1823,7 @@ void sub_8117F20(u8 taskId) { s32 id; struct WindowTemplate winTemplate1, winTemplate2; - struct UnkStruct_Group *data = gUnknown_203B05C.group; + struct UnkStruct_Group * data = gUnknown_203B05C.group; switch (data->state) { @@ -1933,7 +1973,7 @@ void sub_8117F20(u8 taskId) void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0) { u8 taskId; - struct UnkStruct_Group *dataPtr; + struct UnkStruct_Group * dataPtr; taskId = CreateTask(sub_81182DC, 0); gUnknown_203B05C.group = dataPtr = (void*)(gTasks[taskId].data); @@ -1949,7 +1989,7 @@ void sub_81182DC(u8 taskId) { s32 id; struct WindowTemplate winTemplate; - struct UnkStruct_Group *data = gUnknown_203B05C.group; + struct UnkStruct_Group * data = gUnknown_203B05C.group; switch (data->state) { @@ -2111,7 +2151,7 @@ void sub_81182DC(u8 taskId) void UnionRoomSpecial(void) { - struct UnkStruct_URoom *dataPtr; + struct UnkStruct_URoom * dataPtr; ClearAndInitHostRFUtgtGname(); CreateTask(sub_81186E0, 10); @@ -2139,7 +2179,7 @@ u16 ReadAsU16(const u8 *ptr) void sub_8118664(u32 nextState, const u8 *src) { - struct UnkStruct_URoom *data = gUnknown_203B05C.uRoom; + struct UnkStruct_URoom * data = gUnknown_203B05C.uRoom; data->state = 8; data->stateAfterPrint = nextState; @@ -2149,19 +2189,19 @@ void sub_8118664(u32 nextState, const u8 *src) void sub_811868C(const u8 *src) { - struct UnkStruct_URoom *data = gUnknown_203B05C.uRoom; + struct UnkStruct_URoom * data = gUnknown_203B05C.uRoom; data->state = 26; if (src != gStringVar4) StringExpandPlaceholders(gStringVar4, src); } -void sub_81186B0(struct UnkStruct_URoom *data) +void sub_81186B0(struct UnkStruct_URoom * data) { memcpy(&gDecompressionBuffer[0x3F00], data->field_0, sizeof(*data->field_0)); } -void sub_81186C8(struct UnkStruct_URoom *data) +void sub_81186C8(struct UnkStruct_URoom * data) { memcpy(data->field_0, &gDecompressionBuffer[0x3F00], sizeof(*data->field_0)); } @@ -2915,3 +2955,1325 @@ void sub_81186E0(u8 taskId) break; } } + +void var_800D_set_xB(void) +{ + if (InUnionRoom() == TRUE) + gSpecialVar_Result = 11; +} + +void sub_8119904(struct UnkStruct_URoom * arg0) +{ + if (gRecvCmds[1][1] != 0 && (gRecvCmds[1][0] & 0xFF00) == 0x2F00) + { + arg0->field_9A[0] = gRecvCmds[1][1]; + if (gRecvCmds[1][1] == 0x44) + { + arg0->field_9A[1] = gRecvCmds[1][2]; + arg0->field_9A[2] = gRecvCmds[1][3]; + } + } +} + +bool32 sub_8119944(struct UnkStruct_URoom * arg0) +{ + if (arg0->field_9A[0] != 0) + { + s32 var = sub_811AF6C(gStringVar4, gLinkPlayers[1].gender, &arg0->field_9A[0], arg0); + if (var == 0) + { + return TRUE; + } + else if (var == 1) + { + arg0->state = 35; + gUnknown_203B058 = arg0->field_9A[0]; + return FALSE; + } + else if (var == 2) + { + arg0->state = 36; + sub_800AAC0(); + return FALSE; + } + } + + return TRUE; +} + +void InitUnionRoom(void) +{ + struct UnkStruct_URoom * ptr; + + sUnionRoomPlayerName[0] = EOS; + if (gQuestLogState == 2 || gQuestLogState == 3) + return; + CreateTask(sub_81199FC, 0); + gUnknown_203B05C.uRoom = gUnknown_203B05C.uRoom; // Needed to match. + gUnknown_203B05C.uRoom = ptr = AllocZeroed(sizeof(struct UnkStruct_URoom)); + gUnknown_300202C = gUnknown_203B05C.uRoom; + ptr->state = 0; + ptr->textState = 0; + ptr->field_10 = 0; + ptr->field_12 = 0; + sUnionRoomPlayerName[0] = EOS; +} + +void sub_81199FC(u8 taskId) +{ + s32 i; + u8 text[32]; + struct UnkStruct_URoom * structPtr = gUnknown_203B05C.uRoom; + + switch (structPtr->state) + { + case 0: + structPtr->state = 1; + break; + case 1: + sub_80FAF58(0xC, 0, 0); + sub_800B1F4(); + OpenLink(); + sub_80FBC00(); + sub_80FB128(1); + structPtr->state = 2; + break; + case 2: + structPtr->field_4 = AllocZeroed(0x70); + sub_811A650(structPtr->field_4, 4); + structPtr->field_C = AllocZeroed(0x70); + sub_811A650(structPtr->field_C, 4); + structPtr->field_0 = AllocZeroed(0x100); + sub_811A5E4(structPtr->field_0->arr, 8); + structPtr->field_8 = AllocZeroed(0x20); + sub_811A5E4(&structPtr->field_8->arr[0], 1); + structPtr->field_20 = sub_8119E84(structPtr->field_C, structPtr->field_4, 10); + structPtr->state = 3; + break; + case 3: + switch (sub_8119B94()) + { + case 1: + case 2: + if (sUnionRoomPlayerName[0] == EOS) + { + for (i = 0; i < PLAYER_NAME_LENGTH; i++) + { + if (structPtr->field_0->arr[i].field_1A_0 == 1) + { + sub_8018404_2(text, structPtr->field_0->arr[i]); + if (sub_80FD338(ReadAsU16(structPtr->field_0->arr[i].unk.field_0.unk_00.playerTrainerId), text)) + { + StringCopy(sUnionRoomPlayerName, text); + break; + } + } + } + } + break; + case 3: + break; + } + break; + case 4: + Free(structPtr->field_8); + Free(structPtr->field_0); + Free(structPtr->field_C); + Free(structPtr->field_4); + DestroyTask(structPtr->field_20); + Free(gUnknown_203B05C.uRoom); + sub_80F8DC0(); + DestroyTask(taskId); + break; + } +} + +bool16 BufferUnionRoomPlayerName(void) +{ + if (sUnionRoomPlayerName[0] != EOS) + { + StringCopy(gStringVar1, sUnionRoomPlayerName); + sUnionRoomPlayerName[0] = EOS; + return TRUE; + } + else + { + return FALSE; + } +} + +u8 sub_8119B94(void) +{ + s32 i; + u8 j; + struct UnkStruct_URoom * structPtr = gUnknown_203B05C.uRoom; + s32 r7 = 0; + + for (i = 0; i < 4; i++) + { + if (sub_811A694(&structPtr->field_C->arr[i].unk0, &gUnknown_8457034) == TRUE) + { + structPtr->field_8->arr[0].unk = structPtr->field_C->arr[i].unk0; + structPtr->field_8->arr[0].field_18 = 0; + structPtr->field_8->arr[0].field_1A_0 = 1; + structPtr->field_8->arr[0].field_1B = 1; + return 4; + } + } + for (j = 0; j < 8; j++) + { + if (structPtr->field_0->arr[j].field_1A_0 != 0) + { + i = sub_811A748(&structPtr->field_0->arr[j], &structPtr->field_4->arr[0]); + if (i != 0xFF) + { + if (structPtr->field_0->arr[j].field_1A_0 == 1) + { + if (sub_811A6DC(&structPtr->field_0->arr[j].unk, &structPtr->field_4->arr[i].unk0)) + { + structPtr->field_0->arr[j].unk = structPtr->field_4->arr[i].unk0; + structPtr->field_0->arr[j].field_1B = 0x40; + r7 = 1; + } + else if (structPtr->field_0->arr[j].field_1B != 0) + { + structPtr->field_0->arr[j].field_1B--; + if (structPtr->field_0->arr[j].field_1B == 0) + r7 = 2; + } + } + else + { + structPtr->field_0->arr[j].field_1A_0 = 1; + structPtr->field_0->arr[j].field_1B = 0; + r7 = 2; + } + structPtr->field_0->arr[j].field_18 = 0; + } + else if (structPtr->field_0->arr[j].field_1A_0 != 2) + { + structPtr->field_0->arr[j].field_18++; + if (structPtr->field_0->arr[j].field_18 >= 600) + { + structPtr->field_0->arr[j].field_1A_0 = 2; + r7 = 2; + } + } + else if (structPtr->field_0->arr[j].field_1A_0 == 2) + { + structPtr->field_0->arr[j].field_18++; + if (structPtr->field_0->arr[j].field_18 >= 900) + { + sub_811A5E4(&structPtr->field_0->arr[j], 1); + } + } + } + } + for (i = 0; i < 4; i++) + { + if (sub_811A798(&structPtr->field_0->arr[0], &structPtr->field_4->arr[i], 8) != 0xFF) + r7 = 1; + } + + return r7; +} + +void sub_8119D34(u8 taskId) +{ + s32 i, j; + struct UnkStruct_Shared sp0; + struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + bool8 r4; + + for (i = 0; i < 4; i++) + { + r4 = sub_80FCC3C(&sp0.field_0, sp0.playerName, i); + if (!sub_8116F28(sp0.field_0.unk_0a_0, gTasks[taskId].data[4])) + { + sp0 = gUnknown_8457034; + } + if (sp0.field_0.unk_00.unk_00_0 == 1) + { + sp0 = gUnknown_8457034; + } + if (!r4) + { + for (j = 0; j < i; j++) + { + if (!sub_811A694(&ptr[1]->arr[j].unk0, &sp0)) + { + sp0 = gUnknown_8457034; + } + } + ptr[1]->arr[i].unk0 = sp0; + ptr[1]->arr[i].unk18 = sub_811A694(&ptr[1]->arr[i].unk0, &gUnknown_8457034); + } + else + { + ptr[0]->arr[i].unk0 = sp0; + ptr[0]->arr[i].unk18 = sub_811A694(&ptr[0]->arr[i].unk0, &gUnknown_8457034); + } + } +} + +u8 sub_8119E84(struct UnkStruct_Main4 * a0, struct UnkStruct_Main4 * a1, u32 a2) +{ + u8 taskId = CreateTask(sub_8119D34, 0); + struct UnkStruct_Main4 ** data = (void *)gTasks[taskId].data; + data[0] = a0; + data[1] = a1; + gTasks[taskId].data[4] = a2; + return taskId; +} + +void sub_8119EB8(u8 taskId) +{ + s32 i, j; + struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + + for (i = 0; i < 4; i++) + { + sub_80FCC3C(&ptr[0]->arr[i].unk0.field_0, ptr[0]->arr[i].unk0.playerName, i); + if (!sub_8116F28(ptr[0]->arr[i].unk0.field_0.unk_0a_0, gTasks[taskId].data[2])) + { + ptr[0]->arr[i].unk0 = gUnknown_8457034; + } + for (j = 0; j < i; j++) + { + if (!sub_811A694(&ptr[0]->arr[j].unk0, &ptr[0]->arr[i].unk0)) + { + ptr[0]->arr[i].unk0 = gUnknown_8457034; + } + } + ptr[0]->arr[i].unk18 = sub_811A694(&ptr[0]->arr[i].unk0, &gUnknown_8457034); + } +} + +bool32 sub_8119FB0(struct GFtgtGname *arg0, s16 arg1) +{ + if (arg1 == 7) + { + if (!arg0->unk_00.unk_00_5) + { + return FALSE; + } + else + { + return TRUE; + } + } + else if (arg1 == 8) + { + if (!arg0->unk_00.unk_00_4) + { + return FALSE; + } + else + { + return TRUE; + } + } + else + { + return FALSE; + } +} + +void sub_8119FD8(u8 taskId) +{ + s32 i; + struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + + for (i = 0; i < 4; i++) + { + if (sub_80FCCF4(&ptr[0]->arr[i].unk0.field_0, ptr[0]->arr[i].unk0.playerName, i)) + { + sub_8119FB0(&ptr[0]->arr[i].unk0.field_0, gTasks[taskId].data[2]); + } + ptr[0]->arr[i].unk18 = sub_811A694(&ptr[0]->arr[i].unk0, &gUnknown_8457034); + } +} + +u8 sub_811A054(struct UnkStruct_Main4 * a0, u32 a1) +{ + u8 taskId = CreateTask(sub_8119EB8, 0); + struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + ptr[0] = a0; + gTasks[taskId].data[2] = a1; + return taskId; +} + +u8 sub_811A084(struct UnkStruct_Main4 * a0, u32 a1) +{ + u8 taskId = CreateTask(sub_8119FD8, 0); + struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + ptr[0] = a0; + gTasks[taskId].data[2] = a1; + return taskId; +} + +bool32 sub_811A0B4(const u8 *src) +{ + LoadStdWindowFrameGfx(); + DrawDialogueFrame(0, 1); + StringExpandPlaceholders(gStringVar4, src); + AddTextPrinterWithCustomSpeedForMessage(FALSE, 1); + return FALSE; +} + +bool32 sub_811A0E0(void) +{ + if (!RunTextPrinters_CheckPrinter0Active()) + { + return TRUE; + } + else + { + return FALSE; + } +} + +bool8 PrintOnTextbox(u8 *textState, const u8 *str) +{ + switch (*textState) + { + case 0: + LoadStdWindowFrameGfx(); + DrawDialogueFrame(0, 1); + StringExpandPlaceholders(gStringVar4, str); + AddTextPrinterForMessage(TRUE); + (*textState)++; + break; + case 1: + if (!RunTextPrinters_CheckPrinter0Active()) + { + *textState = 0; + return TRUE; + } + break; + } + return FALSE; +} + +s8 sub_811A14C(u8 *arg0, bool32 arg1) +{ + s8 r1; + + switch (*arg0) + { + case 0: + if (arg1) + { + return -3; + } + DisplayYesNoMenuDefaultYes(); + (*arg0)++; + break; + case 1: + if (arg1) + { + DestroyYesNoMenu(); + *arg0 = 0; + return -3; + } + r1 = Menu_ProcessInputNoWrapClearOnChoose(); + if (r1 == -1 || r1 == 0 || r1 == 1) + { + *arg0 = 0; + return r1; + } + break; + } + return -2; +} + +u8 sub_811A1AC(const struct WindowTemplate * template) +{ + u8 windowId = AddWindow(template); + DrawStdWindowFrame(windowId, FALSE); + FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); + sub_811A444(windowId, 0, gUnknown_8459378, 8, 1, 6); + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, 2); + return windowId; +} + +void sub_811A1FC(u8 windowId) +{ + ClearStdWindowAndFrame(windowId, TRUE); + RemoveWindow(windowId); +} + +s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate) +{ + s32 r1, r8; + + switch (*arg0) + { + case 0: + *arg1 = AddWindow(winTemplate); + DrawStdWindowFrame(*arg1, FALSE); + gMultiuseListMenuTemplate = *menuTemplate; + gMultiuseListMenuTemplate.windowId = *arg1; + *arg2 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + CopyWindowToVram(*arg1, TRUE); + (*arg0)++; + break; + case 1: + r8 = ListMenu_ProcessInput(*arg2); + if (JOY_NEW(A_BUTTON)) + { + DestroyListMenuTask(*arg2, NULL, NULL); + ClearStdWindowAndFrame(*arg1, TRUE); + RemoveWindow(*arg1); + *arg0 = 0; + return r8; + } + else if (JOY_NEW(B_BUTTON)) + { + DestroyListMenuTask(*arg2, NULL, NULL); + ClearStdWindowAndFrame(*arg1, TRUE); + RemoveWindow(*arg1); + *arg0 = 0; + return -2; + } + break; + } + + return -1; +} + +s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6) +{ + s32 input; + s32 r4; + + switch (*arg0) + { + case 0: + *arg3 = sub_811A1AC(&gUnknown_8456F1C); + *arg1 = AddWindow(winTemplate); + DrawStdWindowFrame(*arg1, FALSE); + gMultiuseListMenuTemplate = *menuTemplate; + gMultiuseListMenuTemplate.windowId = *arg1; + *arg2 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 1); + CopyWindowToVram(*arg1, TRUE); + (*arg0)++; + break; + case 1: + input = ListMenu_ProcessInput(*arg2); + if (JOY_NEW(A_BUTTON | B_BUTTON)) + { + if (input == 8 || JOY_NEW(B_BUTTON)) + { + DestroyListMenuTask(*arg2, NULL, NULL); + ClearStdWindowAndFrame(*arg1, TRUE); + RemoveWindow(*arg1); + sub_811A1FC(*arg3); + *arg0 = 0; + return -2; + } + else + { + r4 = sub_811AD7C(arg6->arr, input); + if (r4 >= 0) + { + DestroyListMenuTask(*arg2, NULL, NULL); + ClearStdWindowAndFrame(*arg1, TRUE); + RemoveWindow(*arg1); + sub_811A1FC(*arg3); + *arg0 = 0; + return r4; + } + else + { + PlaySE(SE_WALL_HIT); + } + } + } + break; + } + + return -1; +} + +void sub_811A3F8(void) +{ + FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0); + CopyBgTilemapBufferToVram(0); +} + +void sub_811A41C(void) +{ + FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0); + CopyBgTilemapBufferToVram(0); + EnableBothScriptContexts(); +} + +void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx) +{ + struct TextPrinterTemplate printerTemplate; + + printerTemplate.currentChar = str; + printerTemplate.windowId = windowId; + printerTemplate.fontId = fontId; + printerTemplate.x = x; + printerTemplate.y = y; + printerTemplate.currentX = x; + printerTemplate.currentY = y; + printerTemplate.unk = 0; + + gTextFlags.useAlternateDownArrow = FALSE; + switch (colorIdx) + { + case 0: + printerTemplate.letterSpacing = 0; + printerTemplate.lineSpacing = 0; + printerTemplate.fgColor = 2; + printerTemplate.bgColor = 1; + printerTemplate.shadowColor = 3; + break; + case 1: + printerTemplate.letterSpacing = 0; + printerTemplate.lineSpacing = 0; + printerTemplate.fgColor = 4; + printerTemplate.bgColor = 1; + printerTemplate.shadowColor = 5; + break; + case 2: + printerTemplate.letterSpacing = 0; + printerTemplate.lineSpacing = 0; + printerTemplate.fgColor = 6; + printerTemplate.bgColor = 1; + printerTemplate.shadowColor = 7; + break; + case 3: + printerTemplate.letterSpacing = 0; + printerTemplate.lineSpacing = 0; + printerTemplate.fgColor = 1; + printerTemplate.bgColor = 1; + printerTemplate.shadowColor = 3; + break; + case 4: + printerTemplate.letterSpacing = 0; + printerTemplate.lineSpacing = 0; + printerTemplate.fgColor = 1; + printerTemplate.bgColor = 2; + printerTemplate.shadowColor = 3; + break; + case 5: + printerTemplate.letterSpacing = 0; + printerTemplate.lineSpacing = 0; + printerTemplate.fgColor = 7; + printerTemplate.bgColor = 15; + printerTemplate.shadowColor = 9; + break; + case 6: + printerTemplate.letterSpacing = 0; + printerTemplate.lineSpacing = 0; + printerTemplate.fgColor = 14; + printerTemplate.bgColor = 15; + printerTemplate.shadowColor = 9; + break; + } + + AddTextPrinter(&printerTemplate, 0xFF, NULL); +} + +void sub_811A5E4(struct UnkStruct_x20 *arg0, u8 count) +{ + s32 i; + + for (i = 0; i < count; i++) + { + arg0[i].unk = gUnknown_8457034; + arg0[i].field_18 = 0xFF; + arg0[i].field_1A_0 = 0; + arg0[i].field_1A_1 = 0; + arg0[i].field_1B = 0; + } +} + +void sub_811A650(struct UnkStruct_Main4 *arg0, u8 count) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + arg0->arr[i].unk0 = gUnknown_8457034; + arg0->arr[i].unk18 = 0; + } +} + +bool8 sub_811A694(struct UnkStruct_Shared* arg0, const struct UnkStruct_Shared* arg1) +{ + s32 i; + + for (i = 0; i < 2; i++) + { + if (arg0->field_0.unk_00.playerTrainerId[i] != arg1->field_0.unk_00.playerTrainerId[i]) + { + return TRUE; + } + } + + for (i = 0; i < 8; i++) + { + if (arg0->playerName[i] != arg1->playerName[i]) + { + return TRUE; + } + } + + return FALSE; +} + +bool32 sub_811A6DC(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared *arg1) +{ + s32 i; + + if (arg0->field_0.unk_0a_0 != arg1->field_0.unk_0a_0) + { + return TRUE; + } + + if (arg0->field_0.unk_0a_7 != arg1->field_0.unk_0a_7) + { + return TRUE; + } + + for (i = 0; i < 4; i++) + { + if (arg0->field_0.unk_04[i] != arg1->field_0.unk_04[i]) + { + return TRUE; + } + } + + if (arg0->field_0.species != arg1->field_0.species) + { + return TRUE; + } + + if (arg0->field_0.type != arg1->field_0.type) + { + return TRUE; + } + + return FALSE; +} + +u32 sub_811A748(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1) +{ + u8 result = 0xFF; + s32 i; + + for (i = 0; i < 4; i++) + { + if (arg1[i].unk18 && !sub_811A694(&arg0->unk, &arg1[i].unk0)) + { + result = i; + arg1[i].unk18 = FALSE; + } + } + + return result; +} + +u8 sub_811A798(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2) +{ + s32 i; + + if (arg1->unk18) + { + for (i = 0; i < arg2; i++) + { + if (arg0[i].field_1A_0 == 0) + { + arg0[i].unk = arg1->unk0; + arg0[i].field_18 = 0; + arg0[i].field_1A_0 = 1; + arg0[i].field_1B = 64; + arg1->unk18 = FALSE; + return i; + } + } + } + + return 0xFF; +} + +void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id) +{ + u8 r2; + u8 sp0[6]; + u8 sp10[30]; + + ConvertIntToDecimalStringN(gStringVar4, id + 1, STR_CONV_MODE_LEADING_ZEROS, 2); + StringAppend(gStringVar4, gUnknown_84571B0); + sub_811A444(arg0, 0, gStringVar4, arg1, arg2, 0); + arg1 += 18; + r2 = arg3->unk.field_0.unk_0a_0; + if (arg3->field_1A_0 == 1 && !(r2 & 0x40)) + { + sub_8018404_2(sp10, *arg3); + sub_811A444(arg0, 2, sp10, arg1, arg2, arg4); + ConvertIntToDecimalStringN(sp0, arg3->unk.field_0.unk_00.playerTrainerId[0] | (arg3->unk.field_0.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); + StringCopy(gStringVar4, gUnknown_84571B4); + StringAppend(gStringVar4, sp0); + arg1 += 77; + sub_811A444(arg0, 0, gStringVar4, arg1, arg2, arg4); + } +} + +void sub_811A910(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id) +{ + u8 sp0[6]; + u8 sp10[30]; + + if (arg3->field_1A_0 == 1) + { + sub_8018404_2(sp10, *arg3); + sub_811A444(arg0, 2, sp10, arg1, arg2, arg4); + ConvertIntToDecimalStringN(sp0, arg3->unk.field_0.unk_00.playerTrainerId[0] | (arg3->unk.field_0.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); + StringCopy(gStringVar4, gUnknown_84571B4); + StringAppend(gStringVar4, sp0); + arg1 += 71; + sub_811A444(arg0, 0, gStringVar4, arg1, arg2, arg4); + } +} + +bool32 sub_811A9B8(void) +{ + s16 x, y; + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + if (x != 9) + { + return FALSE; + } + if (y != 8) + { + return FALSE; + } + if (gPlayerAvatar.tileTransitionState == 2 || gPlayerAvatar.tileTransitionState == 0) + { + return TRUE; + } + + return FALSE; +} + +u32 sub_811A9FC(s32 arg0) +{ + switch (arg0) + { + case 5: + return 1; + case 4: + return 2; + case 8: + return 3; + case 3: + default: + return 0; + } +} + +u32 sub_811AA24(struct UnkStruct_x20 *arg0) +{ + u8 sp0[30]; + sub_8018404_2(sp0, *arg0); + return sub_80FD338(ReadAsU16(arg0->unk.field_0.unk_00.playerTrainerId), sp0); +} + +s32 sub_811AA5C(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender) +{ + bool32 r2; + + struct UnkStruct_x20 * r5 = &arg0->arr[arg2]; + + if (!r5->unk.field_0.unk_0a_7 && arg1 == 0) + { + sub_8018404_2(gStringVar1, *r5); + r2 = sub_80FD338(ReadAsU16(r5->unk.field_0.unk_00.playerTrainerId), gStringVar1); + if (r5->unk.field_0.unk_0a_0 == 0x45) + { + StringExpandPlaceholders(gStringVar4, gUnknown_8457F80[r2][playerGender]); + return 2; + } + else + { + sub_811A0B4(gUnknown_8457A34[r2]); + return 1; + } + } + else + { + sub_8018404_2(gStringVar1, *r5); + if (arg1 != 0) + { + playerGender = (r5->unk.field_0.unk_00.playerTrainerId[arg1 + 1] >> 3) & 1; + } + switch (r5->unk.field_0.unk_0a_0 & 0x3F) + { + case 1: + StringExpandPlaceholders(gStringVar4, gUnknown_8458758[playerGender][Random() % 4]); + break; + case 4: + StringExpandPlaceholders(gStringVar4, gUnknown_8458A78[playerGender][Random() % 2]); + break; + case 5: + StringExpandPlaceholders(gStringVar4, gUnknown_84588BC[playerGender][Random() % 4]); + break; + case 8: + StringExpandPlaceholders(gStringVar4, gUnknown_84589AC[playerGender][Random() % 2]); + break; + default: + StringExpandPlaceholders(gStringVar4, gUnknown_8457F90); + break; + } + return 0; + } +} + +void nullsub_92(u8 windowId, s32 itemId, u8 y) +{ + +} + +void sub_811ABE4(u8 arg0, u8 arg1, struct GFtgtGname * arg2, const u8 * str, u8 arg4) +{ + u8 sp8[4]; + u16 r8 = arg2->species; + u8 r7 = arg2->type; + u8 r9 = arg2->level; + + sub_811A444(arg0, 2, str, 8, arg1, arg4); + if (r8 == SPECIES_EGG) + { + sub_811A444(arg0, 2, gUnknown_8458FBC, 0x44, arg1, arg4); + } + else + { + BlitMoveInfoIcon(arg0, r7 + 1, 0x44, arg1); + sub_811A444(arg0, 2, gSpeciesNames[r8], 0x76, arg1, arg4); + ConvertIntToDecimalStringN(sp8, r9, STR_CONV_MODE_LEFT_ALIGN, 3); + sub_811A444(arg0, 2, sp8, GetStringRightAlignXOffset(2, sp8, 218), arg1, arg4); + } +} + +void sub_811ACA4(u8 windowId, s32 itemId, u8 y) +{ + struct UnkStruct_Leader *leader = gUnknown_203B05C.leader; + struct GFtgtGname *rfu; + s32 i, j; + u8 sp4[8]; + + if (itemId == -3 && y == gUnknown_8456F7C.upText_Y) + { + rfu = sub_80F9800(); + if (rfu->species != SPECIES_NONE) + { + sub_811ABE4(windowId, y, rfu, gSaveBlock2Ptr->playerName, 5); + } + } + else + { + j = 0; + for (i = 0; i < 8; i++) + { + if (leader->field_0->arr[i].field_1A_0 == 1 && leader->field_0->arr[i].unk.field_0.species != SPECIES_NONE) + { + j++; + } + if (j == itemId + 1) + { + sub_8018404_2(sp4, leader->field_0->arr[i]); + sub_811ABE4(windowId, y, &leader->field_0->arr[i].unk.field_0, sp4, 6); + break; + } + } + } +} + +s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1) +{ + s32 i; + s32 j = 0; + + for (i = 0; i < 8; i++) + { + if (arg[i].field_1A_0 == 1 && arg[i].unk.field_0.species != SPECIES_NONE) + { + j++; + } + if (j == arg1 + 1) + { + return i; + } + } + + return -1; +} + +s32 sub_811ADC4(s32 arg1, struct UnkStruct_Main0 *arg0) +{ + return arg0->arr[arg1].unk.field_0.playerGender; +} + +s32 sub_811ADD0(u32 type, u32 species) +{ + s32 i; + + if (species == SPECIES_EGG) + { + for (i = 0; i < gPlayerPartyCount; i++) + { + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + if (species == SPECIES_EGG) + { + return 0; + } + } + return 2; + } + else + { + for (i = 0; i < gPlayerPartyCount; i++) + { + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + if (gBaseStats[species].type1 == type || gBaseStats[species].type2 == type) + { + return 0; + } + } + return 1; + } +} + +void sub_811AE68(u8 *dst, s32 arg1, u32 playerGender) +{ + switch (arg1) + { + case 0x41: + StringExpandPlaceholders(dst, gUnknown_8458314[playerGender]); + break; + case 0x45: + StringExpandPlaceholders(dst, gUnknown_84585E8[playerGender]); + break; + case 0x44: + StringExpandPlaceholders(dst, gUnknown_8458F9C); + break; + case 0x48: + StringExpandPlaceholders(dst, gUnknown_84583B4[playerGender]); + break; + } +} + +void sub_811AECC(u8 *dst, u8 arg1) +{ + u8 mpId = GetMultiplayerId(); + u8 gender = gLinkPlayers[mpId ^ 1].gender; + + switch (arg1) + { + case 0x41: + StringCopy(dst, gUnknown_8458230[mpId][gender][0]); + break; + case 0x44: + StringCopy(dst, gUnknown_8458230[mpId][gender][2]); + break; + case 0x45: + StringCopy(dst, gUnknown_8458230[mpId][gender][1]); + break; + } +} + +s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3) +{ + s32 result = 0; + u16 species = SPECIES_NONE; + s32 i; + + switch (arg2[0]) + { + case 0x41: + StringExpandPlaceholders(dst, gUnknown_8457CA4); + result = 1; + break; + case 0x45: + StringExpandPlaceholders(dst, gUnknown_8457CF8); + result = 1; + break; + case 0x44: + ConvertIntToDecimalStringN(arg3->field_58[0], sUnionRoomTrade.playerLevel, STR_CONV_MODE_LEFT_ALIGN, 3); + StringCopy(arg3->field_58[1], gSpeciesNames[sUnionRoomTrade.playerSpecies]); + for (i = 0; i < 4; i++) + { + if (gRfuLinkStatus->partner[i].serialNo == 2) + { + ConvertIntToDecimalStringN(arg3->field_58[2], arg2[2], STR_CONV_MODE_LEFT_ALIGN, 3); + StringCopy(arg3->field_58[3], gSpeciesNames[arg2[1]]); + species = arg2[1]; + break; + } + } + if (species == SPECIES_EGG) + { + StringCopy(dst, gUnknown_8457DB8); + } + else + { + for (i = 0; i < 4; i++) + { + DynamicPlaceholderTextUtil_SetPlaceholderPtr(i, arg3->field_58[i]); + } + DynamicPlaceholderTextUtil_ExpandPlaceholders(dst, gUnknown_8457D44); + } + result = 1; + break; + case 0x48: + StringExpandPlaceholders(dst, gUnknown_8457C48); + result = 1; + break; + case 0x40: + StringExpandPlaceholders(dst, gUnknown_8457E0C); + result = 2; + break; + } + + return result; +} + +bool32 sub_811B0A4(struct UnkStruct_URoom *arg0) +{ + if (gRecvCmds[0][1] != 0) + { + if (gRecvCmds[0][1] == 0x51) + { + arg0->field_98 = 0x51; + return TRUE; + } + else if (gRecvCmds[0][1] == 0x52) + { + arg0->field_98 = 0x52; + return TRUE; + } + } + return FALSE; +} + +bool32 InUnionRoom(void) +{ + return gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(UNION_ROOM) + && gSaveBlock1Ptr->location.mapNum == MAP_NUM(UNION_ROOM) + ? TRUE : FALSE; +} + +bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) +{ + s32 i; + s32 count = 0; + + for (i = 0; i < gPlayerPartyCount; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) <= 30 + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG) + { + count++; + } + } + + if (count > 1) + return TRUE; + else + return FALSE; +} + +void ResetUnionRoomTrade(struct UnionRoomTrade *arg0) +{ + arg0->field_0 = 0; + arg0->type = 0; + arg0->playerPersonality = 0; + arg0->playerSpecies = 0; + arg0->playerLevel = 0; + arg0->species = 0; + arg0->level = 0; + arg0->personality = 0; +} + +void Script_ResetUnionRoomTrade(void) +{ + ResetUnionRoomTrade(&sUnionRoomTrade); +} + +bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trade) +{ + trade->playerSpecies = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + trade->playerLevel = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + trade->playerPersonality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); + if (trade->playerSpecies == SPECIES_EGG) + return TRUE; + else + return FALSE; +} + +void RegisterTradeMon(u32 monId, struct UnionRoomTrade *trade) +{ + trade->species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + trade->level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + trade->personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); +} + +u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *trade, u8 multiplayerId) +{ + u16 response = 0; + u16 species; + u32 personality; + u32 cur_personality; + u16 cur_species; + s32 i; + + // player + if (multiplayerId == 0) + { + species = trade->playerSpecies; + personality = trade->playerPersonality; + } + // partner + else + { + species = trade->species; + personality = trade->personality; + } + + for (i = 0; i < gPlayerPartyCount; i++) + { + cur_personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); + if (cur_personality != personality) + { + continue; + } + cur_species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + if (cur_species != species) + { + continue; + } + response = i; + break; + } + + return response; +} + +void sub_811B258(bool32 arg0) +{ + sub_811A3F8(); + ScriptContext2_Disable(); + sub_80696F0(); + gUnknown_203B058 = 0; + if (arg0) + { + sub_80FAFA0(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); + sub_80FB008(0x40, 0, 0); + } +} + +void sub_811B298(void) +{ + ScriptContext2_Enable(); + ScriptFreezeObjectEvents(); +} + +u8 sub_811B2A8(s32 linkPlayer) +{ + u8 retval = 0x80; + retval |= gLinkPlayers[linkPlayer].gender << 3; + retval |= gLinkPlayers[linkPlayer].trainerId & 7; + return retval; +} + +u8 sub_811B2D8(struct UnkStruct_URoom *arg0) +{ + u8 retVal = 0x80; + u8 i; + + for (i = 0; i < 4; i++) + { + if (arg0->field_C->arr[i].unk18) + { + retVal |= arg0->field_C->arr[i].unk0.field_0.playerGender << 3; + retVal |= arg0->field_C->arr[i].unk0.field_0.unk_00.playerTrainerId[0] & 7; + break; + } + } + + return retVal; +} + +void sub_811B31C(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2) +{ + struct TrainerCard *trainerCard = &gTrainerCards[GetMultiplayerId() ^ 1]; + s32 i; + s32 n; + + DynamicPlaceholderTextUtil_Reset(); + + StringCopy(arg1->field_C0[0], gTrainerClassNames[sub_80447F0()]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, arg1->field_C0[0]); + + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, trainerCard->playerName); + + StringCopy(arg1->field_174, gUnknown_84594B0[trainerCard->stars]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, arg1->field_174); + + ConvertIntToDecimalStringN(arg1->field_C0[2], trainerCard->caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, arg1->field_C0[2]); + + ConvertIntToDecimalStringN(arg1->field_C0[3], trainerCard->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(arg1->field_C0[4], trainerCard->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, arg1->field_C0[3]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, arg1->field_C0[4]); + + DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_84594C4); + StringCopy(gStringVar4, arg1->field_1A4); + + n = trainerCard->linkBattleWins; + if (n > 9999) + { + n = 9999; + } + ConvertIntToDecimalStringN(arg1->field_C0[0], n, STR_CONV_MODE_LEFT_ALIGN, 4); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, arg1->field_C0[0]); + + n = trainerCard->linkBattleLosses; + if (n > 9999) + { + n = 9999; + } + ConvertIntToDecimalStringN(arg1->field_C0[1], n, STR_CONV_MODE_LEFT_ALIGN, 4); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, arg1->field_C0[1]); + + ConvertIntToDecimalStringN(arg1->field_C0[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, arg1->field_C0[2]); + + for (i = 0; i < 4; i++) + { + CopyEasyChatWord(arg1->field_C0[i + 3], trainerCard->var_28[i]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, arg1->field_C0[i + 3]); + } + + DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_8459504); + StringAppend(gStringVar4, arg1->field_1A4); + + if (arg2 == TRUE) + { + DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_8459588); + StringAppend(gStringVar4, arg1->field_1A4); + } + else if (arg2 == FALSE) + { + DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_8459580[trainerCard->gender]); + StringAppend(gStringVar4, arg1->field_1A4); + } +} -- cgit v1.2.3 From d873b1c6aaafb211f1184755b1534d9e9e2891af Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 20 Jan 2020 20:53:50 -0500 Subject: rodata through gUnknown_8456D34 --- src/union_room.c | 220 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 168 insertions(+), 52 deletions(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index dc1c2a3fa..73e146a4d 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -44,19 +44,24 @@ #include "constants/field_weather.h" #include "constants/species.h" -EWRAM_DATA u8 sUnionRoomPlayerName[12] = {}; -EWRAM_DATA union UnkUnion_Main gUnknown_203B05C = {}; -EWRAM_DATA u8 gUnknown_203B058 = 0; -EWRAM_DATA u8 gUnknown_203B059 = 0; -EWRAM_DATA struct UnionRoomTrade sUnionRoomTrade = {}; - -IWRAM_DATA struct UnkStruct_Leader * gUnknown_3002024; -IWRAM_DATA struct UnkStruct_Group * gUnknown_3002028; -IWRAM_DATA struct UnkStruct_URoom * gUnknown_300202C; +static EWRAM_DATA u8 sUnionRoomPlayerName[12] = {}; +static EWRAM_DATA u8 gUnknown_203B058 = 0; +static EWRAM_DATA u8 gUnknown_203B059 = 0; +static EWRAM_DATA union UnkUnion_Main sUnionRoomMain = {}; +static EWRAM_DATA u32 sUnref_203B060 = 0; +EWRAM_DATA struct GFtgtGnameSub gUnknown_203B064 = {}; +EWRAM_DATA u16 gUnionRoomOfferedSpecies = SPECIES_NONE; +EWRAM_DATA u8 gUnionRoomRequestedMonType = TYPE_NORMAL; +static EWRAM_DATA struct UnionRoomTrade sUnionRoomTrade = {}; + +static struct UnkStruct_Leader * sLeader; +static struct UnkStruct_Group * sGroup; +static struct UnkStruct_URoom * sURoom; void sub_8115A68(u8 taskId); void sub_81161E4(struct UnkStruct_Leader * leader); bool8 sub_8116444(struct UnkStruct_Leader * leader, u32 a1, u32 a2); +void sub_81164C8(u8 arg0, s32 id, u8 arg2); u8 sub_8116524(struct UnkStruct_Main0 * a0); u8 sub_81165E8(struct UnkStruct_Main0 * a0); void sub_8116738(u8 taskId); @@ -120,12 +125,123 @@ void sub_811B31C(u8 *dest, struct UnkStruct_URoom * uRoom, bool8 gender); u8 sub_811B754(struct UnkStruct_8019BA8 * ptr); void sub_811BA78(void); -extern const u8 *const gUnknown_8456C74[]; -extern const struct WindowTemplate gUnknown_8456CD0; -extern const u32 gUnknown_8456CD8[]; -extern const struct WindowTemplate gUnknown_8456CFC; -extern const struct WindowTemplate gUnknown_8456D04; -extern const struct ListMenuTemplate gUnknown_8456D34; +extern const u8 gUnknown_84571AC[]; +extern const u8 gUnknown_8459394[]; +extern const u8 gUnknown_84593A4[]; +extern const u8 gUnknown_84593B4[]; +extern const u8 gUnknown_84593C4[]; +extern const u8 gUnknown_84593D4[]; +extern const u8 gUnknown_84593E4[]; +extern const u8 gUnknown_84593F4[]; +extern const u8 gUnknown_84593DC[]; +extern const u8 gUnknown_8459400[]; +extern const u8 gUnknown_8459410[]; +extern const u8 gUnknown_845941C[]; +extern const u8 gUnknown_845942C[]; +extern const u8 gUnknown_8459434[]; +extern const u8 gUnknown_8459440[]; + +static const u8 *const gUnknown_8456C74[] = { + gUnknown_84571AC, + gUnknown_8459394, + gUnknown_84593A4, + gUnknown_84593B4, + gUnknown_84593C4, + gUnknown_84593D4, + gUnknown_84593E4, + gUnknown_84593F4, + gUnknown_84593DC, + gUnknown_8459400, + gUnknown_8459410, + gUnknown_845941C, + gUnknown_845942C, + gUnknown_8459434, + gUnknown_8459440, + gUnknown_84571AC, + gUnknown_84571AC, + gUnknown_84571AC, + gUnknown_84571AC, + gUnknown_84571AC, + gUnknown_84571AC, + gUnknown_84593E4, + gUnknown_84593F4 +}; + +static const struct WindowTemplate gUnknown_8456CD0 = { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 30, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x008 +}; + +#define _8456CD8(a, b) ((a) | ((b) << 8)) + +static const u32 gUnknown_8456CD8[] = { + _8456CD8( 1, 2), + _8456CD8( 2, 2), + _8456CD8( 3, 4), + _8456CD8( 4, 2), + _8456CD8( 9, 37), + _8456CD8(10, 37), + _8456CD8(11, 53), + _8456CD8(13, 53), + _8456CD8(14, 53) +}; + +#undef _8456CD8 + +static const struct WindowTemplate gUnknown_8456CFC = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 13, + .height = 10, + .paletteNum = 15, + .baseBlock = 0x044 +}; + +static const struct WindowTemplate gUnknown_8456D04 = { + .bg = 0, + .tilemapLeft = 16, + .tilemapTop = 3, + .width = 7, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x0C6 +}; + +const struct ListMenuItem gUnknown_8456D0C[] = { + {gUnknown_84571AC, 0}, + {gUnknown_84571AC, 1}, + {gUnknown_84571AC, 2}, + {gUnknown_84571AC, 3}, + {gUnknown_84571AC, 4} +}; + +static const struct ListMenuTemplate gUnknown_8456D34 = { + .items = gUnknown_8456D0C, + .moveCursorFunc = NULL, + .itemPrintFunc = sub_81164C8, + .totalItems = 5, + .maxShowed = 5, + .windowId = 0, + .header_X = 0, + .item_X = 1, + .cursor_X = 0, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 2, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = 2, + .cursorKind = 1 +}; + extern const struct WindowTemplate gUnknown_8456D4C; extern const struct WindowTemplate gUnknown_8456D54; extern const struct ListMenuTemplate gUnknown_8456DDC; @@ -303,8 +419,8 @@ void TryBecomeLinkLeader(void) struct UnkStruct_Leader * dataPtr; taskId = CreateTask(sub_8115A68, 0); - gUnknown_203B05C.leader = dataPtr = (void*)(gTasks[taskId].data); - gUnknown_3002024 = dataPtr; + sUnionRoomMain.leader = dataPtr = (void*)(gTasks[taskId].data); + sLeader = dataPtr; dataPtr->state = 0; dataPtr->textState = 0; @@ -314,7 +430,7 @@ void TryBecomeLinkLeader(void) void sub_8115A68(u8 taskId) { u32 id, val; - struct UnkStruct_Leader * data = gUnknown_203B05C.leader; + struct UnkStruct_Leader * data = sUnionRoomMain.leader; switch (data->state) { @@ -728,7 +844,7 @@ bool8 sub_8116444(struct UnkStruct_Leader * data, u32 arg1, u32 arg2) void sub_81164C8(u8 arg0, s32 id, u8 arg2) { - struct UnkStruct_Leader * data = gUnknown_203B05C.leader; + struct UnkStruct_Leader * data = sUnionRoomMain.leader; u8 var = 0; switch (data->field_0->arr[id].field_1A_0) @@ -747,7 +863,7 @@ void sub_81164C8(u8 arg0, s32 id, u8 arg2) u8 sub_8116524(struct UnkStruct_Main0 * arg0) { - struct UnkStruct_Leader * data = gUnknown_203B05C.leader; + struct UnkStruct_Leader * data = sUnionRoomMain.leader; u8 ret = 0; u8 i; s32 id; @@ -788,7 +904,7 @@ u8 sub_8116524(struct UnkStruct_Main0 * arg0) u8 sub_81165E8(struct UnkStruct_Main0 * arg0) { - struct UnkStruct_Leader * data = gUnknown_203B05C.leader; + struct UnkStruct_Leader * data = sUnionRoomMain.leader; u8 copiedCount; s32 i; u8 ret; @@ -836,8 +952,8 @@ void TryJoinLinkGroup(void) struct UnkStruct_Group * dataPtr; taskId = CreateTask(sub_8116738, 0); - gUnknown_203B05C.group = dataPtr = (void*)(gTasks[taskId].data); - gUnknown_3002028 = dataPtr; + sUnionRoomMain.group = dataPtr = (void*)(gTasks[taskId].data); + sGroup = dataPtr; dataPtr->state = 0; dataPtr->textState = 0; @@ -847,7 +963,7 @@ void TryJoinLinkGroup(void) void sub_8116738(u8 taskId) { s32 id; - struct UnkStruct_Group * data = gUnknown_203B05C.group; + struct UnkStruct_Group * data = sUnionRoomMain.group; switch (data->state) { @@ -1123,19 +1239,19 @@ u8 sub_8116DE0(void) struct UnkStruct_Group * dataPtr; taskId = CreateTask(sub_8116E1C, 0); - gUnknown_203B05C.group = dataPtr = (void*)(gTasks[taskId].data); + sUnionRoomMain.group = dataPtr = (void*)(gTasks[taskId].data); dataPtr->state = 0; dataPtr->textState = 0; - gUnknown_3002028 = dataPtr; + sGroup = dataPtr; return taskId; } void sub_8116E1C(u8 taskId) { - struct UnkStruct_Group * data = gUnknown_203B05C.group; + struct UnkStruct_Group * data = sUnionRoomMain.group; switch (data->state) { @@ -1213,7 +1329,7 @@ u8 sub_8116F5C(struct UnkStruct_Group * data, u32 id) void sub_8116F94(u8 arg0, s32 id, u8 arg2) { - struct UnkStruct_Group * data = gUnknown_203B05C.group; + struct UnkStruct_Group * data = sUnionRoomMain.group; u8 var = sub_8116F5C(data, id); sub_811A81C(arg0, 8, arg2, &data->field_0->arr[id], var, id); @@ -1221,7 +1337,7 @@ void sub_8116F94(u8 arg0, s32 id, u8 arg2) u8 sub_8116FE4(void) { - struct UnkStruct_Group * data = gUnknown_203B05C.group; + struct UnkStruct_Group * data = sUnionRoomMain.group; u8 ret = 0; u8 i; s32 id; @@ -1603,7 +1719,7 @@ void MEvent_CreateTask_Leader(u32 arg0) struct UnkStruct_Leader * dataPtr; taskId = CreateTask(sub_8117A0C, 0); - gUnknown_203B05C.leader = dataPtr = (void*)(gTasks[taskId].data); + sUnionRoomMain.leader = dataPtr = (void*)(gTasks[taskId].data); dataPtr->state = 0; dataPtr->textState = 0; @@ -1613,7 +1729,7 @@ void MEvent_CreateTask_Leader(u32 arg0) void sub_8117A0C(u8 taskId) { - struct UnkStruct_Leader * data = gUnknown_203B05C.leader; + struct UnkStruct_Leader * data = sUnionRoomMain.leader; struct WindowTemplate winTemplate; s32 val; @@ -1810,8 +1926,8 @@ void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0) struct UnkStruct_Group * dataPtr; taskId = CreateTask(sub_8117F20, 0); - gUnknown_203B05C.group = dataPtr = (void*)(gTasks[taskId].data); - gUnknown_3002028 = dataPtr; + sUnionRoomMain.group = dataPtr = (void*)(gTasks[taskId].data); + sGroup = dataPtr; dataPtr->state = 0; dataPtr->textState = 0; @@ -1823,7 +1939,7 @@ void sub_8117F20(u8 taskId) { s32 id; struct WindowTemplate winTemplate1, winTemplate2; - struct UnkStruct_Group * data = gUnknown_203B05C.group; + struct UnkStruct_Group * data = sUnionRoomMain.group; switch (data->state) { @@ -1976,8 +2092,8 @@ void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0) struct UnkStruct_Group * dataPtr; taskId = CreateTask(sub_81182DC, 0); - gUnknown_203B05C.group = dataPtr = (void*)(gTasks[taskId].data); - gUnknown_3002028 = dataPtr; + sUnionRoomMain.group = dataPtr = (void*)(gTasks[taskId].data); + sGroup = dataPtr; dataPtr->state = 0; dataPtr->textState = 0; @@ -1989,7 +2105,7 @@ void sub_81182DC(u8 taskId) { s32 id; struct WindowTemplate winTemplate; - struct UnkStruct_Group * data = gUnknown_203B05C.group; + struct UnkStruct_Group * data = sUnionRoomMain.group; switch (data->state) { @@ -2157,11 +2273,11 @@ void UnionRoomSpecial(void) CreateTask(sub_81186E0, 10); // dumb line needed to match - gUnknown_203B05C.uRoom = gUnknown_203B05C.uRoom; + sUnionRoomMain.uRoom = sUnionRoomMain.uRoom; - dataPtr = AllocZeroed(sizeof(*gUnknown_203B05C.uRoom)); - gUnknown_203B05C.uRoom = dataPtr; - gUnknown_300202C = dataPtr; + dataPtr = AllocZeroed(sizeof(*sUnionRoomMain.uRoom)); + sUnionRoomMain.uRoom = dataPtr; + sURoom = dataPtr; dataPtr->state = 0; dataPtr->textState = 0; @@ -2179,7 +2295,7 @@ u16 ReadAsU16(const u8 *ptr) void sub_8118664(u32 nextState, const u8 *src) { - struct UnkStruct_URoom * data = gUnknown_203B05C.uRoom; + struct UnkStruct_URoom * data = sUnionRoomMain.uRoom; data->state = 8; data->stateAfterPrint = nextState; @@ -2189,7 +2305,7 @@ void sub_8118664(u32 nextState, const u8 *src) void sub_811868C(const u8 *src) { - struct UnkStruct_URoom * data = gUnknown_203B05C.uRoom; + struct UnkStruct_URoom * data = sUnionRoomMain.uRoom; data->state = 26; if (src != gStringVar4) @@ -2211,7 +2327,7 @@ void sub_81186E0(u8 taskId) u32 id = 0; s32 var5 = 0; s32 playerGender = 0; - struct UnkStruct_URoom * data = gUnknown_203B05C.uRoom; + struct UnkStruct_URoom * data = sUnionRoomMain.uRoom; s16 *taskData = gTasks[taskId].data; switch (data->state) @@ -2756,7 +2872,7 @@ void sub_81186E0(u8 taskId) { sub_811BA78(); DestroyTask(taskId); - Free(gUnknown_203B05C.uRoom); + Free(sUnionRoomMain.uRoom); sub_81179A4(); } break; @@ -3009,9 +3125,9 @@ void InitUnionRoom(void) if (gQuestLogState == 2 || gQuestLogState == 3) return; CreateTask(sub_81199FC, 0); - gUnknown_203B05C.uRoom = gUnknown_203B05C.uRoom; // Needed to match. - gUnknown_203B05C.uRoom = ptr = AllocZeroed(sizeof(struct UnkStruct_URoom)); - gUnknown_300202C = gUnknown_203B05C.uRoom; + sUnionRoomMain.uRoom = sUnionRoomMain.uRoom; // Needed to match. + sUnionRoomMain.uRoom = ptr = AllocZeroed(sizeof(struct UnkStruct_URoom)); + sURoom = sUnionRoomMain.uRoom; ptr->state = 0; ptr->textState = 0; ptr->field_10 = 0; @@ -3023,7 +3139,7 @@ void sub_81199FC(u8 taskId) { s32 i; u8 text[32]; - struct UnkStruct_URoom * structPtr = gUnknown_203B05C.uRoom; + struct UnkStruct_URoom * structPtr = sUnionRoomMain.uRoom; switch (structPtr->state) { @@ -3081,7 +3197,7 @@ void sub_81199FC(u8 taskId) Free(structPtr->field_C); Free(structPtr->field_4); DestroyTask(structPtr->field_20); - Free(gUnknown_203B05C.uRoom); + Free(sUnionRoomMain.uRoom); sub_80F8DC0(); DestroyTask(taskId); break; @@ -3106,7 +3222,7 @@ u8 sub_8119B94(void) { s32 i; u8 j; - struct UnkStruct_URoom * structPtr = gUnknown_203B05C.uRoom; + struct UnkStruct_URoom * structPtr = sUnionRoomMain.uRoom; s32 r7 = 0; for (i = 0; i < 4; i++) @@ -3864,7 +3980,7 @@ void sub_811ABE4(u8 arg0, u8 arg1, struct GFtgtGname * arg2, const u8 * str, u8 void sub_811ACA4(u8 windowId, s32 itemId, u8 y) { - struct UnkStruct_Leader *leader = gUnknown_203B05C.leader; + struct UnkStruct_Leader *leader = sUnionRoomMain.leader; struct GFtgtGname *rfu; s32 i, j; u8 sp4[8]; -- cgit v1.2.3 From 9f9b4dd13dfdbb2367059df09a15ba877ecd84e7 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 21 Jan 2020 14:36:13 -0500 Subject: Data through gUnknown_84570C8 --- src/data/union_room.h | 536 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/union_room.c | 319 +++++------------------------- 2 files changed, 589 insertions(+), 266 deletions(-) create mode 100644 src/data/union_room.h (limited to 'src') diff --git a/src/data/union_room.h b/src/data/union_room.h new file mode 100644 index 000000000..22655721b --- /dev/null +++ b/src/data/union_room.h @@ -0,0 +1,536 @@ +extern const u8 gUnknown_84571AC[]; +extern const u8 gUnknown_8459344[]; +extern const u8 gUnknown_845934C[]; +extern const u8 gUnknown_8459354[]; +extern const u8 gUnknown_8459360[]; +extern const u8 gUnknown_8459368[]; +extern const u8 gUnknown_8459370[]; +extern const u8 gUnknown_8459394[]; +extern const u8 gUnknown_84593A4[]; +extern const u8 gUnknown_84593B4[]; +extern const u8 gUnknown_84593C4[]; +extern const u8 gUnknown_84593D4[]; +extern const u8 gUnknown_84593E4[]; +extern const u8 gUnknown_84593F4[]; +extern const u8 gUnknown_84593DC[]; +extern const u8 gUnknown_8459400[]; +extern const u8 gUnknown_8459410[]; +extern const u8 gUnknown_845941C[]; +extern const u8 gUnknown_845942C[]; +extern const u8 gUnknown_8459434[]; +extern const u8 gUnknown_8459440[]; + +#define _8456CD8(a, b) ((a) | ((b) << 8)) + +static const u8 *const gUnknown_8456C74[] = { + gUnknown_84571AC, + gUnknown_8459394, + gUnknown_84593A4, + gUnknown_84593B4, + gUnknown_84593C4, + gUnknown_84593D4, + gUnknown_84593E4, + gUnknown_84593F4, + gUnknown_84593DC, + gUnknown_8459400, + gUnknown_8459410, + gUnknown_845941C, + gUnknown_845942C, + gUnknown_8459434, + gUnknown_8459440, + gUnknown_84571AC, + gUnknown_84571AC, + gUnknown_84571AC, + gUnknown_84571AC, + gUnknown_84571AC, + gUnknown_84571AC, + gUnknown_84593E4, + gUnknown_84593F4 +}; + +static const struct WindowTemplate gUnknown_8456CD0 = { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 30, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x008 +}; + +static const u32 gUnknown_8456CD8[] = { + _8456CD8( 1, 2), + _8456CD8( 2, 2), + _8456CD8( 3, 4), + _8456CD8( 4, 2), + _8456CD8( 9, 37), + _8456CD8(10, 37), + _8456CD8(11, 53), + _8456CD8(13, 53), + _8456CD8(14, 53) +}; + +static const struct WindowTemplate gUnknown_8456CFC = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 13, + .height = 10, + .paletteNum = 15, + .baseBlock = 0x044 +}; + +static const struct WindowTemplate gUnknown_8456D04 = { + .bg = 0, + .tilemapLeft = 16, + .tilemapTop = 3, + .width = 7, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x0C6 +}; + +const struct ListMenuItem gUnknown_8456D0C[] = { + {gUnknown_84571AC, 0}, + {gUnknown_84571AC, 1}, + {gUnknown_84571AC, 2}, + {gUnknown_84571AC, 3}, + {gUnknown_84571AC, 4} +}; + +static const struct ListMenuTemplate gUnknown_8456D34 = { + .items = gUnknown_8456D0C, + .moveCursorFunc = NULL, + .itemPrintFunc = sub_81164C8, + .totalItems = 5, + .maxShowed = 5, + .windowId = 0, + .header_X = 0, + .item_X = 1, + .cursor_X = 0, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 2, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = 2, + .cursorKind = 1 +}; + +static const struct WindowTemplate gUnknown_8456D4C = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 17, + .height = 10, + .paletteNum = 15, + .baseBlock = 0x044 +}; + +static const struct WindowTemplate gUnknown_8456D54 = { + .bg = 0, + .tilemapLeft = 20, + .tilemapTop = 3, + .width = 7, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x0EE +}; + +static const struct ListMenuItem gUnknown_8456D5C[] = { + {gUnknown_84571AC, 0}, + {gUnknown_84571AC, 1}, + {gUnknown_84571AC, 2}, + {gUnknown_84571AC, 3}, + {gUnknown_84571AC, 4}, + {gUnknown_84571AC, 5}, + {gUnknown_84571AC, 6}, + {gUnknown_84571AC, 7}, + {gUnknown_84571AC, 8}, + {gUnknown_84571AC, 9}, + {gUnknown_84571AC, 10}, + {gUnknown_84571AC, 11}, + {gUnknown_84571AC, 12}, + {gUnknown_84571AC, 13}, + {gUnknown_84571AC, 14}, + {gUnknown_84571AC, 15} +}; + +static const struct ListMenuTemplate gUnknown_8456DDC = { + .items = gUnknown_8456D5C, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = sub_8116F94, + .totalItems = 16, + .maxShowed = 5, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 2, + .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, + .fontId = 2, + .cursorKind = 0 +}; + +static const struct WindowTemplate gUnknown_8456DF4 = { + .bg = 0, + .tilemapLeft = 20, + .tilemapTop = 6, + .width = 8, + .height = 7, + .paletteNum = 15, + .baseBlock = 0x001 +}; + +static const struct ListMenuItem gUnknown_8456DFC[] = { + {gUnknown_8459354, _8456CD8( 8, 2)}, + {gUnknown_8459344, _8456CD8(65, 2)}, + {gUnknown_845934C, _8456CD8(69, 2)}, + {gUnknown_8459360, _8456CD8(64, 0)} +}; + +static const struct ListMenuTemplate gUnknown_8456E1C = { + .items = gUnknown_8456DFC, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 4, + .maxShowed = 4, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .itemVerticalPadding = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = 2, + .cursorKind = 0 +}; + +static const struct WindowTemplate gUnknown_8456E34 = { + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 8, + .width = 11, + .height = 5, + .paletteNum = 15, + .baseBlock = 0x001 +}; + +static const struct ListMenuItem gUnknown_8456E3C[] = { + {gText_Register, 1}, + {gUnknown_8459370, 2}, + {gUnknown_8459360, 3} +}; + +static const struct ListMenuTemplate gUnknown_8456E54 = { + .items = gUnknown_8456E3C, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 3, + .maxShowed = 3, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .itemVerticalPadding = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = 2, + .cursorKind = 0 +}; + +static const struct WindowTemplate gUnknown_8456E6C = { + .bg = 0, + .tilemapLeft = 20, + .tilemapTop = 2, + .width = 9, + .height = 11, + .paletteNum = 15, + .baseBlock = 0x001 +}; + +static const struct ListMenuItem gUnknown_8456E74[] = { + {gTypeNames[TYPE_NORMAL], TYPE_NORMAL}, + {gTypeNames[TYPE_FIRE], TYPE_FIRE}, + {gTypeNames[TYPE_WATER], TYPE_WATER}, + {gTypeNames[TYPE_ELECTRIC], TYPE_ELECTRIC}, + {gTypeNames[TYPE_GRASS], TYPE_GRASS}, + {gTypeNames[TYPE_ICE], TYPE_ICE}, + {gTypeNames[TYPE_GROUND], TYPE_GROUND}, + {gTypeNames[TYPE_ROCK], TYPE_ROCK}, + {gTypeNames[TYPE_FLYING], TYPE_FLYING}, + {gTypeNames[TYPE_PSYCHIC], TYPE_PSYCHIC}, + {gTypeNames[TYPE_FIGHTING], TYPE_FIGHTING}, + {gTypeNames[TYPE_POISON], TYPE_POISON}, + {gTypeNames[TYPE_BUG], TYPE_BUG}, + {gTypeNames[TYPE_GHOST], TYPE_GHOST}, + {gTypeNames[TYPE_DRAGON], TYPE_DRAGON}, + {gTypeNames[TYPE_STEEL], TYPE_STEEL}, + {gTypeNames[TYPE_DARK], TYPE_DARK}, + {gUnknown_8459360, NUMBER_OF_MON_TYPES} +}; + +static const struct ListMenuTemplate gUnknown_8456F04 = { + .items = gUnknown_8456E74, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = NUMBER_OF_MON_TYPES, + .maxShowed = 6, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 2, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .itemVerticalPadding = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = 2, + .cursorKind = 0 +}; + +static const struct WindowTemplate gUnknown_8456F1C = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 28, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x001 +}; + +static const struct WindowTemplate gUnknown_8456F24 = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 5, + .width = 28, + .height = 10, + .paletteNum = 13, + .baseBlock = 0x039 +}; + +static const struct ListMenuItem gUnknown_8456F2C[] = { + {gUnknown_84571AC, -3}, + {gUnknown_84571AC, 0}, + {gUnknown_84571AC, 1}, + {gUnknown_84571AC, 2}, + {gUnknown_84571AC, 3}, + {gUnknown_84571AC, 4}, + {gUnknown_84571AC, 5}, + {gUnknown_84571AC, 6}, + {gUnknown_84571AC, 7}, + {gUnknown_8459368, 8} +}; + +static const struct ListMenuTemplate gUnknown_8456F7C = { + .items = gUnknown_8456F2C, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = sub_811ACA4, + .totalItems = 10, + .maxShowed = 5, + .windowId = 0, + .header_X = 0, + .item_X = 12, + .cursor_X = 0, + .upText_Y = 2, + .cursorPal = 14, + .fillValue = 15, + .cursorShadowPal = 13, + .lettersSpacing = 1, + .itemVerticalPadding = 1, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = 2, + .cursorKind = 0 +}; + +static const struct WindowTemplate gUnknown_8456F94 = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 5, + .width = 28, + .height = 10, + .paletteNum = 13, + .baseBlock = 0x039 +}; + +static const struct ListMenuItem gUnknown_8456F9C[] = { + {gUnknown_84571AC, 0}, + {gUnknown_84571AC, 1}, + {gUnknown_84571AC, 2}, + {gUnknown_84571AC, 3}, + {gUnknown_84571AC, 4}, + {gUnknown_84571AC, 5}, + {gUnknown_84571AC, 6}, + {gUnknown_84571AC, 7}, + {gUnknown_84571AC, 8}, + {gUnknown_84571AC, 9}, + {gUnknown_84571AC, 10}, + {gUnknown_84571AC, 11}, + {gUnknown_84571AC, 12}, + {gUnknown_84571AC, 13}, + {gUnknown_84571AC, 14}, + {gUnknown_84571AC, 15} +}; + +static const struct ListMenuTemplate gUnknown_845701C = { + .items = gUnknown_8456F9C, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = nullsub_92, + .totalItems = 16, + .maxShowed = 4, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 1, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .itemVerticalPadding = 0, + .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, + .fontId = 2, + .cursorKind = 0 +}; + +static const struct UnkStruct_Shared gUnknown_8457034 = {}; + +// starts at gUnknown_082F0474 in pokeemerald, union link groups + +ALIGNED(4) static const u8 gUnknown_845704C[] = {0x01, 0xFF}; +ALIGNED(4) static const u8 gUnknown_8457050[] = {0x02, 0xFF}; +ALIGNED(4) static const u8 gUnknown_8457054[] = {0x03, 0xFF}; +ALIGNED(4) static const u8 gUnknown_8457058[] = {0x04, 0xFF}; +ALIGNED(4) static const u8 gUnknown_845705C[] = {0x09, 0xFF}; +ALIGNED(4) static const u8 gUnknown_8457060[] = {0x0A, 0xFF}; +ALIGNED(4) static const u8 gUnknown_8457064[] = {0x0B, 0xFF}; +ALIGNED(4) static const u8 gUnknown_8457068[] = {0x15, 0xFF}; +ALIGNED(4) static const u8 gUnknown_845706C[] = {0x16, 0xFF}; +ALIGNED(4) static const u8 gUnknown_8457070[] = {0x40, 0x41, 0x44, 0x45, 0x48, 0x51, 0x52, 0x53, 0x54, 0xFF}; +ALIGNED(4) static const u8 gUnknown_845707C[] = {0x0C, 0xFF}; +ALIGNED(4) static const u8 gUnknown_8457080[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0A, 0x0B, 0x15, 0x16, 0x0D, 0xFF}; +ALIGNED(4) static const u8 gUnknown_845708C[] = {0x01, 0x02, 0x03, 0x04, 0x0A, 0xFF}; + +static const u8 *const gUnknown_8457094[] = { + gUnknown_845704C, + gUnknown_8457050, + gUnknown_8457054, + gUnknown_8457058, + gUnknown_845705C, + gUnknown_8457060, + gUnknown_8457064, + gUnknown_8457068, + gUnknown_845706C, + gUnknown_8457070, + gUnknown_845707C, + gUnknown_8457080, + gUnknown_845708C +}; + +static const u8 gUnknown_84570C8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0A, 0x0B, 0x15, 0x16, 0xF7, 0x00, 0xAF, 0xF7, 0x01, 0xFF, 0x00}; + +extern const u8 gUnknown_84571B0[]; +extern const u8 gUnknown_84571B4[]; +extern const u8 gUnknown_84571B8[]; +extern const u8 gUnknown_84571E0[]; +extern const u8 gUnknown_8457234[]; +extern const u8 gUnknown_8457264[]; +extern const u8 *const gUnknown_845742C[][5]; +extern const u8 gUnknown_845747C[]; +extern const u8 gUnknown_84574A0[]; +extern const u8 gUnknown_84574C4[]; +extern const u8 gUnknown_84574EC[]; +extern const u8 gUnknown_8457514[]; +extern const u8 gUnknown_8457530[]; +extern const u8 gUnknown_8457554[]; +extern const u8 *const gUnknown_8457608[]; +extern const u8 gUnknown_8457610[]; +extern const u8 *const gUnknown_845767C[]; +extern const u8 gUnknown_84576AC[]; +extern const u8 gUnknown_84576C4[]; +extern const u8 gUnknown_8457700[]; +extern const u8 gUnknown_845771C[]; +extern const u8 *const gUnknown_8457754[]; +extern const u8 gUnknown_845777C[]; +extern const u8 gUnknown_84577BC[]; +extern const u8 gUnknown_84577F8[]; +extern const u8 *const gUnknown_8457838[]; +extern const u8 gUnknown_84578BC[]; +extern const u8 *const gUnknown_8457A34[]; +extern const u8 *const gUnknown_8457B04[][2]; +extern const u8 *const gUnknown_8457BCC[]; +extern const u8 *const gUnknown_8457C20[]; +extern const u8 gUnknown_8457C48[]; +extern const u8 gUnknown_8457CA4[]; +extern const u8 gUnknown_8457CF8[]; +extern const u8 gUnknown_8457D44[]; +extern const u8 gUnknown_8457DB8[]; +extern const u8 gUnknown_8457E0C[]; +extern const u8 gUnknown_8457E28[]; +extern const u8 gUnknown_8457E44[]; +extern const u8 gUnknown_8457E60[]; +extern const u8 *const gUnknown_8457F80[][2]; +extern const u8 gUnknown_8457F90[]; +extern const u8 *const gUnknown_84580F4[][4]; +extern const u8 *const gUnknown_8458230[][2][3]; +extern const u8 *const gUnknown_8458314[]; +extern const u8 *const gUnknown_84583B4[]; +extern const u8 *const gUnknown_845842C[]; +extern const u8 gUnknown_8458434[]; +extern const u8 gUnknown_845847C[]; +extern const u8 gUnknown_84584C0[]; +extern const u8 *const gUnknown_8458548[]; +extern const u8 *const gUnknown_84585E8[]; +extern const u8 *const gUnknown_8458758[2][4]; +extern const u8 *const gUnknown_84588BC[2][4]; +extern const u8 *const gUnknown_84589AC[2][2]; +extern const u8 *const gUnknown_8458A78[2][4]; +extern const u8 gUnknown_8458A98[]; +extern const u8 gUnknown_8458AB8[]; +extern const u8 gUnknown_8458B44[]; +extern const u8 gUnknown_8458CD4[]; +extern const u8 gUnknown_8458D1C[]; +extern const u8 gUnknown_8458D54[]; +extern const u8 gUnknown_8458D78[]; +extern const u8 gUnknown_8458D9C[]; +extern const u8 gUnknown_8458DBC[]; +extern const u8 gUnknown_8458DE8[]; +extern const u8 gUnknown_8458E10[]; +extern const u8 gUnknown_8458E70[]; +extern const u8 gUnknown_8458ED0[]; +extern const u8 gUnknown_8458F04[]; +extern const u8 gUnknown_8458F9C[]; +extern const u8 gUnknown_8458FBC[]; +extern const u8 gUnknown_8458FC8[]; +extern const u8 gUnknown_8458FE4[]; +extern const u8 gUnknown_84591DC[]; +extern const u8 *const gUnknown_84591B8[]; +extern const u8 gUnknown_8459238[]; +extern const u8 gUnknown_8459250[]; +extern const u8 gUnknown_845928C[]; +extern const u8 *const gUnknown_845933C[]; +extern const u8 gUnknown_8459378[]; +extern const u8 *const gUnknown_84594B0[]; +extern const u8 gUnknown_84594C4[]; +extern const u8 gUnknown_8459504[]; +extern const u8 *const gUnknown_8459580[]; +extern const u8 gUnknown_8459588[]; + +#undef _8456CD8 diff --git a/src/union_room.c b/src/union_room.c index 73e146a4d..32635debd 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -31,6 +31,7 @@ #include "script.h" #include "script_pokemon_util.h" #include "start_menu.h" +#include "strings.h" #include "task.h" #include "trade.h" #include "trade_scene.h" @@ -61,13 +62,14 @@ static struct UnkStruct_URoom * sURoom; void sub_8115A68(u8 taskId); void sub_81161E4(struct UnkStruct_Leader * leader); bool8 sub_8116444(struct UnkStruct_Leader * leader, u32 a1, u32 a2); -void sub_81164C8(u8 arg0, s32 id, u8 arg2); +void sub_81164C8(u8 windowId, s32 itemId, u8 y); u8 sub_8116524(struct UnkStruct_Main0 * a0); u8 sub_81165E8(struct UnkStruct_Main0 * a0); void sub_8116738(u8 taskId); u32 sub_8116D10(struct UnkStruct_Group * group, s32 id); void sub_8116D60(struct UnkStruct_Group * group, s32 id); void sub_8116E1C(u8 taskId); +void sub_8116F94(u8 windowId, s32 itemId, u8 y); u8 sub_8116FE4(void); void sub_8117990(void); void sub_81179A4(void); @@ -99,12 +101,14 @@ bool8 sub_811A694(struct UnkStruct_Shared * arg0, const struct UnkStruct_Shared bool32 sub_811A6DC(struct UnkStruct_Shared * arg0, struct UnkStruct_Shared * arg1); u32 sub_811A748(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1); u8 sub_811A798(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1, u8 arg2); -void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 * arg3, u8 arg4, u8 id); +void sub_811A81C(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * arg3, u8 arg4, u8 id); void sub_811A910(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 * arg3, u8 arg4, u8 id); bool32 sub_811A9B8(void); u32 sub_811A9FC(s32 a0); u32 sub_811AA24(struct UnkStruct_x20 * unkX20); s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 playerGender); +void nullsub_92(u8 windowId, s32 itemId, u8 y); +void sub_811ACA4(u8 windowId, s32 itemId, u8 y); s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1); s32 sub_811ADC4(s32 a0, struct UnkStruct_Main0 * a1); s32 sub_811ADD0(u32 type, u32 species); @@ -125,233 +129,16 @@ void sub_811B31C(u8 *dest, struct UnkStruct_URoom * uRoom, bool8 gender); u8 sub_811B754(struct UnkStruct_8019BA8 * ptr); void sub_811BA78(void); -extern const u8 gUnknown_84571AC[]; -extern const u8 gUnknown_8459394[]; -extern const u8 gUnknown_84593A4[]; -extern const u8 gUnknown_84593B4[]; -extern const u8 gUnknown_84593C4[]; -extern const u8 gUnknown_84593D4[]; -extern const u8 gUnknown_84593E4[]; -extern const u8 gUnknown_84593F4[]; -extern const u8 gUnknown_84593DC[]; -extern const u8 gUnknown_8459400[]; -extern const u8 gUnknown_8459410[]; -extern const u8 gUnknown_845941C[]; -extern const u8 gUnknown_845942C[]; -extern const u8 gUnknown_8459434[]; -extern const u8 gUnknown_8459440[]; - -static const u8 *const gUnknown_8456C74[] = { - gUnknown_84571AC, - gUnknown_8459394, - gUnknown_84593A4, - gUnknown_84593B4, - gUnknown_84593C4, - gUnknown_84593D4, - gUnknown_84593E4, - gUnknown_84593F4, - gUnknown_84593DC, - gUnknown_8459400, - gUnknown_8459410, - gUnknown_845941C, - gUnknown_845942C, - gUnknown_8459434, - gUnknown_8459440, - gUnknown_84571AC, - gUnknown_84571AC, - gUnknown_84571AC, - gUnknown_84571AC, - gUnknown_84571AC, - gUnknown_84571AC, - gUnknown_84593E4, - gUnknown_84593F4 -}; - -static const struct WindowTemplate gUnknown_8456CD0 = { - .bg = 0, - .tilemapLeft = 0, - .tilemapTop = 0, - .width = 30, - .height = 2, - .paletteNum = 0xF, - .baseBlock = 0x008 -}; - -#define _8456CD8(a, b) ((a) | ((b) << 8)) - -static const u32 gUnknown_8456CD8[] = { - _8456CD8( 1, 2), - _8456CD8( 2, 2), - _8456CD8( 3, 4), - _8456CD8( 4, 2), - _8456CD8( 9, 37), - _8456CD8(10, 37), - _8456CD8(11, 53), - _8456CD8(13, 53), - _8456CD8(14, 53) -}; - -#undef _8456CD8 - -static const struct WindowTemplate gUnknown_8456CFC = { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 3, - .width = 13, - .height = 10, - .paletteNum = 15, - .baseBlock = 0x044 -}; - -static const struct WindowTemplate gUnknown_8456D04 = { - .bg = 0, - .tilemapLeft = 16, - .tilemapTop = 3, - .width = 7, - .height = 4, - .paletteNum = 15, - .baseBlock = 0x0C6 -}; - -const struct ListMenuItem gUnknown_8456D0C[] = { - {gUnknown_84571AC, 0}, - {gUnknown_84571AC, 1}, - {gUnknown_84571AC, 2}, - {gUnknown_84571AC, 3}, - {gUnknown_84571AC, 4} -}; - -static const struct ListMenuTemplate gUnknown_8456D34 = { - .items = gUnknown_8456D0C, - .moveCursorFunc = NULL, - .itemPrintFunc = sub_81164C8, - .totalItems = 5, - .maxShowed = 5, - .windowId = 0, - .header_X = 0, - .item_X = 1, - .cursor_X = 0, - .upText_Y = 0, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 0, - .itemVerticalPadding = 2, - .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = 2, - .cursorKind = 1 -}; - -extern const struct WindowTemplate gUnknown_8456D4C; -extern const struct WindowTemplate gUnknown_8456D54; -extern const struct ListMenuTemplate gUnknown_8456DDC; -extern const struct WindowTemplate gUnknown_8456DF4; -extern const struct ListMenuTemplate gUnknown_8456E1C; -extern const struct WindowTemplate gUnknown_8456E34; -extern const struct ListMenuTemplate gUnknown_8456E54; -extern const struct WindowTemplate gUnknown_8456E6C; -extern const struct ListMenuTemplate gUnknown_8456F04; -extern const struct WindowTemplate gUnknown_8456F1C; -extern const struct WindowTemplate gUnknown_8456F24; -extern const struct ListMenuTemplate gUnknown_8456F7C; -extern const struct UnkStruct_Shared gUnknown_8457034; -extern const u8 *const gUnknown_8457094[13]; -extern const u8 gUnknown_84570C8[]; -extern const u8 gUnknown_84571B0[]; -extern const u8 gUnknown_84571B4[]; -extern const u8 gUnknown_84571B8[]; -extern const u8 gUnknown_84571E0[]; -extern const u8 gUnknown_8457234[]; -extern const u8 gUnknown_8457264[]; -extern const u8 *const gUnknown_845742C[][5]; -extern const u8 gUnknown_845747C[]; -extern const u8 gUnknown_84574A0[]; -extern const u8 gUnknown_84574C4[]; -extern const u8 gUnknown_84574EC[]; -extern const u8 gUnknown_8457514[]; -extern const u8 gUnknown_8457530[]; -extern const u8 gUnknown_8457554[]; -extern const u8 *const gUnknown_8457608[]; -extern const u8 gUnknown_8457610[]; -extern const u8 *const gUnknown_845767C[]; -extern const u8 gUnknown_84576AC[]; -extern const u8 gUnknown_84576C4[]; -extern const u8 gUnknown_8457700[]; -extern const u8 gUnknown_845771C[]; -extern const u8 *const gUnknown_8457754[]; -extern const u8 gUnknown_845777C[]; -extern const u8 gUnknown_84577BC[]; -extern const u8 gUnknown_84577F8[]; -extern const u8 *const gUnknown_8457838[]; -extern const u8 gUnknown_84578BC[]; -extern const u8 *const gUnknown_8457A34[]; -extern const u8 *const gUnknown_8457B04[][2]; -extern const u8 *const gUnknown_8457BCC[]; -extern const u8 *const gUnknown_8457C20[]; -extern const u8 gUnknown_8457C48[]; -extern const u8 gUnknown_8457CA4[]; -extern const u8 gUnknown_8457CF8[]; -extern const u8 gUnknown_8457D44[]; -extern const u8 gUnknown_8457DB8[]; -extern const u8 gUnknown_8457E0C[]; -extern const u8 gUnknown_8457E28[]; -extern const u8 gUnknown_8457E44[]; -extern const u8 gUnknown_8457E60[]; -extern const u8 *const gUnknown_8457F80[][2]; -extern const u8 gUnknown_8457F90[]; -extern const u8 *const gUnknown_84580F4[][4]; -extern const u8 *const gUnknown_8458230[][2][3]; -extern const u8 *const gUnknown_8458314[]; -extern const u8 *const gUnknown_84583B4[]; -extern const u8 *const gUnknown_845842C[]; -extern const u8 gUnknown_8458434[]; -extern const u8 gUnknown_845847C[]; -extern const u8 gUnknown_84584C0[]; -extern const u8 *const gUnknown_8458548[]; -extern const u8 *const gUnknown_84585E8[]; -extern const u8 *const gUnknown_8458758[2][4]; -extern const u8 *const gUnknown_84588BC[2][4]; -extern const u8 *const gUnknown_84589AC[2][2]; -extern const u8 *const gUnknown_8458A78[2][4]; -extern const u8 gUnknown_8458A98[]; -extern const u8 gUnknown_8458AB8[]; -extern const u8 gUnknown_8458B44[]; -extern const u8 gUnknown_8458CD4[]; -extern const u8 gUnknown_8458D1C[]; -extern const u8 gUnknown_8458D54[]; -extern const u8 gUnknown_8458D78[]; -extern const u8 gUnknown_8458D9C[]; -extern const u8 gUnknown_8458DBC[]; -extern const u8 gUnknown_8458DE8[]; -extern const u8 gUnknown_8458E10[]; -extern const u8 gUnknown_8458E70[]; -extern const u8 gUnknown_8458ED0[]; -extern const u8 gUnknown_8458F04[]; -extern const u8 gUnknown_8458F9C[]; -extern const u8 gUnknown_8458FBC[]; -extern const u8 gUnknown_8458FC8[]; -extern const u8 gUnknown_8458FE4[]; -extern const u8 gUnknown_84591DC[]; -extern const u8 *const gUnknown_84591B8[]; -extern const u8 gUnknown_8459238[]; -extern const u8 gUnknown_8459250[]; -extern const u8 gUnknown_845928C[]; -extern const u8 *const gUnknown_845933C[]; -extern const u8 gUnknown_8459378[]; -extern const u8 *const gUnknown_84594B0[]; -extern const u8 gUnknown_84594C4[]; -extern const u8 gUnknown_8459504[]; -extern const u8 *const gUnknown_8459580[]; -extern const u8 gUnknown_8459588[]; +#include "data/union_room.h" // These are functions in Emmerald but inlined in FireRed -#define sub_8018404(dest, arg1) ({ \ +#define IntlConvPartnerUname7(dest, arg1) ({ \ StringCopy7(dest, (arg1).unk.playerName); \ ConvertInternationalString(dest, (arg1).unk.field_0.unk_00.unk_00_0); \ }) -#define sub_8018404_2(dest, arg1) ({ \ +#define IntlConvPartnerUname(dest, arg1) ({ \ StringCopy(dest, (arg1).unk.playerName); \ ConvertInternationalString(dest, (arg1).unk.field_0.unk_00.unk_00_0); \ }) @@ -590,7 +377,7 @@ void sub_8115A68(u8 taskId) } else { - sub_8018404(gStringVar1, data->field_0->arr[data->field_13 - 1]); + IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->field_13 - 1]); StringExpandPlaceholders(gStringVar4, gUnknown_8457554); data->state = 13; } @@ -828,7 +615,7 @@ bool8 sub_8116444(struct UnkStruct_Leader * data, u32 arg1, u32 arg2) case 1: PlaySE(SE_PC_LOGIN); RedrawListMenu(data->listTaskId); - sub_8018404(gStringVar2, data->field_0->arr[data->field_13]); + IntlConvPartnerUname7(gStringVar2, data->field_0->arr[data->field_13]); sub_8116244(gStringVar4, gUnknown_203B058); data->state = arg1; break; @@ -842,15 +629,15 @@ bool8 sub_8116444(struct UnkStruct_Leader * data, u32 arg1, u32 arg2) return FALSE; } -void sub_81164C8(u8 arg0, s32 id, u8 arg2) +void sub_81164C8(u8 windowId, s32 itemId, u8 y) { struct UnkStruct_Leader * data = sUnionRoomMain.leader; u8 var = 0; - switch (data->field_0->arr[id].field_1A_0) + switch (data->field_0->arr[itemId].field_1A_0) { case 1: - if (data->field_0->arr[id].field_1B != 0) + if (data->field_0->arr[itemId].field_1B != 0) var = 2; break; case 2: @@ -858,7 +645,7 @@ void sub_81164C8(u8 arg0, s32 id, u8 arg2) break; } - sub_811A910(arg0, 0, arg2, &data->field_0->arr[id], var, id); + sub_811A910(windowId, 0, y, &data->field_0->arr[itemId], var, itemId); } u8 sub_8116524(struct UnkStruct_Main0 * arg0) @@ -1059,7 +846,7 @@ void sub_8116738(u8 taskId) sub_811631C(gStringVar4, gUnknown_203B058); if (PrintOnTextbox(&data->textState, gStringVar4)) { - sub_8018404(gStringVar1, data->field_0->arr[data->field_F]); + IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->field_F]); data->state = 6; } break; @@ -1228,7 +1015,7 @@ void sub_8116D60(struct UnkStruct_Group * data, s32 id) LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); RedrawListMenu(data->listTaskId); - sub_8018404(gStringVar1, data->field_0->arr[data->field_F]); + IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->field_F]); sub_80FB008(gUnknown_84570C8[gSpecialVar_0x8004], 0, 1); sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.field_0.unk_00.playerTrainerId)); } @@ -1327,12 +1114,12 @@ u8 sub_8116F5C(struct UnkStruct_Group * data, u32 id) return 0; } -void sub_8116F94(u8 arg0, s32 id, u8 arg2) +void sub_8116F94(u8 windowId, s32 itemId, u8 y) { struct UnkStruct_Group * data = sUnionRoomMain.group; - u8 var = sub_8116F5C(data, id); + u8 var = sub_8116F5C(data, itemId); - sub_811A81C(arg0, 8, arg2, &data->field_0->arr[id], var, id); + sub_811A81C(windowId, 8, y, &data->field_0->arr[itemId], var, itemId); } u8 sub_8116FE4(void) @@ -1827,7 +1614,7 @@ void sub_8117A0C(u8 taskId) data->field_0->arr[data->field_13].field_1B = 0; RedrawListMenu(data->listTaskId); data->field_13++; - sub_8018404(gStringVar1, data->field_0->arr[data->field_13 - 1]); + IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->field_13 - 1]); StringExpandPlaceholders(gStringVar4, gUnknown_8457554); data->state = 9; sub_80F8F5C(); @@ -2005,7 +1792,7 @@ void sub_8117F20(u8 taskId) LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); RedrawListMenu(data->listTaskId); - sub_8018404_2(gStringVar1, data->field_0->arr[data->field_F]); + IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->field_F]); sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.field_0.unk_00.playerTrainerId)); PlaySE(SE_PN_ON); data->state = 4; @@ -2024,7 +1811,7 @@ void sub_8117F20(u8 taskId) break; case 4: AddTextPrinterToWindow1(gUnknown_8459238); - sub_8018404_2(gStringVar1, data->field_0->arr[data->field_F]); + IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->field_F]); data->state = 5; break; case 5: @@ -2189,7 +1976,7 @@ void sub_81182DC(u8 taskId) break; case 4: AddTextPrinterToWindow1(gUnknown_845928C); - sub_8018404_2(gStringVar1, data->field_0->arr[data->field_F]); + IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->field_F]); data->state = 5; break; case 5: @@ -3005,17 +2792,17 @@ void sub_81186E0(u8 taskId) switch (sub_811ADD0(data->field_0->arr[var5].unk.field_0.type, data->field_0->arr[var5].unk.field_0.species)) { case 0: - sub_8018404_2(gStringVar1, data->field_0->arr[var5]); + IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]); sub_8118664(49, gUnknown_8458E70); taskData[1] = var5; break; case 1: - sub_8018404_2(gStringVar1, data->field_0->arr[var5]); + IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]); StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.field_0.type]); sub_8118664(46, gUnknown_8458ED0); break; case 2: - sub_8018404_2(gStringVar1, data->field_0->arr[var5]); + IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]); StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.field_0.type]); sub_8118664(46, gUnknown_8458F04); break; @@ -3053,7 +2840,7 @@ void sub_81186E0(u8 taskId) case 51: gUnknown_203B058 = 0x44; sub_80FC114(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.field_0, 0x44); - sub_8018404_2(gStringVar1, data->field_0->arr[taskData[1]]); + IntlConvPartnerUname(gStringVar1, data->field_0->arr[taskData[1]]); sub_811A0B4(gUnknown_8457A34[2]); data->state = 25; break; @@ -3177,7 +2964,7 @@ void sub_81199FC(u8 taskId) { if (structPtr->field_0->arr[i].field_1A_0 == 1) { - sub_8018404_2(text, structPtr->field_0->arr[i]); + IntlConvPartnerUname(text, structPtr->field_0->arr[i]); if (sub_80FD338(ReadAsU16(structPtr->field_0->arr[i].unk.field_0.unk_00.playerTrainerId), text)) { StringCopy(sUnionRoomPlayerName, text); @@ -3832,7 +3619,7 @@ void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, r2 = arg3->unk.field_0.unk_0a_0; if (arg3->field_1A_0 == 1 && !(r2 & 0x40)) { - sub_8018404_2(sp10, *arg3); + IntlConvPartnerUname(sp10, *arg3); sub_811A444(arg0, 2, sp10, arg1, arg2, arg4); ConvertIntToDecimalStringN(sp0, arg3->unk.field_0.unk_00.playerTrainerId[0] | (arg3->unk.field_0.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); StringCopy(gStringVar4, gUnknown_84571B4); @@ -3842,20 +3629,20 @@ void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, } } -void sub_811A910(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id) +void sub_811A910(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 *arg3, u8 arg4, u8 id) { u8 sp0[6]; u8 sp10[30]; if (arg3->field_1A_0 == 1) { - sub_8018404_2(sp10, *arg3); - sub_811A444(arg0, 2, sp10, arg1, arg2, arg4); + IntlConvPartnerUname(sp10, *arg3); + sub_811A444(windowId, 2, sp10, x, y, arg4); ConvertIntToDecimalStringN(sp0, arg3->unk.field_0.unk_00.playerTrainerId[0] | (arg3->unk.field_0.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); StringCopy(gStringVar4, gUnknown_84571B4); StringAppend(gStringVar4, sp0); - arg1 += 71; - sub_811A444(arg0, 0, gStringVar4, arg1, arg2, arg4); + x += 71; + sub_811A444(windowId, 0, gStringVar4, x, y, arg4); } } @@ -3898,7 +3685,7 @@ u32 sub_811A9FC(s32 arg0) u32 sub_811AA24(struct UnkStruct_x20 *arg0) { u8 sp0[30]; - sub_8018404_2(sp0, *arg0); + IntlConvPartnerUname(sp0, *arg0); return sub_80FD338(ReadAsU16(arg0->unk.field_0.unk_00.playerTrainerId), sp0); } @@ -3910,7 +3697,7 @@ s32 sub_811AA5C(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender if (!r5->unk.field_0.unk_0a_7 && arg1 == 0) { - sub_8018404_2(gStringVar1, *r5); + IntlConvPartnerUname(gStringVar1, *r5); r2 = sub_80FD338(ReadAsU16(r5->unk.field_0.unk_00.playerTrainerId), gStringVar1); if (r5->unk.field_0.unk_0a_0 == 0x45) { @@ -3925,7 +3712,7 @@ s32 sub_811AA5C(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender } else { - sub_8018404_2(gStringVar1, *r5); + IntlConvPartnerUname(gStringVar1, *r5); if (arg1 != 0) { playerGender = (r5->unk.field_0.unk_00.playerTrainerId[arg1 + 1] >> 3) & 1; @@ -3957,24 +3744,24 @@ void nullsub_92(u8 windowId, s32 itemId, u8 y) } -void sub_811ABE4(u8 arg0, u8 arg1, struct GFtgtGname * arg2, const u8 * str, u8 arg4) +void sub_811ABE4(u8 windowId, u8 y, struct GFtgtGname * gname, const u8 * uname, u8 colorIdx) { - u8 sp8[4]; - u16 r8 = arg2->species; - u8 r7 = arg2->type; - u8 r9 = arg2->level; + u8 level_t[4]; + u16 species = gname->species; + u8 type = gname->type; + u8 level = gname->level; - sub_811A444(arg0, 2, str, 8, arg1, arg4); - if (r8 == SPECIES_EGG) + sub_811A444(windowId, 2, uname, 8, y, colorIdx); + if (species == SPECIES_EGG) { - sub_811A444(arg0, 2, gUnknown_8458FBC, 0x44, arg1, arg4); + sub_811A444(windowId, 2, gUnknown_8458FBC, 0x44, y, colorIdx); } else { - BlitMoveInfoIcon(arg0, r7 + 1, 0x44, arg1); - sub_811A444(arg0, 2, gSpeciesNames[r8], 0x76, arg1, arg4); - ConvertIntToDecimalStringN(sp8, r9, STR_CONV_MODE_LEFT_ALIGN, 3); - sub_811A444(arg0, 2, sp8, GetStringRightAlignXOffset(2, sp8, 218), arg1, arg4); + BlitMoveInfoIcon(windowId, type + 1, 0x44, y); + sub_811A444(windowId, 2, gSpeciesNames[species], 0x76, y, colorIdx); + ConvertIntToDecimalStringN(level_t, level, STR_CONV_MODE_LEFT_ALIGN, 3); + sub_811A444(windowId, 2, level_t, GetStringRightAlignXOffset(2, level_t, 218), y, colorIdx); } } @@ -3983,7 +3770,7 @@ void sub_811ACA4(u8 windowId, s32 itemId, u8 y) struct UnkStruct_Leader *leader = sUnionRoomMain.leader; struct GFtgtGname *rfu; s32 i, j; - u8 sp4[8]; + u8 uname[8]; if (itemId == -3 && y == gUnknown_8456F7C.upText_Y) { @@ -4004,8 +3791,8 @@ void sub_811ACA4(u8 windowId, s32 itemId, u8 y) } if (j == itemId + 1) { - sub_8018404_2(sp4, leader->field_0->arr[i]); - sub_811ABE4(windowId, y, &leader->field_0->arr[i].unk.field_0, sp4, 6); + IntlConvPartnerUname(uname, leader->field_0->arr[i]); + sub_811ABE4(windowId, y, &leader->field_0->arr[i].unk.field_0, uname, 6); break; } } -- cgit v1.2.3 From 26716a87337370a56e59b206a4e7767384797235 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 Jan 2020 10:13:34 -0500 Subject: Split remaining union room data --- src/data/union_room.h | 108 -------------------------------------------------- src/union_room.c | 13 +++--- 2 files changed, 7 insertions(+), 114 deletions(-) (limited to 'src') diff --git a/src/data/union_room.h b/src/data/union_room.h index 22655721b..3d23353c9 100644 --- a/src/data/union_room.h +++ b/src/data/union_room.h @@ -1,24 +1,3 @@ -extern const u8 gUnknown_84571AC[]; -extern const u8 gUnknown_8459344[]; -extern const u8 gUnknown_845934C[]; -extern const u8 gUnknown_8459354[]; -extern const u8 gUnknown_8459360[]; -extern const u8 gUnknown_8459368[]; -extern const u8 gUnknown_8459370[]; -extern const u8 gUnknown_8459394[]; -extern const u8 gUnknown_84593A4[]; -extern const u8 gUnknown_84593B4[]; -extern const u8 gUnknown_84593C4[]; -extern const u8 gUnknown_84593D4[]; -extern const u8 gUnknown_84593E4[]; -extern const u8 gUnknown_84593F4[]; -extern const u8 gUnknown_84593DC[]; -extern const u8 gUnknown_8459400[]; -extern const u8 gUnknown_8459410[]; -extern const u8 gUnknown_845941C[]; -extern const u8 gUnknown_845942C[]; -extern const u8 gUnknown_8459434[]; -extern const u8 gUnknown_8459440[]; #define _8456CD8(a, b) ((a) | ((b) << 8)) @@ -446,91 +425,4 @@ static const u8 *const gUnknown_8457094[] = { static const u8 gUnknown_84570C8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0A, 0x0B, 0x15, 0x16, 0xF7, 0x00, 0xAF, 0xF7, 0x01, 0xFF, 0x00}; -extern const u8 gUnknown_84571B0[]; -extern const u8 gUnknown_84571B4[]; -extern const u8 gUnknown_84571B8[]; -extern const u8 gUnknown_84571E0[]; -extern const u8 gUnknown_8457234[]; -extern const u8 gUnknown_8457264[]; -extern const u8 *const gUnknown_845742C[][5]; -extern const u8 gUnknown_845747C[]; -extern const u8 gUnknown_84574A0[]; -extern const u8 gUnknown_84574C4[]; -extern const u8 gUnknown_84574EC[]; -extern const u8 gUnknown_8457514[]; -extern const u8 gUnknown_8457530[]; -extern const u8 gUnknown_8457554[]; -extern const u8 *const gUnknown_8457608[]; -extern const u8 gUnknown_8457610[]; -extern const u8 *const gUnknown_845767C[]; -extern const u8 gUnknown_84576AC[]; -extern const u8 gUnknown_84576C4[]; -extern const u8 gUnknown_8457700[]; -extern const u8 gUnknown_845771C[]; -extern const u8 *const gUnknown_8457754[]; -extern const u8 gUnknown_845777C[]; -extern const u8 gUnknown_84577BC[]; -extern const u8 gUnknown_84577F8[]; -extern const u8 *const gUnknown_8457838[]; -extern const u8 gUnknown_84578BC[]; -extern const u8 *const gUnknown_8457A34[]; -extern const u8 *const gUnknown_8457B04[][2]; -extern const u8 *const gUnknown_8457BCC[]; -extern const u8 *const gUnknown_8457C20[]; -extern const u8 gUnknown_8457C48[]; -extern const u8 gUnknown_8457CA4[]; -extern const u8 gUnknown_8457CF8[]; -extern const u8 gUnknown_8457D44[]; -extern const u8 gUnknown_8457DB8[]; -extern const u8 gUnknown_8457E0C[]; -extern const u8 gUnknown_8457E28[]; -extern const u8 gUnknown_8457E44[]; -extern const u8 gUnknown_8457E60[]; -extern const u8 *const gUnknown_8457F80[][2]; -extern const u8 gUnknown_8457F90[]; -extern const u8 *const gUnknown_84580F4[][4]; -extern const u8 *const gUnknown_8458230[][2][3]; -extern const u8 *const gUnknown_8458314[]; -extern const u8 *const gUnknown_84583B4[]; -extern const u8 *const gUnknown_845842C[]; -extern const u8 gUnknown_8458434[]; -extern const u8 gUnknown_845847C[]; -extern const u8 gUnknown_84584C0[]; -extern const u8 *const gUnknown_8458548[]; -extern const u8 *const gUnknown_84585E8[]; -extern const u8 *const gUnknown_8458758[2][4]; -extern const u8 *const gUnknown_84588BC[2][4]; -extern const u8 *const gUnknown_84589AC[2][2]; -extern const u8 *const gUnknown_8458A78[2][4]; -extern const u8 gUnknown_8458A98[]; -extern const u8 gUnknown_8458AB8[]; -extern const u8 gUnknown_8458B44[]; -extern const u8 gUnknown_8458CD4[]; -extern const u8 gUnknown_8458D1C[]; -extern const u8 gUnknown_8458D54[]; -extern const u8 gUnknown_8458D78[]; -extern const u8 gUnknown_8458D9C[]; -extern const u8 gUnknown_8458DBC[]; -extern const u8 gUnknown_8458DE8[]; -extern const u8 gUnknown_8458E10[]; -extern const u8 gUnknown_8458E70[]; -extern const u8 gUnknown_8458ED0[]; -extern const u8 gUnknown_8458F04[]; -extern const u8 gUnknown_8458F9C[]; -extern const u8 gUnknown_8458FBC[]; -extern const u8 gUnknown_8458FC8[]; -extern const u8 gUnknown_8458FE4[]; -extern const u8 gUnknown_84591DC[]; -extern const u8 *const gUnknown_84591B8[]; -extern const u8 gUnknown_8459238[]; -extern const u8 gUnknown_8459250[]; -extern const u8 gUnknown_845928C[]; -extern const u8 *const gUnknown_845933C[]; -extern const u8 gUnknown_8459378[]; -extern const u8 *const gUnknown_84594B0[]; -extern const u8 gUnknown_84594C4[]; -extern const u8 gUnknown_8459504[]; -extern const u8 *const gUnknown_8459580[]; -extern const u8 gUnknown_8459588[]; - #undef _8456CD8 diff --git a/src/union_room.c b/src/union_room.c index 32635debd..02327e265 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -39,6 +39,7 @@ #include "union_room.h" #include "union_room_chat.h" #include "union_room_player_avatar.h" +#include "union_room_message.h" #include "constants/songs.h" #include "constants/maps.h" #include "constants/cable_club.h" @@ -131,20 +132,20 @@ void sub_811BA78(void); #include "data/union_room.h" -// These are functions in Emmerald but inlined in FireRed +// These are functions in Emerald but inlined in FireRed -#define IntlConvPartnerUname7(dest, arg1) ({ \ - StringCopy7(dest, (arg1).unk.playerName); \ +#define IntlConvPartnerUname7(dest, arg1) ({ \ + StringCopy7(dest, (arg1).unk.playerName); \ ConvertInternationalString(dest, (arg1).unk.field_0.unk_00.unk_00_0); \ }) -#define IntlConvPartnerUname(dest, arg1) ({ \ - StringCopy(dest, (arg1).unk.playerName); \ +#define IntlConvPartnerUname(dest, arg1) ({ \ + StringCopy(dest, (arg1).unk.playerName); \ ConvertInternationalString(dest, (arg1).unk.field_0.unk_00.unk_00_0); \ }) #define CopyTrainerCardData(dest, src, _version) ({ \ - (dest) = *((struct TrainerCard * )(src)); \ + (dest) = *((struct TrainerCard * )(src)); \ (dest).version = _version; \ }) -- cgit v1.2.3 From 944f150b5ed0cccf30763f05f669f6210b10e2c1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 Jan 2020 10:19:58 -0500 Subject: Static methods in union_room.c; remove src/data/union_room.h --- src/data/union_room.h | 428 ---------------------------- src/union_room.c | 758 +++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 591 insertions(+), 595 deletions(-) delete mode 100644 src/data/union_room.h (limited to 'src') diff --git a/src/data/union_room.h b/src/data/union_room.h deleted file mode 100644 index 3d23353c9..000000000 --- a/src/data/union_room.h +++ /dev/null @@ -1,428 +0,0 @@ - -#define _8456CD8(a, b) ((a) | ((b) << 8)) - -static const u8 *const gUnknown_8456C74[] = { - gUnknown_84571AC, - gUnknown_8459394, - gUnknown_84593A4, - gUnknown_84593B4, - gUnknown_84593C4, - gUnknown_84593D4, - gUnknown_84593E4, - gUnknown_84593F4, - gUnknown_84593DC, - gUnknown_8459400, - gUnknown_8459410, - gUnknown_845941C, - gUnknown_845942C, - gUnknown_8459434, - gUnknown_8459440, - gUnknown_84571AC, - gUnknown_84571AC, - gUnknown_84571AC, - gUnknown_84571AC, - gUnknown_84571AC, - gUnknown_84571AC, - gUnknown_84593E4, - gUnknown_84593F4 -}; - -static const struct WindowTemplate gUnknown_8456CD0 = { - .bg = 0, - .tilemapLeft = 0, - .tilemapTop = 0, - .width = 30, - .height = 2, - .paletteNum = 0xF, - .baseBlock = 0x008 -}; - -static const u32 gUnknown_8456CD8[] = { - _8456CD8( 1, 2), - _8456CD8( 2, 2), - _8456CD8( 3, 4), - _8456CD8( 4, 2), - _8456CD8( 9, 37), - _8456CD8(10, 37), - _8456CD8(11, 53), - _8456CD8(13, 53), - _8456CD8(14, 53) -}; - -static const struct WindowTemplate gUnknown_8456CFC = { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 3, - .width = 13, - .height = 10, - .paletteNum = 15, - .baseBlock = 0x044 -}; - -static const struct WindowTemplate gUnknown_8456D04 = { - .bg = 0, - .tilemapLeft = 16, - .tilemapTop = 3, - .width = 7, - .height = 4, - .paletteNum = 15, - .baseBlock = 0x0C6 -}; - -const struct ListMenuItem gUnknown_8456D0C[] = { - {gUnknown_84571AC, 0}, - {gUnknown_84571AC, 1}, - {gUnknown_84571AC, 2}, - {gUnknown_84571AC, 3}, - {gUnknown_84571AC, 4} -}; - -static const struct ListMenuTemplate gUnknown_8456D34 = { - .items = gUnknown_8456D0C, - .moveCursorFunc = NULL, - .itemPrintFunc = sub_81164C8, - .totalItems = 5, - .maxShowed = 5, - .windowId = 0, - .header_X = 0, - .item_X = 1, - .cursor_X = 0, - .upText_Y = 0, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 0, - .itemVerticalPadding = 2, - .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = 2, - .cursorKind = 1 -}; - -static const struct WindowTemplate gUnknown_8456D4C = { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 3, - .width = 17, - .height = 10, - .paletteNum = 15, - .baseBlock = 0x044 -}; - -static const struct WindowTemplate gUnknown_8456D54 = { - .bg = 0, - .tilemapLeft = 20, - .tilemapTop = 3, - .width = 7, - .height = 4, - .paletteNum = 15, - .baseBlock = 0x0EE -}; - -static const struct ListMenuItem gUnknown_8456D5C[] = { - {gUnknown_84571AC, 0}, - {gUnknown_84571AC, 1}, - {gUnknown_84571AC, 2}, - {gUnknown_84571AC, 3}, - {gUnknown_84571AC, 4}, - {gUnknown_84571AC, 5}, - {gUnknown_84571AC, 6}, - {gUnknown_84571AC, 7}, - {gUnknown_84571AC, 8}, - {gUnknown_84571AC, 9}, - {gUnknown_84571AC, 10}, - {gUnknown_84571AC, 11}, - {gUnknown_84571AC, 12}, - {gUnknown_84571AC, 13}, - {gUnknown_84571AC, 14}, - {gUnknown_84571AC, 15} -}; - -static const struct ListMenuTemplate gUnknown_8456DDC = { - .items = gUnknown_8456D5C, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = sub_8116F94, - .totalItems = 16, - .maxShowed = 5, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 0, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 0, - .itemVerticalPadding = 2, - .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, - .fontId = 2, - .cursorKind = 0 -}; - -static const struct WindowTemplate gUnknown_8456DF4 = { - .bg = 0, - .tilemapLeft = 20, - .tilemapTop = 6, - .width = 8, - .height = 7, - .paletteNum = 15, - .baseBlock = 0x001 -}; - -static const struct ListMenuItem gUnknown_8456DFC[] = { - {gUnknown_8459354, _8456CD8( 8, 2)}, - {gUnknown_8459344, _8456CD8(65, 2)}, - {gUnknown_845934C, _8456CD8(69, 2)}, - {gUnknown_8459360, _8456CD8(64, 0)} -}; - -static const struct ListMenuTemplate gUnknown_8456E1C = { - .items = gUnknown_8456DFC, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = NULL, - .totalItems = 4, - .maxShowed = 4, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 0, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 1, - .itemVerticalPadding = 0, - .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = 2, - .cursorKind = 0 -}; - -static const struct WindowTemplate gUnknown_8456E34 = { - .bg = 0, - .tilemapLeft = 18, - .tilemapTop = 8, - .width = 11, - .height = 5, - .paletteNum = 15, - .baseBlock = 0x001 -}; - -static const struct ListMenuItem gUnknown_8456E3C[] = { - {gText_Register, 1}, - {gUnknown_8459370, 2}, - {gUnknown_8459360, 3} -}; - -static const struct ListMenuTemplate gUnknown_8456E54 = { - .items = gUnknown_8456E3C, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = NULL, - .totalItems = 3, - .maxShowed = 3, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 0, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 1, - .itemVerticalPadding = 0, - .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = 2, - .cursorKind = 0 -}; - -static const struct WindowTemplate gUnknown_8456E6C = { - .bg = 0, - .tilemapLeft = 20, - .tilemapTop = 2, - .width = 9, - .height = 11, - .paletteNum = 15, - .baseBlock = 0x001 -}; - -static const struct ListMenuItem gUnknown_8456E74[] = { - {gTypeNames[TYPE_NORMAL], TYPE_NORMAL}, - {gTypeNames[TYPE_FIRE], TYPE_FIRE}, - {gTypeNames[TYPE_WATER], TYPE_WATER}, - {gTypeNames[TYPE_ELECTRIC], TYPE_ELECTRIC}, - {gTypeNames[TYPE_GRASS], TYPE_GRASS}, - {gTypeNames[TYPE_ICE], TYPE_ICE}, - {gTypeNames[TYPE_GROUND], TYPE_GROUND}, - {gTypeNames[TYPE_ROCK], TYPE_ROCK}, - {gTypeNames[TYPE_FLYING], TYPE_FLYING}, - {gTypeNames[TYPE_PSYCHIC], TYPE_PSYCHIC}, - {gTypeNames[TYPE_FIGHTING], TYPE_FIGHTING}, - {gTypeNames[TYPE_POISON], TYPE_POISON}, - {gTypeNames[TYPE_BUG], TYPE_BUG}, - {gTypeNames[TYPE_GHOST], TYPE_GHOST}, - {gTypeNames[TYPE_DRAGON], TYPE_DRAGON}, - {gTypeNames[TYPE_STEEL], TYPE_STEEL}, - {gTypeNames[TYPE_DARK], TYPE_DARK}, - {gUnknown_8459360, NUMBER_OF_MON_TYPES} -}; - -static const struct ListMenuTemplate gUnknown_8456F04 = { - .items = gUnknown_8456E74, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = NULL, - .totalItems = NUMBER_OF_MON_TYPES, - .maxShowed = 6, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 2, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 1, - .itemVerticalPadding = 0, - .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = 2, - .cursorKind = 0 -}; - -static const struct WindowTemplate gUnknown_8456F1C = { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 1, - .width = 28, - .height = 2, - .paletteNum = 13, - .baseBlock = 0x001 -}; - -static const struct WindowTemplate gUnknown_8456F24 = { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 5, - .width = 28, - .height = 10, - .paletteNum = 13, - .baseBlock = 0x039 -}; - -static const struct ListMenuItem gUnknown_8456F2C[] = { - {gUnknown_84571AC, -3}, - {gUnknown_84571AC, 0}, - {gUnknown_84571AC, 1}, - {gUnknown_84571AC, 2}, - {gUnknown_84571AC, 3}, - {gUnknown_84571AC, 4}, - {gUnknown_84571AC, 5}, - {gUnknown_84571AC, 6}, - {gUnknown_84571AC, 7}, - {gUnknown_8459368, 8} -}; - -static const struct ListMenuTemplate gUnknown_8456F7C = { - .items = gUnknown_8456F2C, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = sub_811ACA4, - .totalItems = 10, - .maxShowed = 5, - .windowId = 0, - .header_X = 0, - .item_X = 12, - .cursor_X = 0, - .upText_Y = 2, - .cursorPal = 14, - .fillValue = 15, - .cursorShadowPal = 13, - .lettersSpacing = 1, - .itemVerticalPadding = 1, - .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, - .fontId = 2, - .cursorKind = 0 -}; - -static const struct WindowTemplate gUnknown_8456F94 = { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 5, - .width = 28, - .height = 10, - .paletteNum = 13, - .baseBlock = 0x039 -}; - -static const struct ListMenuItem gUnknown_8456F9C[] = { - {gUnknown_84571AC, 0}, - {gUnknown_84571AC, 1}, - {gUnknown_84571AC, 2}, - {gUnknown_84571AC, 3}, - {gUnknown_84571AC, 4}, - {gUnknown_84571AC, 5}, - {gUnknown_84571AC, 6}, - {gUnknown_84571AC, 7}, - {gUnknown_84571AC, 8}, - {gUnknown_84571AC, 9}, - {gUnknown_84571AC, 10}, - {gUnknown_84571AC, 11}, - {gUnknown_84571AC, 12}, - {gUnknown_84571AC, 13}, - {gUnknown_84571AC, 14}, - {gUnknown_84571AC, 15} -}; - -static const struct ListMenuTemplate gUnknown_845701C = { - .items = gUnknown_8456F9C, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = nullsub_92, - .totalItems = 16, - .maxShowed = 4, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 1, - .upText_Y = 0, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 1, - .itemVerticalPadding = 0, - .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, - .fontId = 2, - .cursorKind = 0 -}; - -static const struct UnkStruct_Shared gUnknown_8457034 = {}; - -// starts at gUnknown_082F0474 in pokeemerald, union link groups - -ALIGNED(4) static const u8 gUnknown_845704C[] = {0x01, 0xFF}; -ALIGNED(4) static const u8 gUnknown_8457050[] = {0x02, 0xFF}; -ALIGNED(4) static const u8 gUnknown_8457054[] = {0x03, 0xFF}; -ALIGNED(4) static const u8 gUnknown_8457058[] = {0x04, 0xFF}; -ALIGNED(4) static const u8 gUnknown_845705C[] = {0x09, 0xFF}; -ALIGNED(4) static const u8 gUnknown_8457060[] = {0x0A, 0xFF}; -ALIGNED(4) static const u8 gUnknown_8457064[] = {0x0B, 0xFF}; -ALIGNED(4) static const u8 gUnknown_8457068[] = {0x15, 0xFF}; -ALIGNED(4) static const u8 gUnknown_845706C[] = {0x16, 0xFF}; -ALIGNED(4) static const u8 gUnknown_8457070[] = {0x40, 0x41, 0x44, 0x45, 0x48, 0x51, 0x52, 0x53, 0x54, 0xFF}; -ALIGNED(4) static const u8 gUnknown_845707C[] = {0x0C, 0xFF}; -ALIGNED(4) static const u8 gUnknown_8457080[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0A, 0x0B, 0x15, 0x16, 0x0D, 0xFF}; -ALIGNED(4) static const u8 gUnknown_845708C[] = {0x01, 0x02, 0x03, 0x04, 0x0A, 0xFF}; - -static const u8 *const gUnknown_8457094[] = { - gUnknown_845704C, - gUnknown_8457050, - gUnknown_8457054, - gUnknown_8457058, - gUnknown_845705C, - gUnknown_8457060, - gUnknown_8457064, - gUnknown_8457068, - gUnknown_845706C, - gUnknown_8457070, - gUnknown_845707C, - gUnknown_8457080, - gUnknown_845708C -}; - -static const u8 gUnknown_84570C8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0A, 0x0B, 0x15, 0x16, 0xF7, 0x00, 0xAF, 0xF7, 0x01, 0xFF, 0x00}; - -#undef _8456CD8 diff --git a/src/union_room.c b/src/union_room.c index 02327e265..8626b14d5 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -60,77 +60,501 @@ static struct UnkStruct_Leader * sLeader; static struct UnkStruct_Group * sGroup; static struct UnkStruct_URoom * sURoom; -void sub_8115A68(u8 taskId); -void sub_81161E4(struct UnkStruct_Leader * leader); -bool8 sub_8116444(struct UnkStruct_Leader * leader, u32 a1, u32 a2); -void sub_81164C8(u8 windowId, s32 itemId, u8 y); -u8 sub_8116524(struct UnkStruct_Main0 * a0); -u8 sub_81165E8(struct UnkStruct_Main0 * a0); -void sub_8116738(u8 taskId); -u32 sub_8116D10(struct UnkStruct_Group * group, s32 id); -void sub_8116D60(struct UnkStruct_Group * group, s32 id); -void sub_8116E1C(u8 taskId); -void sub_8116F94(u8 windowId, s32 itemId, u8 y); -u8 sub_8116FE4(void); -void sub_8117990(void); -void sub_81179A4(void); -void sub_8117A0C(u8 taskId); -void sub_8117F20(u8 taskId); -void sub_81182DC(u8 taskId); -void sub_81186E0(u8 taskId); -u16 ReadAsU16(const u8 *data); -void sub_8119904(struct UnkStruct_URoom * uRoom); -bool32 sub_8119944(struct UnkStruct_URoom * uRoom); -void sub_81199FC(u8 taskId); -u8 sub_8119B94(void); -u8 sub_8119E84(struct UnkStruct_Main4 * arg0, struct UnkStruct_Main4 * arg1, u32 arg2); -bool32 sub_8119FB0(struct GFtgtGname * arg0, s16 arg1); -u8 sub_811A054(struct UnkStruct_Main4 * arg0, u32 arg1); -u8 sub_811A084(struct UnkStruct_Main4 * arg0, u32 arg1); -bool32 sub_811A0B4(const u8 * str); -bool32 sub_811A0E0(void); -bool8 PrintOnTextbox(u8 *textState, const u8 *str); -s8 sub_811A14C(u8 *dest, bool32 arg1); -s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate); -s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * arg6); -void sub_811A3F8(void); -void sub_811A41C(void); -void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx); -void sub_811A5E4(struct UnkStruct_x20 * arg0, u8 count); -void sub_811A650(struct UnkStruct_Main4 * arg0, u8 count); -bool8 sub_811A694(struct UnkStruct_Shared * arg0, const struct UnkStruct_Shared * arg1); -bool32 sub_811A6DC(struct UnkStruct_Shared * arg0, struct UnkStruct_Shared * arg1); -u32 sub_811A748(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1); -u8 sub_811A798(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1, u8 arg2); -void sub_811A81C(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * arg3, u8 arg4, u8 id); -void sub_811A910(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 * arg3, u8 arg4, u8 id); -bool32 sub_811A9B8(void); -u32 sub_811A9FC(s32 a0); -u32 sub_811AA24(struct UnkStruct_x20 * unkX20); -s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 playerGender); -void nullsub_92(u8 windowId, s32 itemId, u8 y); -void sub_811ACA4(u8 windowId, s32 itemId, u8 y); -s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1); -s32 sub_811ADC4(s32 a0, struct UnkStruct_Main0 * a1); -s32 sub_811ADD0(u32 type, u32 species); -void sub_811AE68(u8 *dst, s32 arg1, u32 playerGender); -void sub_811AECC(u8 *dst, u8 arg1); -s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom * arg3); -bool32 sub_811B0A4(struct UnkStruct_URoom * arg0); -bool32 HasAtLeastTwoMonsOfLevel30OrLower(void); -void ResetUnionRoomTrade(struct UnionRoomTrade * trade); -bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade * trade); -void RegisterTradeMon(u32 monId, struct UnionRoomTrade * trade); -u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade * trade, u8 mpId); -void sub_811B258(bool32 a0); -void sub_811B298(void); -u8 sub_811B2A8(s32 a0); -u8 sub_811B2D8(struct UnkStruct_URoom * arg0); -void sub_811B31C(u8 *dest, struct UnkStruct_URoom * uRoom, bool8 gender); -u8 sub_811B754(struct UnkStruct_8019BA8 * ptr); -void sub_811BA78(void); - -#include "data/union_room.h" +static void sub_8115A68(u8 taskId); +static void sub_81161E4(struct UnkStruct_Leader * leader); +static bool8 sub_8116444(struct UnkStruct_Leader * leader, u32 a1, u32 a2); +static void sub_81164C8(u8 windowId, s32 itemId, u8 y); +static u8 sub_8116524(struct UnkStruct_Main0 * a0); +static u8 sub_81165E8(struct UnkStruct_Main0 * a0); +static void sub_8116738(u8 taskId); +static u32 sub_8116D10(struct UnkStruct_Group * group, s32 id); +static void sub_8116D60(struct UnkStruct_Group * group, s32 id); +static void sub_8116E1C(u8 taskId); +static void sub_8116F94(u8 windowId, s32 itemId, u8 y); +static u8 sub_8116FE4(void); +static void sub_8117990(void); +static void sub_81179A4(void); +static void sub_8117A0C(u8 taskId); +static void sub_8117F20(u8 taskId); +static void sub_81182DC(u8 taskId); +static void sub_81186E0(u8 taskId); +static u16 ReadAsU16(const u8 *data); +static void sub_8119904(struct UnkStruct_URoom * uRoom); +static bool32 sub_8119944(struct UnkStruct_URoom * uRoom); +static void sub_81199FC(u8 taskId); +static u8 sub_8119B94(void); +static u8 sub_8119E84(struct UnkStruct_Main4 * arg0, struct UnkStruct_Main4 * arg1, u32 arg2); +static bool32 sub_8119FB0(struct GFtgtGname * arg0, s16 arg1); +static u8 sub_811A054(struct UnkStruct_Main4 * arg0, u32 arg1); +static u8 sub_811A084(struct UnkStruct_Main4 * arg0, u32 arg1); +static bool32 sub_811A0B4(const u8 * str); +static bool32 sub_811A0E0(void); +static bool8 PrintOnTextbox(u8 *textState, const u8 *str); +static s8 sub_811A14C(u8 *dest, bool32 arg1); +static s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate); +static s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * arg6); +static void sub_811A3F8(void); +static void sub_811A41C(void); +static void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx); +static void sub_811A5E4(struct UnkStruct_x20 * arg0, u8 count); +static void sub_811A650(struct UnkStruct_Main4 * arg0, u8 count); +static bool8 sub_811A694(struct UnkStruct_Shared * arg0, const struct UnkStruct_Shared * arg1); +static bool32 sub_811A6DC(struct UnkStruct_Shared * arg0, struct UnkStruct_Shared * arg1); +static u32 sub_811A748(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1); +static u8 sub_811A798(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1, u8 arg2); +static void sub_811A81C(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * arg3, u8 arg4, u8 id); +static void sub_811A910(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 * arg3, u8 arg4, u8 id); +static bool32 sub_811A9B8(void); +static u32 sub_811A9FC(s32 a0); +static u32 sub_811AA24(struct UnkStruct_x20 * unkX20); +static s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 playerGender); +static void nullsub_92(u8 windowId, s32 itemId, u8 y); +static void sub_811ACA4(u8 windowId, s32 itemId, u8 y); +static s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1); +static s32 sub_811ADC4(s32 a0, struct UnkStruct_Main0 * a1); +static s32 sub_811ADD0(u32 type, u32 species); +static void sub_811AE68(u8 *dst, s32 arg1, u32 playerGender); +static void sub_811AECC(u8 *dst, u8 arg1); +static s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom * arg3); +static bool32 sub_811B0A4(struct UnkStruct_URoom * arg0); +static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void); +static void ResetUnionRoomTrade(struct UnionRoomTrade * trade); +static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade * trade); +static void RegisterTradeMon(u32 monId, struct UnionRoomTrade * trade); +static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade * trade, u8 mpId); +static void sub_811B258(bool32 a0); +static void sub_811B298(void); +static u8 sub_811B2A8(s32 a0); +static u8 sub_811B2D8(struct UnkStruct_URoom * arg0); +static void sub_811B31C(u8 *dest, struct UnkStruct_URoom * uRoom, bool8 gender); + +#define _8456CD8(a, b) ((a) | ((b) << 8)) + +static const u8 *const gUnknown_8456C74[] = { + gUnknown_84571AC, + gUnknown_8459394, + gUnknown_84593A4, + gUnknown_84593B4, + gUnknown_84593C4, + gUnknown_84593D4, + gUnknown_84593E4, + gUnknown_84593F4, + gUnknown_84593DC, + gUnknown_8459400, + gUnknown_8459410, + gUnknown_845941C, + gUnknown_845942C, + gUnknown_8459434, + gUnknown_8459440, + gUnknown_84571AC, + gUnknown_84571AC, + gUnknown_84571AC, + gUnknown_84571AC, + gUnknown_84571AC, + gUnknown_84571AC, + gUnknown_84593E4, + gUnknown_84593F4 +}; + +static const struct WindowTemplate gUnknown_8456CD0 = { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 30, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x008 +}; + +static const u32 gUnknown_8456CD8[] = { + _8456CD8( 1, 2), + _8456CD8( 2, 2), + _8456CD8( 3, 4), + _8456CD8( 4, 2), + _8456CD8( 9, 37), + _8456CD8(10, 37), + _8456CD8(11, 53), + _8456CD8(13, 53), + _8456CD8(14, 53) +}; + +static const struct WindowTemplate gUnknown_8456CFC = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 13, + .height = 10, + .paletteNum = 15, + .baseBlock = 0x044 +}; + +static const struct WindowTemplate gUnknown_8456D04 = { + .bg = 0, + .tilemapLeft = 16, + .tilemapTop = 3, + .width = 7, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x0C6 +}; + +const struct ListMenuItem gUnknown_8456D0C[] = { + {gUnknown_84571AC, 0}, + {gUnknown_84571AC, 1}, + {gUnknown_84571AC, 2}, + {gUnknown_84571AC, 3}, + {gUnknown_84571AC, 4} +}; + +static const struct ListMenuTemplate gUnknown_8456D34 = { + .items = gUnknown_8456D0C, + .moveCursorFunc = NULL, + .itemPrintFunc = sub_81164C8, + .totalItems = 5, + .maxShowed = 5, + .windowId = 0, + .header_X = 0, + .item_X = 1, + .cursor_X = 0, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 2, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = 2, + .cursorKind = 1 +}; + +static const struct WindowTemplate gUnknown_8456D4C = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 17, + .height = 10, + .paletteNum = 15, + .baseBlock = 0x044 +}; + +static const struct WindowTemplate gUnknown_8456D54 = { + .bg = 0, + .tilemapLeft = 20, + .tilemapTop = 3, + .width = 7, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x0EE +}; + +static const struct ListMenuItem gUnknown_8456D5C[] = { + {gUnknown_84571AC, 0}, + {gUnknown_84571AC, 1}, + {gUnknown_84571AC, 2}, + {gUnknown_84571AC, 3}, + {gUnknown_84571AC, 4}, + {gUnknown_84571AC, 5}, + {gUnknown_84571AC, 6}, + {gUnknown_84571AC, 7}, + {gUnknown_84571AC, 8}, + {gUnknown_84571AC, 9}, + {gUnknown_84571AC, 10}, + {gUnknown_84571AC, 11}, + {gUnknown_84571AC, 12}, + {gUnknown_84571AC, 13}, + {gUnknown_84571AC, 14}, + {gUnknown_84571AC, 15} +}; + +static const struct ListMenuTemplate gUnknown_8456DDC = { + .items = gUnknown_8456D5C, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = sub_8116F94, + .totalItems = 16, + .maxShowed = 5, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 2, + .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, + .fontId = 2, + .cursorKind = 0 +}; + +static const struct WindowTemplate gUnknown_8456DF4 = { + .bg = 0, + .tilemapLeft = 20, + .tilemapTop = 6, + .width = 8, + .height = 7, + .paletteNum = 15, + .baseBlock = 0x001 +}; + +static const struct ListMenuItem gUnknown_8456DFC[] = { + {gUnknown_8459354, _8456CD8( 8, 2)}, + {gUnknown_8459344, _8456CD8(65, 2)}, + {gUnknown_845934C, _8456CD8(69, 2)}, + {gUnknown_8459360, _8456CD8(64, 0)} +}; + +static const struct ListMenuTemplate gUnknown_8456E1C = { + .items = gUnknown_8456DFC, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 4, + .maxShowed = 4, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .itemVerticalPadding = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = 2, + .cursorKind = 0 +}; + +static const struct WindowTemplate gUnknown_8456E34 = { + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 8, + .width = 11, + .height = 5, + .paletteNum = 15, + .baseBlock = 0x001 +}; + +static const struct ListMenuItem gUnknown_8456E3C[] = { + {gText_Register, 1}, + {gUnknown_8459370, 2}, + {gUnknown_8459360, 3} +}; + +static const struct ListMenuTemplate gUnknown_8456E54 = { + .items = gUnknown_8456E3C, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 3, + .maxShowed = 3, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .itemVerticalPadding = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = 2, + .cursorKind = 0 +}; + +static const struct WindowTemplate gUnknown_8456E6C = { + .bg = 0, + .tilemapLeft = 20, + .tilemapTop = 2, + .width = 9, + .height = 11, + .paletteNum = 15, + .baseBlock = 0x001 +}; + +static const struct ListMenuItem gUnknown_8456E74[] = { + {gTypeNames[TYPE_NORMAL], TYPE_NORMAL}, + {gTypeNames[TYPE_FIRE], TYPE_FIRE}, + {gTypeNames[TYPE_WATER], TYPE_WATER}, + {gTypeNames[TYPE_ELECTRIC], TYPE_ELECTRIC}, + {gTypeNames[TYPE_GRASS], TYPE_GRASS}, + {gTypeNames[TYPE_ICE], TYPE_ICE}, + {gTypeNames[TYPE_GROUND], TYPE_GROUND}, + {gTypeNames[TYPE_ROCK], TYPE_ROCK}, + {gTypeNames[TYPE_FLYING], TYPE_FLYING}, + {gTypeNames[TYPE_PSYCHIC], TYPE_PSYCHIC}, + {gTypeNames[TYPE_FIGHTING], TYPE_FIGHTING}, + {gTypeNames[TYPE_POISON], TYPE_POISON}, + {gTypeNames[TYPE_BUG], TYPE_BUG}, + {gTypeNames[TYPE_GHOST], TYPE_GHOST}, + {gTypeNames[TYPE_DRAGON], TYPE_DRAGON}, + {gTypeNames[TYPE_STEEL], TYPE_STEEL}, + {gTypeNames[TYPE_DARK], TYPE_DARK}, + {gUnknown_8459360, NUMBER_OF_MON_TYPES} +}; + +static const struct ListMenuTemplate gUnknown_8456F04 = { + .items = gUnknown_8456E74, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = NUMBER_OF_MON_TYPES, + .maxShowed = 6, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 2, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .itemVerticalPadding = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = 2, + .cursorKind = 0 +}; + +static const struct WindowTemplate gUnknown_8456F1C = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 28, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x001 +}; + +static const struct WindowTemplate gUnknown_8456F24 = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 5, + .width = 28, + .height = 10, + .paletteNum = 13, + .baseBlock = 0x039 +}; + +static const struct ListMenuItem gUnknown_8456F2C[] = { + {gUnknown_84571AC, -3}, + {gUnknown_84571AC, 0}, + {gUnknown_84571AC, 1}, + {gUnknown_84571AC, 2}, + {gUnknown_84571AC, 3}, + {gUnknown_84571AC, 4}, + {gUnknown_84571AC, 5}, + {gUnknown_84571AC, 6}, + {gUnknown_84571AC, 7}, + {gUnknown_8459368, 8} +}; + +static const struct ListMenuTemplate gUnknown_8456F7C = { + .items = gUnknown_8456F2C, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = sub_811ACA4, + .totalItems = 10, + .maxShowed = 5, + .windowId = 0, + .header_X = 0, + .item_X = 12, + .cursor_X = 0, + .upText_Y = 2, + .cursorPal = 14, + .fillValue = 15, + .cursorShadowPal = 13, + .lettersSpacing = 1, + .itemVerticalPadding = 1, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = 2, + .cursorKind = 0 +}; + +static const struct WindowTemplate gUnknown_8456F94 = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 5, + .width = 28, + .height = 10, + .paletteNum = 13, + .baseBlock = 0x039 +}; + +static const struct ListMenuItem gUnknown_8456F9C[] = { + {gUnknown_84571AC, 0}, + {gUnknown_84571AC, 1}, + {gUnknown_84571AC, 2}, + {gUnknown_84571AC, 3}, + {gUnknown_84571AC, 4}, + {gUnknown_84571AC, 5}, + {gUnknown_84571AC, 6}, + {gUnknown_84571AC, 7}, + {gUnknown_84571AC, 8}, + {gUnknown_84571AC, 9}, + {gUnknown_84571AC, 10}, + {gUnknown_84571AC, 11}, + {gUnknown_84571AC, 12}, + {gUnknown_84571AC, 13}, + {gUnknown_84571AC, 14}, + {gUnknown_84571AC, 15} +}; + +static const struct ListMenuTemplate gUnknown_845701C = { + .items = gUnknown_8456F9C, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = nullsub_92, + .totalItems = 16, + .maxShowed = 4, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 1, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .itemVerticalPadding = 0, + .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, + .fontId = 2, + .cursorKind = 0 +}; + +static const struct UnkStruct_Shared gUnknown_8457034 = {}; + +// starts at gUnknown_082F0474 in pokeemerald, union link groups + +ALIGNED(4) static const u8 gUnknown_845704C[] = {0x01, 0xFF}; +ALIGNED(4) static const u8 gUnknown_8457050[] = {0x02, 0xFF}; +ALIGNED(4) static const u8 gUnknown_8457054[] = {0x03, 0xFF}; +ALIGNED(4) static const u8 gUnknown_8457058[] = {0x04, 0xFF}; +ALIGNED(4) static const u8 gUnknown_845705C[] = {0x09, 0xFF}; +ALIGNED(4) static const u8 gUnknown_8457060[] = {0x0A, 0xFF}; +ALIGNED(4) static const u8 gUnknown_8457064[] = {0x0B, 0xFF}; +ALIGNED(4) static const u8 gUnknown_8457068[] = {0x15, 0xFF}; +ALIGNED(4) static const u8 gUnknown_845706C[] = {0x16, 0xFF}; +ALIGNED(4) static const u8 gUnknown_8457070[] = {0x40, 0x41, 0x44, 0x45, 0x48, 0x51, 0x52, 0x53, 0x54, 0xFF}; +ALIGNED(4) static const u8 gUnknown_845707C[] = {0x0C, 0xFF}; +ALIGNED(4) static const u8 gUnknown_8457080[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0A, 0x0B, 0x15, 0x16, 0x0D, 0xFF}; +ALIGNED(4) static const u8 gUnknown_845708C[] = {0x01, 0x02, 0x03, 0x04, 0x0A, 0xFF}; + +static const u8 *const gUnknown_8457094[] = { + gUnknown_845704C, + gUnknown_8457050, + gUnknown_8457054, + gUnknown_8457058, + gUnknown_845705C, + gUnknown_8457060, + gUnknown_8457064, + gUnknown_8457068, + gUnknown_845706C, + gUnknown_8457070, + gUnknown_845707C, + gUnknown_8457080, + gUnknown_845708C +}; + +static const u8 gUnknown_84570C8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0A, 0x0B, 0x15, 0x16, 0xF7, 0x00, 0xAF, 0xF7, 0x01, 0xFF, 0x00}; + +#undef _8456CD8 // These are functions in Emerald but inlined in FireRed @@ -154,7 +578,7 @@ void sub_811BA78(void); _maxWidth - strWidth; \ }) -void sub_811586C(u8 windowId, u8 arg1, u8 stringId) +static void sub_811586C(u8 windowId, u8 arg1, u8 stringId) { FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); switch (arg1 << 8) @@ -176,7 +600,7 @@ void sub_811586C(u8 windowId, u8 arg1, u8 stringId) CopyWindowToVram(windowId, 2); } -void sub_8115924(u8 windowId) +static void sub_8115924(u8 windowId) { u8 text[12]; u8 text2[12]; @@ -188,7 +612,7 @@ void sub_8115924(u8 windowId) sub_811A444(windowId, 0, text2, 0, 0x10, 0); } -void sub_811599C(u8 *dst, u8 caseId) +static void sub_811599C(u8 *dst, u8 caseId) { switch (caseId) { @@ -215,7 +639,7 @@ void TryBecomeLinkLeader(void) gSpecialVar_Result = 0; } -void sub_8115A68(u8 taskId) +static void sub_8115A68(u8 taskId) { u32 id, val; struct UnkStruct_Leader * data = sUnionRoomMain.leader; @@ -514,7 +938,7 @@ void sub_8115A68(u8 taskId) } } -void sub_81161E4(struct UnkStruct_Leader * data) +static void sub_81161E4(struct UnkStruct_Leader * data) { ClearWindowTilemap(data->field_11); ClearStdWindowAndFrame(data->field_11, FALSE); @@ -532,7 +956,7 @@ void sub_81161E4(struct UnkStruct_Leader * data) Free(data->field_4); } -void sub_8116244(u8 *dst, u8 caseId) +static void sub_8116244(u8 *dst, u8 caseId) { switch (caseId) { @@ -554,7 +978,7 @@ void sub_8116244(u8 *dst, u8 caseId) } } -void sub_81162E0(u8 *dst, u8 caseId) +static void sub_81162E0(u8 *dst, u8 caseId) { switch (caseId) { @@ -569,7 +993,7 @@ void sub_81162E0(u8 *dst, u8 caseId) } } -void sub_811631C(u8 *dst, u8 caseId) +static void sub_811631C(u8 *dst, u8 caseId) { switch (caseId) { @@ -589,7 +1013,7 @@ void sub_811631C(u8 *dst, u8 caseId) } } -void sub_81163B0(u8 *dst, u8 caseId) +static void sub_81163B0(u8 *dst, u8 caseId) { switch (caseId) { @@ -609,7 +1033,7 @@ void sub_81163B0(u8 *dst, u8 caseId) } } -bool8 sub_8116444(struct UnkStruct_Leader * data, u32 arg1, u32 arg2) +static bool8 sub_8116444(struct UnkStruct_Leader * data, u32 arg1, u32 arg2) { switch (sub_8116524(data->field_0)) { @@ -630,7 +1054,7 @@ bool8 sub_8116444(struct UnkStruct_Leader * data, u32 arg1, u32 arg2) return FALSE; } -void sub_81164C8(u8 windowId, s32 itemId, u8 y) +static void sub_81164C8(u8 windowId, s32 itemId, u8 y) { struct UnkStruct_Leader * data = sUnionRoomMain.leader; u8 var = 0; @@ -649,7 +1073,7 @@ void sub_81164C8(u8 windowId, s32 itemId, u8 y) sub_811A910(windowId, 0, y, &data->field_0->arr[itemId], var, itemId); } -u8 sub_8116524(struct UnkStruct_Main0 * arg0) +static u8 sub_8116524(struct UnkStruct_Main0 * arg0) { struct UnkStruct_Leader * data = sUnionRoomMain.leader; u8 ret = 0; @@ -690,7 +1114,7 @@ u8 sub_8116524(struct UnkStruct_Main0 * arg0) return ret; } -u8 sub_81165E8(struct UnkStruct_Main0 * arg0) +static u8 sub_81165E8(struct UnkStruct_Main0 * arg0) { struct UnkStruct_Leader * data = sUnionRoomMain.leader; u8 copiedCount; @@ -748,7 +1172,7 @@ void TryJoinLinkGroup(void) gSpecialVar_Result = 0; } -void sub_8116738(u8 taskId) +static void sub_8116738(u8 taskId) { s32 id; struct UnkStruct_Group * data = sUnionRoomMain.group; @@ -991,7 +1415,7 @@ void sub_8116738(u8 taskId) } } -u32 sub_8116D10(struct UnkStruct_Group * arg0, s32 id) +static u32 sub_8116D10(struct UnkStruct_Group * arg0, s32 id) { struct UnkStruct_x20 * structPtr = &arg0->field_0->arr[id]; @@ -1010,7 +1434,7 @@ u32 sub_8116D10(struct UnkStruct_Group * arg0, s32 id) return 2; } -void sub_8116D60(struct UnkStruct_Group * data, s32 id) +static void sub_8116D60(struct UnkStruct_Group * data, s32 id) { data->field_F = id; LoadWirelessStatusIndicatorSpriteGfx(); @@ -1037,7 +1461,7 @@ u8 sub_8116DE0(void) return taskId; } -void sub_8116E1C(u8 taskId) +static void sub_8116E1C(u8 taskId) { struct UnkStruct_Group * data = sUnionRoomMain.group; @@ -1080,7 +1504,7 @@ void sub_8116E1C(u8 taskId) } } -bool32 sub_8116F28(u32 arg0, u32 id) +static bool32 sub_8116F28(u32 arg0, u32 id) { if (id == 0xFF) return TRUE; @@ -1100,7 +1524,7 @@ bool32 sub_8116F28(u32 arg0, u32 id) return FALSE; } -u8 sub_8116F5C(struct UnkStruct_Group * data, u32 id) +static u8 sub_8116F5C(struct UnkStruct_Group * data, u32 id) { if (data->field_0->arr[id].field_1A_0 == 1) { @@ -1115,7 +1539,7 @@ u8 sub_8116F5C(struct UnkStruct_Group * data, u32 id) return 0; } -void sub_8116F94(u8 windowId, s32 itemId, u8 y) +static void sub_8116F94(u8 windowId, s32 itemId, u8 y) { struct UnkStruct_Group * data = sUnionRoomMain.group; u8 var = sub_8116F5C(data, itemId); @@ -1123,7 +1547,7 @@ void sub_8116F94(u8 windowId, s32 itemId, u8 y) sub_811A81C(windowId, 8, y, &data->field_0->arr[itemId], var, itemId); } -u8 sub_8116FE4(void) +static u8 sub_8116FE4(void) { struct UnkStruct_Group * data = sUnionRoomMain.group; u8 ret = 0; @@ -1188,7 +1612,7 @@ u8 sub_8116FE4(void) return ret; } -void sub_8117100(u8 taskId) +static void sub_8117100(u8 taskId) { CB2_ReturnFromLinkTrade(); DestroyTask(taskId); @@ -1201,7 +1625,7 @@ u8 sub_8117118(void) return taskId; } -void sub_8117130(u8 taskId) +static void sub_8117130(u8 taskId) { u32 monId = GetPartyPositionOfRegisteredMon(&sUnionRoomTrade, GetMultiplayerId()); @@ -1241,7 +1665,7 @@ void sub_8117130(u8 taskId) } } -void sub_8117280(u8 taskId) +static void sub_8117280(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -1279,7 +1703,7 @@ void sub_8117280(u8 taskId) } } -void sub_8117354(void) +static void sub_8117354(void) { switch (gMain.state) { @@ -1312,7 +1736,7 @@ void sub_81173C0(u16 battleFlags) PlayBattleBGM(); } -void sub_8117440(u16 linkService, u16 x, u16 y) +static void sub_8117440(u16 linkService, u16 x, u16 y) { VarSet(VAR_CABLE_CLUB_STATE, linkService); SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y); @@ -1320,7 +1744,7 @@ void sub_8117440(u16 linkService, u16 x, u16 y) WarpIntoMap(); } -void sub_81174B4(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService) +static void sub_81174B4(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService) { gSpecialVar_0x8004 = linkService; VarSet(VAR_CABLE_CLUB_STATE, linkService); @@ -1331,7 +1755,7 @@ void sub_81174B4(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService) WarpIntoMap(); } -void sub_8117534(void) +static void sub_8117534(void) { switch (gMain.state) { @@ -1351,7 +1775,7 @@ void sub_8117534(void) BuildOamBuffer(); } -void sub_8117594(void *arg0, bool32 arg1) +static void sub_8117594(void *arg0, bool32 arg1) { TrainerCard_GenerateCardForLinkPlayer((struct TrainerCard * )arg0); if (arg1) @@ -1360,7 +1784,7 @@ void sub_8117594(void *arg0, bool32 arg1) *((u16 *)(arg0 + sizeof(struct TrainerCard))) = 0; } -void sub_81175BC(u8 taskId) +static void sub_81175BC(u8 taskId) { sub_81446C4(); switch (gUnknown_203B058) @@ -1454,7 +1878,7 @@ void sub_81175BC(u8 taskId) ScriptContext2_Disable(); } -void sub_8117900(u8 taskId) +static void sub_8117900(u8 taskId) { s16 *data = gTasks[taskId].data; u16 *sendBuff = (u16*)(gBlockSendBuffer); @@ -1490,12 +1914,12 @@ void sub_8117900(u8 taskId) } } -void sub_8117990(void) +static void sub_8117990(void) { CreateTask(sub_8117900, 0); } -void sub_81179A4(void) +static void sub_81179A4(void) { u8 taskId = CreateTask(sub_81175BC, 0); gTasks[taskId].data[0] = 0; @@ -1515,7 +1939,7 @@ void MEvent_CreateTask_Leader(u32 arg0) gSpecialVar_Result = 0; } -void sub_8117A0C(u8 taskId) +static void sub_8117A0C(u8 taskId) { struct UnkStruct_Leader * data = sUnionRoomMain.leader; struct WindowTemplate winTemplate; @@ -1723,7 +2147,7 @@ void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0) gSpecialVar_Result = 0; } -void sub_8117F20(u8 taskId) +static void sub_8117F20(u8 taskId) { s32 id; struct WindowTemplate winTemplate1, winTemplate2; @@ -1889,7 +2313,7 @@ void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0) gSpecialVar_Result = 0; } -void sub_81182DC(u8 taskId) +static void sub_81182DC(u8 taskId) { s32 id; struct WindowTemplate winTemplate; @@ -2076,12 +2500,12 @@ void UnionRoomSpecial(void) sub_8107D38(0xD0, 1); } -u16 ReadAsU16(const u8 *ptr) +static u16 ReadAsU16(const u8 *ptr) { return (ptr[1] << 8) | (ptr[0]); } -void sub_8118664(u32 nextState, const u8 *src) +static void sub_8118664(u32 nextState, const u8 *src) { struct UnkStruct_URoom * data = sUnionRoomMain.uRoom; @@ -2091,7 +2515,7 @@ void sub_8118664(u32 nextState, const u8 *src) StringExpandPlaceholders(gStringVar4, src); } -void sub_811868C(const u8 *src) +static void sub_811868C(const u8 *src) { struct UnkStruct_URoom * data = sUnionRoomMain.uRoom; @@ -2100,17 +2524,17 @@ void sub_811868C(const u8 *src) StringExpandPlaceholders(gStringVar4, src); } -void sub_81186B0(struct UnkStruct_URoom * data) +static void sub_81186B0(struct UnkStruct_URoom * data) { memcpy(&gDecompressionBuffer[0x3F00], data->field_0, sizeof(*data->field_0)); } -void sub_81186C8(struct UnkStruct_URoom * data) +static void sub_81186C8(struct UnkStruct_URoom * data) { memcpy(data->field_0, &gDecompressionBuffer[0x3F00], sizeof(*data->field_0)); } -void sub_81186E0(u8 taskId) +static void sub_81186E0(u8 taskId) { u32 id = 0; s32 var5 = 0; @@ -2866,7 +3290,7 @@ void var_800D_set_xB(void) gSpecialVar_Result = 11; } -void sub_8119904(struct UnkStruct_URoom * arg0) +static void sub_8119904(struct UnkStruct_URoom * arg0) { if (gRecvCmds[1][1] != 0 && (gRecvCmds[1][0] & 0xFF00) == 0x2F00) { @@ -2879,7 +3303,7 @@ void sub_8119904(struct UnkStruct_URoom * arg0) } } -bool32 sub_8119944(struct UnkStruct_URoom * arg0) +static bool32 sub_8119944(struct UnkStruct_URoom * arg0) { if (arg0->field_9A[0] != 0) { @@ -2923,7 +3347,7 @@ void InitUnionRoom(void) sUnionRoomPlayerName[0] = EOS; } -void sub_81199FC(u8 taskId) +static void sub_81199FC(u8 taskId) { s32 i; u8 text[32]; @@ -3006,7 +3430,7 @@ bool16 BufferUnionRoomPlayerName(void) } } -u8 sub_8119B94(void) +static u8 sub_8119B94(void) { s32 i; u8 j; @@ -3082,7 +3506,7 @@ u8 sub_8119B94(void) return r7; } -void sub_8119D34(u8 taskId) +static void sub_8119D34(u8 taskId) { s32 i, j; struct UnkStruct_Shared sp0; @@ -3120,7 +3544,7 @@ void sub_8119D34(u8 taskId) } } -u8 sub_8119E84(struct UnkStruct_Main4 * a0, struct UnkStruct_Main4 * a1, u32 a2) +static u8 sub_8119E84(struct UnkStruct_Main4 * a0, struct UnkStruct_Main4 * a1, u32 a2) { u8 taskId = CreateTask(sub_8119D34, 0); struct UnkStruct_Main4 ** data = (void *)gTasks[taskId].data; @@ -3130,7 +3554,7 @@ u8 sub_8119E84(struct UnkStruct_Main4 * a0, struct UnkStruct_Main4 * a1, u32 a2) return taskId; } -void sub_8119EB8(u8 taskId) +static void sub_8119EB8(u8 taskId) { s32 i, j; struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; @@ -3153,7 +3577,7 @@ void sub_8119EB8(u8 taskId) } } -bool32 sub_8119FB0(struct GFtgtGname *arg0, s16 arg1) +static bool32 sub_8119FB0(struct GFtgtGname *arg0, s16 arg1) { if (arg1 == 7) { @@ -3183,7 +3607,7 @@ bool32 sub_8119FB0(struct GFtgtGname *arg0, s16 arg1) } } -void sub_8119FD8(u8 taskId) +static void sub_8119FD8(u8 taskId) { s32 i; struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; @@ -3198,7 +3622,7 @@ void sub_8119FD8(u8 taskId) } } -u8 sub_811A054(struct UnkStruct_Main4 * a0, u32 a1) +static u8 sub_811A054(struct UnkStruct_Main4 * a0, u32 a1) { u8 taskId = CreateTask(sub_8119EB8, 0); struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; @@ -3207,7 +3631,7 @@ u8 sub_811A054(struct UnkStruct_Main4 * a0, u32 a1) return taskId; } -u8 sub_811A084(struct UnkStruct_Main4 * a0, u32 a1) +static u8 sub_811A084(struct UnkStruct_Main4 * a0, u32 a1) { u8 taskId = CreateTask(sub_8119FD8, 0); struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; @@ -3216,7 +3640,7 @@ u8 sub_811A084(struct UnkStruct_Main4 * a0, u32 a1) return taskId; } -bool32 sub_811A0B4(const u8 *src) +static bool32 sub_811A0B4(const u8 *src) { LoadStdWindowFrameGfx(); DrawDialogueFrame(0, 1); @@ -3225,7 +3649,7 @@ bool32 sub_811A0B4(const u8 *src) return FALSE; } -bool32 sub_811A0E0(void) +static bool32 sub_811A0E0(void) { if (!RunTextPrinters_CheckPrinter0Active()) { @@ -3237,7 +3661,7 @@ bool32 sub_811A0E0(void) } } -bool8 PrintOnTextbox(u8 *textState, const u8 *str) +static bool8 PrintOnTextbox(u8 *textState, const u8 *str) { switch (*textState) { @@ -3259,7 +3683,7 @@ bool8 PrintOnTextbox(u8 *textState, const u8 *str) return FALSE; } -s8 sub_811A14C(u8 *arg0, bool32 arg1) +static s8 sub_811A14C(u8 *arg0, bool32 arg1) { s8 r1; @@ -3291,7 +3715,7 @@ s8 sub_811A14C(u8 *arg0, bool32 arg1) return -2; } -u8 sub_811A1AC(const struct WindowTemplate * template) +static u8 sub_811A1AC(const struct WindowTemplate * template) { u8 windowId = AddWindow(template); DrawStdWindowFrame(windowId, FALSE); @@ -3302,13 +3726,13 @@ u8 sub_811A1AC(const struct WindowTemplate * template) return windowId; } -void sub_811A1FC(u8 windowId) +static void sub_811A1FC(u8 windowId) { ClearStdWindowAndFrame(windowId, TRUE); RemoveWindow(windowId); } -s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate) +static s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate) { s32 r1, r8; @@ -3347,7 +3771,7 @@ s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTe return -1; } -s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6) +static s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6) { s32 input; s32 r4; @@ -3401,20 +3825,20 @@ s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTempl return -1; } -void sub_811A3F8(void) +static void sub_811A3F8(void) { FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0); CopyBgTilemapBufferToVram(0); } -void sub_811A41C(void) +static void sub_811A41C(void) { FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0); CopyBgTilemapBufferToVram(0); EnableBothScriptContexts(); } -void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx) +static void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx) { struct TextPrinterTemplate printerTemplate; @@ -3484,7 +3908,7 @@ void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx) AddTextPrinter(&printerTemplate, 0xFF, NULL); } -void sub_811A5E4(struct UnkStruct_x20 *arg0, u8 count) +static void sub_811A5E4(struct UnkStruct_x20 *arg0, u8 count) { s32 i; @@ -3498,7 +3922,7 @@ void sub_811A5E4(struct UnkStruct_x20 *arg0, u8 count) } } -void sub_811A650(struct UnkStruct_Main4 *arg0, u8 count) +static void sub_811A650(struct UnkStruct_Main4 *arg0, u8 count) { s32 i; @@ -3509,7 +3933,7 @@ void sub_811A650(struct UnkStruct_Main4 *arg0, u8 count) } } -bool8 sub_811A694(struct UnkStruct_Shared* arg0, const struct UnkStruct_Shared* arg1) +static bool8 sub_811A694(struct UnkStruct_Shared* arg0, const struct UnkStruct_Shared* arg1) { s32 i; @@ -3532,7 +3956,7 @@ bool8 sub_811A694(struct UnkStruct_Shared* arg0, const struct UnkStruct_Shared* return FALSE; } -bool32 sub_811A6DC(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared *arg1) +static bool32 sub_811A6DC(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared *arg1) { s32 i; @@ -3567,7 +3991,7 @@ bool32 sub_811A6DC(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared *arg1) return FALSE; } -u32 sub_811A748(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1) +static u32 sub_811A748(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1) { u8 result = 0xFF; s32 i; @@ -3584,7 +4008,7 @@ u32 sub_811A748(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1) return result; } -u8 sub_811A798(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2) +static u8 sub_811A798(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2) { s32 i; @@ -3607,7 +4031,7 @@ u8 sub_811A798(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2) return 0xFF; } -void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id) +static void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id) { u8 r2; u8 sp0[6]; @@ -3630,7 +4054,7 @@ void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, } } -void sub_811A910(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 *arg3, u8 arg4, u8 id) +static void sub_811A910(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 *arg3, u8 arg4, u8 id) { u8 sp0[6]; u8 sp10[30]; @@ -3647,7 +4071,7 @@ void sub_811A910(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 *arg3, u8 arg4, u } } -bool32 sub_811A9B8(void) +static bool32 sub_811A9B8(void) { s16 x, y; GetXYCoordsOneStepInFrontOfPlayer(&x, &y); @@ -3667,7 +4091,7 @@ bool32 sub_811A9B8(void) return FALSE; } -u32 sub_811A9FC(s32 arg0) +static u32 sub_811A9FC(s32 arg0) { switch (arg0) { @@ -3683,14 +4107,14 @@ u32 sub_811A9FC(s32 arg0) } } -u32 sub_811AA24(struct UnkStruct_x20 *arg0) +static u32 sub_811AA24(struct UnkStruct_x20 *arg0) { u8 sp0[30]; IntlConvPartnerUname(sp0, *arg0); return sub_80FD338(ReadAsU16(arg0->unk.field_0.unk_00.playerTrainerId), sp0); } -s32 sub_811AA5C(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender) +static s32 sub_811AA5C(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender) { bool32 r2; @@ -3740,12 +4164,12 @@ s32 sub_811AA5C(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender } } -void nullsub_92(u8 windowId, s32 itemId, u8 y) +static void nullsub_92(u8 windowId, s32 itemId, u8 y) { } -void sub_811ABE4(u8 windowId, u8 y, struct GFtgtGname * gname, const u8 * uname, u8 colorIdx) +static void sub_811ABE4(u8 windowId, u8 y, struct GFtgtGname * gname, const u8 * uname, u8 colorIdx) { u8 level_t[4]; u16 species = gname->species; @@ -3766,7 +4190,7 @@ void sub_811ABE4(u8 windowId, u8 y, struct GFtgtGname * gname, const u8 * uname, } } -void sub_811ACA4(u8 windowId, s32 itemId, u8 y) +static void sub_811ACA4(u8 windowId, s32 itemId, u8 y) { struct UnkStruct_Leader *leader = sUnionRoomMain.leader; struct GFtgtGname *rfu; @@ -3800,7 +4224,7 @@ void sub_811ACA4(u8 windowId, s32 itemId, u8 y) } } -s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1) +static s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1) { s32 i; s32 j = 0; @@ -3820,12 +4244,12 @@ s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1) return -1; } -s32 sub_811ADC4(s32 arg1, struct UnkStruct_Main0 *arg0) +static s32 sub_811ADC4(s32 arg1, struct UnkStruct_Main0 *arg0) { return arg0->arr[arg1].unk.field_0.playerGender; } -s32 sub_811ADD0(u32 type, u32 species) +static s32 sub_811ADD0(u32 type, u32 species) { s32 i; @@ -3855,7 +4279,7 @@ s32 sub_811ADD0(u32 type, u32 species) } } -void sub_811AE68(u8 *dst, s32 arg1, u32 playerGender) +static void sub_811AE68(u8 *dst, s32 arg1, u32 playerGender) { switch (arg1) { @@ -3874,7 +4298,7 @@ void sub_811AE68(u8 *dst, s32 arg1, u32 playerGender) } } -void sub_811AECC(u8 *dst, u8 arg1) +static void sub_811AECC(u8 *dst, u8 arg1) { u8 mpId = GetMultiplayerId(); u8 gender = gLinkPlayers[mpId ^ 1].gender; @@ -3893,7 +4317,7 @@ void sub_811AECC(u8 *dst, u8 arg1) } } -s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3) +static s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3) { s32 result = 0; u16 species = SPECIES_NONE; @@ -3949,7 +4373,7 @@ s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3) return result; } -bool32 sub_811B0A4(struct UnkStruct_URoom *arg0) +static bool32 sub_811B0A4(struct UnkStruct_URoom *arg0) { if (gRecvCmds[0][1] != 0) { @@ -3974,7 +4398,7 @@ bool32 InUnionRoom(void) ? TRUE : FALSE; } -bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) +static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) { s32 i; s32 count = 0; @@ -3994,7 +4418,7 @@ bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) return FALSE; } -void ResetUnionRoomTrade(struct UnionRoomTrade *arg0) +static void ResetUnionRoomTrade(struct UnionRoomTrade *arg0) { arg0->field_0 = 0; arg0->type = 0; @@ -4011,7 +4435,7 @@ void Script_ResetUnionRoomTrade(void) ResetUnionRoomTrade(&sUnionRoomTrade); } -bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trade) +static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trade) { trade->playerSpecies = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); trade->playerLevel = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); @@ -4022,14 +4446,14 @@ bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trade) return FALSE; } -void RegisterTradeMon(u32 monId, struct UnionRoomTrade *trade) +static void RegisterTradeMon(u32 monId, struct UnionRoomTrade *trade) { trade->species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); trade->level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); trade->personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); } -u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *trade, u8 multiplayerId) +static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *trade, u8 multiplayerId) { u16 response = 0; u16 species; @@ -4070,7 +4494,7 @@ u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *trade, u8 multiplayer return response; } -void sub_811B258(bool32 arg0) +static void sub_811B258(bool32 arg0) { sub_811A3F8(); ScriptContext2_Disable(); @@ -4083,13 +4507,13 @@ void sub_811B258(bool32 arg0) } } -void sub_811B298(void) +static void sub_811B298(void) { ScriptContext2_Enable(); ScriptFreezeObjectEvents(); } -u8 sub_811B2A8(s32 linkPlayer) +static u8 sub_811B2A8(s32 linkPlayer) { u8 retval = 0x80; retval |= gLinkPlayers[linkPlayer].gender << 3; @@ -4097,7 +4521,7 @@ u8 sub_811B2A8(s32 linkPlayer) return retval; } -u8 sub_811B2D8(struct UnkStruct_URoom *arg0) +static u8 sub_811B2D8(struct UnkStruct_URoom *arg0) { u8 retVal = 0x80; u8 i; @@ -4115,7 +4539,7 @@ u8 sub_811B2D8(struct UnkStruct_URoom *arg0) return retVal; } -void sub_811B31C(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2) +static void sub_811B31C(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2) { struct TrainerCard *trainerCard = &gTrainerCards[GetMultiplayerId() ^ 1]; s32 i; -- cgit v1.2.3 From 13eaf1b6cc58fc2aa1ce133461f2d076a43a0830 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 Jan 2020 10:22:03 -0500 Subject: Fix pointer space style --- src/union_room.c | 60 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index 8626b14d5..a6aeea1c7 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -3510,7 +3510,7 @@ static void sub_8119D34(u8 taskId) { s32 i, j; struct UnkStruct_Shared sp0; - struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + struct UnkStruct_Main4 ** ptr = (void*) gTasks[taskId].data; bool8 r4; for (i = 0; i < 4; i++) @@ -3557,7 +3557,7 @@ static u8 sub_8119E84(struct UnkStruct_Main4 * a0, struct UnkStruct_Main4 * a1, static void sub_8119EB8(u8 taskId) { s32 i, j; - struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + struct UnkStruct_Main4 ** ptr = (void*) gTasks[taskId].data; for (i = 0; i < 4; i++) { @@ -3577,7 +3577,7 @@ static void sub_8119EB8(u8 taskId) } } -static bool32 sub_8119FB0(struct GFtgtGname *arg0, s16 arg1) +static bool32 sub_8119FB0(struct GFtgtGname * arg0, s16 arg1) { if (arg1 == 7) { @@ -3610,7 +3610,7 @@ static bool32 sub_8119FB0(struct GFtgtGname *arg0, s16 arg1) static void sub_8119FD8(u8 taskId) { s32 i; - struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + struct UnkStruct_Main4 ** ptr = (void*) gTasks[taskId].data; for (i = 0; i < 4; i++) { @@ -3625,7 +3625,7 @@ static void sub_8119FD8(u8 taskId) static u8 sub_811A054(struct UnkStruct_Main4 * a0, u32 a1) { u8 taskId = CreateTask(sub_8119EB8, 0); - struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + struct UnkStruct_Main4 ** ptr = (void*) gTasks[taskId].data; ptr[0] = a0; gTasks[taskId].data[2] = a1; return taskId; @@ -3634,7 +3634,7 @@ static u8 sub_811A054(struct UnkStruct_Main4 * a0, u32 a1) static u8 sub_811A084(struct UnkStruct_Main4 * a0, u32 a1) { u8 taskId = CreateTask(sub_8119FD8, 0); - struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + struct UnkStruct_Main4 ** ptr = (void*) gTasks[taskId].data; ptr[0] = a0; gTasks[taskId].data[2] = a1; return taskId; @@ -3732,7 +3732,7 @@ static void sub_811A1FC(u8 windowId) RemoveWindow(windowId); } -static s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate) +static s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate) { s32 r1, r8; @@ -3771,7 +3771,7 @@ static s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate return -1; } -static s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6) +static s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * arg6) { s32 input; s32 r4; @@ -3908,7 +3908,7 @@ static void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 co AddTextPrinter(&printerTemplate, 0xFF, NULL); } -static void sub_811A5E4(struct UnkStruct_x20 *arg0, u8 count) +static void sub_811A5E4(struct UnkStruct_x20 * arg0, u8 count) { s32 i; @@ -3922,7 +3922,7 @@ static void sub_811A5E4(struct UnkStruct_x20 *arg0, u8 count) } } -static void sub_811A650(struct UnkStruct_Main4 *arg0, u8 count) +static void sub_811A650(struct UnkStruct_Main4 * arg0, u8 count) { s32 i; @@ -3933,7 +3933,7 @@ static void sub_811A650(struct UnkStruct_Main4 *arg0, u8 count) } } -static bool8 sub_811A694(struct UnkStruct_Shared* arg0, const struct UnkStruct_Shared* arg1) +static bool8 sub_811A694(struct UnkStruct_Shared * arg0, const struct UnkStruct_Shared * arg1) { s32 i; @@ -3956,7 +3956,7 @@ static bool8 sub_811A694(struct UnkStruct_Shared* arg0, const struct UnkStruct_S return FALSE; } -static bool32 sub_811A6DC(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared *arg1) +static bool32 sub_811A6DC(struct UnkStruct_Shared * arg0, struct UnkStruct_Shared * arg1) { s32 i; @@ -3991,7 +3991,7 @@ static bool32 sub_811A6DC(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared return FALSE; } -static u32 sub_811A748(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1) +static u32 sub_811A748(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1) { u8 result = 0xFF; s32 i; @@ -4008,7 +4008,7 @@ static u32 sub_811A748(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1) return result; } -static u8 sub_811A798(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2) +static u8 sub_811A798(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1, u8 arg2) { s32 i; @@ -4031,7 +4031,7 @@ static u8 sub_811A798(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 return 0xFF; } -static void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id) +static void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 * arg3, u8 arg4, u8 id) { u8 r2; u8 sp0[6]; @@ -4054,7 +4054,7 @@ static void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u } } -static void sub_811A910(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 *arg3, u8 arg4, u8 id) +static void sub_811A910(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * arg3, u8 arg4, u8 id) { u8 sp0[6]; u8 sp10[30]; @@ -4107,14 +4107,14 @@ static u32 sub_811A9FC(s32 arg0) } } -static u32 sub_811AA24(struct UnkStruct_x20 *arg0) +static u32 sub_811AA24(struct UnkStruct_x20 * arg0) { u8 sp0[30]; IntlConvPartnerUname(sp0, *arg0); return sub_80FD338(ReadAsU16(arg0->unk.field_0.unk_00.playerTrainerId), sp0); } -static s32 sub_811AA5C(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender) +static s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 playerGender) { bool32 r2; @@ -4192,8 +4192,8 @@ static void sub_811ABE4(u8 windowId, u8 y, struct GFtgtGname * gname, const u8 * static void sub_811ACA4(u8 windowId, s32 itemId, u8 y) { - struct UnkStruct_Leader *leader = sUnionRoomMain.leader; - struct GFtgtGname *rfu; + struct UnkStruct_Leader * leader = sUnionRoomMain.leader; + struct GFtgtGname * rfu; s32 i, j; u8 uname[8]; @@ -4244,7 +4244,7 @@ static s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1) return -1; } -static s32 sub_811ADC4(s32 arg1, struct UnkStruct_Main0 *arg0) +static s32 sub_811ADC4(s32 arg1, struct UnkStruct_Main0 * arg0) { return arg0->arr[arg1].unk.field_0.playerGender; } @@ -4317,7 +4317,7 @@ static void sub_811AECC(u8 *dst, u8 arg1) } } -static s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3) +static s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom * arg3) { s32 result = 0; u16 species = SPECIES_NONE; @@ -4373,7 +4373,7 @@ static s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *a return result; } -static bool32 sub_811B0A4(struct UnkStruct_URoom *arg0) +static bool32 sub_811B0A4(struct UnkStruct_URoom * arg0) { if (gRecvCmds[0][1] != 0) { @@ -4418,7 +4418,7 @@ static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) return FALSE; } -static void ResetUnionRoomTrade(struct UnionRoomTrade *arg0) +static void ResetUnionRoomTrade(struct UnionRoomTrade * arg0) { arg0->field_0 = 0; arg0->type = 0; @@ -4435,7 +4435,7 @@ void Script_ResetUnionRoomTrade(void) ResetUnionRoomTrade(&sUnionRoomTrade); } -static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trade) +static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade * trade) { trade->playerSpecies = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); trade->playerLevel = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); @@ -4446,14 +4446,14 @@ static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trad return FALSE; } -static void RegisterTradeMon(u32 monId, struct UnionRoomTrade *trade) +static void RegisterTradeMon(u32 monId, struct UnionRoomTrade * trade) { trade->species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); trade->level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); trade->personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); } -static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *trade, u8 multiplayerId) +static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade * trade, u8 multiplayerId) { u16 response = 0; u16 species; @@ -4521,7 +4521,7 @@ static u8 sub_811B2A8(s32 linkPlayer) return retval; } -static u8 sub_811B2D8(struct UnkStruct_URoom *arg0) +static u8 sub_811B2D8(struct UnkStruct_URoom * arg0) { u8 retVal = 0x80; u8 i; @@ -4539,9 +4539,9 @@ static u8 sub_811B2D8(struct UnkStruct_URoom *arg0) return retVal; } -static void sub_811B31C(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2) +static void sub_811B31C(u8 *unused, struct UnkStruct_URoom * arg1, bool8 arg2) { - struct TrainerCard *trainerCard = &gTrainerCards[GetMultiplayerId() ^ 1]; + struct TrainerCard * trainerCard = &gTrainerCards[GetMultiplayerId() ^ 1]; s32 i; s32 n; -- cgit v1.2.3 From 70bb1a99e2211f7856f301827f11b7faec334a02 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 Jan 2020 10:35:47 -0500 Subject: union_room_player_avatar --> rfu_union_tool (by assert statements) --- src/union_room.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index a6aeea1c7..0441c8276 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -38,7 +38,7 @@ #include "trainer_card.h" #include "union_room.h" #include "union_room_chat.h" -#include "union_room_player_avatar.h" +#include "rfu_union_tool.h" #include "union_room_message.h" #include "constants/songs.h" #include "constants/maps.h" -- cgit v1.2.3 From 0495cce90418b84dc53b5d5c9f3b2bfe46f0ed62 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 Jan 2020 12:38:17 -0500 Subject: start decomping rfu_union_tool --- src/rfu_union_tool.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 src/rfu_union_tool.c (limited to 'src') diff --git a/src/rfu_union_tool.c b/src/rfu_union_tool.c new file mode 100644 index 000000000..d50187b56 --- /dev/null +++ b/src/rfu_union_tool.c @@ -0,0 +1,80 @@ +#include "global.h" +#include "event_data.h" +#include "rfu_union_tool.h" +#include "constants/flags.h" + +const u8 gUnknown_84570D8[][10] = { + {0x29, 0x36, 0x27, 0x12, 0x13, 0x14, 0x19, 0x1A}, + {0x2A, 0x3A, 0x28, 0x16, 0x17, 0x18, 0x1C, 0x1D} +}; + +const s16 gUnknown_84570EC[][2] = { + {0x4, 0x6}, + {0xd, 0x8}, + {0xa, 0x6}, + {0x1, 0x8}, + {0xd, 0x4}, + {0x7, 0x4}, + {0x1, 0x4}, + {0x7, 0x8} +}; + +const s8 gUnknown_845710C[][2] = { + { 0, 0}, + { 1, 0}, + { 0, -1}, + {-1, 0}, + { 0, 1} +}; + +const u8 gUnknown_8457116[] = { + 0x00, 0x02, 0x01, 0x04, 0x03 +}; + +const u8 gUnknown_845711B[] = { + 0x01, 0x03, 0x01, 0x04, 0x02 +}; + +bool32 is_walking_or_running(void) +{ + if (gPlayerAvatar.tileTransitionState == 2 || gPlayerAvatar.tileTransitionState == 0) + { + return TRUE; + } + else + { + return FALSE; + } +} + +u8 sub_811B524(u32 a0, u32 a1) +{ + return gUnknown_84570D8[a0][a1 % 8]; +} + +void sub_811B53C(u32 a0, u32 a1, s32 * a2, s32 * a3) +{ + *a2 = gUnknown_84570EC[a0][0] + gUnknown_845710C[a1][0] + 7; + *a3 = gUnknown_84570EC[a0][1] + gUnknown_845710C[a1][1] + 7; +} + +bool32 sub_811B58C(u32 a0, u32 a1, s32 a2, s32 a3) +{ + if (gUnknown_84570EC[a0][0] + gUnknown_845710C[a1][0] + 7 != a2) + { + return FALSE; + } + else if (gUnknown_84570EC[a0][1] + gUnknown_845710C[a1][1] + 7 != a3) + { + return FALSE; + } + else + { + return TRUE; + } +} +// +//bool32 IsUnionRoomPlayerHidden(u32 player_idx) +//{ +// return FlagGet(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); +//} -- cgit v1.2.3 From 401276242af6e911104742ec6f34b54925b4c4b6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 Jan 2020 13:39:36 -0500 Subject: through sub_811BDA8 --- src/rfu_union_tool.c | 456 ++++++++++++++++++++++++++++++++++++++++++++++++++- src/scrcmd.c | 4 +- src/vs_seeker.c | 2 +- 3 files changed, 454 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/rfu_union_tool.c b/src/rfu_union_tool.c index d50187b56..74dfaadd1 100644 --- a/src/rfu_union_tool.c +++ b/src/rfu_union_tool.c @@ -1,7 +1,23 @@ #include "global.h" #include "event_data.h" +#include "event_object_movement.h" +#include "event_object_80688E4.h" +#include "event_object_8097404.h" +#include "field_player_avatar.h" +#include "fieldmap.h" #include "rfu_union_tool.h" +#include "script.h" +#include "task.h" #include "constants/flags.h" +#include "constants/event_object_movement.h" +#include "constants/object_events.h" + +EWRAM_DATA struct UnionObj * UnionObjWork = NULL; +EWRAM_DATA u32 gUnknown_203B088 = 0; + +u8 sub_811BA18(void); +u32 sub_811BBC8(u32 playerIdx, u32 arg1); +void sub_811C008(s32 arg0, s32 arg1, u8 arg2); const u8 gUnknown_84570D8[][10] = { {0x29, 0x36, 0x27, 0x12, 0x13, 0x14, 0x19, 0x1A}, @@ -35,6 +51,12 @@ const u8 gUnknown_845711B[] = { 0x01, 0x03, 0x01, 0x04, 0x02 }; +const u8 gUnknown_8457120[] = { + 0x09, 0x08, 0x07, 0x02, 0x06, 0x05, 0x04, 0x03, + 0x63, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, + 0x67, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6A, 0x00 +}; + bool32 is_walking_or_running(void) { if (gPlayerAvatar.tileTransitionState == 2 || gPlayerAvatar.tileTransitionState == 0) @@ -73,8 +95,432 @@ bool32 sub_811B58C(u32 a0, u32 a1, s32 a2, s32 a3) return TRUE; } } -// -//bool32 IsUnionRoomPlayerHidden(u32 player_idx) -//{ -// return FlagGet(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); -//} + +bool32 IsUnionRoomPlayerHidden(u32 player_idx) +{ + return FlagGet(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); +} + +void HideUnionRoomPlayer(u32 player_idx) +{ + FlagSet(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); +} + +void ShowUnionRoomPlayer(u32 player_idx) +{ + FlagClear(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); +} + +void SetUnionRoomPlayerGfx(u32 playerIdx, u32 gfxId) +{ + VarSet(VAR_OBJ_GFX_ID_0 + playerIdx, gfxId); +} + +void CreateUnionRoomPlayerObjectEvent(u32 playerIdx) +{ + TrySpawnObjectEvent(gUnknown_8457120[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); +} + +void RemoveUnionRoomPlayerObjectEvent(u32 playerIdx) +{ + RemoveObjectEventByLocalIdAndMap(gUnknown_8457120[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); +} + +bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * movement) +{ + u8 objectId; + struct ObjectEvent * object; + if (TryGetObjectEventIdByLocalIdAndMap(gUnknown_8457120[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) + { + return FALSE; + } + object = &gObjectEvents[objectId]; + if (ObjectEventIsMovementOverridden(object)) + { + return FALSE; + } + if (ObjectEventSetHeldMovement(object, *movement)) + { + AGB_ASSERT_EX(0, ABSPATH("rfu_union_tool.c"), 387); + return FALSE; + } + return TRUE; +} +bool32 sub_811B6E8(u32 playerIdx) +{ + u8 objectId; + struct ObjectEvent * object; + if (TryGetObjectEventIdByLocalIdAndMap(gUnknown_8457120[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) + { + return TRUE; + } + object = &gObjectEvents[objectId]; + if (!ObjectEventClearHeldMovementIfFinished(object)) + { + return FALSE; + } + if (!ScriptContext2_IsEnabled()) + { + UnfreezeObjectEvent(object); + } + else + { + FreezeObjectEvent(object); + } + return TRUE; +} + +u8 sub_811B754(struct UnionObj * ptr) +{ + s32 i; + + gUnknown_203B088 = 0; + UnionObjWork = ptr; + AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 442) + for (i = 0; i < 8; i++) + { + ptr[i].field_0 = 0; + ptr[i].field_1 = 0; + ptr[i].field_2 = 0; + ptr[i].field_3 = 0; + } + return sub_811BA18(); +} + +const u8 gUnknown_845718D[2] = { + MOVEMENT_ACTION_FLY_UP, + MOVEMENT_ACTION_STEP_END +}; + +bool32 sub_811B7A8(s8 * a0, u32 playerIdx, struct UnionObj * ptr) +{ + switch (*a0) + { + case 0: + if (SetUnionRoomPlayerEnterExitMovement(playerIdx, gUnknown_845718D) == TRUE) + { + HideUnionRoomPlayer(playerIdx); + (*a0)++; + } + break; + case 1: + if (sub_811B6E8(playerIdx)) + { + RemoveUnionRoomPlayerObjectEvent(playerIdx); + HideUnionRoomPlayer(playerIdx); + *a0 = 0; + return TRUE; + } + break; + } + return FALSE; +} + +const u8 gUnknown_845718F[2] = { + MOVEMENT_ACTION_FLY_DOWN, + MOVEMENT_ACTION_STEP_END +}; + +bool32 sub_811B804(s8 * a0, u32 playerIdx, struct UnionObj * ptr) +{ + s16 x, y; + + switch (*a0) + { + case 0: + if (!is_walking_or_running()) + { + break; + } + PlayerGetDestCoords(&x, &y); + if (sub_811B58C(playerIdx, 0, x, y) == 1) + { + break; + } + player_get_pos_including_state_based_drift(&x, &y); + if (sub_811B58C(playerIdx, 0, x, y) == 1) + { + break; + } + SetUnionRoomPlayerGfx(playerIdx, ptr->field_1); + CreateUnionRoomPlayerObjectEvent(playerIdx); + ShowUnionRoomPlayer(playerIdx); + (*a0)++; + // fallthrough + case 3: // incorrect? + if (SetUnionRoomPlayerEnterExitMovement(playerIdx, gUnknown_845718F) == 1) + { + (*a0)++; + } + break; + case 2: + if (sub_811B6E8(playerIdx)) + { + *a0 = 0; + return TRUE; + } + break; + } + return FALSE; +} + +bool32 sub_811B8BC(u32 playerIdx, u32 a1, u32 a2) +{ + struct UnionObj * ptr = &UnionObjWork[playerIdx]; + AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 561) + ptr->field_3 = 1; + ptr->field_1 = sub_811B524(a1, a2); + if (ptr->field_0 == 0) + { + return TRUE; + } + else + { + return FALSE; + } +} + +bool32 sub_811B90C(u32 playerIdx) +{ + struct UnionObj * ptr = &UnionObjWork[playerIdx]; + AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 577) + ptr->field_3 = 2; + if (ptr->field_0 == 1) + { + return TRUE; + } + else + { + return FALSE; + } +} + +void sub_811B94C(u32 playerIdx, struct UnionObj * ptr) +{ + switch (ptr->field_0) + { + case 0: + if (ptr->field_3 == 1) + { + ptr->field_0 = 2; + ptr->field_2 = 0; + } + else + { + break; + } + // fallthrough + case 2: + if (!sub_811BBC8(playerIdx, 0) && ptr->field_3 == 2) + { + ptr->field_0 = 0; + ptr->field_2 = 0; + RemoveUnionRoomPlayerObjectEvent(playerIdx); + HideUnionRoomPlayer(playerIdx); + } + else if (sub_811B804(&ptr->field_2, playerIdx, ptr) == 1) + { + ptr->field_0 = 1; + } + break; + case 1: + if (ptr->field_3 == 2) + { + ptr->field_0 = 3; + ptr->field_2 = 0; + } + else + { + break; + } + // fallthrough + case 3: + if (sub_811B7A8(&ptr->field_2, playerIdx, ptr) == 1) + { + ptr->field_0 = 0; + } + break; + } + ptr->field_3 = 0; +} + +void sub_811B9D8(u8 taskId) +{ + s32 i; + AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 643) + for (i = 0; i < 8; i++) + { + sub_811B94C(i, &UnionObjWork[i]); + } +} + +u8 sub_811BA18(void) +{ + if (FuncIsActiveTask(sub_811B9D8) == TRUE) + { + AGB_ASSERT_EX(0, ABSPATH("rfu_union_tool.c"), 655) + return NUM_TASKS; + } + else + { + return CreateTask(sub_811B9D8, 5); + } +} + +void sub_811BA5C(void) +{ + u8 taskId = FindTaskIdByFunc(sub_811B9D8); + if (taskId < NUM_TASKS) + { + DestroyTask(taskId); + } +} + +void sub_811BA78(void) +{ + s32 i; + for (i = 0; i < 8; i++) + { + if (!IsUnionRoomPlayerHidden(i)) + { + RemoveUnionRoomPlayerObjectEvent(i); + HideUnionRoomPlayer(i); + } + } + UnionObjWork = NULL; + sub_811BA5C(); +} + +void sub_811BAAC(u8 * sp8, s32 r9) +{ + s32 r7; + + for (r7 = 0; r7 < 5; r7++) + { + s32 r5 = 5 * r9 + r7; + sp8[r5] = sprite_new(OBJECT_EVENT_GFX_MAN, r5 - 0x38, gUnknown_84570EC[r9][0] + gUnknown_845710C[r7][0], gUnknown_84570EC[r9][1] + gUnknown_845710C[r7][1], 3, 1); + sub_8069124(r5 - 0x38, TRUE); + } +} + +void sub_811BB40(u8 * r5) +{ + s32 i; + for (i = 0; i < 40; i++) + { + DestroySprite(&gSprites[r5[i]]); + } +} + +void sub_811BB68(void) +{ + s32 i, j, x, y; + for (i = 0; i < 8; i++) + { + for (j = 0; j < 5; j++) + { + sub_811B53C(i, j, &x, &y); + sub_8059024(x, y, 0); + } + } +} + +u8 sub_811BBA0(u32 r1, u32 unused, struct GFtgtGname * r2) +{ + if (r1 != 0) + { + return gUnknown_845711B[r1]; + } + else if (r2->unk_0a_0 == 0x45) + { + return 1; + } + else + { + return 4; + } +} + +u32 sub_811BBC8(u32 a0, u32 a1) +{ + return sub_806916C(5 * a0 + a1 - 0x38); +} + +void sub_811BBE0(u32 r5, u32 r6, u8 r8, struct GFtgtGname * r9) +{ + s32 x, y; + s32 r7 = 5 * r5 + r6; + if (sub_811BBC8(r5, r6) == 1) + { + sub_8069124(r7 - 0x38, FALSE); + sub_80691A4(r7 - 0x38, 1); + } + sub_8069094(r7 - 0x38, r8); + sub_811C008(r6, r5, sub_811BBA0(r6, r5, r9)); + sub_811B53C(r5, r6, &x, &y); + sub_8059024(x, y, 1); +} + +void sub_811BC68(u32 a0, u32 a1) +{ + s32 x, y; + sub_80691A4(5 * a0 + a1 - 0x38, 2); + sub_811B53C(a0, a1, &x, &y); + sub_8059024(x, y, 0); +} + +void sub_811BCA0(u32 r7, struct GFtgtGname * r8) +{ + s16 x, y, x2, y2; + s32 i; + + PlayerGetDestCoords(&x, &y); + player_get_pos_including_state_based_drift(&x2, &y2); + if (sub_806916C(5 * r7 - 0x38) == 1) + { + if (sub_811B58C(r7, 0, x, y) == 1 || sub_811B58C(r7, 0, x2, y2) == 1) + { + return; + } + sub_811BBE0(r7, 0, sub_811B524(r8->playerGender, r8->unk_00.playerTrainerId[0]), r8); + } + for (i = 1; i < 5; i++) + { + if (r8->unk_04[i - 1] == 0) + { + sub_811BC68(r7, i); + } + else if (sub_811B58C(r7, i, x, y) == 0 && sub_811B58C(r7, i, x2, y2) == 0) + { + sub_811BBE0(r7, i, sub_811B524((r8->unk_04[i - 1] >> 3) & 1, r8->unk_04[i - 1] & 7), r8); + } + } +} + +void sub_811BDA8(u32 r5, struct GFtgtGname * r4) +{ + u32 i; + switch (r4->unk_0a_0) + { + case 0x40: + case 0x54: + sub_811B8BC(r5, r4->playerGender, r4->unk_00.playerTrainerId[0]); + for (i = 0; i < 5; i++) + { + sub_811BC68(r5, i); + } + break; + case 0x41: + case 0x44: + case 0x45: + case 0x48: + case 0x51: + case 0x52: + case 0x53: + sub_811B90C(r5); + sub_811BCA0(r5, r4); + break; + default: + AGB_ASSERT_EX(0, ABSPATH("rfu_union_tool.c"), 979) + } +} diff --git a/src/scrcmd.c b/src/scrcmd.c index c083546eb..c2c422a0a 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1064,7 +1064,7 @@ bool8 ScrCmd_addobject(struct ScriptContext *ctx) { u16 objectId = VarGet(ScriptReadHalfword(ctx)); - show_sprite(objectId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); + TrySpawnObjectEvent(objectId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); return FALSE; } @@ -1074,7 +1074,7 @@ bool8 ScrCmd_addobject_at(struct ScriptContext *ctx) u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); - show_sprite(objectId, mapNum, mapGroup); + TrySpawnObjectEvent(objectId, mapNum, mapGroup); return FALSE; } diff --git a/src/vs_seeker.c b/src/vs_seeker.c index b88a7f15c..b35b6143e 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -1273,7 +1273,7 @@ static u8 GetRematchableTrainerLocalId(void) static void StartTrainerObjectMovementScript(struct VsSeekerTrainerInfo * trainerInfo, const u8 * script) { - npc_sync_anim_pause_bits(&gObjectEvents[trainerInfo->objectEventId]); + UnfreezeObjectEvent(&gObjectEvents[trainerInfo->objectEventId]); ScriptMovement_StartObjectMovementScript(trainerInfo->localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, script); } -- cgit v1.2.3 From c4626ec2966d8d31140fc3cd26fee505d7f817d2 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 Jan 2020 13:47:30 -0500 Subject: Finish rfu_union_tool decomp --- src/rfu_union_tool.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) (limited to 'src') diff --git a/src/rfu_union_tool.c b/src/rfu_union_tool.c index 74dfaadd1..3a1b566e6 100644 --- a/src/rfu_union_tool.c +++ b/src/rfu_union_tool.c @@ -524,3 +524,98 @@ void sub_811BDA8(u32 r5, struct GFtgtGname * r4) AGB_ASSERT_EX(0, ABSPATH("rfu_union_tool.c"), 979) } } + +void sub_811BE6C(u32 r5, struct GFtgtGname * unused) +{ + s32 i; + sub_811B90C(r5); + for (i = 0; i < 5; i++) + { + sub_811BC68(r5, i); + } +} + +void sub_811BE8C(struct UnkStruct_URoom *r0) +{ + s32 i; + struct UnkStruct_x20 * r4; + gUnknown_203B088 = 0; + for (i = 0, r4 = r0->field_0->arr; i < 8; i++) + { + if (r4[i].field_1A_0 == 1) + { + sub_811BDA8(i, &r4[i].unk.field_0); + } + else if (r4[i].field_1A_0 == 2) + { + sub_811BE6C(i, &r4[i].unk.field_0); + } + } +} + +void sub_811BECC(struct UnkStruct_URoom *unused) +{ + gUnknown_203B088 = 300; +} + +void sub_811BEDC(struct UnkStruct_URoom *r2) +{ + if (++gUnknown_203B088 > 300) + { + sub_811BE8C(r2); + } +} + +bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3) +{ + s16 x, y; + s32 i, j; + struct UnkStruct_x20 * r4; + if (!is_walking_or_running()) + { + return FALSE; + } + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + for (i = 0, r4 = arg0->arr; i < 8; i++) + { + for (j = 0; j < 5; j++) + { + s32 r3 = 5 * i + j; + if (x != gUnknown_84570EC[i][0] + gUnknown_845710C[j][0] + 7) + { + continue; + } + if (y != gUnknown_84570EC[i][1] + gUnknown_845710C[j][1] + 7) + { + continue; + } + if (sub_806916C(r3 - 0x38) != 0) + { + continue; + } + if (sub_8069294(r3 - 0x38) != 0) + { + continue; + } + if (r4[i].field_1A_0 != 1) + { + continue; + } + sub_811C008(j, i, gUnknown_8457116[GetPlayerFacingDirection()]); + *arg1 = j; + *arg2 = i; + return TRUE; + } + } + return FALSE; +} + +void sub_811C008(s32 arg0, s32 arg1, u8 arg2) +{ + sub_8069058(5 * arg1 - 0x38 + arg0, arg2); +} + +void sub_811C028(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2) +{ + return sub_811C008(arg0, arg1, sub_811BBA0(arg0, arg1, &arg2->arr[arg1].unk.field_0)); +} -- cgit v1.2.3 From 48f7bbe6f6521d2f62dabbc162c46da4848661bb Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 Jan 2020 14:29:37 -0500 Subject: Some documentation of rfu_union_tool --- src/link_rfu_2.c | 4 +- src/rfu_union_tool.c | 292 +++++++++++++++++++++++++++++---------------------- src/union_room.c | 52 ++++----- 3 files changed, 195 insertions(+), 153 deletions(-) (limited to 'src') diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 41fe72e20..17f604ee8 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -1917,7 +1917,7 @@ void ClearAndInitHostRFUtgtGname(void) InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, 0, 0, 0); } -void sub_80FAF58(u8 a0, u32 a1, u32 a2) +void SetHostRFUtgtGname(u8 a0, u32 a1, u32 a2) { InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, a0, a2, a1); } @@ -1944,7 +1944,7 @@ void sub_80FAFE0(u8 a0) void sub_80FB008(u8 a0, u32 a1, u32 a2) { if (a0) - sub_80FAF58(a0, a1, a2); + SetHostRFUtgtGname(a0, a1, a2); rfu_REQ_configGameData(0, 2, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer); } diff --git a/src/rfu_union_tool.c b/src/rfu_union_tool.c index 3a1b566e6..c3f6de9c1 100644 --- a/src/rfu_union_tool.c +++ b/src/rfu_union_tool.c @@ -12,52 +12,94 @@ #include "constants/event_object_movement.h" #include "constants/object_events.h" -EWRAM_DATA struct UnionObj * UnionObjWork = NULL; -EWRAM_DATA u32 gUnknown_203B088 = 0; - -u8 sub_811BA18(void); -u32 sub_811BBC8(u32 playerIdx, u32 arg1); -void sub_811C008(s32 arg0, s32 arg1, u8 arg2); +static EWRAM_DATA struct UnionObj * UnionObjWork = NULL; +static EWRAM_DATA u32 sUnionObjRefreshTimer = 0; + +static u8 StartUnionObjAnimTask(void); +static u32 sub_811BBC8(u32 playerIdx, u32 arg1); +static void sub_811C008(s32 arg0, s32 arg1, u8 arg2); + +static const u8 sUnionObjectEventGfxIds[][10] = { + [MALE] = { + OBJECT_EVENT_GFX_COOLTRAINER_M, + OBJECT_EVENT_GFX_BLACKBELT, + OBJECT_EVENT_GFX_CAMPER, + OBJECT_EVENT_GFX_YOUNGSTER, + OBJECT_EVENT_GFX_BOY, + OBJECT_EVENT_GFX_BUG_CATCHER, + OBJECT_EVENT_GFX_MAN, + OBJECT_EVENT_GFX_ROCKER + }, + [FEMALE] = { + OBJECT_EVENT_GFX_COOLTRAINER_F, + OBJECT_EVENT_GFX_CHANNELER, + OBJECT_EVENT_GFX_PICNICKER, + OBJECT_EVENT_GFX_LASS, + OBJECT_EVENT_GFX_WOMAN_1, + OBJECT_EVENT_GFX_BATTLE_GIRL, + OBJECT_EVENT_GFX_WOMAN_2, + OBJECT_EVENT_GFX_BEAUTY + } +}; -const u8 gUnknown_84570D8[][10] = { - {0x29, 0x36, 0x27, 0x12, 0x13, 0x14, 0x19, 0x1A}, - {0x2A, 0x3A, 0x28, 0x16, 0x17, 0x18, 0x1C, 0x1D} +static const s16 sUnionPartnerCoords[][2] = { + { 4, 6}, + {13, 8}, + {10, 6}, + { 1, 8}, + {13, 4}, + { 7, 4}, + { 1, 4}, + { 7, 8} }; -const s16 gUnknown_84570EC[][2] = { - {0x4, 0x6}, - {0xd, 0x8}, - {0xa, 0x6}, - {0x1, 0x8}, - {0xd, 0x4}, - {0x7, 0x4}, - {0x1, 0x4}, - {0x7, 0x8} +static const s8 sFacingDirectionOffsets[][2] = { + [DIR_NONE] = { 0, 0}, + [DIR_SOUTH] = { 1, 0}, + [DIR_NORTH] = { 0, -1}, + [DIR_WEST] = {-1, 0}, + [DIR_EAST] = { 0, 1} }; -const s8 gUnknown_845710C[][2] = { - { 0, 0}, - { 1, 0}, - { 0, -1}, - {-1, 0}, - { 0, 1} +static const u8 sOppositeFacingDirection[] = { + [DIR_NONE] = DIR_NONE, + [DIR_SOUTH] = DIR_NORTH, + [DIR_NORTH] = DIR_SOUTH, + [DIR_WEST] = DIR_EAST, + [DIR_EAST] = DIR_WEST }; -const u8 gUnknown_8457116[] = { - 0x00, 0x02, 0x01, 0x04, 0x03 +static const u8 gUnknown_845711B[] = { + 1, + 3, + 1, + 4, + 2 }; -const u8 gUnknown_845711B[] = { - 0x01, 0x03, 0x01, 0x04, 0x02 +static const u8 sUnionRoomLocalIds[] = { + 9, + 8, + 7, + 2, + 6, + 5, + 4, + 3 }; -const u8 gUnknown_8457120[] = { - 0x09, 0x08, 0x07, 0x02, 0x06, 0x05, 0x04, 0x03, - 0x63, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, - 0x67, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6A, 0x00 +static const u16 sUnref_8457128[] = { + 0x63, + 0x64, + 0x65, + 0x66, + 0x67, + 0x68, + 0x69, + 0x6A }; -bool32 is_walking_or_running(void) +static bool32 is_walking_or_running(void) { if (gPlayerAvatar.tileTransitionState == 2 || gPlayerAvatar.tileTransitionState == 0) { @@ -69,24 +111,24 @@ bool32 is_walking_or_running(void) } } -u8 sub_811B524(u32 a0, u32 a1) +static u8 GetUnionRoomPlayerGraphicsId(u32 gender, u32 id) { - return gUnknown_84570D8[a0][a1 % 8]; + return sUnionObjectEventGfxIds[gender][id % 8]; } -void sub_811B53C(u32 a0, u32 a1, s32 * a2, s32 * a3) +static void GetUnionRoomPlayerFacingCoords(u32 id, u32 dirn, s32 * xp, s32 * yp) { - *a2 = gUnknown_84570EC[a0][0] + gUnknown_845710C[a1][0] + 7; - *a3 = gUnknown_84570EC[a0][1] + gUnknown_845710C[a1][1] + 7; + *xp = sUnionPartnerCoords[id][0] + sFacingDirectionOffsets[dirn][0] + 7; + *yp = sUnionPartnerCoords[id][1] + sFacingDirectionOffsets[dirn][1] + 7; } -bool32 sub_811B58C(u32 a0, u32 a1, s32 a2, s32 a3) +static bool32 sub_811B58C(u32 id, u32 dirn, s32 x, s32 y) { - if (gUnknown_84570EC[a0][0] + gUnknown_845710C[a1][0] + 7 != a2) + if (sUnionPartnerCoords[id][0] + sFacingDirectionOffsets[dirn][0] + 7 != x) { return FALSE; } - else if (gUnknown_84570EC[a0][1] + gUnknown_845710C[a1][1] + 7 != a3) + else if (sUnionPartnerCoords[id][1] + sFacingDirectionOffsets[dirn][1] + 7 != y) { return FALSE; } @@ -96,41 +138,41 @@ bool32 sub_811B58C(u32 a0, u32 a1, s32 a2, s32 a3) } } -bool32 IsUnionRoomPlayerHidden(u32 player_idx) +static bool32 IsUnionRoomPlayerHidden(u32 player_idx) { return FlagGet(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); } -void HideUnionRoomPlayer(u32 player_idx) +static void HideUnionRoomPlayer(u32 player_idx) { FlagSet(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); } -void ShowUnionRoomPlayer(u32 player_idx) +static void ShowUnionRoomPlayer(u32 player_idx) { FlagClear(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); } -void SetUnionRoomPlayerGfx(u32 playerIdx, u32 gfxId) +static void SetUnionRoomPlayerGfx(u32 playerIdx, u32 gfxId) { VarSet(VAR_OBJ_GFX_ID_0 + playerIdx, gfxId); } -void CreateUnionRoomPlayerObjectEvent(u32 playerIdx) +static void CreateUnionRoomPlayerObjectEvent(u32 playerIdx) { - TrySpawnObjectEvent(gUnknown_8457120[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); + TrySpawnObjectEvent(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); } -void RemoveUnionRoomPlayerObjectEvent(u32 playerIdx) +static void RemoveUnionRoomPlayerObjectEvent(u32 playerIdx) { - RemoveObjectEventByLocalIdAndMap(gUnknown_8457120[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); + RemoveObjectEventByLocalIdAndMap(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); } -bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * movement) +static bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * movement) { u8 objectId; struct ObjectEvent * object; - if (TryGetObjectEventIdByLocalIdAndMap(gUnknown_8457120[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) + if (TryGetObjectEventIdByLocalIdAndMap(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) { return FALSE; } @@ -146,11 +188,11 @@ bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * movement) } return TRUE; } -bool32 sub_811B6E8(u32 playerIdx) +static bool32 TryReleaseUnionRoomPlayerObjectEvent(u32 playerIdx) { u8 objectId; struct ObjectEvent * object; - if (TryGetObjectEventIdByLocalIdAndMap(gUnknown_8457120[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) + if (TryGetObjectEventIdByLocalIdAndMap(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) { return TRUE; } @@ -170,41 +212,41 @@ bool32 sub_811B6E8(u32 playerIdx) return TRUE; } -u8 sub_811B754(struct UnionObj * ptr) +u8 ZeroUnionObjWork(struct UnionObj * ptr) { s32 i; - gUnknown_203B088 = 0; + sUnionObjRefreshTimer = 0; UnionObjWork = ptr; AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 442) for (i = 0; i < 8; i++) { - ptr[i].field_0 = 0; - ptr[i].field_1 = 0; - ptr[i].field_2 = 0; - ptr[i].field_3 = 0; + ptr[i].state = 0; + ptr[i].gfxId = 0; + ptr[i].animState = 0; + ptr[i].schedAnim = 0; } - return sub_811BA18(); + return StartUnionObjAnimTask(); } -const u8 gUnknown_845718D[2] = { +static const u8 sMovement_UnionPlayerExit[2] = { MOVEMENT_ACTION_FLY_UP, MOVEMENT_ACTION_STEP_END }; -bool32 sub_811B7A8(s8 * a0, u32 playerIdx, struct UnionObj * ptr) +static bool32 AnimateUnionRoomPlayerDespawn(s8 * a0, u32 playerIdx, struct UnionObj * ptr) { switch (*a0) { case 0: - if (SetUnionRoomPlayerEnterExitMovement(playerIdx, gUnknown_845718D) == TRUE) + if (SetUnionRoomPlayerEnterExitMovement(playerIdx, sMovement_UnionPlayerExit) == TRUE) { HideUnionRoomPlayer(playerIdx); (*a0)++; } break; case 1: - if (sub_811B6E8(playerIdx)) + if (TryReleaseUnionRoomPlayerObjectEvent(playerIdx)) { RemoveUnionRoomPlayerObjectEvent(playerIdx); HideUnionRoomPlayer(playerIdx); @@ -216,12 +258,12 @@ bool32 sub_811B7A8(s8 * a0, u32 playerIdx, struct UnionObj * ptr) return FALSE; } -const u8 gUnknown_845718F[2] = { +static const u8 sMovement_UnionPlayerEnter[2] = { MOVEMENT_ACTION_FLY_DOWN, MOVEMENT_ACTION_STEP_END }; -bool32 sub_811B804(s8 * a0, u32 playerIdx, struct UnionObj * ptr) +static bool32 AnimateUnionRoomPlayerSpawn(s8 * a0, u32 playerIdx, struct UnionObj * ptr) { s16 x, y; @@ -233,28 +275,28 @@ bool32 sub_811B804(s8 * a0, u32 playerIdx, struct UnionObj * ptr) break; } PlayerGetDestCoords(&x, &y); - if (sub_811B58C(playerIdx, 0, x, y) == 1) + if (sub_811B58C(playerIdx, 0, x, y) == TRUE) { break; } player_get_pos_including_state_based_drift(&x, &y); - if (sub_811B58C(playerIdx, 0, x, y) == 1) + if (sub_811B58C(playerIdx, 0, x, y) == TRUE) { break; } - SetUnionRoomPlayerGfx(playerIdx, ptr->field_1); + SetUnionRoomPlayerGfx(playerIdx, ptr->gfxId); CreateUnionRoomPlayerObjectEvent(playerIdx); ShowUnionRoomPlayer(playerIdx); (*a0)++; // fallthrough case 3: // incorrect? - if (SetUnionRoomPlayerEnterExitMovement(playerIdx, gUnknown_845718F) == 1) + if (SetUnionRoomPlayerEnterExitMovement(playerIdx, sMovement_UnionPlayerEnter) == 1) { (*a0)++; } break; case 2: - if (sub_811B6E8(playerIdx)) + if (TryReleaseUnionRoomPlayerObjectEvent(playerIdx)) { *a0 = 0; return TRUE; @@ -264,13 +306,13 @@ bool32 sub_811B804(s8 * a0, u32 playerIdx, struct UnionObj * ptr) return FALSE; } -bool32 sub_811B8BC(u32 playerIdx, u32 a1, u32 a2) +static bool32 sub_811B8BC(u32 playerIdx, u32 a1, u32 a2) { struct UnionObj * ptr = &UnionObjWork[playerIdx]; AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 561) - ptr->field_3 = 1; - ptr->field_1 = sub_811B524(a1, a2); - if (ptr->field_0 == 0) + ptr->schedAnim = 1; + ptr->gfxId = GetUnionRoomPlayerGraphicsId(a1, a2); + if (ptr->state == 0) { return TRUE; } @@ -280,12 +322,12 @@ bool32 sub_811B8BC(u32 playerIdx, u32 a1, u32 a2) } } -bool32 sub_811B90C(u32 playerIdx) +static bool32 sub_811B90C(u32 playerIdx) { struct UnionObj * ptr = &UnionObjWork[playerIdx]; AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 577) - ptr->field_3 = 2; - if (ptr->field_0 == 1) + ptr->schedAnim = 2; + if (ptr->state == 1) { return TRUE; } @@ -295,15 +337,15 @@ bool32 sub_811B90C(u32 playerIdx) } } -void sub_811B94C(u32 playerIdx, struct UnionObj * ptr) +static void AnimateUnionObj(u32 playerIdx, struct UnionObj * ptr) { - switch (ptr->field_0) + switch (ptr->state) { case 0: - if (ptr->field_3 == 1) + if (ptr->schedAnim == 1) { - ptr->field_0 = 2; - ptr->field_2 = 0; + ptr->state = 2; + ptr->animState = 0; } else { @@ -311,23 +353,23 @@ void sub_811B94C(u32 playerIdx, struct UnionObj * ptr) } // fallthrough case 2: - if (!sub_811BBC8(playerIdx, 0) && ptr->field_3 == 2) + if (!sub_811BBC8(playerIdx, 0) && ptr->schedAnim == 2) { - ptr->field_0 = 0; - ptr->field_2 = 0; + ptr->state = 0; + ptr->animState = 0; RemoveUnionRoomPlayerObjectEvent(playerIdx); HideUnionRoomPlayer(playerIdx); } - else if (sub_811B804(&ptr->field_2, playerIdx, ptr) == 1) + else if (AnimateUnionRoomPlayerSpawn(&ptr->animState, playerIdx, ptr) == TRUE) { - ptr->field_0 = 1; + ptr->state = 1; } break; case 1: - if (ptr->field_3 == 2) + if (ptr->schedAnim == 2) { - ptr->field_0 = 3; - ptr->field_2 = 0; + ptr->state = 3; + ptr->animState = 0; } else { @@ -335,41 +377,41 @@ void sub_811B94C(u32 playerIdx, struct UnionObj * ptr) } // fallthrough case 3: - if (sub_811B7A8(&ptr->field_2, playerIdx, ptr) == 1) + if (AnimateUnionRoomPlayerDespawn(&ptr->animState, playerIdx, ptr) == TRUE) { - ptr->field_0 = 0; + ptr->state = 0; } break; } - ptr->field_3 = 0; + ptr->schedAnim = 0; } -void sub_811B9D8(u8 taskId) +static void Task_AnimateUnionObjs(u8 taskId) { s32 i; AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 643) for (i = 0; i < 8; i++) { - sub_811B94C(i, &UnionObjWork[i]); + AnimateUnionObj(i, &UnionObjWork[i]); } } -u8 sub_811BA18(void) +static u8 StartUnionObjAnimTask(void) { - if (FuncIsActiveTask(sub_811B9D8) == TRUE) + if (FuncIsActiveTask(Task_AnimateUnionObjs) == TRUE) { AGB_ASSERT_EX(0, ABSPATH("rfu_union_tool.c"), 655) return NUM_TASKS; } else { - return CreateTask(sub_811B9D8, 5); + return CreateTask(Task_AnimateUnionObjs, 5); } } -void sub_811BA5C(void) +static void sub_811BA5C(void) { - u8 taskId = FindTaskIdByFunc(sub_811B9D8); + u8 taskId = FindTaskIdByFunc(Task_AnimateUnionObjs); if (taskId < NUM_TASKS) { DestroyTask(taskId); @@ -398,7 +440,7 @@ void sub_811BAAC(u8 * sp8, s32 r9) for (r7 = 0; r7 < 5; r7++) { s32 r5 = 5 * r9 + r7; - sp8[r5] = sprite_new(OBJECT_EVENT_GFX_MAN, r5 - 0x38, gUnknown_84570EC[r9][0] + gUnknown_845710C[r7][0], gUnknown_84570EC[r9][1] + gUnknown_845710C[r7][1], 3, 1); + sp8[r5] = sprite_new(OBJECT_EVENT_GFX_MAN, r5 - 0x38, sUnionPartnerCoords[r9][0] + sFacingDirectionOffsets[r7][0], sUnionPartnerCoords[r9][1] + sFacingDirectionOffsets[r7][1], 3, 1); sub_8069124(r5 - 0x38, TRUE); } } @@ -419,13 +461,13 @@ void sub_811BB68(void) { for (j = 0; j < 5; j++) { - sub_811B53C(i, j, &x, &y); + GetUnionRoomPlayerFacingCoords(i, j, &x, &y); sub_8059024(x, y, 0); } } } -u8 sub_811BBA0(u32 r1, u32 unused, struct GFtgtGname * r2) +static u8 sub_811BBA0(u32 r1, u32 unused, struct GFtgtGname * r2) { if (r1 != 0) { @@ -441,12 +483,12 @@ u8 sub_811BBA0(u32 r1, u32 unused, struct GFtgtGname * r2) } } -u32 sub_811BBC8(u32 a0, u32 a1) +static u32 sub_811BBC8(u32 a0, u32 a1) { return sub_806916C(5 * a0 + a1 - 0x38); } -void sub_811BBE0(u32 r5, u32 r6, u8 r8, struct GFtgtGname * r9) +static void sub_811BBE0(u32 r5, u32 r6, u8 r8, struct GFtgtGname * r9) { s32 x, y; s32 r7 = 5 * r5 + r6; @@ -457,19 +499,19 @@ void sub_811BBE0(u32 r5, u32 r6, u8 r8, struct GFtgtGname * r9) } sub_8069094(r7 - 0x38, r8); sub_811C008(r6, r5, sub_811BBA0(r6, r5, r9)); - sub_811B53C(r5, r6, &x, &y); + GetUnionRoomPlayerFacingCoords(r5, r6, &x, &y); sub_8059024(x, y, 1); } -void sub_811BC68(u32 a0, u32 a1) +static void sub_811BC68(u32 a0, u32 a1) { s32 x, y; sub_80691A4(5 * a0 + a1 - 0x38, 2); - sub_811B53C(a0, a1, &x, &y); + GetUnionRoomPlayerFacingCoords(a0, a1, &x, &y); sub_8059024(x, y, 0); } -void sub_811BCA0(u32 r7, struct GFtgtGname * r8) +static void sub_811BCA0(u32 r7, struct GFtgtGname * r8) { s16 x, y, x2, y2; s32 i; @@ -478,11 +520,11 @@ void sub_811BCA0(u32 r7, struct GFtgtGname * r8) player_get_pos_including_state_based_drift(&x2, &y2); if (sub_806916C(5 * r7 - 0x38) == 1) { - if (sub_811B58C(r7, 0, x, y) == 1 || sub_811B58C(r7, 0, x2, y2) == 1) + if (sub_811B58C(r7, 0, x, y) == TRUE || sub_811B58C(r7, 0, x2, y2) == TRUE) { return; } - sub_811BBE0(r7, 0, sub_811B524(r8->playerGender, r8->unk_00.playerTrainerId[0]), r8); + sub_811BBE0(r7, 0, GetUnionRoomPlayerGraphicsId(r8->playerGender, r8->unk_00.playerTrainerId[0]), r8); } for (i = 1; i < 5; i++) { @@ -490,14 +532,14 @@ void sub_811BCA0(u32 r7, struct GFtgtGname * r8) { sub_811BC68(r7, i); } - else if (sub_811B58C(r7, i, x, y) == 0 && sub_811B58C(r7, i, x2, y2) == 0) + else if (sub_811B58C(r7, i, x, y) == FALSE && sub_811B58C(r7, i, x2, y2) == FALSE) { - sub_811BBE0(r7, i, sub_811B524((r8->unk_04[i - 1] >> 3) & 1, r8->unk_04[i - 1] & 7), r8); + sub_811BBE0(r7, i, GetUnionRoomPlayerGraphicsId((r8->unk_04[i - 1] >> 3) & 1, r8->unk_04[i - 1] & 7), r8); } } } -void sub_811BDA8(u32 r5, struct GFtgtGname * r4) +static void sub_811BDA8(u32 r5, struct GFtgtGname * r4) { u32 i; switch (r4->unk_0a_0) @@ -525,7 +567,7 @@ void sub_811BDA8(u32 r5, struct GFtgtGname * r4) } } -void sub_811BE6C(u32 r5, struct GFtgtGname * unused) +static void sub_811BE6C(u32 r5, struct GFtgtGname * unused) { s32 i; sub_811B90C(r5); @@ -535,11 +577,11 @@ void sub_811BE6C(u32 r5, struct GFtgtGname * unused) } } -void sub_811BE8C(struct UnkStruct_URoom *r0) +static void UpdateUnionRoomPlayerSprites(struct UnkStruct_URoom *r0) { s32 i; struct UnkStruct_x20 * r4; - gUnknown_203B088 = 0; + sUnionObjRefreshTimer = 0; for (i = 0, r4 = r0->field_0->arr; i < 8; i++) { if (r4[i].field_1A_0 == 1) @@ -555,14 +597,14 @@ void sub_811BE8C(struct UnkStruct_URoom *r0) void sub_811BECC(struct UnkStruct_URoom *unused) { - gUnknown_203B088 = 300; + sUnionObjRefreshTimer = 300; } void sub_811BEDC(struct UnkStruct_URoom *r2) { - if (++gUnknown_203B088 > 300) + if (++sUnionObjRefreshTimer > 300) { - sub_811BE8C(r2); + UpdateUnionRoomPlayerSprites(r2); } } @@ -581,11 +623,11 @@ bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3) for (j = 0; j < 5; j++) { s32 r3 = 5 * i + j; - if (x != gUnknown_84570EC[i][0] + gUnknown_845710C[j][0] + 7) + if (x != sUnionPartnerCoords[i][0] + sFacingDirectionOffsets[j][0] + 7) { continue; } - if (y != gUnknown_84570EC[i][1] + gUnknown_845710C[j][1] + 7) + if (y != sUnionPartnerCoords[i][1] + sFacingDirectionOffsets[j][1] + 7) { continue; } @@ -601,7 +643,7 @@ bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3) { continue; } - sub_811C008(j, i, gUnknown_8457116[GetPlayerFacingDirection()]); + sub_811C008(j, i, sOppositeFacingDirection[GetPlayerFacingDirection()]); *arg1 = j; *arg2 = i; return TRUE; @@ -610,7 +652,7 @@ bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3) return FALSE; } -void sub_811C008(s32 arg0, s32 arg1, u8 arg2) +static void sub_811C008(s32 arg0, s32 arg1, u8 arg2) { sub_8069058(5 * arg1 - 0x38 + arg0, arg2); } diff --git a/src/union_room.c b/src/union_room.c index 0441c8276..46797f2fa 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -649,7 +649,7 @@ static void sub_8115A68(u8 taskId) case 0: gUnknown_203B058 = gUnknown_8456CD8[gSpecialVar_0x8004]; gUnknown_203B059 = gUnknown_8456CD8[gSpecialVar_0x8004] >> 8; - sub_80FAF58(gUnknown_203B058, 0, 0); + SetHostRFUtgtGname(gUnknown_203B058, 0, 0); sub_800B1F4(); OpenLink(); sub_80FBB8C(gUnknown_203B059 & 0xF); @@ -1180,7 +1180,7 @@ static void sub_8116738(u8 taskId) switch (data->state) { case 0: - sub_80FAF58(gUnknown_84570C8[gSpecialVar_0x8004], 0, 0); + SetHostRFUtgtGname(gUnknown_84570C8[gSpecialVar_0x8004], 0, 0); gUnknown_203B058 = gUnknown_84570C8[gSpecialVar_0x8004]; sub_800B1F4(); OpenLink(); @@ -1468,7 +1468,7 @@ static void sub_8116E1C(u8 taskId) switch (data->state) { case 0: - sub_80FAF58(0, 0, 0); + SetHostRFUtgtGname(0, 0, 0); sub_800B1F4(); OpenLink(); sub_80FBBD8(); @@ -1850,7 +1850,7 @@ static void sub_81175BC(u8 taskId) else { sub_80F8D14(); - sub_80FAF58(69, 0, 1); + SetHostRFUtgtGname(69, 0, 1); } sub_8128420(); break; @@ -1950,7 +1950,7 @@ static void sub_8117A0C(u8 taskId) case 0: gUnknown_203B058 = data->field_18; gUnknown_203B059 = 2; - sub_80FAF58(data->field_18, 0, 0); + SetHostRFUtgtGname(data->field_18, 0, 0); sub_80FAF74(FALSE, FALSE); sub_800B1F4(); OpenLink(); @@ -2156,7 +2156,7 @@ static void sub_8117F20(u8 taskId) switch (data->state) { case 0: - sub_80FAF58(data->field_12 + 21, 0, 0); + SetHostRFUtgtGname(data->field_12 + 21, 0, 0); sub_800B1F4(); OpenLink(); sub_80FBBD8(); @@ -2322,7 +2322,7 @@ static void sub_81182DC(u8 taskId) switch (data->state) { case 0: - sub_80FAF58(0, 0, 0); + SetHostRFUtgtGname(0, 0, 0); sub_800B1F4(); OpenLink(); sub_80FBBD8(); @@ -2552,7 +2552,7 @@ static void sub_81186E0(u8 taskId) sub_811A5E4(data->field_0->arr, 8); gUnknown_203B058 = 0x40; data->field_20 = sub_8119E84(data->field_C, data->field_4, 9); - sub_811B754(data->field_A0); + ZeroUnionObjWork(data->unionObjs); sub_811BB68(); data->state = 1; break; @@ -2562,7 +2562,7 @@ static void sub_81186E0(u8 taskId) data->state = 2; break; case 2: - sub_80FAF58(0x40, 0, 0); + SetHostRFUtgtGname(0x40, 0, 0); sub_80FAFA0(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); sub_800B1F4(); OpenLink(); @@ -3359,7 +3359,7 @@ static void sub_81199FC(u8 taskId) structPtr->state = 1; break; case 1: - sub_80FAF58(0xC, 0, 0); + SetHostRFUtgtGname(0xC, 0, 0); sub_800B1F4(); OpenLink(); sub_80FBC00(); @@ -4547,21 +4547,21 @@ static void sub_811B31C(u8 *unused, struct UnkStruct_URoom * arg1, bool8 arg2) DynamicPlaceholderTextUtil_Reset(); - StringCopy(arg1->field_C0[0], gTrainerClassNames[sub_80447F0()]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, arg1->field_C0[0]); + StringCopy(arg1->trainerCardStrbufs[0], gTrainerClassNames[sub_80447F0()]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, arg1->trainerCardStrbufs[0]); DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, trainerCard->playerName); StringCopy(arg1->field_174, gUnknown_84594B0[trainerCard->stars]); DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, arg1->field_174); - ConvertIntToDecimalStringN(arg1->field_C0[2], trainerCard->caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, arg1->field_C0[2]); + ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[2], trainerCard->caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, arg1->trainerCardStrbufs[2]); - ConvertIntToDecimalStringN(arg1->field_C0[3], trainerCard->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); - ConvertIntToDecimalStringN(arg1->field_C0[4], trainerCard->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, arg1->field_C0[3]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, arg1->field_C0[4]); + ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[3], trainerCard->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[4], trainerCard->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, arg1->trainerCardStrbufs[3]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, arg1->trainerCardStrbufs[4]); DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_84594C4); StringCopy(gStringVar4, arg1->field_1A4); @@ -4571,24 +4571,24 @@ static void sub_811B31C(u8 *unused, struct UnkStruct_URoom * arg1, bool8 arg2) { n = 9999; } - ConvertIntToDecimalStringN(arg1->field_C0[0], n, STR_CONV_MODE_LEFT_ALIGN, 4); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, arg1->field_C0[0]); + ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[0], n, STR_CONV_MODE_LEFT_ALIGN, 4); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, arg1->trainerCardStrbufs[0]); n = trainerCard->linkBattleLosses; if (n > 9999) { n = 9999; } - ConvertIntToDecimalStringN(arg1->field_C0[1], n, STR_CONV_MODE_LEFT_ALIGN, 4); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, arg1->field_C0[1]); + ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[1], n, STR_CONV_MODE_LEFT_ALIGN, 4); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, arg1->trainerCardStrbufs[1]); - ConvertIntToDecimalStringN(arg1->field_C0[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, arg1->field_C0[2]); + ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, arg1->trainerCardStrbufs[2]); for (i = 0; i < 4; i++) { - CopyEasyChatWord(arg1->field_C0[i + 3], trainerCard->var_28[i]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, arg1->field_C0[i + 3]); + CopyEasyChatWord(arg1->trainerCardStrbufs[i + 3], trainerCard->var_28[i]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, arg1->trainerCardStrbufs[i + 3]); } DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_8459504); -- cgit v1.2.3 From 2037045ab0dadd4566b4ba123672ab533ee50197 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 Jan 2020 14:42:18 -0500 Subject: UnkStruct_Shared.gname --- src/link_rfu_3.c | 6 +- src/rfu_union_tool.c | 6 +- src/union_room.c | 156 ++++++++++++++--------------- src/wireless_communication_status_screen.c | 4 +- 4 files changed, 86 insertions(+), 86 deletions(-) (limited to 'src') diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 2e09dc0a0..31ea0830b 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -603,7 +603,7 @@ static u8 GetConnectedChildStrength(u8 maxFlags) } #endif -void InitHostRFUtgtGname(struct GFtgtGname *data, u8 r9, bool32 r2, s32 r3) +void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 r2, s32 r3) { s32 i; @@ -617,7 +617,7 @@ void InitHostRFUtgtGname(struct GFtgtGname *data, u8 r9, bool32 r2, s32 r3) r3 >>= 8; } data->playerGender = gSaveBlock2Ptr->playerGender; - data->unk_0a_0 = r9; + data->unk_0a_0 = activity; data->unk_0a_7 = r2; data->unk_00.unk_00_0 = GAME_LANGUAGE; data->unk_00.unk_01_2 = GAME_VERSION; @@ -929,7 +929,7 @@ void RecordMixTrainerNames(void) } } -bool32 sub_80FD338(u16 id, u8 *name) +bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name) { s32 i; diff --git a/src/rfu_union_tool.c b/src/rfu_union_tool.c index c3f6de9c1..20b29de9b 100644 --- a/src/rfu_union_tool.c +++ b/src/rfu_union_tool.c @@ -586,11 +586,11 @@ static void UpdateUnionRoomPlayerSprites(struct UnkStruct_URoom *r0) { if (r4[i].field_1A_0 == 1) { - sub_811BDA8(i, &r4[i].unk.field_0); + sub_811BDA8(i, &r4[i].unk.gname); } else if (r4[i].field_1A_0 == 2) { - sub_811BE6C(i, &r4[i].unk.field_0); + sub_811BE6C(i, &r4[i].unk.gname); } } } @@ -659,5 +659,5 @@ static void sub_811C008(s32 arg0, s32 arg1, u8 arg2) void sub_811C028(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2) { - return sub_811C008(arg0, arg1, sub_811BBA0(arg0, arg1, &arg2->arr[arg1].unk.field_0)); + return sub_811C008(arg0, arg1, sub_811BBA0(arg0, arg1, &arg2->arr[arg1].unk.gname)); } diff --git a/src/union_room.c b/src/union_room.c index 46797f2fa..9b1e4028c 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -111,7 +111,7 @@ static s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 play static void nullsub_92(u8 windowId, s32 itemId, u8 y); static void sub_811ACA4(u8 windowId, s32 itemId, u8 y); static s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1); -static s32 sub_811ADC4(s32 a0, struct UnkStruct_Main0 * a1); +static s32 GetUnionRoomPlayerGender(s32 a0, struct UnkStruct_Main0 * a1); static s32 sub_811ADD0(u32 type, u32 species); static void sub_811AE68(u8 *dst, s32 arg1, u32 playerGender); static void sub_811AECC(u8 *dst, u8 arg1); @@ -560,12 +560,12 @@ static const u8 gUnknown_84570C8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0A, 0x0B, #define IntlConvPartnerUname7(dest, arg1) ({ \ StringCopy7(dest, (arg1).unk.playerName); \ - ConvertInternationalString(dest, (arg1).unk.field_0.unk_00.unk_00_0); \ + ConvertInternationalString(dest, (arg1).unk.gname.unk_00.unk_00_0); \ }) #define IntlConvPartnerUname(dest, arg1) ({ \ StringCopy(dest, (arg1).unk.playerName); \ - ConvertInternationalString(dest, (arg1).unk.field_0.unk_00.unk_00_0); \ + ConvertInternationalString(dest, (arg1).unk.gname.unk_00.unk_00_0); \ }) #define CopyTrainerCardData(dest, src, _version) ({ \ @@ -661,7 +661,7 @@ static void sub_8115A68(u8 taskId) data->field_8 = AllocZeroed(0xA0); sub_811A650(data->field_4, 4); sub_811A5E4(data->field_0->arr, 5); - LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].unk.field_0, data->field_0->arr[0].unk.playerName); + LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].unk.gname, data->field_0->arr[0].unk.playerName); data->field_0->arr[0].field_18 = 0; data->field_0->arr[0].field_1A_0 = 1; data->field_0->arr[0].field_1A_1 = 0; @@ -765,19 +765,19 @@ static void sub_8115A68(u8 taskId) } break; case 11: - switch (sub_811A14C(&data->textState, sub_80FA634(ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName))) + switch (sub_811A14C(&data->textState, sub_80FA634(ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName))) { case 0: LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); data->field_19 = 5; - sub_80FA670(5, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + sub_80FA670(5, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); data->state = 12; break; case 1: case -1: data->field_19 = 6; - sub_80FA670(6, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + sub_80FA670(6, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); data->state = 12; break; case -3: @@ -786,7 +786,7 @@ static void sub_8115A68(u8 taskId) } break; case 12: - val = sub_80FA6FC(ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + val = sub_80FA6FC(ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); if (val == 1) { if (data->field_19 == 5) @@ -817,7 +817,7 @@ static void sub_8115A68(u8 taskId) } else { - sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId)); + sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId)); data->field_0->arr[data->field_13].field_1A_0 = 0; sub_81165E8(data->field_0); RedrawListMenu(data->listTaskId); @@ -1234,9 +1234,9 @@ static void sub_8116738(u8 taskId) { // this unused variable along with the assignment is needed to match u32 unusedVar; - unusedVar = data->field_0->arr[id].unk.field_0.unk_0a_0; + unusedVar = data->field_0->arr[id].unk.gname.unk_0a_0; - if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.field_0.unk_0a_7) + if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.gname.unk_0a_7) { u32 var = sub_8116D10(data, id); if (var == 0) @@ -1278,7 +1278,7 @@ static void sub_8116738(u8 taskId) case 6: if (gReceivedRemoteLinkPlayers != 0) { - gUnknown_203B058 = data->field_0->arr[data->field_F].unk.field_0.unk_0a_0; + gUnknown_203B058 = data->field_0->arr[data->field_F].unk.gname.unk_0a_0; sub_80FB9E4(0, 0); switch (gUnknown_203B058) { @@ -1419,11 +1419,11 @@ static u32 sub_8116D10(struct UnkStruct_Group * arg0, s32 id) { struct UnkStruct_x20 * structPtr = &arg0->field_0->arr[id]; - if (gUnknown_203B058 == 4 && structPtr->unk.field_0.unk_00.unk_01_2 != VERSION_FIRE_RED && structPtr->unk.field_0.unk_00.unk_01_2 != VERSION_LEAF_GREEN) + if (gUnknown_203B058 == 4 && structPtr->unk.gname.unk_00.unk_01_2 != VERSION_FIRE_RED && structPtr->unk.gname.unk_00.unk_01_2 != VERSION_LEAF_GREEN) { if (!(gSaveBlock2Ptr->specialSaveWarpFlags & CHAMPION_SAVEWARP)) return 1; - else if (structPtr->unk.field_0.unk_00.isChampion) + else if (structPtr->unk.gname.unk_00.isChampion) return 0; } else @@ -1442,7 +1442,7 @@ static void sub_8116D60(struct UnkStruct_Group * data, s32 id) RedrawListMenu(data->listTaskId); IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->field_F]); sub_80FB008(gUnknown_84570C8[gSpecialVar_0x8004], 0, 1); - sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.field_0.unk_00.playerTrainerId)); + sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.gname.unk_00.playerTrainerId)); } u8 sub_8116DE0(void) @@ -1528,7 +1528,7 @@ static u8 sub_8116F5C(struct UnkStruct_Group * data, u32 id) { if (data->field_0->arr[id].field_1A_0 == 1) { - if (data->field_0->arr[id].unk.field_0.unk_0a_7) + if (data->field_0->arr[id].unk.gname.unk_0a_7) return 3; else if (data->field_0->arr[id].field_1A_1 != 0) return 1; @@ -1963,7 +1963,7 @@ static void sub_8117A0C(u8 taskId) data->field_8 = AllocZeroed(0xA0); sub_811A650(data->field_4, 4); sub_811A5E4(data->field_0->arr, 5); - LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].unk.field_0, data->field_0->arr[0].unk.playerName); + LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].unk.gname, data->field_0->arr[0].unk.playerName); data->field_0->arr[0].field_18 = 0; data->field_0->arr[0].field_1A_0 = 1; data->field_0->arr[0].field_1A_1 = 0; @@ -2019,19 +2019,19 @@ static void sub_8117A0C(u8 taskId) data->field_0->arr[data->field_13].field_1B = 0; RedrawListMenu(data->listTaskId); data->field_19 = 5; - sub_80FA670(5, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + sub_80FA670(5, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); data->state = 8; break; case 1: case -1: data->field_19 = 6; - sub_80FA670(6, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + sub_80FA670(6, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); data->state = 8; break; } break; case 8: - val = sub_80FA6FC(ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + val = sub_80FA6FC(ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); if (val == 1) { if (data->field_19 == 5) @@ -2046,7 +2046,7 @@ static void sub_8117A0C(u8 taskId) } else { - sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId)); + sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId)); data->field_0->arr[data->field_13].field_1A_0 = 0; sub_81165E8(data->field_0); RedrawListMenu(data->listTaskId); @@ -2209,16 +2209,16 @@ static void sub_8117F20(u8 taskId) { // this unused variable along with the assignment is needed to match u32 unusedVar; - unusedVar = data->field_0->arr[id].unk.field_0.unk_0a_0; + unusedVar = data->field_0->arr[id].unk.gname.unk_0a_0; - if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.field_0.unk_0a_7) + if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.gname.unk_0a_7) { data->field_F = id; LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); RedrawListMenu(data->listTaskId); IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->field_F]); - sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.field_0.unk_00.playerTrainerId)); + sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.gname.unk_00.playerTrainerId)); PlaySE(SE_PN_ON); data->state = 4; } @@ -2242,7 +2242,7 @@ static void sub_8117F20(u8 taskId) case 5: if (gReceivedRemoteLinkPlayers != 0) { - gUnknown_203B058 = data->field_0->arr[data->field_F].unk.field_0.unk_0a_0; + gUnknown_203B058 = data->field_0->arr[data->field_F].unk.gname.unk_0a_0; data->state = 10; } @@ -2371,15 +2371,15 @@ static void sub_81182DC(u8 taskId) id = ListMenu_ProcessInput(data->listTaskId); if (data->field_14 > 120) { - if (data->field_0->arr[0].field_1A_0 == 1 && !data->field_0->arr[0].unk.field_0.unk_0a_7) + if (data->field_0->arr[0].field_1A_0 == 1 && !data->field_0->arr[0].unk.gname.unk_0a_7) { - if (sub_8119FB0(&data->field_0->arr[0].unk.field_0, data->field_12 + 7)) + if (sub_8119FB0(&data->field_0->arr[0].unk.gname, data->field_12 + 7)) { data->field_F = 0; data->field_14 = 0; LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); - sub_80FBF54(data->field_0->arr[0].unk.playerName, ReadAsU16(data->field_0->arr[0].unk.field_0.unk_00.playerTrainerId)); + sub_80FBF54(data->field_0->arr[0].unk.playerName, ReadAsU16(data->field_0->arr[0].unk.gname.unk_00.playerTrainerId)); PlaySE(SE_PN_ON); data->state = 4; } @@ -2407,7 +2407,7 @@ static void sub_81182DC(u8 taskId) case 5: if (gReceivedRemoteLinkPlayers != 0) { - gUnknown_203B058 = data->field_0->arr[data->field_F].unk.field_0.unk_0a_0; + gUnknown_203B058 = data->field_0->arr[data->field_F].unk.gname.unk_0a_0; data->state = 12; } @@ -2694,7 +2694,7 @@ static void sub_81186E0(u8 taskId) break; case 24: sub_811A0E0(); - playerGender = sub_811ADC4(taskData[1], data->field_0); + playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); sub_80FB008(0x54, 0, 1); switch (sub_811AA5C(data->field_0, taskData[0], taskData[1], playerGender)) { @@ -2702,7 +2702,7 @@ static void sub_81186E0(u8 taskId) data->state = 26; break; case 1: - sub_80FC114(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.field_0, gUnknown_203B058); + sub_80FC114(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.gname, gUnknown_203B058); data->field_12 = id; // Should be just 0, but won't match any other way. data->state = 25; break; @@ -2756,7 +2756,7 @@ static void sub_81186E0(u8 taskId) break; case 5: id = sub_811AA24(&data->field_0->arr[taskData[1]]); - playerGender = sub_811ADC4(taskData[1], data->field_0); + playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); sub_8118664(6, gUnknown_8457B04[id][playerGender]); break; case 6: @@ -2770,7 +2770,7 @@ static void sub_81186E0(u8 taskId) else { data->field_98 = 0; - playerGender = sub_811ADC4(taskData[1], data->field_0); + playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); if (var5 == -2 || var5 == 0x40) { data->field_4C[0] = 0x40; @@ -2802,7 +2802,7 @@ static void sub_81186E0(u8 taskId) break; case 27: sub_811B0A4(data); - playerGender = sub_811ADC4(taskData[1], data->field_0); + playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); id = sub_811A9FC(data->field_4C[0] & 0x3F); if (PrintOnTextbox(&data->textState, gUnknown_84580F4[playerGender][id])) { @@ -2853,7 +2853,7 @@ static void sub_81186E0(u8 taskId) case 7: id = sub_811AA24(&data->field_0->arr[taskData[1]]); - playerGender = sub_811ADC4(taskData[1], data->field_0); + playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); sub_8118664(6, gUnknown_8457B04[id][playerGender]); break; case 40: @@ -2871,7 +2871,7 @@ static void sub_81186E0(u8 taskId) if (GetMultiplayerId() == 0) { StringCopy(gStringVar1, gLinkPlayers[GetMultiplayerId() ^ 1].name); - id = sub_80FD338(gLinkPlayers[1].trainerId, gLinkPlayers[1].name); + id = PlayerHasMetTrainerBefore(gLinkPlayers[1].trainerId, gLinkPlayers[1].name); StringExpandPlaceholders(gStringVar4, gUnknown_8457C20[id]); data->state = 33; } @@ -2888,14 +2888,14 @@ static void sub_81186E0(u8 taskId) CopyBgTilemapBufferToVram(0); gUnknown_203B058 = 0x45; sub_80FB008(0x45, 0, 1); - sub_80FC114(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.field_0, gUnknown_203B058); + sub_80FC114(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.gname, gUnknown_203B058); data->field_12 = taskData[1]; data->state = 20; taskData[3] = 0; break; case 1: case -1: - playerGender = sub_811ADC4(taskData[1], data->field_0); + playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); sub_811868C(gUnknown_8458548[playerGender]); break; } @@ -2916,7 +2916,7 @@ static void sub_81186E0(u8 taskId) break; case 1: case 2: - playerGender = sub_811ADC4(taskData[1], data->field_0); + playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); sub_80FB008(0x54, 0, 1); if (sub_80FBB0C() == TRUE) sub_811868C(gUnknown_84585E8[playerGender]); @@ -2932,7 +2932,7 @@ static void sub_81186E0(u8 taskId) case 22: if (sub_80FBA00()) { - playerGender = sub_811ADC4(taskData[1], data->field_0); + playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); sub_80FB008(0x54, 0, 1); if (sub_80FBB0C() == TRUE) sub_811868C(gUnknown_84585E8[playerGender]); @@ -2967,7 +2967,7 @@ static void sub_81186E0(u8 taskId) { data->state = 33; StringCopy(gStringVar1, gLinkPlayers[1].name); - id = sub_80FD338(gLinkPlayers[1].trainerId, gLinkPlayers[1].name); + id = PlayerHasMetTrainerBefore(gLinkPlayers[1].trainerId, gLinkPlayers[1].name); StringExpandPlaceholders(gStringVar4, gUnknown_8457BCC[id]); } break; @@ -3214,7 +3214,7 @@ static void sub_81186E0(u8 taskId) data->state = 4; break; default: - switch (sub_811ADD0(data->field_0->arr[var5].unk.field_0.type, data->field_0->arr[var5].unk.field_0.species)) + switch (sub_811ADD0(data->field_0->arr[var5].unk.gname.type, data->field_0->arr[var5].unk.gname.species)) { case 0: IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]); @@ -3223,12 +3223,12 @@ static void sub_81186E0(u8 taskId) break; case 1: IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]); - StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.field_0.type]); + StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.gname.type]); sub_8118664(46, gUnknown_8458ED0); break; case 2: IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]); - StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.field_0.type]); + StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.gname.type]); sub_8118664(46, gUnknown_8458F04); break; } @@ -3253,9 +3253,9 @@ static void sub_81186E0(u8 taskId) if (PrintOnTextbox(&data->textState, gUnknown_8458D1C)) { sUnionRoomTrade.field_0 = 2; - memcpy(&gUnknown_203B064, &data->field_0->arr[taskData[1]].unk.field_0.unk_00, sizeof(gUnknown_203B064)); - gUnionRoomRequestedMonType = data->field_0->arr[taskData[1]].unk.field_0.type; - gUnionRoomOfferedSpecies = data->field_0->arr[taskData[1]].unk.field_0.species; + memcpy(&gUnknown_203B064, &data->field_0->arr[taskData[1]].unk.gname.unk_00, sizeof(gUnknown_203B064)); + gUnionRoomRequestedMonType = data->field_0->arr[taskData[1]].unk.gname.type; + gUnionRoomOfferedSpecies = data->field_0->arr[taskData[1]].unk.gname.species; gFieldCallback = sub_807DCE4; ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_TRADE, CB2_ReturnToField); sub_81186B0(data); @@ -3264,7 +3264,7 @@ static void sub_81186E0(u8 taskId) break; case 51: gUnknown_203B058 = 0x44; - sub_80FC114(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.field_0, 0x44); + sub_80FC114(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.gname, 0x44); IntlConvPartnerUname(gStringVar1, data->field_0->arr[taskData[1]]); sub_811A0B4(gUnknown_8457A34[2]); data->state = 25; @@ -3390,7 +3390,7 @@ static void sub_81199FC(u8 taskId) if (structPtr->field_0->arr[i].field_1A_0 == 1) { IntlConvPartnerUname(text, structPtr->field_0->arr[i]); - if (sub_80FD338(ReadAsU16(structPtr->field_0->arr[i].unk.field_0.unk_00.playerTrainerId), text)) + if (PlayerHasMetTrainerBefore(ReadAsU16(structPtr->field_0->arr[i].unk.gname.unk_00.playerTrainerId), text)) { StringCopy(sUnionRoomPlayerName, text); break; @@ -3515,12 +3515,12 @@ static void sub_8119D34(u8 taskId) for (i = 0; i < 4; i++) { - r4 = sub_80FCC3C(&sp0.field_0, sp0.playerName, i); - if (!sub_8116F28(sp0.field_0.unk_0a_0, gTasks[taskId].data[4])) + r4 = sub_80FCC3C(&sp0.gname, sp0.playerName, i); + if (!sub_8116F28(sp0.gname.unk_0a_0, gTasks[taskId].data[4])) { sp0 = gUnknown_8457034; } - if (sp0.field_0.unk_00.unk_00_0 == 1) + if (sp0.gname.unk_00.unk_00_0 == 1) { sp0 = gUnknown_8457034; } @@ -3561,8 +3561,8 @@ static void sub_8119EB8(u8 taskId) for (i = 0; i < 4; i++) { - sub_80FCC3C(&ptr[0]->arr[i].unk0.field_0, ptr[0]->arr[i].unk0.playerName, i); - if (!sub_8116F28(ptr[0]->arr[i].unk0.field_0.unk_0a_0, gTasks[taskId].data[2])) + sub_80FCC3C(&ptr[0]->arr[i].unk0.gname, ptr[0]->arr[i].unk0.playerName, i); + if (!sub_8116F28(ptr[0]->arr[i].unk0.gname.unk_0a_0, gTasks[taskId].data[2])) { ptr[0]->arr[i].unk0 = gUnknown_8457034; } @@ -3614,9 +3614,9 @@ static void sub_8119FD8(u8 taskId) for (i = 0; i < 4; i++) { - if (sub_80FCCF4(&ptr[0]->arr[i].unk0.field_0, ptr[0]->arr[i].unk0.playerName, i)) + if (sub_80FCCF4(&ptr[0]->arr[i].unk0.gname, ptr[0]->arr[i].unk0.playerName, i)) { - sub_8119FB0(&ptr[0]->arr[i].unk0.field_0, gTasks[taskId].data[2]); + sub_8119FB0(&ptr[0]->arr[i].unk0.gname, gTasks[taskId].data[2]); } ptr[0]->arr[i].unk18 = sub_811A694(&ptr[0]->arr[i].unk0, &gUnknown_8457034); } @@ -3939,7 +3939,7 @@ static bool8 sub_811A694(struct UnkStruct_Shared * arg0, const struct UnkStruct_ for (i = 0; i < 2; i++) { - if (arg0->field_0.unk_00.playerTrainerId[i] != arg1->field_0.unk_00.playerTrainerId[i]) + if (arg0->gname.unk_00.playerTrainerId[i] != arg1->gname.unk_00.playerTrainerId[i]) { return TRUE; } @@ -3960,30 +3960,30 @@ static bool32 sub_811A6DC(struct UnkStruct_Shared * arg0, struct UnkStruct_Share { s32 i; - if (arg0->field_0.unk_0a_0 != arg1->field_0.unk_0a_0) + if (arg0->gname.unk_0a_0 != arg1->gname.unk_0a_0) { return TRUE; } - if (arg0->field_0.unk_0a_7 != arg1->field_0.unk_0a_7) + if (arg0->gname.unk_0a_7 != arg1->gname.unk_0a_7) { return TRUE; } for (i = 0; i < 4; i++) { - if (arg0->field_0.unk_04[i] != arg1->field_0.unk_04[i]) + if (arg0->gname.unk_04[i] != arg1->gname.unk_04[i]) { return TRUE; } } - if (arg0->field_0.species != arg1->field_0.species) + if (arg0->gname.species != arg1->gname.species) { return TRUE; } - if (arg0->field_0.type != arg1->field_0.type) + if (arg0->gname.type != arg1->gname.type) { return TRUE; } @@ -4041,12 +4041,12 @@ static void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 * arg3, StringAppend(gStringVar4, gUnknown_84571B0); sub_811A444(arg0, 0, gStringVar4, arg1, arg2, 0); arg1 += 18; - r2 = arg3->unk.field_0.unk_0a_0; + r2 = arg3->unk.gname.unk_0a_0; if (arg3->field_1A_0 == 1 && !(r2 & 0x40)) { IntlConvPartnerUname(sp10, *arg3); sub_811A444(arg0, 2, sp10, arg1, arg2, arg4); - ConvertIntToDecimalStringN(sp0, arg3->unk.field_0.unk_00.playerTrainerId[0] | (arg3->unk.field_0.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); + ConvertIntToDecimalStringN(sp0, arg3->unk.gname.unk_00.playerTrainerId[0] | (arg3->unk.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); StringCopy(gStringVar4, gUnknown_84571B4); StringAppend(gStringVar4, sp0); arg1 += 77; @@ -4063,7 +4063,7 @@ static void sub_811A910(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * arg3, u8 { IntlConvPartnerUname(sp10, *arg3); sub_811A444(windowId, 2, sp10, x, y, arg4); - ConvertIntToDecimalStringN(sp0, arg3->unk.field_0.unk_00.playerTrainerId[0] | (arg3->unk.field_0.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); + ConvertIntToDecimalStringN(sp0, arg3->unk.gname.unk_00.playerTrainerId[0] | (arg3->unk.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); StringCopy(gStringVar4, gUnknown_84571B4); StringAppend(gStringVar4, sp0); x += 71; @@ -4111,7 +4111,7 @@ static u32 sub_811AA24(struct UnkStruct_x20 * arg0) { u8 sp0[30]; IntlConvPartnerUname(sp0, *arg0); - return sub_80FD338(ReadAsU16(arg0->unk.field_0.unk_00.playerTrainerId), sp0); + return PlayerHasMetTrainerBefore(ReadAsU16(arg0->unk.gname.unk_00.playerTrainerId), sp0); } static s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 playerGender) @@ -4120,11 +4120,11 @@ static s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 play struct UnkStruct_x20 * r5 = &arg0->arr[arg2]; - if (!r5->unk.field_0.unk_0a_7 && arg1 == 0) + if (!r5->unk.gname.unk_0a_7 && arg1 == 0) { IntlConvPartnerUname(gStringVar1, *r5); - r2 = sub_80FD338(ReadAsU16(r5->unk.field_0.unk_00.playerTrainerId), gStringVar1); - if (r5->unk.field_0.unk_0a_0 == 0x45) + r2 = PlayerHasMetTrainerBefore(ReadAsU16(r5->unk.gname.unk_00.playerTrainerId), gStringVar1); + if (r5->unk.gname.unk_0a_0 == 0x45) { StringExpandPlaceholders(gStringVar4, gUnknown_8457F80[r2][playerGender]); return 2; @@ -4140,9 +4140,9 @@ static s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 play IntlConvPartnerUname(gStringVar1, *r5); if (arg1 != 0) { - playerGender = (r5->unk.field_0.unk_00.playerTrainerId[arg1 + 1] >> 3) & 1; + playerGender = (r5->unk.gname.unk_00.playerTrainerId[arg1 + 1] >> 3) & 1; } - switch (r5->unk.field_0.unk_0a_0 & 0x3F) + switch (r5->unk.gname.unk_0a_0 & 0x3F) { case 1: StringExpandPlaceholders(gStringVar4, gUnknown_8458758[playerGender][Random() % 4]); @@ -4210,14 +4210,14 @@ static void sub_811ACA4(u8 windowId, s32 itemId, u8 y) j = 0; for (i = 0; i < 8; i++) { - if (leader->field_0->arr[i].field_1A_0 == 1 && leader->field_0->arr[i].unk.field_0.species != SPECIES_NONE) + if (leader->field_0->arr[i].field_1A_0 == 1 && leader->field_0->arr[i].unk.gname.species != SPECIES_NONE) { j++; } if (j == itemId + 1) { IntlConvPartnerUname(uname, leader->field_0->arr[i]); - sub_811ABE4(windowId, y, &leader->field_0->arr[i].unk.field_0, uname, 6); + sub_811ABE4(windowId, y, &leader->field_0->arr[i].unk.gname, uname, 6); break; } } @@ -4231,7 +4231,7 @@ static s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1) for (i = 0; i < 8; i++) { - if (arg[i].field_1A_0 == 1 && arg[i].unk.field_0.species != SPECIES_NONE) + if (arg[i].field_1A_0 == 1 && arg[i].unk.gname.species != SPECIES_NONE) { j++; } @@ -4244,9 +4244,9 @@ static s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1) return -1; } -static s32 sub_811ADC4(s32 arg1, struct UnkStruct_Main0 * arg0) +static s32 GetUnionRoomPlayerGender(s32 arg1, struct UnkStruct_Main0 * arg0) { - return arg0->arr[arg1].unk.field_0.playerGender; + return arg0->arr[arg1].unk.gname.playerGender; } static s32 sub_811ADD0(u32 type, u32 species) @@ -4530,8 +4530,8 @@ static u8 sub_811B2D8(struct UnkStruct_URoom * arg0) { if (arg0->field_C->arr[i].unk18) { - retVal |= arg0->field_C->arr[i].unk0.field_0.playerGender << 3; - retVal |= arg0->field_C->arr[i].unk0.field_0.unk_00.playerTrainerId[0] & 7; + retVal |= arg0->field_C->arr[i].unk0.gname.playerGender << 3; + retVal |= arg0->field_C->arr[i].unk0.gname.unk_00.playerTrainerId[0] & 7; break; } } diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index 1c355c3ba..9be2823aa 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -364,7 +364,7 @@ void sub_814F65C(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 palIdx) u32 sub_814F714(struct UnkStruct_x20 * unk20, u32 * arg1) { - u32 r8 = unk20->unk.field_0.unk_0a_0; + u32 r8 = unk20->unk.gname.unk_0a_0; s32 i, j, k; for (i = 0; i < NELEMS(gUnknown_846FAC0); i++) @@ -376,7 +376,7 @@ u32 sub_814F714(struct UnkStruct_x20 * unk20, u32 * arg1) k = 0; for (j = 0; j < 4; j++) { - if (unk20->unk.field_0.unk_04[j] != 0) k++; + if (unk20->unk.gname.unk_04[j] != 0) k++; } k++; arg1[gUnknown_846FAC0[i][1]] += k; -- cgit v1.2.3 From 12d12e70a170896844f3280d6968e1e2d6cf1cba Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 Jan 2020 15:46:48 -0500 Subject: union_room_battle --- src/union_room_battle.c | 225 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 225 insertions(+) create mode 100644 src/union_room_battle.c (limited to 'src') diff --git a/src/union_room_battle.c b/src/union_room_battle.c new file mode 100644 index 000000000..449aa8d57 --- /dev/null +++ b/src/union_room_battle.c @@ -0,0 +1,225 @@ +#include "global.h" +#include "bg.h" +#include "battle.h" +#include "gpu_regs.h" +#include "link.h" +#include "malloc.h" +#include "menu.h" +#include "new_menu_helpers.h" +#include "overworld.h" +#include "palette.h" +#include "party_menu.h" +#include "strings.h" +#include "text_window.h" +#include "union_room.h" +#include "window.h" + +struct UnkStruct_203B08C +{ + s16 a0; +}; + +static EWRAM_DATA struct UnkStruct_203B08C * gUnknown_203B08C = NULL; + +static const struct BgTemplate gUnknown_8457194[] = { + { + .bg = 0, + .charBaseIndex = 3, + .mapBaseIndex = 31 + } +}; + +static const struct WindowTemplate gUnknown_8457198[] = { + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 26, + .height = 4, + .paletteNum = 14, + .baseBlock = 0x014 + }, DUMMY_WIN_TEMPLATE +}; + +static const u8 gUnknown_84571A8[] = {1, 2, 3}; + +static void sub_811C04C(void) +{ + s32 i; + sub_81173C0(BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER); + for (i = 0; i < 2; i++) + { + gEnemyParty[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; + } + for (i = 0; i < 6; i++) + { + ZeroMonData(&gPlayerParty[i]); + } + for (i = 0; i < 2; i++) + { + gPlayerParty[i] = gEnemyParty[i]; + } + IncrementGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES); + CalculatePlayerPartyCount(); + gTrainerBattleOpponent_A = TRAINER_OPPONENT_C00; + SetMainCallback2(CB2_InitBattle); +} + +static void sub_811C0E0(u8 windowId, const u8 * str, u8 x, u8 y, s32 speed) +{ + s32 letterSpacing = 1; + s32 lineSpacing = 1; + FillWindowPixelBuffer(windowId, PIXEL_FILL(gUnknown_84571A8[0])); + AddTextPrinterParameterized4(windowId, 3, x, y, letterSpacing, lineSpacing, gUnknown_84571A8, speed, str); +} + +static bool32 sub_811C150(s16 * state, const u8 * str, s32 speed) +{ + switch (*state) + { + case 0: + DrawTextBorderOuter(0, 0x001, 0xD); + sub_811C0E0(0, str, 0, 2, speed); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); + (*state)++; + break; + case 1: + if (!IsTextPrinterActive(0)) + { + *state = 0; + return TRUE; + } + break; + } + return FALSE; +} + +static void sub_811C1B4(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_811C1C8(void) +{ + switch (gMain.state) + { + case 0: + SetGpuReg(REG_OFFSET_DISPCNT, 0x0000); + gUnknown_203B08C = AllocZeroed(sizeof(struct UnkStruct_203B08C)); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_8457194, 1); + ResetTempTileDataBuffers(); + if (!InitWindows(gUnknown_8457198)) + { + return; + } + DeactivateAllTextPrinters(); + ClearWindowTilemap(0); + FillWindowPixelBuffer(0, 0x00); + FillWindowPixelBuffer(0, 0x11); + FillBgTilemapBufferRect(0, 0, 0, 0, 30, 20, 0xF); + TextWindow_SetStdFrame0_WithPal(0, 1, 0xD0); + Menu_LoadStdPal(); + SetVBlankCallback(sub_811C1B4); + gMain.state++; + break; + case 1: + if (sub_811C150(&gUnknown_203B08C->a0, gText_CommStandbyAwaitingOtherPlayer, 0)) + { + gMain.state++; + } + break; + case 2: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + ShowBg(0); + gMain.state++; + break; + case 3: + if (!UpdatePaletteFade()) + { + memset(gBlockSendBuffer, 0, 0x20); + if (gSelectedOrderFromParty[0] == -gSelectedOrderFromParty[1]) + { + gBlockSendBuffer[0] = 0x52; + } + else + { + gBlockSendBuffer[0] = 0x51; + } + SendBlock(0, gBlockSendBuffer, 0x20); + gMain.state++; + } + break; + case 4: + if (GetBlockReceivedStatus() == 3) + { + if (gBlockRecvBuffer[0][0] == 0x51 && gBlockRecvBuffer[1][0] == 0x51) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gMain.state = 50; + } + else + { + sub_800AAC0(); + if (gBlockRecvBuffer[GetMultiplayerId()][0] == 0x52) + { + gMain.state = 6; + } + else + { + gMain.state = 8; + } + } + ResetBlockReceivedFlags(); + } + break; + case 50: + if (!UpdatePaletteFade()) + { + sub_800AB9C(); + gMain.state++; + } + break; + case 51: + if (IsLinkTaskFinished()) + { + SetMainCallback2(sub_811C04C); + } + break; + case 6: + if (gReceivedRemoteLinkPlayers == 0) + { + gMain.state++; + } + break; + case 7: + if (sub_811C150(&gUnknown_203B08C->a0, gText_RefusedBattle, 1)) + { + SetMainCallback2(CB2_ReturnToField); + } + break; + case 8: + if (gReceivedRemoteLinkPlayers == 0) + { + gMain.state++; + } + break; + case 9: + if (sub_811C150(&gUnknown_203B08C->a0, gText_BattleWasRefused, 1)) + { + SetMainCallback2(CB2_ReturnToField); + } + break; + } + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} -- cgit v1.2.3 From 390d7975b3e68251dad231365338556ff2ffe5bb Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 Jan 2020 15:59:08 -0500 Subject: Resolve review comments, 1 --- src/mevent.c | 4 +-- src/union_room.c | 74 ++++++++++++++++++++++++++++---------------------------- 2 files changed, 39 insertions(+), 39 deletions(-) (limited to 'src') diff --git a/src/mevent.c b/src/mevent.c index c8ce39e23..afad326b5 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -652,7 +652,7 @@ void BlankMEventBuffer2(void) gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.crc = 0; } -u16 GetWonderCardFlagID(void) +u16 GetWonderCardFlagId(void) { if (ValidateReceivedWonderCard()) return gSaveBlock1Ptr->mysteryEventBuffers.mecard.data.unk_00; @@ -674,7 +674,7 @@ bool32 sub_8144124(u16 a0) bool32 CheckReceivedGiftFromWonderCard(void) { - u16 value = GetWonderCardFlagID(); + u16 value = GetWonderCardFlagId(); if (!sub_8144124(value)) return FALSE; if (FlagGet(gUnknown_8466F00[value - 1000]) == TRUE) diff --git a/src/union_room.c b/src/union_room.c index 9b1e4028c..40da25d2f 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -97,7 +97,7 @@ static void sub_811A3F8(void); static void sub_811A41C(void); static void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx); static void sub_811A5E4(struct UnkStruct_x20 * arg0, u8 count); -static void sub_811A650(struct UnkStruct_Main4 * arg0, u8 count); +static void sub_811A650(struct UnkStruct_x1C * arg0, u8 count); static bool8 sub_811A694(struct UnkStruct_Shared * arg0, const struct UnkStruct_Shared * arg1); static bool32 sub_811A6DC(struct UnkStruct_Shared * arg0, struct UnkStruct_Shared * arg1); static u32 sub_811A748(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1); @@ -656,10 +656,10 @@ static void sub_8115A68(u8 taskId) data->state = 3; break; case 3: - data->field_4 = AllocZeroed(0x70); - data->field_0 = AllocZeroed(0xA0); - data->field_8 = AllocZeroed(0xA0); - sub_811A650(data->field_4, 4); + data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); + data->field_0 = AllocZeroed(5 * sizeof(struct UnkStruct_x20)); + data->field_8 = AllocZeroed(5 * sizeof(struct UnkStruct_x20)); + sub_811A650(data->field_4->arr, 4); sub_811A5E4(data->field_0->arr, 5); LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].unk.gname, data->field_0->arr[0].unk.playerName); data->field_0->arr[0].field_18 = 0; @@ -1185,8 +1185,8 @@ static void sub_8116738(u8 taskId) sub_800B1F4(); OpenLink(); sub_80FBBD8(); - data->field_4 = AllocZeroed(0x70); - data->field_0 = AllocZeroed(0x200); + data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); + data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); data->state = 1; break; case 1: @@ -1194,7 +1194,7 @@ static void sub_8116738(u8 taskId) data->state = 2; break; case 2: - sub_811A650(data->field_4, 4); + sub_811A650(data->field_4->arr, 4); sub_811A5E4(data->field_0->arr, 16); data->field_11 = sub_811A054(data->field_4, gSpecialVar_0x8004); data->field_C = AddWindow(&gUnknown_8456CD0); @@ -1473,12 +1473,12 @@ static void sub_8116E1C(u8 taskId) OpenLink(); sub_80FBBD8(); sub_80FB128(TRUE); - data->field_4 = AllocZeroed(0x70); - data->field_0 = AllocZeroed(0x200); + data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); + data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); data->state = 2; break; case 2: - sub_811A650(data->field_4, 4); + sub_811A650(data->field_4->arr, 4); sub_811A5E4(data->field_0->arr, 16); data->field_11 = sub_811A054(data->field_4, 0xFF); data->field_F = 0; @@ -1779,7 +1779,7 @@ static void sub_8117594(void *arg0, bool32 arg1) { TrainerCard_GenerateCardForLinkPlayer((struct TrainerCard * )arg0); if (arg1) - *((u16 *)(arg0 + sizeof(struct TrainerCard))) = GetWonderCardFlagID(); + *((u16 *)(arg0 + sizeof(struct TrainerCard))) = GetWonderCardFlagId(); else *((u16 *)(arg0 + sizeof(struct TrainerCard))) = 0; } @@ -1958,10 +1958,10 @@ static void sub_8117A0C(u8 taskId) data->state = 1; break; case 1: - data->field_4 = AllocZeroed(0x70); - data->field_0 = AllocZeroed(0xA0); - data->field_8 = AllocZeroed(0xA0); - sub_811A650(data->field_4, 4); + data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); + data->field_0 = AllocZeroed(5 * sizeof(struct UnkStruct_x20)); + data->field_8 = AllocZeroed(5 * sizeof(struct UnkStruct_x20)); + sub_811A650(data->field_4->arr, 4); sub_811A5E4(data->field_0->arr, 5); LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].unk.gname, data->field_0->arr[0].unk.playerName); data->field_0->arr[0].field_18 = 0; @@ -2160,8 +2160,8 @@ static void sub_8117F20(u8 taskId) sub_800B1F4(); OpenLink(); sub_80FBBD8(); - data->field_4 = AllocZeroed(0x70); - data->field_0 = AllocZeroed(0x200); + data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); + data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); data->state = 1; break; case 1: @@ -2169,7 +2169,7 @@ static void sub_8117F20(u8 taskId) data->state = 2; break; case 2: - sub_811A650(data->field_4, 4); + sub_811A650(data->field_4->arr, 4); sub_811A5E4(data->field_0->arr, 16); data->field_11 = sub_811A054(data->field_4, data->field_12 + 7); @@ -2326,8 +2326,8 @@ static void sub_81182DC(u8 taskId) sub_800B1F4(); OpenLink(); sub_80FBBD8(); - data->field_4 = AllocZeroed(0x70); - data->field_0 = AllocZeroed(0x200); + data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); + data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); data->state = 1; break; case 1: @@ -2335,7 +2335,7 @@ static void sub_81182DC(u8 taskId) data->state = 2; break; case 2: - sub_811A650(data->field_4, 4); + sub_811A650(data->field_4->arr, 4); sub_811A5E4(data->field_0->arr, 16); data->field_11 = sub_811A084(data->field_4, data->field_12 + 7); @@ -2545,10 +2545,10 @@ static void sub_81186E0(u8 taskId) switch (data->state) { case 0: - data->field_4 = AllocZeroed(0x70); - data->field_C = AllocZeroed(0x70); - data->field_0 = AllocZeroed(0x100); - data->field_8 = AllocZeroed(0x20); + data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); + data->field_C = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); + data->field_0 = AllocZeroed(8 * sizeof(struct UnkStruct_x20)); + data->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20)); sub_811A5E4(data->field_0->arr, 8); gUnknown_203B058 = 0x40; data->field_20 = sub_8119E84(data->field_C, data->field_4, 9); @@ -2568,8 +2568,8 @@ static void sub_81186E0(u8 taskId) OpenLink(); sub_80FBC00(); sub_811A5E4(&data->field_8->arr[0], 1); - sub_811A650(data->field_4, 4); - sub_811A650(data->field_C, 4); + sub_811A650(data->field_4->arr, 4); + sub_811A650(data->field_C->arr, 4); gSpecialVar_Result = 0; data->state = 3; break; @@ -3367,13 +3367,13 @@ static void sub_81199FC(u8 taskId) structPtr->state = 2; break; case 2: - structPtr->field_4 = AllocZeroed(0x70); - sub_811A650(structPtr->field_4, 4); - structPtr->field_C = AllocZeroed(0x70); - sub_811A650(structPtr->field_C, 4); - structPtr->field_0 = AllocZeroed(0x100); + structPtr->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); + sub_811A650(structPtr->field_4->arr, 4); + structPtr->field_C = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); + sub_811A650(structPtr->field_C->arr, 4); + structPtr->field_0 = AllocZeroed(8 * sizeof(struct UnkStruct_x20)); sub_811A5E4(structPtr->field_0->arr, 8); - structPtr->field_8 = AllocZeroed(0x20); + structPtr->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20)); sub_811A5E4(&structPtr->field_8->arr[0], 1); structPtr->field_20 = sub_8119E84(structPtr->field_C, structPtr->field_4, 10); structPtr->state = 3; @@ -3922,14 +3922,14 @@ static void sub_811A5E4(struct UnkStruct_x20 * arg0, u8 count) } } -static void sub_811A650(struct UnkStruct_Main4 * arg0, u8 count) +static void sub_811A650(struct UnkStruct_x1C * arg0, u8 count) { s32 i; for (i = 0; i < 4; i++) { - arg0->arr[i].unk0 = gUnknown_8457034; - arg0->arr[i].unk18 = 0; + arg0[i].unk0 = gUnknown_8457034; + arg0[i].unk18 = 0; } } -- cgit v1.2.3 From 84a93f8037cc8395155448c34e3cab984537b086 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 Jan 2020 16:04:23 -0500 Subject: Resolve review comments, 2 --- src/union_room.c | 2 +- src/union_room_battle.c | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index 40da25d2f..efb05d7ca 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -2538,7 +2538,7 @@ static void sub_81186E0(u8 taskId) { u32 id = 0; s32 var5 = 0; - s32 playerGender = 0; + s32 playerGender = MALE; struct UnkStruct_URoom * data = sUnionRoomMain.uRoom; s16 *taskData = gTasks[taskId].data; diff --git a/src/union_room_battle.c b/src/union_room_battle.c index 449aa8d57..b75cc086d 100644 --- a/src/union_room_battle.c +++ b/src/union_room_battle.c @@ -51,7 +51,7 @@ static void sub_811C04C(void) { gEnemyParty[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; } - for (i = 0; i < 6; i++) + for (i = 0; i < PARTY_SIZE; i++) { ZeroMonData(&gPlayerParty[i]); } @@ -121,8 +121,8 @@ void sub_811C1C8(void) } DeactivateAllTextPrinters(); ClearWindowTilemap(0); - FillWindowPixelBuffer(0, 0x00); - FillWindowPixelBuffer(0, 0x11); + FillWindowPixelBuffer(0, PIXEL_FILL(0)); + FillWindowPixelBuffer(0, PIXEL_FILL(1)); FillBgTilemapBufferRect(0, 0, 0, 0, 30, 20, 0xF); TextWindow_SetStdFrame0_WithPal(0, 1, 0xD0); Menu_LoadStdPal(); @@ -136,7 +136,7 @@ void sub_811C1C8(void) } break; case 2: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); ShowBg(0); gMain.state++; break; @@ -161,7 +161,7 @@ void sub_811C1C8(void) { if (gBlockRecvBuffer[0][0] == 0x51 && gBlockRecvBuffer[1][0] == 0x51) { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); gMain.state = 50; } else -- cgit v1.2.3 From 90c99d1ce2233b775b26d743bbdb187a2071c42d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 Jan 2020 20:10:46 -0500 Subject: union_room_message --- src/union_room_message.c | 541 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 541 insertions(+) create mode 100644 src/union_room_message.c (limited to 'src') diff --git a/src/union_room_message.c b/src/union_room_message.c new file mode 100644 index 000000000..1005f1102 --- /dev/null +++ b/src/union_room_message.c @@ -0,0 +1,541 @@ +#include "global.h" +#include "union_room_message.h" +#include "mevent_server.h" + +ALIGNED(4) const u8 gUnknown_84571AC[] = _(""); +ALIGNED(4) const u8 gUnknown_84571B0[] = _(":"); +ALIGNED(4) const u8 gUnknown_84571B4[] = _("{EXTRA 7}"); +ALIGNED(4) const u8 gUnknown_84571B8[] = _("Please start over from the beginning."); +ALIGNED(4) const u8 gUnknown_84571E0[] = _("The WIRELESS COMMUNICATION\nSYSTEM search has been canceled."); +ALIGNED(4) const u8 gUnref_845721C[] = _("ともだちからの れんらくを\nまっています"); +ALIGNED(4) const u8 gUnknown_8457234[] = _("{STR_VAR_1}! Awaiting\ncommunication from another player."); +ALIGNED(4) const u8 gUnknown_8457264[] = _("{STR_VAR_1}! Awaiting link!\nPress START when everyone's ready."); +ALIGNED(4) const u8 gJPText_SingleBattle[] = _("シングルバトルを かいさいする"); +ALIGNED(4) const u8 gJPText_DoubleBattle[] = _("ダブルバトルを かいさいする"); +ALIGNED(4) const u8 gJPText_MultiBattle[] = _("マルチバトルを かいさいする"); +ALIGNED(4) const u8 gJPText_TradePokemon[] = _("ポケモンこうかんを かいさいする"); +ALIGNED(4) const u8 gJPText_Chat[] = _("チャットを かいさいする"); +ALIGNED(4) const u8 gJPText_DistWonderCard[] = _("ふしぎなカードをくばる"); +ALIGNED(4) const u8 gJPText_DistWonderNews[] = _("ふしぎなニュースをくばる"); +ALIGNED(4) const u8 unref_text_union_room_1[] = _("ふしぎなできごとを かいさいする"); +ALIGNED(4) const u8 gJPText_HoldPokemonJump[] = _("なわとびを かいさいする"); +ALIGNED(4) const u8 gJPText_HoldBerryCrush[] = _("きのみマッシャーを かいさいする"); +ALIGNED(4) const u8 gJPText_HoldBerryPicking[] = _("きのみどりを かいさいする"); +ALIGNED(4) const u8 gJPText_HoldSpinTrade[] = _("ぐるぐるこうかんを かいさいする"); +ALIGNED(4) const u8 gJPText_HoldSpinShop[] = _("ぐるぐるショップを かいさいする"); + +const u8 *const unref_text_ptrs_union_room_0[] = { + gJPText_SingleBattle, + gJPText_DoubleBattle, + gJPText_MultiBattle, + gJPText_TradePokemon, + gJPText_Chat, + gJPText_DistWonderCard, + gJPText_DistWonderNews, + gJPText_DistWonderCard, + gJPText_HoldPokemonJump, + gJPText_HoldBerryCrush, + gJPText_HoldBerryPicking, + gJPText_HoldBerryPicking, + gJPText_HoldSpinTrade, + gJPText_HoldSpinShop +}; + +const u8 gText_1PlayerNeeded[] = _("1 player\nneeded."); +const u8 gText_2PlayersNeeded[] = _("2 players\nneeded."); +const u8 gText_3PlayersNeeded[] = _("3 players\nneeded."); +const u8 gText_4PlayersNeeded[] = _("あと4にん\nひつよう"); +const u8 gText_2PlayerMode[] = _("2-PLAYER\nMODE"); +const u8 gText_3PlayerMode[] = _("3-PLAYER\nMODE"); +const u8 gText_4PlayerMode[] = _("4-PLAYER\nMODE"); +const u8 gText_5PlayerMode[] = _("5-PLAYER\nMODE"); + +const u8 *const gUnknown_845742C[][5] = { + { + gText_1PlayerNeeded, + gText_2PlayerMode + }, { + gText_3PlayersNeeded, + gText_2PlayersNeeded, + gText_1PlayerNeeded, + gText_4PlayerMode + }, { + gText_1PlayerNeeded, + gText_2PlayerMode, + gText_3PlayerMode, + gText_4PlayerMode, + gText_5PlayerMode + }, { + gText_2PlayersNeeded, + gText_1PlayerNeeded, + gText_3PlayerMode, + gText_4PlayerMode, + gText_5PlayerMode + } +}; + +ALIGNED(4) const u8 gUnknown_845747C[] = _("{B_BUTTON}CANCEL"); +ALIGNED(4) const u8 unref_text_union_room_2[] = _("ため\nさんかしゃ ぼしゅうちゅう です!"); +ALIGNED(4) const u8 gUnknown_84574A0[] = _("{STR_VAR_2} contacted you for\n{STR_VAR_1}. Accept?"); +ALIGNED(4) const u8 gUnknown_84574C4[] = _("{STR_VAR_2} contacted you.\nWill you share {STR_VAR_1}?"); +ALIGNED(4) const u8 gUnknown_84574EC[] = _("{STR_VAR_2} contacted you.\nAdd to the members?"); +ALIGNED(4) const u8 gUnknown_8457514[] = _("{STR_VAR_1}!\nAre these members OK?"); +ALIGNED(4) const u8 gUnknown_8457530[] = _("Cancel {STR_VAR_1} MODE\nwith these members?"); +ALIGNED(4) const u8 gUnknown_8457554[] = _("An “OK” was sent\nto {STR_VAR_1}."); +ALIGNED(4) const u8 gUnknown_845756C[] = _("The other TRAINER doesn't appear\nto be available now…\p"); +ALIGNED(4) const u8 gUnknown_84575A4[] = _("You can't transmit with a TRAINER\nwho is too far away.\p"); +ALIGNED(4) const u8 gUnknown_84575DC[] = _("The other TRAINER(S) is/are not\nready yet.\p"); + +const u8 *const gUnknown_8457608[] = { + gUnknown_84575A4, + gUnknown_84575DC +}; + +ALIGNED(4) const u8 gUnknown_8457610[] = _("The {STR_VAR_1} MODE with\nthese members will be canceled.{PAUSE 90}"); +ALIGNED(4) const u8 gUnknown_8457644[] = _("There is a member who can no\nlonger remain available.\p"); + +const u8 *const gUnknown_845767C[] = { + gUnknown_845756C, + gUnknown_8457644 +}; + +ALIGNED(4) const u8 gUnknown_8457684[] = _("The other TRAINER appears\nunavailable…\p"); +ALIGNED(4) const u8 gUnknown_84576AC[] = _("{STR_VAR_1} sent back an “OK”!"); +ALIGNED(4) const u8 gUnknown_84576C4[] = _("{STR_VAR_1} OK'd your registration as\na member."); +ALIGNED(4) const u8 gUnknown_84576EC[] = _("{STR_VAR_1} replied, “No…”\p"); +ALIGNED(4) const u8 gUnknown_8457700[] = _("{STR_VAR_1}!\nAwaiting other members!"); +ALIGNED(4) const u8 gUnknown_845771C[] = _("Quit being a member?"); +ALIGNED(4) const u8 gUnknown_8457734[] = _("You stopped being a member.\p"); + +const u8 *const gUnknown_8457754[] = { + NULL, + gUnknown_8457644, + gUnknown_8457684, + NULL, + NULL, + NULL, + gUnknown_84576EC, + NULL, + NULL, + gUnknown_8457734 +}; + +ALIGNED(4) const u8 gUnknown_845777C[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established."); +ALIGNED(4) const u8 gUnknown_84577BC[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been dropped…"); +ALIGNED(4) const u8 gUnknown_84577F8[] = _("The link with your friend has been\ndropped…"); +ALIGNED(4) const u8 gUnknown_8457824[] = _("{STR_VAR_1} replied, “No…”"); + +const u8 *const gUnknown_8457838[] = { + NULL, + gUnknown_84577F8, + gUnknown_84577F8, + NULL, + NULL, + NULL, + gUnknown_8457824, + NULL, + NULL, + NULL +}; + +ALIGNED(4) const u8 gUnknown_8457860[] = _("Do you want the {STR_VAR_2}\nMODE?"); +ALIGNED(4) const u8 gUnknown_845787C[] = _("Do you want the {STR_VAR_2}\nMODE?"); + +const u8 *const gUnknown_8457898[] = { + gUnknown_8457860, + gUnknown_845787C +}; + +ALIGNED(4) const u8 gUnknown_84578A0[] = _("はなしかけています…\nしょうしょう おまちください"); +ALIGNED(4) const u8 gUnknown_84578BC[] = _("Awaiting {STR_VAR_1}'s response about\nthe trade…"); +ALIGNED(4) const u8 gUnknown_84578E4[] = _("Communicating{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); +ALIGNED(4) const u8 gUnknown_8457950[] = _("Communicating with {STR_VAR_1}{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); +ALIGNED(4) const u8 gUnknown_84579BC[] = _("Please wait a while{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); + +const u8 *const gUnknown_8457A34[] = { + gUnknown_84578E4, + gUnknown_8457950, + gUnknown_84579BC +}; + +ALIGNED(4) const u8 gUnknown_8457A40[] = _("Hiya! Is there something that you\nwanted to do?"); +ALIGNED(4) const u8 gUnknown_8457A70[] = _("Hello!\nWould you like to do something?"); +ALIGNED(4) const u8 gUnknown_8457A98[] = _("{STR_VAR_1}: Hiya, we meet again!\nWhat are you up for this time?"); +ALIGNED(4) const u8 gUnknown_8457AD0[] = _("{STR_VAR_1}: Oh! {PLAYER}, hello!\nWould you like to do something?"); + +const u8 *const gUnknown_8457B04[][2] = { + { + gUnknown_8457A40, + gUnknown_8457A70 + }, { + gUnknown_8457A98, + gUnknown_8457AD0 + } +}; + +ALIGNED(4) const u8 gUnknown_8457B14[] = _("Want to do something?"); +ALIGNED(4) const u8 gUnknown_8457B2C[] = _("Would you like to do something?"); +ALIGNED(4) const u8 gUnknown_8457B4C[] = _("{STR_VAR_1}: What would you like to\ndo now?"); +ALIGNED(4) const u8 gUnknown_8457B70[] = _("{STR_VAR_1}‘また なにかする?"); + +const u8 *const gUnknown_8457B80[] = { + gUnknown_8457B14, + gUnknown_8457B2C, + gUnknown_8457B4C, + gUnknown_8457B4C +}; + +ALIGNED(4) const u8 gUnknown_8457B90[] = _("Somebody has contacted you.{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_8457BA0[] = _("{STR_VAR_1} has contacted you.{PAUSE 60}"); + +const u8 *const gUnknown_8457BCC[] = { + gUnknown_8457B90, + gUnknown_8457BA0 +}; + +ALIGNED(4) const u8 gUnknown_8457BD4[] = _("Awaiting a response from\nthe other TRAINER…"); +ALIGNED(4) const u8 gUnknown_8457C00[] = _("Awaiting a response from\n{STR_VAR_1}…"); + +const u8 *const gUnknown_8457C20[] = { + gUnknown_8457BD4, + gUnknown_8457C00 +}; + +ALIGNED(4) const u8 gUnknown_8457C28[] = _("あいての ていあんを まっています\nビーボタンで キャンセル"); +ALIGNED(4) const u8 gUnknown_8457C48[] = _("The other TRAINER showed\nyou their TRAINER CARD.\pWould you like to show your\nTRAINER CARD?"); +ALIGNED(4) const u8 gUnknown_8457CA4[] = _("The other TRAINER challenges you\nto battle.\pWill you accept the battle\nchallenge?"); +ALIGNED(4) const u8 gUnknown_8457CF8[] = _("The other TRAINER invites you\nto chat.\pWill you accept the chat\ninvitation?"); +ALIGNED(4) const u8 gUnknown_8457D44[] = _("There is an offer to trade your\nregistered Lv. {DYNAMIC 0} {DYNAMIC 1}\pin exchange for a\nLv. {DYNAMIC 2} {DYNAMIC 3}.\pWill you accept this trade\noffer?"); +ALIGNED(4) const u8 gUnknown_8457DB8[] = _("There is an offer to trade your\nregistered EGG.\lWill you accept this trade offer?"); +ALIGNED(4) const u8 gUnknown_8457E0C[] = _("The chat has been dropped.\p"); +ALIGNED(4) const u8 gUnknown_8457E28[] = _("You declined the offer.\p"); +ALIGNED(4) const u8 gUnknown_8457E44[] = _("You declined the offer.\p"); +ALIGNED(4) const u8 gUnknown_8457E60[] = _("The chat was ended.\p"); + +const u8 *const gUnknown_8457E78[] = { + gUnknown_8457C48, + gUnknown_8457CA4, + gUnknown_8457CF8, + gUnknown_8457D44 +}; + +ALIGNED(4) const u8 gUnknown_8457E88[] = _("Oh, hey! We're in a chat right now.\nWant to join us?"); +ALIGNED(4) const u8 gUnknown_8457EC0[] = _("{STR_VAR_1}: Hey, {PLAYER}!\nWe're having a chat right now.\lWant to join us?"); +ALIGNED(4) const u8 gUnknown_8457F00[] = _("Oh, hi! We're having a chat now.\nWould you like to join us?"); +ALIGNED(4) const u8 gUnknown_8457F3C[] = _("{STR_VAR_1}: Oh, hi, {PLAYER}!\nWe're having a chat now.\lWould you like to join us?"); + +const u8 *const gUnknown_8457F80[][2] = { + { + gUnknown_8457E88, + gUnknown_8457F00 + }, { + gUnknown_8457EC0, + gUnknown_8457F3C + } +}; + +ALIGNED(4) const u8 gUnknown_8457F90[] = _("……\nThe TRAINER appears to be busy…\p"); +ALIGNED(4) const u8 gUnknown_8457FB4[] = _("A battle, huh?\nAll right, just give me some time."); +ALIGNED(4) const u8 gUnknown_8457FE8[] = _("You want to chat, huh?\nSure, just wait a little."); +ALIGNED(4) const u8 gUnknown_845801C[] = _("Sure thing! As my “Greetings,”\nhere's my TRAINER CARD."); +ALIGNED(4) const u8 gUnknown_8458054[] = _("A battle? Of course, but I need\ntime to get ready."); +ALIGNED(4) const u8 gUnknown_8458088[] = _("Did you want to chat?\nOkay, but please wait a moment."); +ALIGNED(4) const u8 gUnknown_84580C0[] = _("As my introduction, I'll show you\nmy TRAINER CARD."); + +const u8 *const gUnknown_84580F4[][4] = { + { + gUnknown_8457FB4, + gUnknown_8457FE8, + NULL, + gUnknown_845801C + }, { + gUnknown_8458054, + gUnknown_8458088, + NULL, + gUnknown_84580C0 + } +}; + +ALIGNED(4) const u8 gUnref_8458104[] = _("チャットだね!\nわかった ちょっと まってて!"); +ALIGNED(4) const u8 gUnknown_845812C[] = _("Thanks for waiting!\nLet's get our battle started!{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_8458164[] = _("All right!\nLet's chat!{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_8458180[] = _("Sorry I made you wait!\nLet's get started!{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_84581B0[] = _("Sorry I made you wait!\nLet's chat.{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_84581D8[] = _("The trade will be started.{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_84581F8[] = _("The battle will be started.{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_8458218[] = _("Entering the chat…{PAUSE 60}"); + +const u8 *const gUnknown_8458230[][2][3] = { + { + { + gUnknown_84581F8, + gUnknown_8458218, + gUnknown_84581D8 + }, { + gUnknown_84581F8, + gUnknown_8458218, + gUnknown_84581D8 + } + }, { + { + gUnknown_845812C, + gUnknown_8458164, + gUnknown_84581D8 + }, { + gUnknown_8458180, + gUnknown_84581B0, + gUnknown_84581D8 + } + } +}; + +ALIGNED(4) const u8 gUnknown_8458260[] = _("Sorry! My POKéMON don't seem to\nbe feeling too well right now.\lLet me battle you another time.\p"); +ALIGNED(4) const u8 gUnknown_84582C0[] = _("I'm terribly sorry, but my POKéMON\naren't feeling well…\pLet's battle another time.\p"); + +const u8 *const gUnknown_8458314[] = { + gUnknown_8458260, + gUnknown_84582C0 +}; + +ALIGNED(4) const u8 gUnknown_845831C[] = _("Huh? My TRAINER CARD…\nWhere'd it go now?\lSorry! I'll show you another time!\p"); +ALIGNED(4) const u8 gUnknown_845836C[] = _("Oh? Now where did I put my\nTRAINER CARD?…\lSorry! I'll show you later!\p"); + +const u8 *const gUnknown_84583B4[] = { + gUnknown_845831C, + gUnknown_845836C +}; + +ALIGNED(4) const u8 gUnknown_84583BC[] = _("If you want to do something with\nme, just give me a shout!\p"); +ALIGNED(4) const u8 gUnknown_84583F8[] = _("If you want to do something with\nme, don't be shy.\p"); + +const u8 *const gUnknown_845842C[] = { + gUnknown_84583BC, + gUnknown_84583F8 +}; + +ALIGNED(4) const u8 gUnknown_8458434[] = _("Whoops! Sorry, but I have to do\nsomething else.\lAnother time, okay?\p"); +ALIGNED(4) const u8 gUnknown_845847C[] = _("If you want to battle, you need\ntwo POKéMON that are below\lLv. 30.\p"); +ALIGNED(4) const u8 gUnknown_84584C0[] = _("For a battle, you need two\nPOKéMON that are below Lv. 30.\p"); +ALIGNED(4) const u8 gUnknown_84584FC[] = _("Oh, all right.\nCome see me anytime, okay?\p"); +ALIGNED(4) const u8 gUnknown_8458528[] = _("Oh…\nPlease come by anytime.\p"); + +const u8 *const gUnknown_8458548[] = { + gUnknown_84584FC, + gUnknown_8458528 +}; + +ALIGNED(4) const u8 gUnknown_8458550[] = _("Oh, sorry!\nI just can't right this instant.\lLet's chat another time.\p"); +ALIGNED(4) const u8 gUnknown_8458598[] = _("Oh, I'm sorry.\nI have too much to do right now.\lLet's chat some other time.\p"); + +const u8 *const gUnknown_84585E8[] = { + gUnknown_8458550, + gUnknown_8458598 +}; + +ALIGNED(4) const u8 gUnknown_84585F0[] = _("Whoa!\nI can tell you're pretty tough!\p"); +ALIGNED(4) const u8 gUnknown_8458618[] = _("You used that move?\nThat's good strategy!\p"); +ALIGNED(4) const u8 gUnknown_8458644[] = _("Way to go!\nThat was an eye-opener!\p"); +ALIGNED(4) const u8 gUnknown_8458668[] = _("Oh! How could you use that\nPOKéMON in that situation?\p"); +ALIGNED(4) const u8 gUnknown_84586A0[] = _("That POKéMON…\nIt's been raised really well!\p"); +ALIGNED(4) const u8 gUnknown_84586D0[] = _("That's it!\nThis is the right move now!\p"); +ALIGNED(4) const u8 gUnknown_84586F8[] = _("That's awesome!\nYou can battle that way?\p"); +ALIGNED(4) const u8 gUnknown_8458724[] = _("You have exquisite timing for\nswitching POKéMON!\p"); + +const u8 *const gUnknown_8458758[][4] = { + { + gUnknown_84585F0, + gUnknown_8458618, + gUnknown_8458644, + gUnknown_8458668 + }, { + gUnknown_84586A0, + gUnknown_84586D0, + gUnknown_84586F8, + gUnknown_8458724 + } +}; + +ALIGNED(4) const u8 gUnknown_8458778[] = _("Oh, I see!\nThis is educational!\p"); +ALIGNED(4) const u8 gUnknown_845879C[] = _("Don't say anything funny anymore!\nI'm sore from laughing!\p"); +ALIGNED(4) const u8 gUnknown_84587D8[] = _("Oh?\nSomething like that happened.\p"); +ALIGNED(4) const u8 gUnknown_84587FC[] = _("Hmhm… What?\nSo is this what you're saying?\p"); +ALIGNED(4) const u8 gUnknown_8458828[] = _("Is that right?\nI didn't know that.\p"); +ALIGNED(4) const u8 gUnknown_845884C[] = _("Ahaha!\nWhat is that about?\p"); +ALIGNED(4) const u8 gUnknown_8458868[] = _("Yes, that's exactly it!\nThat's what I meant.\p"); +ALIGNED(4) const u8 gUnknown_8458898[] = _("In other words…\nYes! That's right!\p"); + +const u8 *const gUnknown_84588BC[][4] = { + { + gUnknown_8458778, + gUnknown_845879C, + gUnknown_84587D8, + gUnknown_84587FC + }, { + gUnknown_8458828, + gUnknown_845884C, + gUnknown_8458868, + gUnknown_8458898 + } +}; + +ALIGNED(4) const u8 gUnknown_84588DC[] = _("I'm just showing my TRAINER CARD\nas my way of greeting.\p"); +ALIGNED(4) const u8 gUnknown_8458918[] = _("I hope I get to know you better!\p"); +ALIGNED(4) const u8 gUnknown_845893C[] = _("We're showing each other our\nTRAINER CARDS to get acquainted.\p"); +ALIGNED(4) const u8 gUnknown_845897C[] = _("Glad to meet you.\nPlease don't be a stranger!\p"); + +const u8 *const gUnknown_84589AC[][2] = { + { + gUnknown_84588DC, + gUnknown_8458918 + }, { + gUnknown_845893C, + gUnknown_845897C + } +}; + +ALIGNED(4) const u8 gUnknown_84589BC[] = _("Yeahah!\nI really wanted this POKéMON!\p"); +ALIGNED(4) const u8 gUnknown_84589E4[] = _("Finally, a trade got me that\nPOKéMON I'd wanted a long time.\p"); +ALIGNED(4) const u8 gUnknown_8458A24[] = _("I'm trading POKéMON right now.\p"); +ALIGNED(4) const u8 gUnknown_8458A44[] = _("I finally got that POKéMON I\nwanted in a trade!\p"); + +const u8 *const gUnknown_8458A78[][4] = { + { + gUnknown_84589BC, + gUnknown_84589E4 + }, { + gUnknown_8458A24, + gUnknown_8458A44 + } +}; + +const u8 gUnknown_8458A98[] = _("{STR_VAR_1} checked the\nTRADING BOARD.\p"); +ALIGNED(4) const u8 gUnknown_8458AB8[] = _("Welcome to the TRADING BOARD.\pYou may register your POKéMON\nand offer it up for a trade.\pWould you like to register one of\nyour POKéMON?"); +ALIGNED(4) const u8 gUnknown_8458B44[] = _("This TRADING BOARD is used for\noffering a POKéMON for a trade.\pAll you need to do is register a\nPOKéMON for a trade.\pAnother TRAINER may offer a party\nPOKéMON in return for the trade.\pWe hope you will register POKéMON\nand trade them with many, many\lother TRAINERS.\pWould you like to register one of\nyour POKéMON?"); +ALIGNED(4) const u8 gUnref_ThankYouForComing_JP[] = _("こうかんけいじばん の とうろくが\nかんりょう しました\pごりよう ありがとう\nございました!\p"); +ALIGNED(4) const u8 gUnref_NoOneRegisteredMon[] = _("けいじばんに だれも ポケモンを\nとうろく していません\p\n"); +ALIGNED(4) const u8 gUnknown_8458CD4[] = _("Please choose the type of POKéMON\nthat you would like in the trade.\n"); +ALIGNED(4) const u8 gUnknown_8458D1C[] = _("Which of your party POKéMON will\nyou offer in trade?\p"); +ALIGNED(4) const u8 gUnknown_8458D54[] = _("Registration has been canceled.\p"); +ALIGNED(4) const u8 gUnknown_8458D78[] = _("Registration has been completed.\p"); +ALIGNED(4) const u8 gUnknown_8458D9C[] = _("The trade has been canceled.\p"); +ALIGNED(4) const u8 gUnknown_8458DBC[] = _("Cancel the registration of your\nLv. {STR_VAR_2} {STR_VAR_1}?"); +ALIGNED(4) const u8 gUnknown_8458DE8[] = _("Cancel the registration of your\nEGG?"); +ALIGNED(4) const u8 gUnknown_8458E10[] = _("The registration has been canceled.\p"); +ALIGNED(4) const u8 gUnref_ShowPeopleWhoLikeYou_JP[] = _("こうかんを きぼうしているひとを\nひょうじします"); +ALIGNED(4) const u8 gUnref_PleaseChooseTrainerYouWant[] = _("こうかん したい トレーナーを\nえらんで ください"); +ALIGNED(4) const u8 gUnknown_8458E70[] = _("Would you like to ask {STR_VAR_1} to\nmake a trade?"); +ALIGNED(4) const u8 gUnref_ImWaitingForAnswer[] = _("……\nあいての へんじを まっています"); +ALIGNED(4) const u8 gUnref_MonSentOutIsNotRegistered[] = _("あなたが こうかんにだす\nポケモンが とうろくされていません\p"); +ALIGNED(4) const u8 gUnknown_8458ED0[] = _("You don't have a {STR_VAR_2}-type\nPOKéMON that {STR_VAR_1} wants.\p"); +ALIGNED(4) const u8 gUnknown_8458F04[] = _("You don't have an EGG that\n{STR_VAR_1} wants.\p"); +ALIGNED(4) const u8 gUnknown_8458F2C[] = _("{STR_VAR_1} can't make a trade for\nyour POKéMON right now.\p"); +ALIGNED(4) const u8 gUnknown_8458F60[] = _("You can't make a trade for\n{STR_VAR_1}'s POKéMON right now.\p"); + +const u8 *const gUnknown_8458F94[] = { + gUnknown_8458F2C, + gUnknown_8458F60 +}; + +ALIGNED(4) const u8 gUnknown_8458F9C[] = _("Your trade offer was rejected.\p"); +ALIGNED(4) const u8 gUnknown_8458FBC[] = _("EGG TRADE"); +ALIGNED(4) const u8 gUnknown_8458FC8[] = _("{DPAD_UPDOWN}CHOOSE {A_BUTTON}JOIN {B_BUTTON}CANCEL"); +ALIGNED(4) const u8 gUnknown_8458FE4[] = _("Please choose a TRAINER."); +ALIGNED(4) const u8 gUnknown_8459000[] = _("Please choose a TRAINER for\na SINGLE BATTLE."); +ALIGNED(4) const u8 gUnknown_8459030[] = _("Please choose a TRAINER for\na DOUBLE BATTLE."); +ALIGNED(4) const u8 gUnknown_8459060[] = _("Please choose the LEADER\nfor a MULTI BATTLE."); +ALIGNED(4) const u8 gUnknown_8459090[] = _("Please choose the TRAINER to\ntrade with."); +ALIGNED(4) const u8 gUnknown_84590BC[] = _("Please choose the TRAINER who is\nsharing WONDER CARDS."); +ALIGNED(4) const u8 gUnknown_84590F4[] = _("Please choose the TRAINER who is\nsharing WONDER NEWS."); +ALIGNED(4) const u8 gUnknown_845912C[] = _("Jump with mini POKéMON!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_8459160[] = _("BERRY CRUSH!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_8459188[] = _("DODRIO BERRY-PICKING!\nPlease choose the LEADER."); + +const u8 *const gUnknown_84591B8[] = { + gUnknown_8459000, + gUnknown_8459030, + gUnknown_8459060, + gUnknown_8459090, + gUnknown_845912C, + gUnknown_8459160, + gUnknown_8459188, + gUnknown_84590BC, + gUnknown_84590F4 +}; + +ALIGNED(4) const u8 gUnknown_84591DC[] = _("Searching for a WIRELESS\nCOMMUNICATION SYSTEM. Wait..."); +ALIGNED(4) const u8 gUnref_NeedAtLeast2InDblBtl[] = _("ダブルバトルでは 2ひき いじょうの\nポケモンが ひつようです\p"); +ALIGNED(4) const u8 gUnknown_8459238[] = _("Awaiting {STR_VAR_1}'s response…"); +ALIGNED(4) const u8 gUnknown_8459250[] = _("{STR_VAR_1} has been asked to register\nyou as a member. Please wait."); +ALIGNED(4) const u8 gUnknown_845928C[] = _("Awaiting a response from the\nWIRELESS COMMUNICATION SYSTEM."); +ALIGNED(4) const u8 gUnref_PlsWaitLittleWHile[] = _("ほかの さんかしゃが そろうまで\nしょうしょう おまちください"); +ALIGNED(4) const u8 gUnknown_84592E8[] = _("No CARDS appear to be shared \nright now."); +ALIGNED(4) const u8 gUnknown_8459314[] = _("No NEWS appears to be shared\nright now."); + +const u8 *const gUnknown_845933C[] = { + gUnknown_84592E8, + gUnknown_8459314 +}; + +ALIGNED(4) const u8 gUnknown_8459344[] = _("BATTLE"); +ALIGNED(4) const u8 gUnknown_845934C[] = _("CHAT"); +ALIGNED(4) const u8 gUnknown_8459354[] = _("GREETINGS"); +ALIGNED(4) const u8 gUnknown_8459360[] = _("EXIT"); +ALIGNED(4) const u8 gUnknown_8459368[] = _("EXIT"); +ALIGNED(4) const u8 gUnknown_8459370[] = _("INFO"); +ALIGNED(4) const u8 gUnknown_8459378[] = _("NAME{CLEAR_TO 0x3C}WANTED{CLEAR_TO 0x6E}OFFER{CLEAR_TO 0xC6}LV."); +ALIGNED(4) const u8 gUnknown_8459394[] = _("SINGLE BATTLE"); +ALIGNED(4) const u8 gUnknown_84593A4[] = _("DOUBLE BATTLE"); +ALIGNED(4) const u8 gUnknown_84593B4[] = _("MULTI BATTLE"); +ALIGNED(4) const u8 gUnknown_84593C4[] = _("POKéMON TRADES"); +ALIGNED(4) const u8 gUnknown_84593D4[] = _("CHAT"); +ALIGNED(4) const u8 gUnknown_84593DC[] = _("CARDS"); +ALIGNED(4) const u8 gUnknown_84593E4[] = _("WONDER CARDS"); +ALIGNED(4) const u8 gUnknown_84593F4[] = _("WONDER NEWS"); +ALIGNED(4) const u8 gUnknown_8459400[] = _("POKéMON JUMP"); +ALIGNED(4) const u8 gUnknown_8459410[] = _("BERRY CRUSH"); +ALIGNED(4) const u8 gUnknown_845941C[] = _("BERRY-PICKING"); +ALIGNED(4) const u8 gUnknown_845942C[] = _("SEARCH"); +ALIGNED(4) const u8 gUnknown_8459434[] = _("ぐるぐるこうかん"); +ALIGNED(4) const u8 gUnknown_8459440[] = _("アイテムトレード"); +ALIGNED(4) const u8 gUnknown_845944C[] = _("It's a NORMAL CARD."); +ALIGNED(4) const u8 gUnknown_8459460[] = _("It's a BRONZE CARD!"); +ALIGNED(4) const u8 gUnknown_8459474[] = _("It's a COPPER CARD!"); +ALIGNED(4) const u8 gUnknown_8459488[] = _("It's a SILVER CARD!"); +ALIGNED(4) const u8 gUnknown_845949C[] = _("It's a GOLD CARD!"); + +const u8 *const gUnknown_84594B0[] = { + gUnknown_845944C, + gUnknown_8459460, + gUnknown_8459474, + gUnknown_8459488, + gUnknown_845949C +}; + +ALIGNED(4) const u8 gUnknown_84594C4[] = _("This is {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}'s\nTRAINER CARD…\l{SPECIAL_F7 0x02}\pPOKéDEX: {SPECIAL_F7 0x03}\nTIME: {SPECIAL_F7 0x04}:{SPECIAL_F7 0x05}\p"); +ALIGNED(4) const u8 gUnknown_8459504[] = _("BATTLES: {SPECIAL_F7 0x00} WINS {SPECIAL_F7 0x02} LOSSES\nTRADES: {SPECIAL_F7 0x03} TIMES\p“{SPECIAL_F7 0x04} {SPECIAL_F7 0x05}\n{SPECIAL_F7 0x06} {SPECIAL_F7 0x07}”\p"); +ALIGNED(4) const u8 gUnknown_8459544[] = _("{SPECIAL_F7 0x01}: Glad to have met you!{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_8459564[] = _("{SPECIAL_F7 0x01}: Glad to meet you!{PAUSE 60}"); + +const u8 *const gUnknown_8459580[] = { + gUnknown_8459544, + gUnknown_8459564 +}; + +ALIGNED(4) const u8 gUnknown_8459588[] = _("Finished checking {SPECIAL_F7 0x01}'s\nTRAINER CARD.{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_84595B0[] = _("Canceled reading the Card."); + +const struct mevent_client_cmd gUnknown_84595CC[] = { + CLI_RECEIVE(0x15), + CLI_RECVBUF, + CLI_SENDALL, + CLI_RETURN(0x0e) +}; + +const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[] = { + SRV_SEND(0x20, gUnknown_84595CC), + SRV_WAITSND, + SRV_SENDSTR(0x1b, gUnknown_84595B0), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x09) +}; -- cgit v1.2.3 From 7824a413dea43f2c0c99c2b86af17c33378139fa Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 23 Jan 2020 10:10:57 -0500 Subject: Normalize union room UnkStruct arrays; remove STAT_STAGE_ defines --- src/pokemon.c | 50 ++++++++++++++++++++++++------------------------ src/union_room.c | 4 ++-- src/union_room_message.c | 2 ++ 3 files changed, 29 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/pokemon.c b/src/pokemon.c index 5b715133b..d1305861a 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -3982,49 +3982,49 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov retVal = FALSE; } if ((itemEffect[cmdIndex] & 0xF) - && gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_ATK] < 12) { - gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] += itemEffect[cmdIndex] & 0xF; - if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] > 12) - gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] = 12; + gBattleMons[gActiveBattler].statStages[STAT_ATK] += itemEffect[cmdIndex] & 0xF; + if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > 12) + gBattleMons[gActiveBattler].statStages[STAT_ATK] = 12; retVal = FALSE; } break; // in-battle stat boosting effects? case 1: if ((itemEffect[cmdIndex] & 0xF0) - && gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_DEF] < 12) { - gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] += (itemEffect[cmdIndex] & 0xF0) >> 4; - if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] > 12) - gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] = 12; + gBattleMons[gActiveBattler].statStages[STAT_DEF] += (itemEffect[cmdIndex] & 0xF0) >> 4; + if (gBattleMons[gActiveBattler].statStages[STAT_DEF] > 12) + gBattleMons[gActiveBattler].statStages[STAT_DEF] = 12; retVal = FALSE; } if ((itemEffect[cmdIndex] & 0xF) - && gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_SPEED] < 12) { - gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] += itemEffect[cmdIndex] & 0xF; - if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] > 12) - gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] = 12; + gBattleMons[gActiveBattler].statStages[STAT_SPEED] += itemEffect[cmdIndex] & 0xF; + if (gBattleMons[gActiveBattler].statStages[STAT_SPEED] > 12) + gBattleMons[gActiveBattler].statStages[STAT_SPEED] = 12; retVal = FALSE; } break; // more stat boosting effects? case 2: if ((itemEffect[cmdIndex] & 0xF0) - && gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_ACC] < 12) { - gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] += (itemEffect[cmdIndex] & 0xF0) >> 4; - if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] > 12) - gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] = 12; + gBattleMons[gActiveBattler].statStages[STAT_ACC] += (itemEffect[cmdIndex] & 0xF0) >> 4; + if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > 12) + gBattleMons[gActiveBattler].statStages[STAT_ACC] = 12; retVal = FALSE; } if ((itemEffect[cmdIndex] & 0xF) - && gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_SPATK] < 12) { - gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] += itemEffect[cmdIndex] & 0xF; - if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] > 12) - gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] = 12; + gBattleMons[gActiveBattler].statStages[STAT_SPATK] += itemEffect[cmdIndex] & 0xF; + if (gBattleMons[gActiveBattler].statStages[STAT_SPATK] > 12) + gBattleMons[gActiveBattler].statStages[STAT_SPATK] = 12; retVal = FALSE; } break; @@ -4496,25 +4496,25 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo && !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY)) retVal = FALSE; if ((itemEffect[cmdIndex] & 0xF) - && gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_ATK] < 12) retVal = FALSE; break; // in-battle stat boosting effects? case 1: if ((itemEffect[cmdIndex] & 0xF0) - && gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_DEF] < 12) retVal = FALSE; if ((itemEffect[cmdIndex] & 0xF) - && gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_SPEED] < 12) retVal = FALSE; break; // more stat boosting effects? case 2: if ((itemEffect[cmdIndex] & 0xF0) - && gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_ACC] < 12) retVal = FALSE; if ((itemEffect[cmdIndex] & 0xF) - && gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] < 12) + && gBattleMons[gActiveBattler].statStages[STAT_SPATK] < 12) retVal = FALSE; break; case 3: diff --git a/src/union_room.c b/src/union_room.c index efb05d7ca..4e3428cc6 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -2526,12 +2526,12 @@ static void sub_811868C(const u8 *src) static void sub_81186B0(struct UnkStruct_URoom * data) { - memcpy(&gDecompressionBuffer[0x3F00], data->field_0, sizeof(*data->field_0)); + memcpy(&gDecompressionBuffer[0x3F00], data->field_0, 8 * sizeof(struct UnkStruct_x20)); } static void sub_81186C8(struct UnkStruct_URoom * data) { - memcpy(data->field_0, &gDecompressionBuffer[0x3F00], sizeof(*data->field_0)); + memcpy(data->field_0, &gDecompressionBuffer[0x3F00], 8 * sizeof(struct UnkStruct_x20)); } static void sub_81186E0(u8 taskId) diff --git a/src/union_room_message.c b/src/union_room_message.c index 1005f1102..9ca5aa15b 100644 --- a/src/union_room_message.c +++ b/src/union_room_message.c @@ -10,6 +10,7 @@ ALIGNED(4) const u8 gUnknown_84571E0[] = _("The WIRELESS COMMUNICATION\nSYSTEM s ALIGNED(4) const u8 gUnref_845721C[] = _("ともだちからの れんらくを\nまっています"); ALIGNED(4) const u8 gUnknown_8457234[] = _("{STR_VAR_1}! Awaiting\ncommunication from another player."); ALIGNED(4) const u8 gUnknown_8457264[] = _("{STR_VAR_1}! Awaiting link!\nPress START when everyone's ready."); + ALIGNED(4) const u8 gJPText_SingleBattle[] = _("シングルバトルを かいさいする"); ALIGNED(4) const u8 gJPText_DoubleBattle[] = _("ダブルバトルを かいさいする"); ALIGNED(4) const u8 gJPText_MultiBattle[] = _("マルチバトルを かいさいする"); @@ -82,6 +83,7 @@ ALIGNED(4) const u8 gUnknown_84574EC[] = _("{STR_VAR_2} contacted you.\nAdd to t ALIGNED(4) const u8 gUnknown_8457514[] = _("{STR_VAR_1}!\nAre these members OK?"); ALIGNED(4) const u8 gUnknown_8457530[] = _("Cancel {STR_VAR_1} MODE\nwith these members?"); ALIGNED(4) const u8 gUnknown_8457554[] = _("An “OK” was sent\nto {STR_VAR_1}."); + ALIGNED(4) const u8 gUnknown_845756C[] = _("The other TRAINER doesn't appear\nto be available now…\p"); ALIGNED(4) const u8 gUnknown_84575A4[] = _("You can't transmit with a TRAINER\nwho is too far away.\p"); ALIGNED(4) const u8 gUnknown_84575DC[] = _("The other TRAINER(S) is/are not\nready yet.\p"); -- cgit v1.2.3