Resolve conflicts
This commit is contained in:
@@ -515,7 +515,7 @@ static void Task_HandleInput(u8 taskId)
|
||||
static void TryChangeDisplayedBerry(u8 taskId, s8 toMove)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
s16 currPocketPosition = gUnknown_0203CE58.unk12[3] + gUnknown_0203CE58.unk8[3];
|
||||
s16 currPocketPosition = gUnknown_0203CE58.scrollPosition[3] + gUnknown_0203CE58.cursorPosition[3];
|
||||
u32 newPocketPosition = currPocketPosition + toMove;
|
||||
if (newPocketPosition < 46 && BagGetItemIdByPocketPosition(BAG_BERRIES, newPocketPosition) != 0)
|
||||
{
|
||||
@@ -533,8 +533,8 @@ static void TryChangeDisplayedBerry(u8 taskId, s8 toMove)
|
||||
|
||||
static void HandleBagCursorPositionChange(s8 toMove)
|
||||
{
|
||||
u16 *scrollPos = &gUnknown_0203CE58.unk12[3];
|
||||
u16 *cursorPos = &gUnknown_0203CE58.unk8[3];
|
||||
u16 *scrollPos = &gUnknown_0203CE58.scrollPosition[3];
|
||||
u16 *cursorPos = &gUnknown_0203CE58.cursorPosition[3];
|
||||
if (toMove > 0)
|
||||
{
|
||||
if (*cursorPos < 4 || BagGetItemIdByPocketPosition(BAG_BERRIES, *scrollPos + 8) == 0)
|
||||
|
||||
+13
-14
@@ -41,11 +41,10 @@ extern const u8 gDaycareText_PlayOther[];
|
||||
extern u8 GetCursorSelectionMonId(void);
|
||||
extern u16 ItemIdToBattleMoveId(u16);
|
||||
extern s32 ListMenuHandleInputGetItemId(u8);
|
||||
extern void sub_81AE6C8(u8, u16*, u16*);
|
||||
extern void DestroyListMenuTask(u8, u16*, u16*);
|
||||
extern void sub_819746C(u8, bool8);
|
||||
extern void NewMenuHelpers_DrawStdWindowFrame(u8, bool8);
|
||||
extern void sub_81B9328(void);
|
||||
extern void sub_81AF078(u32, bool8, struct ListMenu *);
|
||||
extern void CB2_ReturnToField(void);
|
||||
|
||||
// this file's functions
|
||||
@@ -79,18 +78,18 @@ static const struct ListMenuTemplate sDaycareListMenuLevelTemplate =
|
||||
.unk_08 = DaycarePrintMonInfo,
|
||||
.totalItems = 3,
|
||||
.maxShowed = 3,
|
||||
.unk_10 = 0,
|
||||
.windowId = 0,
|
||||
.unk_11 = 0,
|
||||
.unk_12 = 8,
|
||||
.cursor_Y = 0,
|
||||
.cursor_X = 0,
|
||||
.upText_Y = 1,
|
||||
.cursorColor = 2,
|
||||
.fillColor = 1,
|
||||
.cursorShadowColor = 3,
|
||||
.unk_16_0 = TRUE,
|
||||
.spaceBetweenItems = 0,
|
||||
.unk_16_7 = FALSE,
|
||||
.unk_17_0 = 1,
|
||||
.cursorPal = 2,
|
||||
.fillValue = 1,
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 1,
|
||||
.unk_16_3 = 0,
|
||||
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
|
||||
.fontId = 1,
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
@@ -1271,7 +1270,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId)
|
||||
gSpecialVar_Result = 2;
|
||||
break;
|
||||
}
|
||||
sub_81AE6C8(gTasks[taskId].tMenuListTaskId, NULL, NULL);
|
||||
DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL);
|
||||
sub_819746C(gTasks[taskId].tWindowId, TRUE);
|
||||
RemoveWindow(gTasks[taskId].tWindowId);
|
||||
DestroyTask(taskId);
|
||||
@@ -1280,7 +1279,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId)
|
||||
else if (gMain.newKeys & B_BUTTON)
|
||||
{
|
||||
gSpecialVar_Result = 2;
|
||||
sub_81AE6C8(gTasks[taskId].tMenuListTaskId, NULL, NULL);
|
||||
DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL);
|
||||
sub_819746C(gTasks[taskId].tWindowId, TRUE);
|
||||
RemoveWindow(gTasks[taskId].tWindowId);
|
||||
DestroyTask(taskId);
|
||||
@@ -1299,7 +1298,7 @@ void ShowDaycareLevelMenu(void)
|
||||
NewMenuHelpers_DrawStdWindowFrame(windowId, FALSE);
|
||||
|
||||
menuTemplate = sDaycareListMenuLevelTemplate;
|
||||
menuTemplate.unk_10 = windowId;
|
||||
menuTemplate.windowId = windowId;
|
||||
listMenuTaskId = ListMenuInit(&menuTemplate, 0, 0);
|
||||
|
||||
CopyWindowToVram(windowId, 3);
|
||||
|
||||
+6
-6
@@ -113,7 +113,7 @@ void sub_812719C(u8 taskId);
|
||||
void sub_81271CC(u8 taskId);
|
||||
void sub_8127268(u8 taskId);
|
||||
void sub_8127454(u8 *dest, u16 decorId);
|
||||
void sub_8127480(u32 a0, bool8 flag, struct ListMenu *menu);
|
||||
void sub_8127480(s32 a0, bool8 flag, struct ListMenu *menu);
|
||||
void sub_81274A0(u8 a0, s32 a1, u8 a2);
|
||||
void sub_8127620(u8 taskId);
|
||||
void sub_812764C(u8 taskId);
|
||||
@@ -801,7 +801,7 @@ void sub_8127330(u8 taskId)
|
||||
sDecorPCBuffer->items[i].name = sDecorPCBuffer->names[i];
|
||||
sDecorPCBuffer->items[i].id = -2;
|
||||
gMultiuseListMenuTemplate = gUnknown_085A6BD0;
|
||||
gMultiuseListMenuTemplate.unk_10 = sDecorMenuWindowIndices[1];
|
||||
gMultiuseListMenuTemplate.windowId = sDecorMenuWindowIndices[1];
|
||||
gMultiuseListMenuTemplate.totalItems = sDecorPCBuffer->unk_520;
|
||||
gMultiuseListMenuTemplate.items = sDecorPCBuffer->items;
|
||||
gMultiuseListMenuTemplate.maxShowed = sDecorPCBuffer->unk_521;
|
||||
@@ -813,7 +813,7 @@ void sub_8127454(u8 *dest, u16 decorId)
|
||||
StringAppend(dest, gDecorations[decorId].name);
|
||||
}
|
||||
|
||||
void sub_8127480(u32 a0, bool8 flag, struct ListMenu *menu)
|
||||
void sub_8127480(s32 a0, bool8 flag, struct ListMenu *menu)
|
||||
{
|
||||
if (flag != TRUE)
|
||||
{
|
||||
@@ -892,7 +892,7 @@ void sub_812764C(u8 taskId)
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
input = ListMenuHandleInputGetItemId(data[13]);
|
||||
sub_81AE860(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo);
|
||||
ListMenuGetScrollAndRow(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo);
|
||||
switch (input)
|
||||
{
|
||||
case -1:
|
||||
@@ -905,7 +905,7 @@ void sub_812764C(u8 taskId)
|
||||
PlaySE(SE_SELECT);
|
||||
gCurDecorationIndex = input;
|
||||
sub_8127554();
|
||||
sub_81AE6C8(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo);
|
||||
DestroyListMenuTask(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo);
|
||||
sub_8126A58(1);
|
||||
sub_81277A8();
|
||||
free(sDecorPCBuffer);
|
||||
@@ -1074,7 +1074,7 @@ void sub_8127A8C(u8 taskId)
|
||||
data = gTasks[taskId].data;
|
||||
sub_8127554();
|
||||
sub_81277A8();
|
||||
sub_81AE6C8(data[13], NULL, NULL);
|
||||
DestroyListMenuTask(data[13], NULL, NULL);
|
||||
free(sDecorPCBuffer);
|
||||
sub_8126E44(taskId);
|
||||
}
|
||||
|
||||
+27
-227
@@ -1,4 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "item_menu.h"
|
||||
#include "battle.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_frontier_2.h"
|
||||
@@ -58,7 +59,6 @@ void load_bag_item_list_buffers(u8);
|
||||
void bag_menu_print_pocket_names(u8*, u8*);
|
||||
void bag_menu_copy_pocket_name_to_window(u32);
|
||||
void bag_menu_draw_pocket_indicator_square(u8, u8);
|
||||
void AddBagVisualObject(u8);
|
||||
void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void);
|
||||
void bag_menu_add_list_scroll_arrow_indicators_maybe(void);
|
||||
void bag_menu_prepare_tmhm_move_window(void);
|
||||
@@ -67,9 +67,8 @@ void Task_WallyTutorialBagMenu(u8);
|
||||
void Task_BagMenu(u8);
|
||||
void get_name(s8*, u16);
|
||||
u16 ItemIdToBattleMoveId(u16);
|
||||
void ShakeBagVisual(void);
|
||||
u16 BagGetItemIdByPocketPosition(u8, u16);
|
||||
void AddBagItemIconObject(u16, u8);
|
||||
void AddBagItemIconSprite(u16, u8);
|
||||
void bag_menu_print_description_box_text(int);
|
||||
void bag_menu_print_cursor(u8, u8);
|
||||
void bag_menu_print(u8, u8, const u8*, u8, u8, u8, u8, u8, u8);
|
||||
@@ -86,9 +85,6 @@ u8 GetSwitchBagPocketDirection(void);
|
||||
void SwitchBagPocket(u8, s16, u16);
|
||||
bool8 sub_81AC2C0(void);
|
||||
void bag_menu_swap_items(u8);
|
||||
void SetBagVisualPocketId(u8, u8);
|
||||
void RemoveBagObject(u8);
|
||||
void AddSwitchPocketRotatingBallObject(s16);
|
||||
void sub_81AC10C(u8);
|
||||
void sub_81AC3C0(u8);
|
||||
void sub_81AC498(u8);
|
||||
@@ -128,7 +124,7 @@ void sub_81ABAC4(void);
|
||||
void sub_81ABAE0(void);
|
||||
u8 sub_81AB1F0(u8);
|
||||
void sub_81AC23C(u8);
|
||||
void bag_menu_change_item_callback(u32 a, bool8 b, struct ListMenu*);
|
||||
void bag_menu_change_item_callback(s32 a, bool8 b, struct ListMenu*);
|
||||
void sub_81AB520(u8 rboxId, int item_index_in_pocket, u8 a);
|
||||
void ItemMenu_UseOutOfBattle(u8 taskId);
|
||||
void ItemMenu_Toss(u8 taskId);
|
||||
@@ -251,46 +247,6 @@ const struct WindowTemplate gUnknown_086141AC[] = {
|
||||
|
||||
// .text
|
||||
|
||||
struct BagStruct {
|
||||
void (*bagCallback)(void);
|
||||
u8 location;
|
||||
u8 pocket;
|
||||
u8 unk6[2];
|
||||
u16 cursorPosition[5];
|
||||
u16 scrollPosition[5];
|
||||
};
|
||||
|
||||
struct UnkBagStruct {
|
||||
MainCallback unk0;
|
||||
u8 unk4[0x800];
|
||||
u8 unk804;
|
||||
u8 unk805;
|
||||
u8 unk806[10];
|
||||
u8 unk810[7];
|
||||
u8 unk817;
|
||||
u8 unk818;
|
||||
u8 unk819;
|
||||
u8 unk81A;
|
||||
u8 unk81B:4;
|
||||
u8 unk81B_1:2;
|
||||
u8 unk81B_3:1;
|
||||
u8 unk81B_2:1;
|
||||
u8 filler3[2];
|
||||
u8 unk81E;
|
||||
u8 unk81F;
|
||||
const u8* unk820;
|
||||
u8 unk824;
|
||||
u8 unk825;
|
||||
u8 filler[2];
|
||||
u8 unk828;
|
||||
u8 unk829[5];
|
||||
u8 unk82E[6];
|
||||
s16 unk834;
|
||||
u8 filler4[0xE];
|
||||
u8 unk844[32][32];
|
||||
u8 filler2[4];
|
||||
};
|
||||
|
||||
struct ListBuffer1 {
|
||||
struct ListMenuItem subBuffers[65];
|
||||
};
|
||||
@@ -319,14 +275,11 @@ void (*gFieldCallback)(void);
|
||||
|
||||
extern u8 *gPocketNamesStringsTable[];
|
||||
extern u8 gUnknown_08D9A88C[];
|
||||
extern struct CompressedSpriteSheet gUnknown_0857FB34;
|
||||
extern struct CompressedSpriteSheet gUnknown_0857FB3C;
|
||||
extern struct CompressedSpritePalette gUnknown_0857FB44;
|
||||
extern struct ListMenuTemplate gUnknown_08613F9C;
|
||||
extern u8 gMoveNames[][0xD];
|
||||
extern const u8 gMoveNames[][0xD];
|
||||
extern u8* gReturnToXStringsTable[];
|
||||
extern u32 gUnknown_0203CE5E[];
|
||||
extern u8 EventScript_2736B3[];
|
||||
extern const u8 EventScript_2736B3[];
|
||||
extern const u16 gUnknown_0860F074[];
|
||||
|
||||
void ResetBagScrollPositions(void)
|
||||
@@ -411,7 +364,7 @@ void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)
|
||||
gUnknown_0203CE54->unk81A = 0xFF;
|
||||
gUnknown_0203CE54->unk81E = -1;
|
||||
gUnknown_0203CE54->unk81F = -1;
|
||||
memset(&gUnknown_0203CE54->unk804, 0xFF, 12);
|
||||
memset(gUnknown_0203CE54->unk804, 0xFF, sizeof(gUnknown_0203CE54->unk804));
|
||||
memset(gUnknown_0203CE54->unk810, 0xFF, 10);
|
||||
SetMainCallback2(CB2_Bag);
|
||||
}
|
||||
@@ -517,7 +470,7 @@ bool8 setup_bag_menu(void)
|
||||
gMain.state++;
|
||||
break;
|
||||
case 15:
|
||||
AddBagVisualObject(gUnknown_0203CE58.pocket);
|
||||
AddBagVisualSprite(gUnknown_0203CE58.pocket);
|
||||
gMain.state++;
|
||||
break;
|
||||
case 16:
|
||||
@@ -688,7 +641,7 @@ void get_name(s8 *dest, u16 itemId)
|
||||
}
|
||||
}
|
||||
|
||||
void bag_menu_change_item_callback(u32 a, bool8 b, struct ListMenu *unused)
|
||||
void bag_menu_change_item_callback(s32 a, bool8 b, struct ListMenu *unused)
|
||||
{
|
||||
if (b != 1)
|
||||
{
|
||||
@@ -697,11 +650,11 @@ void bag_menu_change_item_callback(u32 a, bool8 b, struct ListMenu *unused)
|
||||
}
|
||||
if (gUnknown_0203CE54->unk81A == 0xFF)
|
||||
{
|
||||
RemoveBagItemIconObject(1 ^ gUnknown_0203CE54->unk81B_1);
|
||||
RemoveBagItemIconSprite(1 ^ gUnknown_0203CE54->unk81B_1);
|
||||
if (a != -2)
|
||||
AddBagItemIconObject(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, a), gUnknown_0203CE54->unk81B_1);
|
||||
AddBagItemIconSprite(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, a), gUnknown_0203CE54->unk81B_1);
|
||||
else
|
||||
AddBagItemIconObject(-1, gUnknown_0203CE54->unk81B_1);
|
||||
AddBagItemIconSprite(-1, gUnknown_0203CE54->unk81B_1);
|
||||
gUnknown_0203CE54->unk81B_1 ^= 1;
|
||||
if (!gUnknown_0203CE54->unk81B_3)
|
||||
bag_menu_print_description_box_text(a);
|
||||
@@ -830,7 +783,7 @@ void task_close_bag_menu_2(u8 taskId)
|
||||
s16* data = gTasks[taskId].data;
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
sub_81AE6C8(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
|
||||
DestroyListMenuTask(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
|
||||
if (gUnknown_0203CE54->unk0 != 0)
|
||||
SetMainCallback2(gUnknown_0203CE54->unk0);
|
||||
else
|
||||
@@ -915,7 +868,7 @@ void bag_menu_inits_lists_menu(u8 taskId)
|
||||
u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket];
|
||||
u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
|
||||
bag_menu_RemoveBagItem_message_window(4);
|
||||
sub_81AE6C8(data[0], scrollPos, cursorPos);
|
||||
DestroyListMenuTask(data[0], scrollPos, cursorPos);
|
||||
sub_81AB9A8(gUnknown_0203CE58.pocket);
|
||||
sub_81ABA88(gUnknown_0203CE58.pocket);
|
||||
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
|
||||
@@ -967,7 +920,7 @@ void Task_BagMenu(u8 taskId)
|
||||
{
|
||||
if (sub_81AC2C0() == 1)
|
||||
{
|
||||
sub_81AE860(data[0], scrollPos, cursorPos);
|
||||
ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
|
||||
if ((*scrollPos + *cursorPos) != gUnknown_0203CE54->unk829[gUnknown_0203CE58.pocket] - 1)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
@@ -979,7 +932,7 @@ void Task_BagMenu(u8 taskId)
|
||||
else
|
||||
{
|
||||
int r4 = ListMenuHandleInputGetItemId(data[0]);
|
||||
sub_81AE860(data[0], scrollPos, cursorPos);
|
||||
ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
|
||||
switch (r4)
|
||||
{
|
||||
case -1:
|
||||
@@ -1038,7 +991,6 @@ u8 GetSwitchBagPocketDirection(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId)
|
||||
{
|
||||
if (deltaBagPocketId == 1 && *bagPocketId == 4)
|
||||
@@ -1049,13 +1001,11 @@ void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId)
|
||||
*bagPocketId += deltaBagPocketId;
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
|
||||
{
|
||||
s16* data = gTasks[taskId].data;
|
||||
u8 pocketId;
|
||||
|
||||
|
||||
data[13] = 0;
|
||||
data[12] = 0;
|
||||
data[11] = deltaBagPocketId;
|
||||
@@ -1063,9 +1013,9 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
|
||||
{
|
||||
ClearWindowTilemap(0);
|
||||
ClearWindowTilemap(1);
|
||||
sub_81AE6C8(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
|
||||
DestroyListMenuTask(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
|
||||
schedule_bg_copy_tilemap_to_vram(0);
|
||||
gSprites[gUnknown_0203CE54->unk806[gUnknown_0203CE54->unk81B_1 ^ 1]].invisible = 1;
|
||||
gSprites[gUnknown_0203CE54->unk804[2 + (gUnknown_0203CE54->unk81B_1 ^ 1)]].invisible = 1;
|
||||
sub_81AB824();
|
||||
}
|
||||
pocketId = gUnknown_0203CE58.pocket;
|
||||
@@ -1085,160 +1035,10 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
|
||||
FillBgTilemapBufferRect_Palette0(2, 11, 14, 2, 15, 16);
|
||||
schedule_bg_copy_tilemap_to_vram(2);
|
||||
SetBagVisualPocketId(pocketId, 1);
|
||||
RemoveBagObject(1);
|
||||
AddSwitchPocketRotatingBallObject(deltaBagPocketId);
|
||||
RemoveBagSprite(1);
|
||||
AddSwitchPocketRotatingBallSprite(deltaBagPocketId);
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_81AC10C, gTasks[taskId].func);
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
push {r4-r6,lr}\n\
|
||||
sub sp, 0xC\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r6, r0, 24\n\
|
||||
lsls r1, 16\n\
|
||||
lsrs r5, r1, 16\n\
|
||||
lsls r2, 16\n\
|
||||
lsls r0, r6, 2\n\
|
||||
adds r0, r6\n\
|
||||
lsls r0, 3\n\
|
||||
ldr r1, =gTasks + 0x8\n\
|
||||
adds r4, r0, r1\n\
|
||||
movs r0, 0\n\
|
||||
strh r0, [r4, 0x1A]\n\
|
||||
strh r0, [r4, 0x18]\n\
|
||||
strh r5, [r4, 0x16]\n\
|
||||
cmp r2, 0\n\
|
||||
bne _081AC026\n\
|
||||
movs r0, 0\n\
|
||||
bl ClearWindowTilemap\n\
|
||||
movs r0, 0x1\n\
|
||||
bl ClearWindowTilemap\n\
|
||||
ldrb r0, [r4]\n\
|
||||
ldr r3, =gUnknown_0203CE58\n\
|
||||
ldrb r2, [r3, 0x5]\n\
|
||||
lsls r2, 1\n\
|
||||
adds r1, r3, 0\n\
|
||||
adds r1, 0x12\n\
|
||||
adds r1, r2, r1\n\
|
||||
adds r3, 0x8\n\
|
||||
adds r2, r3\n\
|
||||
bl sub_81AE6C8\n\
|
||||
movs r0, 0\n\
|
||||
bl schedule_bg_copy_tilemap_to_vram\n\
|
||||
ldr r3, =gSprites\n\
|
||||
ldr r0, =gUnknown_0203CE54\n\
|
||||
ldr r2, [r0]\n\
|
||||
ldr r1, =0x0000081b\n\
|
||||
adds r0, r2, r1\n\
|
||||
ldrb r1, [r0]\n\
|
||||
lsls r1, 26\n\
|
||||
lsrs r1, 30\n\
|
||||
movs r0, 0x1\n\
|
||||
eors r0, r1\n\
|
||||
adds r2, r0\n\
|
||||
ldr r0, =0x00000806\n\
|
||||
adds r2, r0\n\
|
||||
ldrb r1, [r2]\n\
|
||||
lsls r0, r1, 4\n\
|
||||
adds r0, r1\n\
|
||||
lsls r0, 2\n\
|
||||
adds r0, r3\n\
|
||||
adds r0, 0x3E\n\
|
||||
ldrb r1, [r0]\n\
|
||||
movs r2, 0x4\n\
|
||||
orrs r1, r2\n\
|
||||
strb r1, [r0]\n\
|
||||
bl sub_81AB824\n\
|
||||
_081AC026:\n\
|
||||
ldr r4, =gUnknown_0203CE58\n\
|
||||
ldrb r1, [r4, 0x5]\n\
|
||||
add r0, sp, 0x8\n\
|
||||
strb r1, [r0]\n\
|
||||
lsls r1, r5, 24\n\
|
||||
asrs r1, 24\n\
|
||||
bl ChangeBagPocketId\n\
|
||||
lsls r0, r5, 16\n\
|
||||
asrs r1, r0, 16\n\
|
||||
adds r5, r0, 0\n\
|
||||
cmp r1, 0x1\n\
|
||||
bne _081AC07C\n\
|
||||
ldr r2, =gPocketNamesStringsTable\n\
|
||||
ldrb r0, [r4, 0x5]\n\
|
||||
lsls r0, 2\n\
|
||||
adds r0, r2\n\
|
||||
ldr r0, [r0]\n\
|
||||
add r1, sp, 0x8\n\
|
||||
ldrb r1, [r1]\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r2\n\
|
||||
ldr r1, [r1]\n\
|
||||
bl bag_menu_print_pocket_names\n\
|
||||
movs r0, 0\n\
|
||||
bl bag_menu_copy_pocket_name_to_window\n\
|
||||
b _081AC09A\n\
|
||||
.pool\n\
|
||||
_081AC07C:\n\
|
||||
ldr r2, =gPocketNamesStringsTable\n\
|
||||
add r0, sp, 0x8\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 2\n\
|
||||
adds r0, r2\n\
|
||||
ldr r0, [r0]\n\
|
||||
ldrb r1, [r4, 0x5]\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r2\n\
|
||||
ldr r1, [r1]\n\
|
||||
bl bag_menu_print_pocket_names\n\
|
||||
movs r0, 0x8\n\
|
||||
bl bag_menu_copy_pocket_name_to_window\n\
|
||||
_081AC09A:\n\
|
||||
ldr r0, =gUnknown_0203CE58\n\
|
||||
ldrb r0, [r0, 0x5]\n\
|
||||
movs r1, 0\n\
|
||||
bl bag_menu_draw_pocket_indicator_square\n\
|
||||
add r0, sp, 0x8\n\
|
||||
ldrb r0, [r0]\n\
|
||||
movs r1, 0x1\n\
|
||||
bl bag_menu_draw_pocket_indicator_square\n\
|
||||
movs r0, 0xF\n\
|
||||
str r0, [sp]\n\
|
||||
movs r0, 0x10\n\
|
||||
str r0, [sp, 0x4]\n\
|
||||
movs r0, 0x2\n\
|
||||
movs r1, 0xB\n\
|
||||
movs r2, 0xE\n\
|
||||
movs r3, 0x2\n\
|
||||
bl FillBgTilemapBufferRect_Palette0\n\
|
||||
movs r0, 0x2\n\
|
||||
bl schedule_bg_copy_tilemap_to_vram\n\
|
||||
add r0, sp, 0x8\n\
|
||||
ldrb r0, [r0]\n\
|
||||
movs r1, 0x1\n\
|
||||
bl SetBagVisualPocketId\n\
|
||||
movs r0, 0x1\n\
|
||||
bl RemoveBagObject\n\
|
||||
asrs r0, r5, 16\n\
|
||||
bl AddSwitchPocketRotatingBallObject\n\
|
||||
ldr r1, =sub_81AC10C\n\
|
||||
ldr r2, =gTasks\n\
|
||||
lsls r0, r6, 2\n\
|
||||
adds r0, r6\n\
|
||||
lsls r0, 3\n\
|
||||
adds r0, r2\n\
|
||||
ldr r2, [r0]\n\
|
||||
adds r0, r6, 0\n\
|
||||
bl SetTaskFuncWithFollowupFunc\n\
|
||||
add sp, 0xC\n\
|
||||
pop {r4-r6}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.pool\n\
|
||||
.syntax divided\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
void sub_81AC10C(u8 taskId)
|
||||
{
|
||||
@@ -1340,13 +1140,13 @@ void sub_81AC3C0(u8 taskId)
|
||||
if (gMain.newKeys & SELECT_BUTTON)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
sub_81AE860(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
|
||||
ListMenuGetScrollAndRow(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
|
||||
sub_81AC498(taskId);
|
||||
}
|
||||
else
|
||||
{
|
||||
r7 = ListMenuHandleInputGetItemId(data[0]);
|
||||
sub_81AE860(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
|
||||
ListMenuGetScrollAndRow(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
|
||||
sub_80D4FC8(0);
|
||||
sub_80D4FEC(gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
|
||||
switch (r7)
|
||||
@@ -1381,7 +1181,7 @@ void sub_81AC498(u8 taskId)
|
||||
{
|
||||
sub_80D702C(gBagPockets[gUnknown_0203CE58.pocket].itemSlots, data[1], realPos);
|
||||
gUnknown_0203CE54->unk81A = -1;
|
||||
sub_81AE6C8(data[0], scrollPos, cursorPos);
|
||||
DestroyListMenuTask(data[0], scrollPos, cursorPos);
|
||||
if (data[1] < realPos)
|
||||
gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]--;
|
||||
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
|
||||
@@ -1399,7 +1199,7 @@ void sub_81AC590(u8 taskId)
|
||||
u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket];
|
||||
|
||||
gUnknown_0203CE54->unk81A = -1;
|
||||
sub_81AE6C8(data[0], scrollPos, cursorPos);
|
||||
DestroyListMenuTask(data[0], scrollPos, cursorPos);
|
||||
if (data[1] < (*scrollPos + *cursorPos))
|
||||
gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]--;
|
||||
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
|
||||
@@ -1771,7 +1571,7 @@ void Task_ActuallyToss(u8 taskId)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
RemoveBagItem(gSpecialVar_ItemId, data[8]);
|
||||
sub_81AE6C8(data[0], scrollPos, cursorPos);
|
||||
DestroyListMenuTask(data[0], scrollPos, cursorPos);
|
||||
sub_81AB9A8(gUnknown_0203CE58.pocket);
|
||||
sub_81ABA88(gUnknown_0203CE58.pocket);
|
||||
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
|
||||
@@ -1791,7 +1591,7 @@ void ItemMenu_Register(u8 taskId)
|
||||
gSaveBlock1Ptr->registeredItem = 0;
|
||||
else
|
||||
gSaveBlock1Ptr->registeredItem = gSpecialVar_ItemId;
|
||||
sub_81AE6C8(data[0], scrollPos, cursorPos);
|
||||
DestroyListMenuTask(data[0], scrollPos, cursorPos);
|
||||
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
|
||||
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
|
||||
schedule_bg_copy_tilemap_to_vram(0);
|
||||
@@ -2039,7 +1839,7 @@ void sub_81AD8C8(u8 taskId)
|
||||
PlaySE(SE_REGI);
|
||||
RemoveBagItem(gSpecialVar_ItemId, data[8]);
|
||||
AddMoney(&gSaveBlock1Ptr->money, (itemid_get_market_price(gSpecialVar_ItemId) / 2) * data[8]);
|
||||
sub_81AE6C8(data[0], scrollPos, cursorPos);
|
||||
DestroyListMenuTask(data[0], scrollPos, cursorPos);
|
||||
sub_81AB9A8(gUnknown_0203CE58.pocket);
|
||||
sub_81ABA88(gUnknown_0203CE58.pocket);
|
||||
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
|
||||
@@ -2212,7 +2012,7 @@ void Task_WallyTutorialBagMenu(u8 taskId)
|
||||
case 0x132:
|
||||
PlaySE(SE_SELECT);
|
||||
bag_menu_remove_some_window();
|
||||
sub_81AE6C8(data[0], 0, 0);
|
||||
DestroyListMenuTask(data[0], 0, 0);
|
||||
RestoreBagAfterWallyTutorial();
|
||||
unknown_ItemMenu_Confirm(taskId);
|
||||
break;
|
||||
|
||||
@@ -0,0 +1,678 @@
|
||||
#include "global.h"
|
||||
#include "sprite.h"
|
||||
#include "decompress.h"
|
||||
#include "item_menu.h"
|
||||
#include "item_icon.h"
|
||||
#include "item_menu_icons.h"
|
||||
#include "window.h"
|
||||
#include "menu_helpers.h"
|
||||
#include "berry.h"
|
||||
#include "graphics.h"
|
||||
#include "constants/items.h"
|
||||
|
||||
struct CompressedTilesPal
|
||||
{
|
||||
const u8 *tiles;
|
||||
const u8 *pal;
|
||||
};
|
||||
|
||||
extern void sub_80D5860(struct Sprite *sprite);
|
||||
extern void sub_80D58F8(struct Sprite *sprite);
|
||||
extern void sub_80D5968(struct Sprite *sprite);
|
||||
extern void sub_80D5A94(struct Sprite *sprite);
|
||||
extern void sub_80D5B48(struct Sprite *sprite);
|
||||
|
||||
// this file's functions
|
||||
static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite);
|
||||
static void SpriteCB_ShakeBagVisual(struct Sprite *sprite);
|
||||
static void SpriteCB_SwitchPocketRotatingBallInit(struct Sprite *sprite);
|
||||
static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite);
|
||||
|
||||
// static const rom data
|
||||
static const u16 gUnknown_0857F564[] = INCBIN_U16("graphics/interface/bag_spinner.gbapal");
|
||||
static const u8 gUnknown_0857F584[] = INCBIN_U8("graphics/interface/bag_spinner.4bpp");
|
||||
static const u8 gUnknown_0857F604[] = INCBIN_U8("graphics/unused/cherry.4bpp");
|
||||
static const u16 gUnknown_0857FA84[] = INCBIN_U16("graphics/unused/cherry.gbapal");
|
||||
|
||||
static const struct OamData sOamData_857FAA4 =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 1,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 3,
|
||||
.tileNum = 0,
|
||||
.priority = 1,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_857FAAC[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 4),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_857FAB4[] =
|
||||
{
|
||||
ANIMCMD_FRAME(64, 4),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_857FABC[] =
|
||||
{
|
||||
ANIMCMD_FRAME(128, 4),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_857FAC4[] =
|
||||
{
|
||||
ANIMCMD_FRAME(192, 4),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_857FACC[] =
|
||||
{
|
||||
ANIMCMD_FRAME(256, 4),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_857FAD4[] =
|
||||
{
|
||||
ANIMCMD_FRAME(320, 4),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_857FADC[] =
|
||||
{
|
||||
sSpriteAnim_857FAAC,
|
||||
sSpriteAnim_857FAB4,
|
||||
sSpriteAnim_857FAC4,
|
||||
sSpriteAnim_857FACC,
|
||||
sSpriteAnim_857FAD4,
|
||||
sSpriteAnim_857FABC
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sSpriteAffineAnim_857FAF4[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sSpriteAffineAnim_857FB04[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(0, 0, 254, 2),
|
||||
AFFINEANIMCMD_FRAME(0, 0, 2, 4),
|
||||
AFFINEANIMCMD_FRAME(0, 0, 254, 4),
|
||||
AFFINEANIMCMD_FRAME(0, 0, 2, 2),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB2C[] =
|
||||
{
|
||||
sSpriteAffineAnim_857FAF4,
|
||||
sSpriteAffineAnim_857FB04
|
||||
};
|
||||
|
||||
const struct CompressedSpriteSheet gUnknown_0857FB34 =
|
||||
{
|
||||
gBagMaleTiles, 0x3000, 100
|
||||
};
|
||||
|
||||
const struct CompressedSpriteSheet gUnknown_0857FB3C =
|
||||
{
|
||||
gBagFemaleTiles, 0x3000, 100
|
||||
};
|
||||
|
||||
const struct CompressedSpritePalette gUnknown_0857FB44 =
|
||||
{
|
||||
gBagPalette, 100
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate gUnknown_0857FB4C =
|
||||
{
|
||||
.tileTag = 100,
|
||||
.paletteTag = 100,
|
||||
.oam = &sOamData_857FAA4,
|
||||
.anims = sSpriteAnimTable_857FADC,
|
||||
.images = NULL,
|
||||
.affineAnims = sSpriteAffineAnimTable_857FB2C,
|
||||
.callback = SpriteCallbackDummy,
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_857FB64 =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 4,
|
||||
.size = 1,
|
||||
.tileNum = 0,
|
||||
.priority = 2,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_857FB6C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_857FB74[] =
|
||||
{
|
||||
sSpriteAnim_857FB6C
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sSpriteAffineAnim_857FB78[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(0, 0, 8, 16),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sSpriteAffineAnim_857FB88[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(0, 0, 248, 16),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB98[] =
|
||||
{
|
||||
sSpriteAffineAnim_857FB78,
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB9C[] =
|
||||
{
|
||||
sSpriteAffineAnim_857FB88,
|
||||
};
|
||||
|
||||
static const struct SpriteSheet gUnknown_0857FBA0 =
|
||||
{
|
||||
gUnknown_0857F584, 0x80, 101
|
||||
};
|
||||
|
||||
static const struct SpritePalette gUnknown_0857FBA8 =
|
||||
{
|
||||
gUnknown_0857F564, 101
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate gUnknown_0857FBB0 =
|
||||
{
|
||||
.tileTag = 101,
|
||||
.paletteTag = 101,
|
||||
.oam = &sOamData_857FB64,
|
||||
.anims = sSpriteAnimTable_857FB74,
|
||||
.images = NULL,
|
||||
.affineAnims = sSpriteAffineAnimTable_857FB98,
|
||||
.callback = SpriteCB_SwitchPocketRotatingBallInit,
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_857FBC8 =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 3,
|
||||
.tileNum = 0,
|
||||
.priority = 1,
|
||||
.paletteNum = 7,
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_857FBD0 =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 3,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 3,
|
||||
.tileNum = 0,
|
||||
.priority = 0,
|
||||
.paletteNum = 7,
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_857FBD8[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_857FBE0[] =
|
||||
{
|
||||
sSpriteAnim_857FBD8
|
||||
};
|
||||
|
||||
static const struct SpriteFrameImage sSpriteImageTable_857FBE4[] =
|
||||
{
|
||||
{&gDecompressionBuffer[0], 0x800},
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate gUnknown_0857FBEC =
|
||||
{
|
||||
.tileTag = 65535,
|
||||
.paletteTag = 30020,
|
||||
.oam = &sOamData_857FBC8,
|
||||
.anims = sSpriteAnimTable_857FBE0,
|
||||
.images = sSpriteImageTable_857FBE4,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCallbackDummy,
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sSpriteAffineAnim_857FC04[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(-1, -1, 253, 96),
|
||||
AFFINEANIMCMD_FRAME(0, 0, 0, 16),
|
||||
AFFINEANIMCMD_FRAME(-2, -2, 255, 64),
|
||||
AFFINEANIMCMD_FRAME(-8, 0, 0, 16),
|
||||
AFFINEANIMCMD_FRAME(0, -8, 0, 16),
|
||||
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
|
||||
AFFINEANIMCMD_JUMP(0)
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sSpriteAffineAnim_857FC3C[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(-1, -1, 3, 96),
|
||||
AFFINEANIMCMD_FRAME(0, 0, 0, 16),
|
||||
AFFINEANIMCMD_FRAME(-2, -2, 1, 64),
|
||||
AFFINEANIMCMD_FRAME(-8, 0, 0, 16),
|
||||
AFFINEANIMCMD_FRAME(0, -8, 0, 16),
|
||||
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
|
||||
AFFINEANIMCMD_JUMP(0)
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FC74[] =
|
||||
{
|
||||
sSpriteAffineAnim_857FC04,
|
||||
sSpriteAffineAnim_857FC3C
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate gUnknown_0857FC7C =
|
||||
{
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 0x7544,
|
||||
.oam = &sOamData_857FBD0,
|
||||
.anims = sSpriteAnimTable_857FBE0,
|
||||
.images = sSpriteImageTable_857FBE4,
|
||||
.affineAnims = sSpriteAffineAnimTable_857FC74,
|
||||
.callback = SpriteCallbackDummy,
|
||||
};
|
||||
|
||||
static const struct CompressedTilesPal gBerryPicTable[] =
|
||||
{
|
||||
{gBerryPic_Cheri, gBerryPalette_Cheri},
|
||||
{gBerryPic_Chesto, gBerryPalette_Chesto},
|
||||
{gBerryPic_Pecha, gBerryPalette_Pecha},
|
||||
{gBerryPic_Rawst, gBerryPalette_Rawst},
|
||||
{gBerryPic_Aspear, gBerryPalette_Aspear},
|
||||
{gBerryPic_Leppa, gBerryPalette_Leppa},
|
||||
{gBerryPic_Oran, gBerryPalette_Oran},
|
||||
{gBerryPic_Persim, gBerryPalette_Persim},
|
||||
{gBerryPic_Lum, gBerryPalette_Lum},
|
||||
{gBerryPic_Sitrus, gBerryPalette_Sitrus},
|
||||
{gBerryPic_Figy, gBerryPalette_Figy},
|
||||
{gBerryPic_Wiki, gBerryPalette_Wiki},
|
||||
{gBerryPic_Mago, gBerryPalette_Mago},
|
||||
{gBerryPic_Aguav, gBerryPalette_Aguav},
|
||||
{gBerryPic_Iapapa, gBerryPalette_Iapapa},
|
||||
{gBerryPic_Razz, gBerryPalette_Razz},
|
||||
{gBerryPic_Bluk, gBerryPalette_Bluk},
|
||||
{gBerryPic_Nanab, gBerryPalette_Nanab},
|
||||
{gBerryPic_Wepear, gBerryPalette_Wepear},
|
||||
{gBerryPic_Pinap, gBerryPalette_Pinap},
|
||||
{gBerryPic_Pomeg, gBerryPalette_Pomeg},
|
||||
{gBerryPic_Kelpsy, gBerryPalette_Kelpsy},
|
||||
{gBerryPic_Qualot, gBerryPalette_Qualot},
|
||||
{gBerryPic_Hondew, gBerryPalette_Hondew},
|
||||
{gBerryPic_Grepa, gBerryPalette_Grepa},
|
||||
{gBerryPic_Tamato, gBerryPalette_Tamato},
|
||||
{gBerryPic_Cornn, gBerryPalette_Cornn},
|
||||
{gBerryPic_Magost, gBerryPalette_Magost},
|
||||
{gBerryPic_Rabuta, gBerryPalette_Rabuta},
|
||||
{gBerryPic_Nomel, gBerryPalette_Nomel},
|
||||
{gBerryPic_Spelon, gBerryPalette_Spelon},
|
||||
{gBerryPic_Pamtre, gBerryPalette_Pamtre},
|
||||
{gBerryPic_Watmel, gBerryPalette_Watmel},
|
||||
{gBerryPic_Durin, gBerryPalette_Durin},
|
||||
{gBerryPic_Belue, gBerryPalette_Belue},
|
||||
{gBerryPic_Liechi, gBerryPalette_Liechi},
|
||||
{gBerryPic_Ganlon, gBerryPalette_Ganlon},
|
||||
{gBerryPic_Salac, gBerryPalette_Salac},
|
||||
{gBerryPic_Petaya, gBerryPalette_Petaya},
|
||||
{gBerryPic_Apicot, gBerryPalette_Apicot},
|
||||
{gBerryPic_Lansat, gBerryPalette_Lansat},
|
||||
{gBerryPic_Starf, gBerryPalette_Starf},
|
||||
{gBerryPic_Enigma, gBerryPalette_Enigma},
|
||||
};
|
||||
|
||||
const struct CompressedSpriteSheet gUnknown_0857FDEC =
|
||||
{
|
||||
gBerryCheckCircle_Gfx, 0x800, 10000
|
||||
};
|
||||
|
||||
const struct CompressedSpritePalette gUnknown_0857FDF4 =
|
||||
{
|
||||
gUnknown_08D9BEF0, 10000
|
||||
};
|
||||
|
||||
static const struct OamData sOamData_857FDFC =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 3,
|
||||
.tileNum = 0,
|
||||
.priority = 1,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0
|
||||
};
|
||||
|
||||
static const union AnimCmd sSpriteAnim_857FE04[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sSpriteAnimTable_857FE0C[] =
|
||||
{
|
||||
sSpriteAnim_857FE04
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate gUnknown_0857FE10 =
|
||||
{
|
||||
.tileTag = 10000,
|
||||
.paletteTag = 10000,
|
||||
.oam = &sOamData_857FDFC,
|
||||
.anims = sSpriteAnimTable_857FE0C,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCallbackDummy,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_0857FE28 =
|
||||
{
|
||||
.tileTag = 0,
|
||||
.paletteTag = 0,
|
||||
.oam = &gDummyOamData,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80D5860,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_0857FE40 =
|
||||
{
|
||||
.tileTag = 0,
|
||||
.paletteTag = 0,
|
||||
.oam = &gDummyOamData,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80D58F8,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_0857FE58 =
|
||||
{
|
||||
.tileTag = 0,
|
||||
.paletteTag = 0,
|
||||
.oam = &gDummyOamData,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80D5968,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_0857FE70 =
|
||||
{
|
||||
.tileTag = 0,
|
||||
.paletteTag = 0,
|
||||
.oam = &gDummyOamData,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80D5A94,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_0857FE88 =
|
||||
{
|
||||
.tileTag = 0,
|
||||
.paletteTag = 0,
|
||||
.oam = &gDummyOamData,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_80D5B48,
|
||||
};
|
||||
|
||||
// code
|
||||
void RemoveBagSprite(u8 id)
|
||||
{
|
||||
u8 *spriteId = &gUnknown_0203CE54->unk804[id];
|
||||
if (*spriteId != 0xFF)
|
||||
{
|
||||
FreeSpriteTilesByTag(id + 100);
|
||||
FreeSpritePaletteByTag(id + 100);
|
||||
FreeSpriteOamMatrix(&gSprites[*spriteId]);
|
||||
DestroySprite(&gSprites[*spriteId]);
|
||||
*spriteId = 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
void AddBagVisualSprite(u8 bagPocketId)
|
||||
{
|
||||
u8 *spriteId = &gUnknown_0203CE54->unk804[0];
|
||||
*spriteId = CreateSprite(&gUnknown_0857FB4C, 68, 66, 0);
|
||||
SetBagVisualPocketId(bagPocketId, FALSE);
|
||||
}
|
||||
|
||||
void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets)
|
||||
{
|
||||
struct Sprite *sprite = &gSprites[gUnknown_0203CE54->unk804[0]];
|
||||
if (isSwitchingPockets)
|
||||
{
|
||||
sprite->pos2.y = -5;
|
||||
sprite->callback = SpriteCB_BagVisualSwitchingPockets;
|
||||
sprite->data[0] = bagPocketId + 1;
|
||||
StartSpriteAnim(sprite, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
StartSpriteAnim(sprite, bagPocketId + 1);
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->pos2.y != 0)
|
||||
{
|
||||
sprite->pos2.y++;
|
||||
}
|
||||
else
|
||||
{
|
||||
StartSpriteAnim(sprite, sprite->data[0]);
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
}
|
||||
}
|
||||
|
||||
void ShakeBagVisual(void)
|
||||
{
|
||||
struct Sprite *sprite = &gSprites[gUnknown_0203CE54->unk804[0]];
|
||||
if (sprite->affineAnimEnded)
|
||||
{
|
||||
StartSpriteAffineAnim(sprite, 1);
|
||||
sprite->callback = SpriteCB_ShakeBagVisual;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_ShakeBagVisual(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->affineAnimEnded)
|
||||
{
|
||||
StartSpriteAffineAnim(sprite, 0);
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
}
|
||||
}
|
||||
|
||||
void AddSwitchPocketRotatingBallSprite(s16 rotationDirection)
|
||||
{
|
||||
u8 *spriteId = &gUnknown_0203CE54->unk804[1];
|
||||
LoadSpriteSheet(&gUnknown_0857FBA0);
|
||||
LoadSpritePalette(&gUnknown_0857FBA8);
|
||||
*spriteId = CreateSprite(&gUnknown_0857FBB0, 16, 16, 0);
|
||||
gSprites[*spriteId].data[0] = rotationDirection;
|
||||
}
|
||||
|
||||
static void update_switch_pocket_rotating_ball_coords(struct Sprite *sprite)
|
||||
{
|
||||
sprite->centerToCornerVecX = sprite->data[1] - ((sprite->data[3] + 1) & 1);
|
||||
sprite->centerToCornerVecY = sprite->data[1] - ((sprite->data[3] + 1) & 1);
|
||||
}
|
||||
|
||||
static void SpriteCB_SwitchPocketRotatingBallInit(struct Sprite *sprite)
|
||||
{
|
||||
sprite->oam.affineMode = 1;
|
||||
if (sprite->data[0] == -1)
|
||||
sprite->affineAnims = sSpriteAffineAnimTable_857FB98;
|
||||
else
|
||||
sprite->affineAnims = sSpriteAffineAnimTable_857FB9C;
|
||||
|
||||
InitSpriteAffineAnim(sprite);
|
||||
sprite->data[1] = sprite->centerToCornerVecX;
|
||||
sprite->data[1] = sprite->centerToCornerVecY;
|
||||
update_switch_pocket_rotating_ball_coords(sprite);
|
||||
sprite->callback = SpriteCB_SwitchPocketRotatingBallContinue;
|
||||
}
|
||||
|
||||
static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[3]++;
|
||||
update_switch_pocket_rotating_ball_coords(sprite);
|
||||
if (sprite->data[3] == 16)
|
||||
RemoveBagSprite(1);
|
||||
}
|
||||
|
||||
void AddBagItemIconSprite(u16 itemId, u8 id)
|
||||
{
|
||||
u8 *spriteId = &gUnknown_0203CE54->unk804[id + 2];
|
||||
if (*spriteId == 0xFF)
|
||||
{
|
||||
u8 iconSpriteId;
|
||||
|
||||
FreeSpriteTilesByTag(id + 102);
|
||||
FreeSpritePaletteByTag(id + 102);
|
||||
iconSpriteId = AddItemIconSprite(id + 102, id + 102, itemId);
|
||||
if (iconSpriteId != MAX_SPRITES)
|
||||
{
|
||||
*spriteId = iconSpriteId;
|
||||
gSprites[iconSpriteId].pos2.x = 24;
|
||||
gSprites[iconSpriteId].pos2.y = 88;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RemoveBagItemIconSprite(u8 id)
|
||||
{
|
||||
RemoveBagSprite(id + 2);
|
||||
}
|
||||
|
||||
void sub_80D4FAC(void)
|
||||
{
|
||||
sub_8122344(&gUnknown_0203CE54->unk804[4], 8);
|
||||
}
|
||||
|
||||
void sub_80D4FC8(u8 arg0)
|
||||
{
|
||||
sub_81223FC(&gUnknown_0203CE54->unk804[4], 8, arg0);
|
||||
}
|
||||
|
||||
void sub_80D4FEC(u8 arg0)
|
||||
{
|
||||
sub_8122448(&gUnknown_0203CE54->unk804[4], 136, 120, (arg0 + 1) * 16);
|
||||
}
|
||||
|
||||
static void sub_80D5018(void *mem0, void *mem1)
|
||||
{
|
||||
u8 i, j;
|
||||
|
||||
memset(mem1, 0, 0x800);
|
||||
mem1 += 0x100;
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
mem1 += 0x20;
|
||||
for (j = 0; j < 6; j++)
|
||||
{
|
||||
memcpy(mem1, mem0, 0x20);
|
||||
mem1 += 0x20;
|
||||
mem0 += 0x20;
|
||||
}
|
||||
if (i != 5)
|
||||
mem1 += 0x20;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80D5070(u8 berryId)
|
||||
{
|
||||
struct CompressedSpritePalette pal;
|
||||
|
||||
if (berryId == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) - 1 && IsEnigmaBerryValid())
|
||||
{
|
||||
// unknown empty if statement
|
||||
}
|
||||
|
||||
pal.data = gBerryPicTable[berryId].pal;
|
||||
pal.tag = 0x7544;
|
||||
LoadCompressedObjectPalette(&pal);
|
||||
LZDecompressWram(gBerryPicTable[berryId].tiles, &gDecompressionBuffer[0x1000]);
|
||||
sub_80D5018(&gDecompressionBuffer[0x1000], &gDecompressionBuffer[0]);
|
||||
}
|
||||
|
||||
u8 CreateBerryTagSprite(u8 id, s16 x, s16 y)
|
||||
{
|
||||
sub_80D5070(id);
|
||||
return CreateSprite(&gUnknown_0857FBEC, x, y, 0);
|
||||
}
|
||||
|
||||
void FreeBerryTagSpritePalette(void)
|
||||
{
|
||||
FreeSpritePaletteByTag(0x7544);
|
||||
}
|
||||
|
||||
u8 sub_80D511C(u8 berryId, u8 x, u8 y, bool8 startAffine)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
FreeSpritePaletteByTag(0x7544);
|
||||
sub_80D5070(berryId);
|
||||
spriteId = CreateSprite(&gUnknown_0857FC7C, x, y, 0);
|
||||
if (startAffine == TRUE)
|
||||
StartSpriteAffineAnim(&gSprites[spriteId], 1);
|
||||
|
||||
return spriteId;
|
||||
}
|
||||
|
||||
u8 CreateBerryFlavorCircleSprite(s16 x)
|
||||
{
|
||||
return CreateSprite(&gUnknown_0857FE10, x, 116, 0);
|
||||
}
|
||||
+633
@@ -0,0 +1,633 @@
|
||||
#include "global.h"
|
||||
#include "menu.h"
|
||||
#include "list_menu.h"
|
||||
#include "window.h"
|
||||
#include "text_window.h"
|
||||
#include "main.h"
|
||||
#include "task.h"
|
||||
#include "menu_indicators.h"
|
||||
#include "strings.h"
|
||||
#include "sound.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
struct UnknownMysteryGiftLinkMenuStruct
|
||||
{
|
||||
s32 field_0;
|
||||
u8 field_4;
|
||||
u8 field_5;
|
||||
u8 field_6;
|
||||
};
|
||||
|
||||
struct UnknownListMenuPals
|
||||
{
|
||||
u8 cursorPal:4;
|
||||
u8 fillValue:4;
|
||||
u8 cursorShadowPal:4;
|
||||
u8 lettersSpacing:6;
|
||||
u8 field_2_2:6; // unused
|
||||
u8 fontId:7;
|
||||
u8 field_3_7:1;
|
||||
};
|
||||
|
||||
extern struct UnknownMysteryGiftLinkMenuStruct gUnknown_0203CE84;
|
||||
|
||||
// this file's functions
|
||||
static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow);
|
||||
static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown);
|
||||
static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOffset, u16 count);
|
||||
static void ListMenuDrawCursor(struct ListMenu *list);
|
||||
static void ListMenuCallSelectionChangedCallback(struct ListMenu *list, u8 a2);
|
||||
static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind);
|
||||
|
||||
// IWRAM common
|
||||
struct UnknownListMenuPals gUnknown_03006300;
|
||||
struct ListMenuTemplate gMultiuseListMenuTemplate;
|
||||
|
||||
// code
|
||||
static void ListMenuDummyTask(u8 taskId)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
s32 DoMysteryGiftListMenu(struct WindowTemplate *windowTemplate, struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum)
|
||||
{
|
||||
switch (gUnknown_0203CE84.field_4)
|
||||
{
|
||||
case 0:
|
||||
default:
|
||||
gUnknown_0203CE84.field_5 = AddWindow(windowTemplate);
|
||||
switch (arg2)
|
||||
{
|
||||
case 2:
|
||||
sub_809882C(gUnknown_0203CE84.field_5, tileNum, palNum);
|
||||
case 1:
|
||||
sub_8098858(gUnknown_0203CE84.field_5, tileNum, palNum / 16);
|
||||
break;
|
||||
}
|
||||
gMultiuseListMenuTemplate = *listMenuTemplate;
|
||||
gMultiuseListMenuTemplate.windowId = gUnknown_0203CE84.field_5;
|
||||
gUnknown_0203CE84.field_6 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
|
||||
CopyWindowToVram(gUnknown_0203CE84.field_5, 1);
|
||||
gUnknown_0203CE84.field_4 = 1;
|
||||
break;
|
||||
case 1:
|
||||
gUnknown_0203CE84.field_0 = ListMenuHandleInputGetItemId(gUnknown_0203CE84.field_6);
|
||||
if (gMain.newKeys & A_BUTTON)
|
||||
{
|
||||
gUnknown_0203CE84.field_4 = 2;
|
||||
}
|
||||
if (gMain.newKeys & B_BUTTON)
|
||||
{
|
||||
gUnknown_0203CE84.field_0 = LIST_B_PRESSED;
|
||||
gUnknown_0203CE84.field_4 = 2;
|
||||
}
|
||||
if (gUnknown_0203CE84.field_4 == 2)
|
||||
{
|
||||
if (arg2 == 0)
|
||||
{
|
||||
ClearWindowTilemap(gUnknown_0203CE84.field_5);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (arg2)
|
||||
{
|
||||
case 0: // can never be reached, because of the if statement above
|
||||
sub_819746C(gUnknown_0203CE84.field_5, FALSE);
|
||||
break;
|
||||
case 2:
|
||||
case 1:
|
||||
sub_819746C(gUnknown_0203CE84.field_5, FALSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
CopyWindowToVram(gUnknown_0203CE84.field_5, 1);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
DestroyListMenuTask(gUnknown_0203CE84.field_6, NULL, NULL);
|
||||
RemoveWindow(gUnknown_0203CE84.field_5);
|
||||
gUnknown_0203CE84.field_4 = 0;
|
||||
return gUnknown_0203CE84.field_0;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow)
|
||||
{
|
||||
u8 taskId = ListMenuInitInternal(listMenuTemplate, scrollOffset, selectedRow);
|
||||
PutWindowTilemap(listMenuTemplate->windowId);
|
||||
CopyWindowToVram(listMenuTemplate->windowId, 2);
|
||||
|
||||
return taskId;
|
||||
}
|
||||
|
||||
// unused
|
||||
u8 ListMenuInitWithWindows(struct ListMenuTemplate *listMenuTemplate, struct UnknownListMenuWindowStruct *arg1, u16 scrollOffset, u16 selectedRow)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
u8 taskId = ListMenuInitInternal(listMenuTemplate, scrollOffset, selectedRow);
|
||||
for (i = 0; arg1[i].palNum != 0xFF; i++)
|
||||
{
|
||||
PutWindowRectTilemapOverridePalette(listMenuTemplate->windowId,
|
||||
arg1[i].x,
|
||||
arg1[i].y,
|
||||
arg1[i].width,
|
||||
arg1[i].height,
|
||||
arg1[i].palNum);
|
||||
}
|
||||
CopyWindowToVram(listMenuTemplate->windowId, 2);
|
||||
|
||||
return taskId;
|
||||
}
|
||||
|
||||
s32 ListMenuHandleInputGetItemId(u8 listTaskId)
|
||||
{
|
||||
struct ListMenu *list = (void*) gTasks[listTaskId].data;
|
||||
|
||||
if (gMain.newKeys & A_BUTTON)
|
||||
{
|
||||
return list->template.items[list->scrollOffset + list->selectedRow].id;
|
||||
}
|
||||
else if (gMain.newKeys & B_BUTTON)
|
||||
{
|
||||
return LIST_B_PRESSED;
|
||||
}
|
||||
else if (gMain.newAndRepeatedKeys & DPAD_UP)
|
||||
{
|
||||
ListMenuChangeSelection(list, TRUE, 1, FALSE);
|
||||
return LIST_NOTHING_CHOSEN;
|
||||
}
|
||||
else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
|
||||
{
|
||||
ListMenuChangeSelection(list, TRUE, 1, TRUE);
|
||||
return LIST_NOTHING_CHOSEN;
|
||||
}
|
||||
else // try to move by one window scroll
|
||||
{
|
||||
bool16 rightButton, leftButton;
|
||||
switch (list->template.scrollMultiple)
|
||||
{
|
||||
case LIST_NO_MULTIPLE_SCROLL:
|
||||
default:
|
||||
leftButton = FALSE;
|
||||
rightButton = FALSE;
|
||||
break;
|
||||
case LIST_MULTIPLE_SCROLL_DPAD:
|
||||
leftButton = gMain.newAndRepeatedKeys & DPAD_LEFT;
|
||||
rightButton = gMain.newAndRepeatedKeys & DPAD_RIGHT;
|
||||
break;
|
||||
case LIST_MULTIPLE_SCROLL_L_R:
|
||||
leftButton = gMain.newAndRepeatedKeys & L_BUTTON;
|
||||
rightButton = gMain.newAndRepeatedKeys & R_BUTTON;
|
||||
break;
|
||||
}
|
||||
|
||||
if (leftButton)
|
||||
{
|
||||
ListMenuChangeSelection(list, TRUE, list->template.maxShowed, FALSE);
|
||||
return LIST_NOTHING_CHOSEN;
|
||||
}
|
||||
else if (rightButton)
|
||||
{
|
||||
ListMenuChangeSelection(list, TRUE, list->template.maxShowed, TRUE);
|
||||
return LIST_NOTHING_CHOSEN;
|
||||
}
|
||||
else
|
||||
{
|
||||
return LIST_NOTHING_CHOSEN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow)
|
||||
{
|
||||
struct ListMenu *list = (void*) gTasks[listTaskId].data;
|
||||
|
||||
if (scrollOffset != NULL)
|
||||
*scrollOffset = list->scrollOffset;
|
||||
if (selectedRow != NULL)
|
||||
*selectedRow = list->selectedRow;
|
||||
|
||||
if (list->unk_1E != 0xFF)
|
||||
ListMenuRemoveCursorObject(list->unk_1E, list->template.cursorKind - 2);
|
||||
|
||||
DestroyTask(listTaskId);
|
||||
}
|
||||
|
||||
void sub_81AE70C(u8 listTaskId)
|
||||
{
|
||||
struct ListMenu *list = (void*) gTasks[listTaskId].data;
|
||||
|
||||
FillWindowPixelBuffer(list->template.windowId, (list->template.fillValue << 4) | (list->template.fillValue));
|
||||
ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed);
|
||||
ListMenuDrawCursor(list);
|
||||
CopyWindowToVram(list->template.windowId, 2);
|
||||
}
|
||||
|
||||
// unused
|
||||
void ChangeListMenuPals(u8 listTaskId, u8 cursorPal, u8 fillValue, u8 cursorShadowPal)
|
||||
{
|
||||
struct ListMenu *list = (void*) gTasks[listTaskId].data;
|
||||
|
||||
list->template.cursorPal = cursorPal;
|
||||
list->template.fillValue = fillValue;
|
||||
list->template.cursorShadowPal = cursorShadowPal;
|
||||
}
|
||||
|
||||
// unused
|
||||
void ChangeListMenuCoords(u8 listTaskId, u8 x, u8 y)
|
||||
{
|
||||
struct ListMenu *list = (void*) gTasks[listTaskId].data;
|
||||
|
||||
SetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT, x);
|
||||
SetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP, y);
|
||||
}
|
||||
|
||||
// unused
|
||||
s32 ListMenuTestInput(struct ListMenuTemplate *template, u32 scrollOffset, u32 selectedRow, u16 keys, u16 *newScrollOffset, u16 *newSelectedRow)
|
||||
{
|
||||
struct ListMenu list;
|
||||
|
||||
list.template = *template;
|
||||
list.scrollOffset = scrollOffset;
|
||||
list.selectedRow = selectedRow;
|
||||
list.unk_1C = 0;
|
||||
list.unk_1D = 0;
|
||||
|
||||
if (keys == DPAD_UP)
|
||||
ListMenuChangeSelection(&list, FALSE, 1, FALSE);
|
||||
if (keys == DPAD_DOWN)
|
||||
ListMenuChangeSelection(&list, FALSE, 1, TRUE);
|
||||
|
||||
if (newScrollOffset != NULL)
|
||||
*newScrollOffset = list.scrollOffset;
|
||||
if (newSelectedRow != NULL)
|
||||
*newSelectedRow = list.selectedRow;
|
||||
|
||||
return LIST_NOTHING_CHOSEN;
|
||||
}
|
||||
|
||||
void ListMenuGetCurrentItemArrayId(u8 listTaskId, u16 *arrayId)
|
||||
{
|
||||
struct ListMenu *list = (void*) gTasks[listTaskId].data;
|
||||
|
||||
if (arrayId != NULL)
|
||||
*arrayId = list->scrollOffset + list->selectedRow;
|
||||
}
|
||||
|
||||
void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow)
|
||||
{
|
||||
struct ListMenu *list = (void*) gTasks[listTaskId].data;
|
||||
|
||||
if (scrollOffset != NULL)
|
||||
*scrollOffset = list->scrollOffset;
|
||||
if (selectedRow != NULL)
|
||||
*selectedRow = list->selectedRow;
|
||||
}
|
||||
|
||||
u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId)
|
||||
{
|
||||
struct ListMenu *list = (void*) gTasks[listTaskId].data;
|
||||
u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3;
|
||||
|
||||
return list->selectedRow * yMultiplier + list->template.upText_Y;
|
||||
}
|
||||
|
||||
static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow)
|
||||
{
|
||||
u8 listTaskId = CreateTask(ListMenuDummyTask, 0);
|
||||
struct ListMenu *list = (void*) gTasks[listTaskId].data;
|
||||
|
||||
list->template = *listMenuTemplate;
|
||||
list->scrollOffset = scrollOffset;
|
||||
list->selectedRow = selectedRow;
|
||||
list->unk_1C = 0;
|
||||
list->unk_1D = 0;
|
||||
list->unk_1E = 0xFF;
|
||||
list->unk_1F = 0;
|
||||
|
||||
gUnknown_03006300.cursorPal = list->template.cursorPal;
|
||||
gUnknown_03006300.fillValue = list->template.fillValue;
|
||||
gUnknown_03006300.cursorShadowPal = list->template.cursorShadowPal;
|
||||
gUnknown_03006300.lettersSpacing = list->template.lettersSpacing;
|
||||
gUnknown_03006300.fontId = list->template.fontId;
|
||||
gUnknown_03006300.field_3_7 = 0;
|
||||
|
||||
if (list->template.totalItems < list->template.maxShowed)
|
||||
list->template.maxShowed = list->template.totalItems;
|
||||
|
||||
FillWindowPixelBuffer(list->template.windowId, (list->template.fillValue << 4) | (list->template.fillValue));
|
||||
ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed);
|
||||
ListMenuDrawCursor(list);
|
||||
ListMenuCallSelectionChangedCallback(list, 1);
|
||||
|
||||
return listTaskId;
|
||||
}
|
||||
|
||||
static void ListMenuPrint(struct ListMenu *list, const u8 *str, u8 x, u8 y)
|
||||
{
|
||||
u8 colors[3];
|
||||
if (gUnknown_03006300.field_3_7)
|
||||
{
|
||||
colors[0] = gUnknown_03006300.fillValue;
|
||||
colors[1] = gUnknown_03006300.cursorPal;
|
||||
colors[2] = gUnknown_03006300.cursorShadowPal;
|
||||
AddTextPrinterParameterized2(list->template.windowId,
|
||||
gUnknown_03006300.fontId,
|
||||
x, y,
|
||||
gUnknown_03006300.lettersSpacing,
|
||||
0, colors, TEXT_SPEED_FF, str);
|
||||
|
||||
gUnknown_03006300.field_3_7 = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
colors[0] = list->template.fillValue;
|
||||
colors[1] = list->template.cursorPal;
|
||||
colors[2] = list->template.cursorShadowPal;
|
||||
AddTextPrinterParameterized2(list->template.windowId,
|
||||
list->template.fontId,
|
||||
x, y,
|
||||
list->template.lettersSpacing,
|
||||
0, colors, TEXT_SPEED_FF, str);
|
||||
}
|
||||
}
|
||||
|
||||
static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOffset, u16 count)
|
||||
{
|
||||
s32 i;
|
||||
u8 x, y;
|
||||
u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3;
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
if (list->template.items[startIndex].id != -3)
|
||||
x = list->template.unk_12;
|
||||
else
|
||||
x = list->template.unk_11;
|
||||
|
||||
y = (yOffset + i) * yMultiplier + list->template.upText_Y;
|
||||
if (list->template.unk_08 != NULL)
|
||||
list->template.unk_08(list->template.windowId, list->template.items[startIndex].id, y);
|
||||
|
||||
ListMenuPrint(list, list->template.items[startIndex].name, x, y);
|
||||
startIndex++;
|
||||
}
|
||||
}
|
||||
|
||||
static void ListMenuDrawCursor(struct ListMenu *list)
|
||||
{
|
||||
u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3;
|
||||
u8 x = list->template.cursor_X;
|
||||
u8 y = list->selectedRow * yMultiplier + list->template.upText_Y;
|
||||
switch (list->template.cursorKind)
|
||||
{
|
||||
case 0:
|
||||
ListMenuPrint(list, gText_SelectorArrow2, x, y);
|
||||
break;
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
if (list->unk_1E == 0xFF)
|
||||
list->unk_1E = ListMenuAddCursorObject(list, 0);
|
||||
ListMenuUpdateCursorObject(list->unk_1E,
|
||||
GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT) * 8 - 1,
|
||||
GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y - 1, 0);
|
||||
break;
|
||||
case 3:
|
||||
if (list->unk_1E == 0xFF)
|
||||
list->unk_1E = ListMenuAddCursorObject(list, 1);
|
||||
ListMenuUpdateCursorObject(list->unk_1E,
|
||||
GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT) * 8 + x,
|
||||
GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind)
|
||||
{
|
||||
struct CursorStruct cursor;
|
||||
|
||||
cursor.unk0 = 0;
|
||||
cursor.unk1 = 0xA0;
|
||||
cursor.unk2 = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8 + 2;
|
||||
cursor.unk4 = GetFontAttribute(list->template.fontId, 1) + 2;
|
||||
cursor.unk6 = 0x4000;
|
||||
cursor.unk8 = 0xFFFF;
|
||||
cursor.unkA = 0xF;
|
||||
|
||||
return ListMenuAddCursorObjectInternal(&cursor, cursorKind);
|
||||
}
|
||||
|
||||
static void ListMenuErasePrintedCursor(struct ListMenu *list, u16 selectedRow)
|
||||
{
|
||||
u8 cursorKind = list->template.cursorKind;
|
||||
if (cursorKind == 0)
|
||||
{
|
||||
u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3;
|
||||
u8 width = GetMenuCursorDimensionByFont(list->template.fontId, 0);
|
||||
u8 height = GetMenuCursorDimensionByFont(list->template.fontId, 1);
|
||||
FillWindowPixelRect(list->template.windowId,
|
||||
(list->template.fillValue << 4) | (list->template.fillValue),
|
||||
list->template.cursor_X,
|
||||
selectedRow * yMultiplier + list->template.upText_Y,
|
||||
width,
|
||||
height);
|
||||
}
|
||||
}
|
||||
|
||||
static u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *list, bool8 movingDown)
|
||||
{
|
||||
u16 selectedRow = list->selectedRow;
|
||||
u16 scrollOffset = list->scrollOffset;
|
||||
u16 newRow;
|
||||
u32 newScroll;
|
||||
|
||||
if (!movingDown)
|
||||
{
|
||||
if (list->template.maxShowed == 1)
|
||||
newRow = 0;
|
||||
else
|
||||
newRow = list->template.maxShowed - ((list->template.maxShowed / 2) + (list->template.maxShowed % 2)) - 1;
|
||||
|
||||
if (scrollOffset == 0)
|
||||
{
|
||||
while (selectedRow != 0)
|
||||
{
|
||||
selectedRow--;
|
||||
if (list->template.items[scrollOffset + selectedRow].id != -3)
|
||||
{
|
||||
list->selectedRow = selectedRow;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
while (selectedRow > newRow)
|
||||
{
|
||||
selectedRow--;
|
||||
if (list->template.items[scrollOffset + selectedRow].id != -3)
|
||||
{
|
||||
list->selectedRow = selectedRow;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
newScroll = scrollOffset - 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (list->template.maxShowed == 1)
|
||||
newRow = 0;
|
||||
else
|
||||
newRow = ((list->template.maxShowed / 2) + (list->template.maxShowed % 2));
|
||||
|
||||
if (scrollOffset == list->template.totalItems - list->template.maxShowed)
|
||||
{
|
||||
while (selectedRow < list->template.maxShowed - 1)
|
||||
{
|
||||
selectedRow++;
|
||||
if (list->template.items[scrollOffset + selectedRow].id != -3)
|
||||
{
|
||||
list->selectedRow = selectedRow;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
while (selectedRow < newRow)
|
||||
{
|
||||
selectedRow++;
|
||||
if (list->template.items[scrollOffset + selectedRow].id != -3)
|
||||
{
|
||||
list->selectedRow = selectedRow;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
newScroll = scrollOffset + 1;
|
||||
}
|
||||
}
|
||||
|
||||
list->selectedRow = newRow;
|
||||
list->scrollOffset = newScroll;
|
||||
return 2;
|
||||
}
|
||||
|
||||
static void ListMenuScroll(struct ListMenu *list, u8 count, bool8 movingDown)
|
||||
{
|
||||
if (count >= list->template.maxShowed)
|
||||
{
|
||||
FillWindowPixelBuffer(list->template.windowId, (list->template.fillValue << 4) | (list->template.fillValue));
|
||||
ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed);
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3;
|
||||
|
||||
if (!movingDown)
|
||||
{
|
||||
u16 y, width, height;
|
||||
|
||||
ScrollWindow(list->template.windowId, 1, count * yMultiplier, (list->template.fillValue << 4) | (list->template.fillValue));
|
||||
ListMenuPrintEntries(list, list->scrollOffset, 0, count);
|
||||
|
||||
y = (list->template.maxShowed * yMultiplier) + list->template.upText_Y;
|
||||
width = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8;
|
||||
height = (GetWindowAttribute(list->template.windowId, WINDOW_HEIGHT) * 8) - y;
|
||||
FillWindowPixelRect(list->template.windowId,
|
||||
(list->template.fillValue << 4) | (list->template.fillValue),
|
||||
0, y, width, height);
|
||||
}
|
||||
else
|
||||
{
|
||||
u16 width;
|
||||
|
||||
ScrollWindow(list->template.windowId, 0, count * yMultiplier, (list->template.fillValue << 4) | (list->template.fillValue));
|
||||
ListMenuPrintEntries(list, list->scrollOffset + (list->template.maxShowed - count), list->template.maxShowed - count, count);
|
||||
|
||||
width = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8;
|
||||
FillWindowPixelRect(list->template.windowId,
|
||||
(list->template.fillValue << 4) | (list->template.fillValue),
|
||||
0, 0, width, list->template.upText_Y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown)
|
||||
{
|
||||
u16 oldSelectedRow;
|
||||
u8 selectionChange, i, cursorCount;
|
||||
|
||||
oldSelectedRow = list->selectedRow;
|
||||
cursorCount = 0;
|
||||
selectionChange = 0;
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
do
|
||||
{
|
||||
u8 ret = ListMenuUpdateSelectedRowIndexAndScrollOffset(list, movingDown);
|
||||
selectionChange |= ret;
|
||||
if (ret != 2)
|
||||
break;
|
||||
cursorCount++;
|
||||
} while (list->template.items[list->scrollOffset + list->selectedRow].id == -3);
|
||||
}
|
||||
|
||||
if (updateCursorAndCallCallback)
|
||||
{
|
||||
switch (selectionChange)
|
||||
{
|
||||
case 0:
|
||||
default:
|
||||
return TRUE;
|
||||
case 1:
|
||||
ListMenuErasePrintedCursor(list, oldSelectedRow);
|
||||
ListMenuDrawCursor(list);
|
||||
ListMenuCallSelectionChangedCallback(list, 0);
|
||||
CopyWindowToVram(list->template.windowId, 2);
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
ListMenuErasePrintedCursor(list, oldSelectedRow);
|
||||
ListMenuScroll(list, cursorCount, movingDown);
|
||||
ListMenuDrawCursor(list);
|
||||
ListMenuCallSelectionChangedCallback(list, 0);
|
||||
CopyWindowToVram(list->template.windowId, 2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void ListMenuCallSelectionChangedCallback(struct ListMenu *list, u8 a2)
|
||||
{
|
||||
if (list->template.moveCursorFunc != NULL)
|
||||
list->template.moveCursorFunc(list->template.items[list->scrollOffset + list->selectedRow].id, a2, list);
|
||||
}
|
||||
|
||||
// unused
|
||||
void sub_81AF028(u8 cursorPal, u8 fillValue, u8 cursorShadowPal)
|
||||
{
|
||||
gUnknown_03006300.cursorPal = cursorPal;
|
||||
gUnknown_03006300.fillValue = fillValue;
|
||||
gUnknown_03006300.cursorShadowPal = cursorShadowPal;
|
||||
gUnknown_03006300.field_3_7 = 1;
|
||||
}
|
||||
|
||||
void sub_81AF078(s32 arg0, u8 arg1, struct ListMenu *list)
|
||||
{
|
||||
if (!arg1)
|
||||
PlaySE(SE_SELECT);
|
||||
}
|
||||
+23
-21
@@ -32,6 +32,7 @@
|
||||
#include "task.h"
|
||||
#include "window.h"
|
||||
|
||||
// structures
|
||||
struct Struct203BCC4
|
||||
{
|
||||
struct ListMenuItem unk0[51];
|
||||
@@ -42,8 +43,10 @@ struct Struct203BCC4
|
||||
u8 spriteIds[7];
|
||||
};
|
||||
|
||||
// extern offset
|
||||
void (*gFieldCallback)(void);
|
||||
|
||||
// static functions
|
||||
static void InitPlayerPCMenu(u8 taskId);
|
||||
static void PlayerPCProcessMenuInput(u8 taskId);
|
||||
static void InitItemStorageMenu(u8 taskId, u8 var);
|
||||
@@ -79,6 +82,7 @@ static void Mailbox_ReturnToFieldFromReadMail(void);
|
||||
static void Mailbox_DoRedrawMailboxMenuAfterReturn(void);
|
||||
static void pal_fill_for_maplights_or_black(void);
|
||||
static void Mailbox_HandleReturnToProcessInput(u8 taskId);
|
||||
static void Mailbox_UpdateMailListAfterDeposit(void);
|
||||
|
||||
static void ItemStorage_Withdraw(u8 taskId);
|
||||
static void ItemStorage_Deposit(u8 taskId);
|
||||
@@ -119,18 +123,16 @@ static void sub_816C0C8(void);
|
||||
static void sub_816C060(u16 itemId);
|
||||
static void sub_816BEF0(s32 id);
|
||||
static void sub_816B4DC(u8 taskId);
|
||||
static void ItemStorage_DrawBothListAndDescription(u32 id, bool8 b, struct ListMenu * thisMenu);
|
||||
static void ItemStorage_MoveCursor(s32 id, bool8 b, struct ListMenu * thisMenu);
|
||||
static void fish4_goto_x5_or_x6(u8 windowId, s32 id, u8 yOffset);
|
||||
|
||||
|
||||
static void Mailbox_UpdateMailListAfterDeposit(void);
|
||||
|
||||
// EWRAM
|
||||
static EWRAM_DATA const u8 *gPcItemMenuOptionOrder = NULL;
|
||||
static EWRAM_DATA u8 gPcItemMenuOptionsNum = 0;
|
||||
EWRAM_DATA struct PlayerPCItemPageStruct playerPCItemPageInfo = {0, 0, 0, 0, {0, 0, 0}, 0};
|
||||
static EWRAM_DATA struct Struct203BCC4 *gUnknown_0203BCC4 = NULL;
|
||||
|
||||
|
||||
// .rodata
|
||||
static const u8 *const gPCText_OptionDescList[] =
|
||||
{
|
||||
gText_TakeOutItemsFromPC,
|
||||
@@ -191,7 +193,7 @@ static const struct WindowTemplate gUnknown_085DFF24[3] =
|
||||
{0x00, 0x01, 0x01, 0x0A, 0x08, 0x0F, 0x0001}
|
||||
};
|
||||
|
||||
static const struct YesNoFuncTable gUnknown_085DFF3C = // ResumeFromWithdrawYesNoFuncList
|
||||
static const struct YesNoFuncTable ResumeFromWithdrawYesNoFuncList = // ResumeFromWithdrawYesNoFuncList
|
||||
{
|
||||
ItemStorage_ResumeInputFromYesToss,
|
||||
ItemStorage_ResumeInputFromNoToss
|
||||
@@ -199,7 +201,7 @@ static const struct YesNoFuncTable gUnknown_085DFF3C = // ResumeFromWithdrawYesN
|
||||
|
||||
static const struct ListMenuTemplate gUnknown_085DFF44 = {
|
||||
NULL,
|
||||
ItemStorage_DrawBothListAndDescription,
|
||||
ItemStorage_MoveCursor,
|
||||
fish4_goto_x5_or_x6,
|
||||
0, 0,
|
||||
0, 0, 8, 0,
|
||||
@@ -222,7 +224,7 @@ static const struct WindowTemplate gUnknown_085DFF84 =
|
||||
|
||||
static const u8 gUnknown_085DFF8C[] = {0x01, 0x03, 0x02, 0x00};
|
||||
|
||||
|
||||
// text
|
||||
void NewGameInitPCItems(void)
|
||||
{
|
||||
u8 i;
|
||||
@@ -560,7 +562,7 @@ static void Mailbox_ProcessInput(u8 taskId)
|
||||
if(!gPaletteFade.active)
|
||||
{
|
||||
inputOptionId = ListMenuHandleInputGetItemId(data[5]);
|
||||
sub_81AE860(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
|
||||
ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
|
||||
|
||||
switch(inputOptionId)
|
||||
{
|
||||
@@ -575,7 +577,7 @@ static void Mailbox_ProcessInput(u8 taskId)
|
||||
PlaySE(SE_SELECT);
|
||||
sub_81D1D04(0);
|
||||
sub_81D1D04(1);
|
||||
sub_81AE6C8(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
|
||||
DestroyListMenuTask(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
|
||||
schedule_bg_copy_tilemap_to_vram(0);
|
||||
RemoveScrollIndicatorArrowPair(playerPCItemPageInfo.scrollIndicatorId);
|
||||
gTasks[taskId].func = Mailbox_PrintWhatToDoWithPlayerMailText;
|
||||
@@ -598,7 +600,7 @@ static void Mailbox_ReturnToPlayerPC(u8 taskId)
|
||||
|
||||
sub_81D1D04(0);
|
||||
sub_81D1D04(1);
|
||||
sub_81AE6C8(data[5], NULL, NULL);
|
||||
DestroyListMenuTask(data[5], NULL, NULL);
|
||||
schedule_bg_copy_tilemap_to_vram(0);
|
||||
sub_81D1EC0();
|
||||
ReshowPlayerPC(taskId);
|
||||
@@ -846,7 +848,7 @@ void ItemStorage_RefreshListMenu(void)
|
||||
gUnknown_0203BCC4->unk0[i].name = &(gUnknown_0203BCC4->unk198[i][0]);
|
||||
gUnknown_0203BCC4->unk0[i].id = -2;
|
||||
gMultiuseListMenuTemplate = gUnknown_085DFF44;
|
||||
gMultiuseListMenuTemplate.unk_10 = sub_816BC7C(0);
|
||||
gMultiuseListMenuTemplate.windowId = sub_816BC7C(0);
|
||||
gMultiuseListMenuTemplate.totalItems = playerPCItemPageInfo.count;
|
||||
gMultiuseListMenuTemplate.items = gUnknown_0203BCC4->unk0;
|
||||
gMultiuseListMenuTemplate.maxShowed = playerPCItemPageInfo.pageItems;
|
||||
@@ -857,7 +859,7 @@ void CopyItemName_PlayerPC(u8 *string, u16 itemId)
|
||||
CopyItemName(itemId, string);
|
||||
}
|
||||
|
||||
static void ItemStorage_DrawBothListAndDescription(u32 id, bool8 b, struct ListMenu *thisMenu)
|
||||
static void ItemStorage_MoveCursor(s32 id, bool8 b, struct ListMenu *thisMenu)
|
||||
{
|
||||
if(b != TRUE)
|
||||
PlaySE(SE_SELECT);
|
||||
@@ -1057,7 +1059,7 @@ static void ItemStorage_ProcessInput(u8 taskId)
|
||||
data = gTasks[taskId].data;
|
||||
if(gMain.newKeys & SELECT_BUTTON)
|
||||
{
|
||||
sub_81AE860(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
|
||||
ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
|
||||
if((playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos) != (playerPCItemPageInfo.count - 1))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
@@ -1067,7 +1069,7 @@ static void ItemStorage_ProcessInput(u8 taskId)
|
||||
else
|
||||
{
|
||||
id = ListMenuHandleInputGetItemId(data[5]);
|
||||
sub_81AE860(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
|
||||
ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
|
||||
switch(id)
|
||||
{
|
||||
case -1:
|
||||
@@ -1107,7 +1109,7 @@ static void ItemStorage_GoBackToPlayerPCMenu(u8 taskId)
|
||||
data = gTasks[taskId].data;
|
||||
sub_816C0C8();
|
||||
ItemStorage_RemoveScrollIndicator();
|
||||
sub_81AE6C8(data[5], NULL, NULL);
|
||||
DestroyListMenuTask(data[5], NULL, NULL);
|
||||
sub_81223B0(gUnknown_0203BCC4->spriteIds, 7);
|
||||
sub_816BC58();
|
||||
gTasks[taskId].func = ItemStorage_GoBackToPlayerPCMenu_InitStorage;
|
||||
@@ -1135,12 +1137,12 @@ static void sub_816C4FC(u8 taskId)
|
||||
data = gTasks[taskId].data;
|
||||
if(gMain.newKeys & SELECT_BUTTON)
|
||||
{
|
||||
sub_81AE860(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
|
||||
ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
|
||||
ItemStorage_DoItemSwap(taskId, FALSE);
|
||||
return;
|
||||
}
|
||||
id = ListMenuHandleInputGetItemId(data[5]);
|
||||
sub_81AE860(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
|
||||
ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
|
||||
sub_81223FC(gUnknown_0203BCC4->spriteIds, 7, 0);
|
||||
sub_816C690(playerPCItemPageInfo.cursorPos);
|
||||
switch(id)
|
||||
@@ -1170,7 +1172,7 @@ static void ItemStorage_DoItemSwap(u8 taskId, bool8 a)
|
||||
data = gTasks[taskId].data;
|
||||
b = (playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos);
|
||||
PlaySE(SE_SELECT);
|
||||
sub_81AE6C8(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
|
||||
DestroyListMenuTask(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
|
||||
if(!a)
|
||||
{
|
||||
c = gUnknown_0203BCC4->unk666;
|
||||
@@ -1304,7 +1306,7 @@ static void ItemStorage_DoItemToss(u8 taskId)
|
||||
CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1);
|
||||
ConvertIntToDecimalStringN(gStringVar2, data[2], STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_OKAY_TO_THROW_AWAY));
|
||||
CreateYesNoMenuWithCallbacks(taskId, &gUnknown_085DFF84, 1, 0, 1, 0x214, 0xE, &gUnknown_085DFF3C);
|
||||
CreateYesNoMenuWithCallbacks(taskId, &gUnknown_085DFF84, 1, 0, 1, 0x214, 0xE, &ResumeFromWithdrawYesNoFuncList);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1334,7 +1336,7 @@ static void ItemStorage_HandleRemoveItem(u8 taskId)
|
||||
if(gMain.newKeys & (A_BUTTON | B_BUTTON))
|
||||
{
|
||||
sub_80D6E48((playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove), data[2]);
|
||||
sub_81AE6C8(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
|
||||
DestroyListMenuTask(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
|
||||
sub_816C110();
|
||||
sub_816C140();
|
||||
ItemStorage_RefreshListMenu();
|
||||
|
||||
+19
-19
@@ -91,7 +91,7 @@ static void sub_81362E0(void);
|
||||
static void sub_8136344(void);
|
||||
static void HandlePokeblockListMenuItems(void);
|
||||
static void sub_81363BC(void);
|
||||
static void MovePokeblockMenuCursor(u32 pkblId, bool8 arg1, struct ListMenu *arg2);
|
||||
static void MovePokeblockMenuCursor(s32 pkblId, bool8 arg1, struct ListMenu *arg2);
|
||||
static void PutPokeblockInfoText(void);
|
||||
static void HandlePokeblockMenuCursor(u16 cursorPos, u16 arg1);
|
||||
static void PutPokeblockListMenuString(u8 *dst, u16 pkblId);
|
||||
@@ -319,18 +319,18 @@ static const struct ListMenuTemplate sPokeblockListMenuTemplate =
|
||||
.unk_08 = NULL,
|
||||
.totalItems = 0,
|
||||
.maxShowed = 0,
|
||||
.unk_10 = 1,
|
||||
.windowId = 1,
|
||||
.unk_11 = 0,
|
||||
.unk_12 = 1,
|
||||
.cursor_Y = 0,
|
||||
.cursor_X = 0,
|
||||
.upText_Y = 1,
|
||||
.cursorColor = 2,
|
||||
.fillColor = 0,
|
||||
.cursorShadowColor = 3,
|
||||
.unk_16_0 = FALSE,
|
||||
.spaceBetweenItems = 32,
|
||||
.unk_16_7 = FALSE,
|
||||
.unk_17_0 = 1,
|
||||
.cursorPal = 2,
|
||||
.fillValue = 0,
|
||||
.cursorShadowPal = 3,
|
||||
.lettersSpacing = 0,
|
||||
.unk_16_3 = 0,
|
||||
.scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD,
|
||||
.fontId = 1,
|
||||
.cursorKind = 1
|
||||
};
|
||||
|
||||
@@ -620,7 +620,7 @@ static void HandlePokeblockListMenuItems(void)
|
||||
sPokeblockMenu->items[i].id = LIST_B_PRESSED;
|
||||
|
||||
gMultiuseListMenuTemplate = sPokeblockListMenuTemplate;
|
||||
gMultiuseListMenuTemplate.unk_17_0 = 7;
|
||||
gMultiuseListMenuTemplate.fontId = 7;
|
||||
gMultiuseListMenuTemplate.totalItems = sPokeblockMenu->itemsNo;
|
||||
gMultiuseListMenuTemplate.items = sPokeblockMenu->items;
|
||||
gMultiuseListMenuTemplate.maxShowed = sPokeblockMenu->maxShowed;
|
||||
@@ -639,7 +639,7 @@ static void PutPokeblockListMenuString(u8 *dst, u16 pkblId)
|
||||
StringExpandPlaceholders(txtPtr, gText_LvVar1);
|
||||
}
|
||||
|
||||
static void MovePokeblockMenuCursor(u32 pkblId, bool8 arg1, struct ListMenu *arg2)
|
||||
static void MovePokeblockMenuCursor(s32 pkblId, bool8 arg1, struct ListMenu *arg2)
|
||||
{
|
||||
if (arg1 != TRUE)
|
||||
{
|
||||
@@ -869,7 +869,7 @@ static void Task_FreeDataAndExitPokeblockCase(u8 taskId)
|
||||
if (sPokeblockMenu->caseId == PBLOCK_CASE_FEEDER || sPokeblockMenu->caseId == PBLOCK_CASE_GIVE)
|
||||
gFieldCallback = sub_80AF168;
|
||||
|
||||
sub_81AE6C8(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
|
||||
DestroyListMenuTask(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
|
||||
sub_8136418();
|
||||
ResetSpriteData();
|
||||
FreeAllSpritePalettes();
|
||||
@@ -893,7 +893,7 @@ static void Task_HandlePokeblockMenuInput(u8 taskId)
|
||||
{
|
||||
if (gMain.newKeys & SELECT_BUTTON)
|
||||
{
|
||||
sub_81AE860(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
|
||||
ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
|
||||
if (sSavedPokeblockData.lastItemPage + sSavedPokeblockData.lastItemPos != sPokeblockMenu->itemsNo - 1)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
@@ -908,7 +908,7 @@ static void Task_HandlePokeblockMenuInput(u8 taskId)
|
||||
u16 oldPosition = sSavedPokeblockData.lastItemPos;
|
||||
s32 itemId = ListMenuHandleInputGetItemId(data[0]);
|
||||
|
||||
sub_81AE860(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
|
||||
ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
|
||||
if (oldPosition != sSavedPokeblockData.lastItemPos)
|
||||
{
|
||||
HandlePokeblockMenuCursor(oldPosition, 5);
|
||||
@@ -945,7 +945,7 @@ static void Task_HandlePokeblocksSwapInput(u8 taskId)
|
||||
if (gMain.newKeys & SELECT_BUTTON)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
sub_81AE860(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
|
||||
ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
|
||||
HandlePokeblocksSwap(taskId, FALSE);
|
||||
}
|
||||
else
|
||||
@@ -954,7 +954,7 @@ static void Task_HandlePokeblocksSwapInput(u8 taskId)
|
||||
u16 var = sSavedPokeblockData.lastItemPos;
|
||||
s32 itemId = ListMenuHandleInputGetItemId(data[0]);
|
||||
|
||||
sub_81AE860(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
|
||||
ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
|
||||
if (i != sSavedPokeblockData.lastItemPage || var != sSavedPokeblockData.lastItemPos)
|
||||
{
|
||||
for (i = 0; i < 9; i++)
|
||||
@@ -996,7 +996,7 @@ static void HandlePokeblocksSwap(u8 taskId, bool8 noSwap)
|
||||
u16 swappedFromId = sSavedPokeblockData.lastItemPage + sSavedPokeblockData.lastItemPos;
|
||||
|
||||
sPokeblockMenu->isSwapping = FALSE;
|
||||
sub_81AE6C8(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
|
||||
DestroyListMenuTask(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
|
||||
|
||||
if (!noSwap && data[2] != swappedFromId && data[2] != swappedFromId - 1)
|
||||
{
|
||||
@@ -1112,7 +1112,7 @@ static void HandleErasePokeblock(u8 taskId)
|
||||
lastPos = &sSavedPokeblockData.lastItemPos;
|
||||
data = gTasks[taskId].data;
|
||||
|
||||
sub_81AE6C8(data[0], lastPage, lastPos);
|
||||
DestroyListMenuTask(data[0], lastPage, lastPos);
|
||||
HandlePokeblockMenuCursor(*lastPos, 5);
|
||||
SetMenuItemsCountAndMaxShowed();
|
||||
sub_81362E0();
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "international_string_util.h"
|
||||
#include "scanline_effect.h"
|
||||
#include "menu_helpers.h"
|
||||
#include "daycare.h"
|
||||
|
||||
struct ContestMove
|
||||
{
|
||||
@@ -3024,7 +3025,7 @@ void sub_81C31F0(u8 *a)
|
||||
{
|
||||
u8 level = gUnknown_0203CF1C->summary.metLevel;
|
||||
if (level == 0)
|
||||
level = 5;
|
||||
level = EGG_HATCH_LEVEL;
|
||||
ConvertIntToDecimalStringN(a, level, 0, 3);
|
||||
UnkTextUtil_SetPtrI(3, a);
|
||||
}
|
||||
|
||||
+8
-8
@@ -6,8 +6,8 @@
|
||||
#include "main.h"
|
||||
#include "task.h"
|
||||
#include "palette.h"
|
||||
#include "list_menu.h"
|
||||
#include "window.h"
|
||||
#include "list_menu.h"
|
||||
#include "menu.h"
|
||||
#include "menu_helpers.h"
|
||||
#include "menu_indicators.h"
|
||||
@@ -66,7 +66,7 @@ EWRAM_DATA struct SecretBaseListMenuBuffer *gUnknown_0203A020 = NULL;
|
||||
|
||||
void sub_80E9C9C(u8 taskId);
|
||||
void game_continue(u8 taskId);
|
||||
void sub_80E9DEC(u32 a0, bool8 flag, struct ListMenu *menu);
|
||||
void sub_80E9DEC(s32 a0, bool8 flag, struct ListMenu *menu);
|
||||
void sub_80E9E00(u8 taskId);
|
||||
void sub_80E9E44(u8 taskId);
|
||||
void sub_80E9E90(u8 taskId);
|
||||
@@ -913,13 +913,13 @@ void game_continue(u8 taskId)
|
||||
data[3] = 8;
|
||||
}
|
||||
gMultiuseListMenuTemplate = gUnknown_0858D07C;
|
||||
gMultiuseListMenuTemplate.unk_10 = data[6];
|
||||
gMultiuseListMenuTemplate.windowId = data[6];
|
||||
gMultiuseListMenuTemplate.totalItems = data[0];
|
||||
gMultiuseListMenuTemplate.items = gUnknown_0203A020->items;
|
||||
gMultiuseListMenuTemplate.maxShowed = data[3];
|
||||
}
|
||||
|
||||
void sub_80E9DEC(u32 a0, bool8 flag, struct ListMenu *menu)
|
||||
void sub_80E9DEC(s32 a0, bool8 flag, struct ListMenu *menu)
|
||||
{
|
||||
if (flag != TRUE)
|
||||
{
|
||||
@@ -953,14 +953,14 @@ void sub_80E9E90(u8 taskId)
|
||||
|
||||
data = gTasks[taskId].data;
|
||||
input = ListMenuHandleInputGetItemId(data[5]);
|
||||
sub_81AE860(data[5], &data[2], &data[1]);
|
||||
ListMenuGetScrollAndRow(data[5], &data[2], &data[1]);
|
||||
switch (input)
|
||||
{
|
||||
case -1:
|
||||
break;
|
||||
case -2:
|
||||
PlaySE(SE_SELECT);
|
||||
sub_81AE6C8(data[5], NULL, NULL);
|
||||
DestroyListMenuTask(data[5], NULL, NULL);
|
||||
RemoveScrollIndicatorArrowPair(data[8]);
|
||||
sub_819746C(data[6], 0);
|
||||
ClearWindowTilemap(data[6]);
|
||||
@@ -1042,7 +1042,7 @@ void sub_80EA08C(u8 taskId)
|
||||
|
||||
data = gTasks[taskId].data;
|
||||
sub_8197434(0, 0);
|
||||
sub_81AE6C8(data[5], &data[2], &data[1]);
|
||||
DestroyListMenuTask(data[5], &data[2], &data[1]);
|
||||
gSaveBlock1Ptr->secretBases[data[4]].sbr_field_1_6 = 0;
|
||||
game_continue(taskId);
|
||||
sub_812225C(&data[2], &data[1], data[3], data[0]);
|
||||
@@ -1061,7 +1061,7 @@ void sub_80EA13C(u8 taskId)
|
||||
|
||||
data = gTasks[taskId].data;
|
||||
sub_8197434(0, 0);
|
||||
sub_81AE6C8(data[5], &data[2], &data[1]);
|
||||
DestroyListMenuTask(data[5], &data[2], &data[1]);
|
||||
sub_80E9E00(taskId);
|
||||
gTasks[taskId].func = sub_80E9E90;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user