Small mart changes (#651)

This commit is contained in:
Jaizu
2023-12-07 18:43:27 +01:00
committed by GitHub
parent 7df4038c86
commit 1d1754d37f
+124 -124
View File
@@ -60,7 +60,7 @@ struct ShopData
/*0x0C*/ u16 selectedRow; /*0x0C*/ u16 selectedRow;
/*0x0E*/ u16 scrollOffset; /*0x0E*/ u16 scrollOffset;
/*0x10*/ u16 itemCount; /*0x10*/ u16 itemCount;
/*0x12*/ u16 field12; /*0x12*/ u16 itemsShowed;
/*0x14*/ u16 maxQuantity; /*0x14*/ u16 maxQuantity;
/*0x16*/ u16 martType:4; // 0x1 if tm list /*0x16*/ u16 martType:4; // 0x1 if tm list
u16 fontId:5; u16 fontId:5;
@@ -70,7 +70,7 @@ struct ShopData
}; };
static EWRAM_DATA s16 sViewportObjectEvents[OBJECT_EVENTS_COUNT][4] = {0}; static EWRAM_DATA s16 sViewportObjectEvents[OBJECT_EVENTS_COUNT][4] = {0};
EWRAM_DATA struct ShopData gShopData = {0}; static EWRAM_DATA struct ShopData sShopData = {0};
static EWRAM_DATA u8 sShopMenuWindowId = 0; static EWRAM_DATA u8 sShopMenuWindowId = 0;
EWRAM_DATA u16 (*gShopTilemapBuffer1)[0x400] = {0}; EWRAM_DATA u16 (*gShopTilemapBuffer1)[0x400] = {0};
EWRAM_DATA u16 (*gShopTilemapBuffer2)[0x400] = {0}; EWRAM_DATA u16 (*gShopTilemapBuffer2)[0x400] = {0};
@@ -81,7 +81,7 @@ static EWRAM_DATA u8 (*sShopMenuItemStrings)[13] = {0};
EWRAM_DATA struct QuestLogEvent_Shop sHistory[2] = {0}; EWRAM_DATA struct QuestLogEvent_Shop sHistory[2] = {0};
//Function Declarations //Function Declarations
static u8 CreateShopMenu(u8 a0); static u8 CreateShopMenu(u8 martType);
static u8 GetMartTypeFromItemList(u32 a0); static u8 GetMartTypeFromItemList(u32 a0);
static void SetShopItemsForSale(const u16 *items); static void SetShopItemsForSale(const u16 *items);
static void SetShopMenuCallback(MainCallback callback); static void SetShopMenuCallback(MainCallback callback);
@@ -159,7 +159,7 @@ static const struct WindowTemplate sShopMenuWindowTemplate =
.height = 6, .height = 6,
.paletteNum = 15, .paletteNum = 15,
.baseBlock = 8 .baseBlock = 8
}; };
static const struct BgTemplate sShopBuyMenuBgTemplates[4] = static const struct BgTemplate sShopBuyMenuBgTemplates[4] =
{ {
@@ -202,15 +202,15 @@ static const struct BgTemplate sShopBuyMenuBgTemplates[4] =
}; };
// Functions // Functions
static u8 CreateShopMenu(u8 a0) static u8 CreateShopMenu(u8 martType)
{ {
gShopData.martType = GetMartTypeFromItemList(a0); sShopData.martType = GetMartTypeFromItemList(martType);
gShopData.selectedRow = 0; sShopData.selectedRow = 0;
if (ContextNpcGetTextColor() == NPC_TEXT_COLOR_MALE) if (ContextNpcGetTextColor() == NPC_TEXT_COLOR_MALE)
gShopData.fontId = FONT_MALE; sShopData.fontId = FONT_MALE;
else else
gShopData.fontId = FONT_FEMALE; sShopData.fontId = FONT_FEMALE;
sShopMenuWindowId = AddWindow(&sShopMenuWindowTemplate); sShopMenuWindowId = AddWindow(&sShopMenuWindowTemplate);
SetStdWindowBorderStyle(sShopMenuWindowId, 0); SetStdWindowBorderStyle(sShopMenuWindowId, 0);
PrintTextArray(sShopMenuWindowId, FONT_NORMAL, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), 2, 16, 3, sShopMenuActions_BuySellQuit); PrintTextArray(sShopMenuWindowId, FONT_NORMAL, GetMenuCursorDimensionByFont(FONT_NORMAL, 0), 2, 16, 3, sShopMenuActions_BuySellQuit);
@@ -220,43 +220,43 @@ static u8 CreateShopMenu(u8 a0)
return CreateTask(Task_ShopMenu, 8); return CreateTask(Task_ShopMenu, 8);
} }
static u8 GetMartTypeFromItemList(u32 a0) static u8 GetMartTypeFromItemList(u32 martType)
{ {
u16 i; u16 i;
if (a0) if (martType != MART_TYPE_REGULAR)
return a0; return martType;
for (i = 0; i < gShopData.itemCount && gShopData.itemList[i] != 0; i++) for (i = 0; i < sShopData.itemCount && sShopData.itemList[i] != 0; i++)
{ {
if (ItemId_GetPocket(gShopData.itemList[i]) == POCKET_TM_CASE) if (ItemId_GetPocket(sShopData.itemList[i]) == POCKET_TM_CASE)
return 1; return MART_TYPE_TMHM;
} }
return 0; return MART_TYPE_REGULAR;
} }
static void SetShopItemsForSale(const u16 *items) static void SetShopItemsForSale(const u16 *items)
{ {
gShopData.itemList = items; sShopData.itemList = items;
gShopData.itemCount = 0; sShopData.itemCount = 0;
if (gShopData.itemList[0] == 0) if (sShopData.itemList[0] == 0)
return; return;
while (gShopData.itemList[gShopData.itemCount]) while (sShopData.itemList[sShopData.itemCount])
{ {
++gShopData.itemCount; ++sShopData.itemCount;
} }
} }
static void SetShopMenuCallback(void (*callback)(void)) static void SetShopMenuCallback(void (*callback)(void))
{ {
gShopData.callback = callback; sShopData.callback = callback;
} }
static void Task_ShopMenu(u8 taskId) static void Task_ShopMenu(u8 taskId)
{ {
s8 input = Menu_ProcessInputNoWrapAround(); s8 input = Menu_ProcessInputNoWrapAround();
switch (input) switch (input)
{ {
case MENU_NOTHING_CHOSEN: case MENU_NOTHING_CHOSEN:
@@ -282,7 +282,7 @@ static void Task_HandleShopMenuSell(u8 taskId)
{ {
SetWordTaskArg(taskId, 0xE, (u32)CB2_GoToSellMenu); SetWordTaskArg(taskId, 0xE, (u32)CB2_GoToSellMenu);
FadeScreen(FADE_TO_BLACK, 0); FadeScreen(FADE_TO_BLACK, 0);
gTasks[taskId].func = Task_GoToBuyOrSellMenu; gTasks[taskId].func = Task_GoToBuyOrSellMenu;
} }
static void CB2_GoToSellMenu(void) static void CB2_GoToSellMenu(void)
@@ -296,8 +296,8 @@ static void Task_HandleShopMenuQuit(u8 taskId)
ClearShopMenuWindow(); ClearShopMenuWindow();
RecordTransactionForQuestLog(); RecordTransactionForQuestLog();
DestroyTask(taskId); DestroyTask(taskId);
if (gShopData.callback != NULL) if (sShopData.callback != NULL)
gShopData.callback(); sShopData.callback();
} }
static void ClearShopMenuWindow(void) static void ClearShopMenuWindow(void)
@@ -310,7 +310,7 @@ static void Task_GoToBuyOrSellMenu(u8 taskId)
{ {
if (gPaletteFade.active) if (gPaletteFade.active)
return; return;
SetMainCallback2((void *)GetWordTaskArg(taskId, 0xE)); SetMainCallback2((void *)GetWordTaskArg(taskId, 0xE));
FreeAllWindowBuffers(); FreeAllWindowBuffers();
DestroyTask(taskId); DestroyTask(taskId);
@@ -326,13 +326,13 @@ static void Task_ReturnToShopMenu(u8 taskId)
{ {
if (IsWeatherNotFadingIn() != TRUE) if (IsWeatherNotFadingIn() != TRUE)
return; return;
DisplayItemMessageOnField(taskId, GetMartFontId(), gText_AnythingElseICanHelp, ShowShopMenuAfterExitingBuyOrSellMenu); DisplayItemMessageOnField(taskId, GetMartFontId(), gText_AnythingElseICanHelp, ShowShopMenuAfterExitingBuyOrSellMenu);
} }
static void ShowShopMenuAfterExitingBuyOrSellMenu(u8 taskId) static void ShowShopMenuAfterExitingBuyOrSellMenu(u8 taskId)
{ {
CreateShopMenu(gShopData.martType); CreateShopMenu(sShopData.martType);
DestroyTask(taskId); DestroyTask(taskId);
} }
@@ -355,7 +355,7 @@ static void VBlankCB_BuyMenu(void)
static void CB2_InitBuyMenu(void) static void CB2_InitBuyMenu(void)
{ {
u8 taskId; u8 taskId;
switch (gMain.state) switch (gMain.state)
{ {
case 0: case 0:
@@ -376,7 +376,7 @@ static void CB2_InitBuyMenu(void)
FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 0x20, 0x20);
FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 0x20, 0x20);
FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20);
BuyMenuInitWindows(gShopData.martType); BuyMenuInitWindows(sShopData.martType);
BuyMenuDecompressBgGraphics(); BuyMenuDecompressBgGraphics();
gMain.state++; gMain.state++;
break; break;
@@ -386,8 +386,8 @@ static void CB2_InitBuyMenu(void)
gMain.state++; gMain.state++;
break; break;
default: default:
gShopData.selectedRow = 0; sShopData.selectedRow = 0;
gShopData.scrollOffset = 0; sShopData.scrollOffset = 0;
BuyMenuDrawGraphics(); BuyMenuDrawGraphics();
BuyMenuAddScrollIndicatorArrows(); BuyMenuAddScrollIndicatorArrows();
taskId = CreateTask(Task_BuyMenu, 8); taskId = CreateTask(Task_BuyMenu, 8);
@@ -407,17 +407,17 @@ static bool8 InitShopData(void)
{ {
BuyMenuFreeMemory(); BuyMenuFreeMemory();
SetShopExitCallback(); SetShopExitCallback();
return FALSE; return FALSE;
} }
gShopTilemapBuffer2 = Alloc(sizeof(*gShopTilemapBuffer2)); gShopTilemapBuffer2 = Alloc(sizeof(*gShopTilemapBuffer2));
if (gShopTilemapBuffer2 == NULL) if (gShopTilemapBuffer2 == NULL)
{ {
BuyMenuFreeMemory(); BuyMenuFreeMemory();
SetShopExitCallback(); SetShopExitCallback();
return FALSE; return FALSE;
} }
gShopTilemapBuffer3 = Alloc(sizeof(*gShopTilemapBuffer3)); gShopTilemapBuffer3 = Alloc(sizeof(*gShopTilemapBuffer3));
if (gShopTilemapBuffer3 == NULL) if (gShopTilemapBuffer3 == NULL)
{ {
@@ -425,15 +425,15 @@ static bool8 InitShopData(void)
SetShopExitCallback(); SetShopExitCallback();
return FALSE; return FALSE;
} }
gShopTilemapBuffer4 = Alloc(sizeof(*gShopTilemapBuffer4)); gShopTilemapBuffer4 = Alloc(sizeof(*gShopTilemapBuffer4));
if (gShopTilemapBuffer4 == NULL) if (gShopTilemapBuffer4 == NULL)
{ {
BuyMenuFreeMemory(); BuyMenuFreeMemory();
SetShopExitCallback(); SetShopExitCallback();
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
} }
@@ -463,13 +463,13 @@ static void BuyMenuInitBgs(void)
static void BuyMenuDecompressBgGraphics(void) static void BuyMenuDecompressBgGraphics(void)
{ {
u16 *pal; u16 *pal;
DecompressAndCopyTileDataToVram(1, gBuyMenuFrame_Gfx, 0x480, 0x3DC, 0); DecompressAndCopyTileDataToVram(1, gBuyMenuFrame_Gfx, 0x480, 0x3DC, 0);
if ((gShopData.martType) != MART_TYPE_TMHM) if ((sShopData.martType) != MART_TYPE_TMHM)
LZDecompressWram(gBuyMenuFrame_Tilemap, gShopTilemapBuffer1); LZDecompressWram(gBuyMenuFrame_Tilemap, gShopTilemapBuffer1);
else else
LZDecompressWram(gBuyMenuFrame_TmHmTilemap, gShopTilemapBuffer1); LZDecompressWram(gBuyMenuFrame_TmHmTilemap, gShopTilemapBuffer1);
pal = Alloc(2 * PLTT_SIZE_4BPP); pal = Alloc(2 * PLTT_SIZE_4BPP);
LZDecompressWram(gBuyMenuFrame_Pal, pal); LZDecompressWram(gBuyMenuFrame_Pal, pal);
LoadPalette(&pal[0 * 16], BG_PLTT_ID(11), PLTT_SIZE_4BPP); LoadPalette(&pal[0 * 16], BG_PLTT_ID(11), PLTT_SIZE_4BPP);
@@ -480,17 +480,17 @@ static void BuyMenuDecompressBgGraphics(void)
static void RecolorItemDescriptionBox(bool32 a0) static void RecolorItemDescriptionBox(bool32 a0)
{ {
u8 paletteNum; u8 paletteNum;
if (a0 == FALSE) if (a0 == FALSE)
paletteNum = 0xB; paletteNum = 0xB;
else else
paletteNum = 0x6; paletteNum = 0x6;
if ((gShopData.martType) != MART_TYPE_TMHM) if ((sShopData.martType) != MART_TYPE_TMHM)
SetBgTilemapPalette(1, 0, 14, 30, 6, paletteNum); SetBgTilemapPalette(1, 0, 14, 30, 6, paletteNum);
else else
SetBgTilemapPalette(1, 0, 12, 30, 8, paletteNum); SetBgTilemapPalette(1, 0, 12, 30, 8, paletteNum);
ScheduleBgCopyTilemapToVram(1); ScheduleBgCopyTilemapToVram(1);
} }
@@ -508,25 +508,25 @@ static void BuyMenuDrawGraphics(void)
bool8 BuyMenuBuildListMenuTemplate(void) bool8 BuyMenuBuildListMenuTemplate(void)
{ {
u16 i, v; u16 i, v;
sShopMenuListMenu = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuListMenu)); sShopMenuListMenu = Alloc((sShopData.itemCount + 1) * sizeof(*sShopMenuListMenu));
if (sShopMenuListMenu == NULL if (sShopMenuListMenu == NULL
|| (sShopMenuItemStrings = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuItemStrings))) == NULL) || (sShopMenuItemStrings = Alloc((sShopData.itemCount + 1) * sizeof(*sShopMenuItemStrings))) == NULL)
{ {
BuyMenuFreeMemory(); BuyMenuFreeMemory();
SetShopExitCallback(); SetShopExitCallback();
return FALSE; return FALSE;
} }
for (i = 0; i < gShopData.itemCount; i++) for (i = 0; i < sShopData.itemCount; i++)
{ {
PokeMartWriteNameAndIdAt(&sShopMenuListMenu[i], gShopData.itemList[i], sShopMenuItemStrings[i]); PokeMartWriteNameAndIdAt(&sShopMenuListMenu[i], sShopData.itemList[i], sShopMenuItemStrings[i]);
} }
StringCopy(sShopMenuItemStrings[i], gFameCheckerText_Cancel); StringCopy(sShopMenuItemStrings[i], gFameCheckerText_Cancel);
sShopMenuListMenu[i].label = sShopMenuItemStrings[i]; sShopMenuListMenu[i].label = sShopMenuItemStrings[i];
sShopMenuListMenu[i].index = -2; sShopMenuListMenu[i].index = -2;
gMultiuseListMenuTemplate.items = sShopMenuListMenu; gMultiuseListMenuTemplate.items = sShopMenuListMenu;
gMultiuseListMenuTemplate.totalItems = gShopData.itemCount + 1; gMultiuseListMenuTemplate.totalItems = sShopData.itemCount + 1;
gMultiuseListMenuTemplate.windowId = 4; gMultiuseListMenuTemplate.windowId = 4;
gMultiuseListMenuTemplate.header_X = 0; gMultiuseListMenuTemplate.header_X = 0;
gMultiuseListMenuTemplate.item_X = 9; gMultiuseListMenuTemplate.item_X = 9;
@@ -542,18 +542,18 @@ bool8 BuyMenuBuildListMenuTemplate(void)
gMultiuseListMenuTemplate.itemPrintFunc = BuyMenuPrintPriceInList; gMultiuseListMenuTemplate.itemPrintFunc = BuyMenuPrintPriceInList;
gMultiuseListMenuTemplate.scrollMultiple = 0; gMultiuseListMenuTemplate.scrollMultiple = 0;
gMultiuseListMenuTemplate.cursorKind = 0; gMultiuseListMenuTemplate.cursorKind = 0;
if (gShopData.martType == MART_TYPE_TMHM) if (sShopData.martType == MART_TYPE_TMHM)
v = 5; v = 5;
else else
v = 6; v = 6;
if ((gShopData.itemCount + 1) > v) if ((sShopData.itemCount + 1) > v)
gMultiuseListMenuTemplate.maxShowed = v; gMultiuseListMenuTemplate.maxShowed = v;
else else
gMultiuseListMenuTemplate.maxShowed = gShopData.itemCount + 1; gMultiuseListMenuTemplate.maxShowed = sShopData.itemCount + 1;
gShopData.field12 = gMultiuseListMenuTemplate.maxShowed; sShopData.itemsShowed = gMultiuseListMenuTemplate.maxShowed;
return TRUE; return TRUE;
} }
@@ -567,7 +567,7 @@ static void PokeMartWriteNameAndIdAt(struct ListMenuItem *list, u16 index, u8 *d
static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, struct ListMenu *list) static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, struct ListMenu *list)
{ {
const u8 *description; const u8 *description;
if (onInit != TRUE) if (onInit != TRUE)
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
@@ -575,17 +575,17 @@ static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, s
description = ItemId_GetDescription(item); description = ItemId_GetDescription(item);
else else
description = gText_QuitShopping; description = gText_QuitShopping;
FillWindowPixelBuffer(5, PIXEL_FILL(0)); FillWindowPixelBuffer(5, PIXEL_FILL(0));
if (gShopData.martType != 1) if (sShopData.martType != MART_TYPE_TMHM)
{ {
DestroyItemMenuIcon(gShopData.itemSlot ^ 1); DestroyItemMenuIcon(sShopData.itemSlot ^ 1);
if (item != INDEX_CANCEL) if (item != INDEX_CANCEL)
CreateItemMenuIcon(item, gShopData.itemSlot); CreateItemMenuIcon(item, sShopData.itemSlot);
else else
CreateItemMenuIcon(ITEMS_COUNT, gShopData.itemSlot); CreateItemMenuIcon(ITEMS_COUNT, sShopData.itemSlot);
gShopData.itemSlot ^= 1; sShopData.itemSlot ^= 1;
BuyMenuPrint(5, FONT_NORMAL, description, 0, 3, 2, 1, 0, 0); BuyMenuPrint(5, FONT_NORMAL, description, 0, 3, 2, 1, 0, 0);
} }
else //TM Mart else //TM Mart
@@ -633,7 +633,7 @@ static void LoadTmHmNameInMart(s32 item)
u8 GetMartFontId(void) u8 GetMartFontId(void)
{ {
return gShopData.fontId; return sShopData.fontId;
} }
static void BuyMenuPrintCursor(u8 listTaskId, u8 a1) static void BuyMenuPrintCursor(u8 listTaskId, u8 a1)
@@ -658,23 +658,23 @@ static void BuyMenuFreeMemory(void)
{ {
if (gShopTilemapBuffer1 != NULL) if (gShopTilemapBuffer1 != NULL)
Free(gShopTilemapBuffer1); Free(gShopTilemapBuffer1);
if (gShopTilemapBuffer2 != NULL) if (gShopTilemapBuffer2 != NULL)
Free(gShopTilemapBuffer2); Free(gShopTilemapBuffer2);
if (gShopTilemapBuffer3 != NULL) if (gShopTilemapBuffer3 != NULL)
Free(gShopTilemapBuffer3); Free(gShopTilemapBuffer3);
if (gShopTilemapBuffer4 != NULL) if (gShopTilemapBuffer4 != NULL)
Free(gShopTilemapBuffer4); Free(gShopTilemapBuffer4);
if (sShopMenuListMenu != NULL) if (sShopMenuListMenu != NULL)
Free(sShopMenuListMenu); Free(sShopMenuListMenu);
if (sShopMenuItemStrings != NULL) if (sShopMenuItemStrings != NULL)
Free(sShopMenuItemStrings); Free(sShopMenuItemStrings);
FreeAllWindowBuffers(); FreeAllWindowBuffers();
} }
static void SetShopExitCallback(void) static void SetShopExitCallback(void)
@@ -686,31 +686,31 @@ static void SetShopExitCallback(void)
static void BuyMenuAddScrollIndicatorArrows(void) static void BuyMenuAddScrollIndicatorArrows(void)
{ {
if (gShopData.martType != MART_TYPE_TMHM) if (sShopData.martType != MART_TYPE_TMHM)
{ {
gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 104, sShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 104,
(gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset); (sShopData.itemCount - sShopData.itemsShowed) + 1, 110, 110, &sShopData.scrollOffset);
} }
else else
{ {
gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 88, sShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 88,
(gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset); (sShopData.itemCount - sShopData.itemsShowed) + 1, 110, 110, &sShopData.scrollOffset);
} }
} }
static void BuyQuantityAddScrollIndicatorArrows(void) static void BuyQuantityAddScrollIndicatorArrows(void)
{ {
gShopData.unk18 = 1; sShopData.unk18 = 1;
gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0x98, 0x48, 0x68, 2, 0x6E, 0x6E, &gShopData.unk18); sShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0x98, 0x48, 0x68, 2, 0x6E, 0x6E, &sShopData.unk18);
} }
static void BuyMenuRemoveScrollIndicatorArrows(void) static void BuyMenuRemoveScrollIndicatorArrows(void)
{ {
if ((gShopData.unk16_11) == 0x1F) if ((sShopData.unk16_11) == 0x1F)
return; return;
RemoveScrollIndicatorArrowPair(gShopData.unk16_11); RemoveScrollIndicatorArrowPair(sShopData.unk16_11);
gShopData.unk16_11 = 0x1F; sShopData.unk16_11 = 0x1F;
} }
static void BuyMenuDrawMapView(void) static void BuyMenuDrawMapView(void)
@@ -721,7 +721,7 @@ static void BuyMenuDrawMapView(void)
} }
static void BuyMenuDrawMapBg(void) static void BuyMenuDrawMapBg(void)
{ {
s16 i, j, x, y; s16 i, j, x, y;
const struct MapLayout *mapLayout; const struct MapLayout *mapLayout;
u16 metatile; u16 metatile;
@@ -785,10 +785,10 @@ static void BuyMenuCollectObjectEventData(void)
GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY); GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY);
elevation = PlayerGetElevation(); elevation = PlayerGetElevation();
for (y = 0; y < OBJECT_EVENTS_COUNT; y++) for (y = 0; y < OBJECT_EVENTS_COUNT; y++)
sViewportObjectEvents[y][OBJECT_EVENT_ID] = OBJECT_EVENTS_COUNT; sViewportObjectEvents[y][OBJECT_EVENT_ID] = OBJECT_EVENTS_COUNT;
for (y = 0; y < 5; y++) for (y = 0; y < 5; y++)
{ {
for (x = 0; x < 7; x++) for (x = 0; x < 7; x++)
@@ -832,7 +832,7 @@ static void BuyMenuDrawObjectEvents(void)
if (sViewportObjectEvents[i][OBJECT_EVENT_ID] == OBJECT_EVENTS_COUNT) if (sViewportObjectEvents[i][OBJECT_EVENT_ID] == OBJECT_EVENTS_COUNT)
continue; continue;
graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[sViewportObjectEvents[i][OBJECT_EVENT_ID]].graphicsId); graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[sViewportObjectEvents[i][OBJECT_EVENT_ID]].graphicsId);
spriteId = CreateObjectGraphicsSprite( spriteId = CreateObjectGraphicsSprite(
gObjectEvents[sViewportObjectEvents[i][OBJECT_EVENT_ID]].graphicsId, gObjectEvents[sViewportObjectEvents[i][OBJECT_EVENT_ID]].graphicsId,
SpriteCallbackDummy, SpriteCallbackDummy,
@@ -860,9 +860,9 @@ static void BuyMenuCopyTilemapData(void)
static void BuyMenuPrintItemQuantityAndPrice(u8 taskId) static void BuyMenuPrintItemQuantityAndPrice(u8 taskId)
{ {
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
FillWindowPixelBuffer(3, PIXEL_FILL(1)); FillWindowPixelBuffer(3, PIXEL_FILL(1));
PrintMoneyAmount(3, 0x36, 0xA, gShopData.itemPrice, TEXT_SKIP_DRAW); PrintMoneyAmount(3, 0x36, 0xA, sShopData.itemPrice, TEXT_SKIP_DRAW);
ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, 2); ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, 2);
StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
BuyMenuPrint(3, FONT_SMALL, gStringVar4, 2, 0xA, 0, 0, 0, 1); BuyMenuPrint(3, FONT_SMALL, gStringVar4, 2, 0xA, 0, 0, 0, 1);
@@ -875,7 +875,7 @@ static void Task_BuyMenu(u8 taskId)
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
s32 itemId = ListMenu_ProcessInput(tListTaskId); s32 itemId = ListMenu_ProcessInput(tListTaskId);
ListMenuGetScrollAndRow(tListTaskId, &gShopData.scrollOffset, &gShopData.selectedRow); ListMenuGetScrollAndRow(tListTaskId, &sShopData.scrollOffset, &sShopData.selectedRow);
switch (itemId) switch (itemId)
{ {
case LIST_NOTHING_CHOSEN: case LIST_NOTHING_CHOSEN:
@@ -891,8 +891,8 @@ static void Task_BuyMenu(u8 taskId)
BuyMenuRemoveScrollIndicatorArrows(); BuyMenuRemoveScrollIndicatorArrows();
BuyMenuPrintCursor(tListTaskId, 2); BuyMenuPrintCursor(tListTaskId, 2);
RecolorItemDescriptionBox(1); RecolorItemDescriptionBox(1);
gShopData.itemPrice = ItemId_GetPrice(itemId); sShopData.itemPrice = ItemId_GetPrice(itemId);
if (!IsEnoughMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice)) if (!IsEnoughMoney(&gSaveBlock1Ptr->money, sShopData.itemPrice))
{ {
BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, BuyMenuReturnToItemList); BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, BuyMenuReturnToItemList);
} }
@@ -911,7 +911,7 @@ static void Task_BuyHowManyDialogueInit(u8 taskId)
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
u16 quantityInBag = BagGetQuantityByItemId(tItemId); u16 quantityInBag = BagGetQuantityByItemId(tItemId);
u16 maxQuantity; u16 maxQuantity;
BuyMenuQuantityBoxThinBorder(1, 0); BuyMenuQuantityBoxThinBorder(1, 0);
ConvertIntToDecimalStringN(gStringVar1, quantityInBag, STR_CONV_MODE_RIGHT_ALIGN, 3); ConvertIntToDecimalStringN(gStringVar1, quantityInBag, STR_CONV_MODE_RIGHT_ALIGN, 3);
StringExpandPlaceholders(gStringVar4, gText_InBagVar1); StringExpandPlaceholders(gStringVar4, gText_InBagVar1);
@@ -922,23 +922,23 @@ static void Task_BuyHowManyDialogueInit(u8 taskId)
ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(0);
maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / ItemId_GetPrice(tItemId); maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / ItemId_GetPrice(tItemId);
if (maxQuantity > 99) if (maxQuantity > 99)
gShopData.maxQuantity = 99; sShopData.maxQuantity = 99;
else else
gShopData.maxQuantity = (u8)maxQuantity; sShopData.maxQuantity = (u8)maxQuantity;
if (maxQuantity != 1) if (maxQuantity != 1)
BuyQuantityAddScrollIndicatorArrows(); BuyQuantityAddScrollIndicatorArrows();
gTasks[taskId].func = Task_BuyHowManyDialogueHandleInput; gTasks[taskId].func = Task_BuyHowManyDialogueHandleInput;
} }
static void Task_BuyHowManyDialogueHandleInput(u8 taskId) static void Task_BuyHowManyDialogueHandleInput(u8 taskId)
{ {
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
if (AdjustQuantityAccordingToDPadInput(&tItemCount, gShopData.maxQuantity) == TRUE) if (AdjustQuantityAccordingToDPadInput(&tItemCount, sShopData.maxQuantity) == TRUE)
{ {
gShopData.itemPrice = ItemId_GetPrice(tItemId) * tItemCount; sShopData.itemPrice = ItemId_GetPrice(tItemId) * tItemCount;
BuyMenuPrintItemQuantityAndPrice(taskId); BuyMenuPrintItemQuantityAndPrice(taskId);
} }
else else
@@ -954,11 +954,11 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId)
PutWindowTilemap(4); PutWindowTilemap(4);
CopyItemName(tItemId, gStringVar1); CopyItemName(tItemId, gStringVar1);
ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, 2); ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, 2);
ConvertIntToDecimalStringN(gStringVar3, gShopData.itemPrice, STR_CONV_MODE_LEFT_ALIGN, 8); ConvertIntToDecimalStringN(gStringVar3, sShopData.itemPrice, STR_CONV_MODE_LEFT_ALIGN, 8);
BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, CreateBuyMenuConfirmPurchaseWindow); BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, CreateBuyMenuConfirmPurchaseWindow);
} }
else if (JOY_NEW(B_BUTTON)) else if (JOY_NEW(B_BUTTON))
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
BuyMenuRemoveScrollIndicatorArrows(); BuyMenuRemoveScrollIndicatorArrows();
ClearStdWindowAndFrameToTransparent(3, FALSE); ClearStdWindowAndFrameToTransparent(3, FALSE);
@@ -995,7 +995,7 @@ static void BuyMenuTryMakePurchase(u8 taskId)
static void BuyMenuSubtractMoney(u8 taskId) static void BuyMenuSubtractMoney(u8 taskId)
{ {
IncrementGameStat(GAME_STAT_SHOPPED); IncrementGameStat(GAME_STAT_SHOPPED);
RemoveMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice); RemoveMoney(&gSaveBlock1Ptr->money, sShopData.itemPrice);
PlaySE(SE_SHOP); PlaySE(SE_SHOP);
PrintMoneyAmountInMoneyBox(0, GetMoney(&gSaveBlock1Ptr->money), 0); PrintMoneyAmountInMoneyBox(0, GetMoney(&gSaveBlock1Ptr->money), 0);
gTasks[taskId].func = Task_ReturnToItemListAfterItemPurchase; gTasks[taskId].func = Task_ReturnToItemListAfterItemPurchase;
@@ -1019,9 +1019,9 @@ static void BuyMenuReturnToItemList(u8 taskId)
RecolorItemDescriptionBox(0); RecolorItemDescriptionBox(0);
PutWindowTilemap(4); PutWindowTilemap(4);
PutWindowTilemap(5); PutWindowTilemap(5);
if (gShopData.martType == MART_TYPE_TMHM) if (sShopData.martType == MART_TYPE_TMHM)
PutWindowTilemap(6); PutWindowTilemap(6);
ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(0);
BuyMenuAddScrollIndicatorArrows(); BuyMenuAddScrollIndicatorArrows();
gTasks[taskId].func = Task_BuyMenu; gTasks[taskId].func = Task_BuyMenu;
@@ -1037,7 +1037,7 @@ static void ExitBuyMenu(u8 taskId)
static void Task_ExitBuyMenu(u8 taskId) static void Task_ExitBuyMenu(u8 taskId)
{ {
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
DestroyListMenuTask(tListTaskId, NULL, NULL); DestroyListMenuTask(tListTaskId, NULL, NULL);
@@ -1060,7 +1060,7 @@ static void DebugFunc_PrintShopMenuHistoryBeforeClearMaybe(void)
void RecordItemTransaction(u16 itemId, u16 quantity, u8 logEventId) void RecordItemTransaction(u16 itemId, u16 quantity, u8 logEventId)
{ {
struct QuestLogEvent_Shop *history; struct QuestLogEvent_Shop *history;
// There should only be a single entry for buying/selling respectively, // There should only be a single entry for buying/selling respectively,
// so if one has already been created then get it first. // so if one has already been created then get it first.
if (sHistory[0].logEventId == logEventId) if (sHistory[0].logEventId == logEventId)
@@ -1084,7 +1084,7 @@ void RecordItemTransaction(u16 itemId, u16 quantity, u8 logEventId)
// Set flag if this isn't the first time we've bought/sold in this session // Set flag if this isn't the first time we've bought/sold in this session
if (history->lastItemId != ITEM_NONE) if (history->lastItemId != ITEM_NONE)
history->hasMultipleTransactions = TRUE; history->hasMultipleTransactions = TRUE;
history->lastItemId = itemId; history->lastItemId = itemId;
// Add to number of items bought/sold // Add to number of items bought/sold
@@ -1094,7 +1094,7 @@ void RecordItemTransaction(u16 itemId, u16 quantity, u8 logEventId)
if (history->itemQuantity > 999) if (history->itemQuantity > 999)
history->itemQuantity = 999; history->itemQuantity = 999;
} }
// Add to amount of money spent buying or earned selling // Add to amount of money spent buying or earned selling
if (history->totalMoney < 999999) if (history->totalMoney < 999999)
{ {
@@ -1103,7 +1103,7 @@ void RecordItemTransaction(u16 itemId, u16 quantity, u8 logEventId)
history->totalMoney += (ItemId_GetPrice(itemId) >> (logEventId - 1)) * quantity; history->totalMoney += (ItemId_GetPrice(itemId) >> (logEventId - 1)) * quantity;
if (history->totalMoney > 999999) if (history->totalMoney > 999999)
history->totalMoney = 999999; history->totalMoney = 999999;
} }
} }
// Will record QL_EVENT_BOUGHT_ITEM and/or QL_EVENT_SOLD_ITEM, or nothing. // Will record QL_EVENT_BOUGHT_ITEM and/or QL_EVENT_SOLD_ITEM, or nothing.
@@ -1112,14 +1112,14 @@ static void RecordTransactionForQuestLog(void)
u16 eventId = sHistory[0].logEventId; u16 eventId = sHistory[0].logEventId;
if (eventId != 0) if (eventId != 0)
SetQuestLogEvent(eventId + QL_EVENT_USED_POKEMART, (const u16 *)&sHistory[0]); SetQuestLogEvent(eventId + QL_EVENT_USED_POKEMART, (const u16 *)&sHistory[0]);
eventId = sHistory[1].logEventId; eventId = sHistory[1].logEventId;
if (eventId != 0) if (eventId != 0)
SetQuestLogEvent(eventId + QL_EVENT_USED_POKEMART, (const u16 *)&sHistory[1]); SetQuestLogEvent(eventId + QL_EVENT_USED_POKEMART, (const u16 *)&sHistory[1]);
} }
void CreatePokemartMenu(const u16 *itemsForSale) void CreatePokemartMenu(const u16 *itemsForSale)
{ {
SetShopItemsForSale(itemsForSale); SetShopItemsForSale(itemsForSale);
CreateShopMenu(MART_TYPE_REGULAR); CreateShopMenu(MART_TYPE_REGULAR);
SetShopMenuCallback(ScriptContext_Enable); SetShopMenuCallback(ScriptContext_Enable);