Small mart changes (#651)
This commit is contained in:
+65
-65
@@ -60,7 +60,7 @@ struct ShopData
|
||||
/*0x0C*/ u16 selectedRow;
|
||||
/*0x0E*/ u16 scrollOffset;
|
||||
/*0x10*/ u16 itemCount;
|
||||
/*0x12*/ u16 field12;
|
||||
/*0x12*/ u16 itemsShowed;
|
||||
/*0x14*/ u16 maxQuantity;
|
||||
/*0x16*/ u16 martType:4; // 0x1 if tm list
|
||||
u16 fontId:5;
|
||||
@@ -70,7 +70,7 @@ struct ShopData
|
||||
};
|
||||
|
||||
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;
|
||||
EWRAM_DATA u16 (*gShopTilemapBuffer1)[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};
|
||||
|
||||
//Function Declarations
|
||||
static u8 CreateShopMenu(u8 a0);
|
||||
static u8 CreateShopMenu(u8 martType);
|
||||
static u8 GetMartTypeFromItemList(u32 a0);
|
||||
static void SetShopItemsForSale(const u16 *items);
|
||||
static void SetShopMenuCallback(MainCallback callback);
|
||||
@@ -202,14 +202,14 @@ static const struct BgTemplate sShopBuyMenuBgTemplates[4] =
|
||||
};
|
||||
|
||||
// Functions
|
||||
static u8 CreateShopMenu(u8 a0)
|
||||
static u8 CreateShopMenu(u8 martType)
|
||||
{
|
||||
gShopData.martType = GetMartTypeFromItemList(a0);
|
||||
gShopData.selectedRow = 0;
|
||||
sShopData.martType = GetMartTypeFromItemList(martType);
|
||||
sShopData.selectedRow = 0;
|
||||
if (ContextNpcGetTextColor() == NPC_TEXT_COLOR_MALE)
|
||||
gShopData.fontId = FONT_MALE;
|
||||
sShopData.fontId = FONT_MALE;
|
||||
else
|
||||
gShopData.fontId = FONT_FEMALE;
|
||||
sShopData.fontId = FONT_FEMALE;
|
||||
|
||||
sShopMenuWindowId = AddWindow(&sShopMenuWindowTemplate);
|
||||
SetStdWindowBorderStyle(sShopMenuWindowId, 0);
|
||||
@@ -220,37 +220,37 @@ static u8 CreateShopMenu(u8 a0)
|
||||
return CreateTask(Task_ShopMenu, 8);
|
||||
}
|
||||
|
||||
static u8 GetMartTypeFromItemList(u32 a0)
|
||||
static u8 GetMartTypeFromItemList(u32 martType)
|
||||
{
|
||||
u16 i;
|
||||
|
||||
if (a0)
|
||||
return a0;
|
||||
if (martType != MART_TYPE_REGULAR)
|
||||
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)
|
||||
return 1;
|
||||
if (ItemId_GetPocket(sShopData.itemList[i]) == POCKET_TM_CASE)
|
||||
return MART_TYPE_TMHM;
|
||||
}
|
||||
return 0;
|
||||
return MART_TYPE_REGULAR;
|
||||
}
|
||||
|
||||
static void SetShopItemsForSale(const u16 *items)
|
||||
{
|
||||
gShopData.itemList = items;
|
||||
gShopData.itemCount = 0;
|
||||
if (gShopData.itemList[0] == 0)
|
||||
sShopData.itemList = items;
|
||||
sShopData.itemCount = 0;
|
||||
if (sShopData.itemList[0] == 0)
|
||||
return;
|
||||
|
||||
while (gShopData.itemList[gShopData.itemCount])
|
||||
while (sShopData.itemList[sShopData.itemCount])
|
||||
{
|
||||
++gShopData.itemCount;
|
||||
++sShopData.itemCount;
|
||||
}
|
||||
}
|
||||
|
||||
static void SetShopMenuCallback(void (*callback)(void))
|
||||
{
|
||||
gShopData.callback = callback;
|
||||
sShopData.callback = callback;
|
||||
}
|
||||
|
||||
static void Task_ShopMenu(u8 taskId)
|
||||
@@ -296,8 +296,8 @@ static void Task_HandleShopMenuQuit(u8 taskId)
|
||||
ClearShopMenuWindow();
|
||||
RecordTransactionForQuestLog();
|
||||
DestroyTask(taskId);
|
||||
if (gShopData.callback != NULL)
|
||||
gShopData.callback();
|
||||
if (sShopData.callback != NULL)
|
||||
sShopData.callback();
|
||||
}
|
||||
|
||||
static void ClearShopMenuWindow(void)
|
||||
@@ -332,7 +332,7 @@ static void Task_ReturnToShopMenu(u8 taskId)
|
||||
|
||||
static void ShowShopMenuAfterExitingBuyOrSellMenu(u8 taskId)
|
||||
{
|
||||
CreateShopMenu(gShopData.martType);
|
||||
CreateShopMenu(sShopData.martType);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
@@ -376,7 +376,7 @@ static void CB2_InitBuyMenu(void)
|
||||
FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 0x20, 0x20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 0x20, 0x20);
|
||||
FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20);
|
||||
BuyMenuInitWindows(gShopData.martType);
|
||||
BuyMenuInitWindows(sShopData.martType);
|
||||
BuyMenuDecompressBgGraphics();
|
||||
gMain.state++;
|
||||
break;
|
||||
@@ -386,8 +386,8 @@ static void CB2_InitBuyMenu(void)
|
||||
gMain.state++;
|
||||
break;
|
||||
default:
|
||||
gShopData.selectedRow = 0;
|
||||
gShopData.scrollOffset = 0;
|
||||
sShopData.selectedRow = 0;
|
||||
sShopData.scrollOffset = 0;
|
||||
BuyMenuDrawGraphics();
|
||||
BuyMenuAddScrollIndicatorArrows();
|
||||
taskId = CreateTask(Task_BuyMenu, 8);
|
||||
@@ -465,7 +465,7 @@ static void BuyMenuDecompressBgGraphics(void)
|
||||
u16 *pal;
|
||||
|
||||
DecompressAndCopyTileDataToVram(1, gBuyMenuFrame_Gfx, 0x480, 0x3DC, 0);
|
||||
if ((gShopData.martType) != MART_TYPE_TMHM)
|
||||
if ((sShopData.martType) != MART_TYPE_TMHM)
|
||||
LZDecompressWram(gBuyMenuFrame_Tilemap, gShopTilemapBuffer1);
|
||||
else
|
||||
LZDecompressWram(gBuyMenuFrame_TmHmTilemap, gShopTilemapBuffer1);
|
||||
@@ -486,7 +486,7 @@ static void RecolorItemDescriptionBox(bool32 a0)
|
||||
else
|
||||
paletteNum = 0x6;
|
||||
|
||||
if ((gShopData.martType) != MART_TYPE_TMHM)
|
||||
if ((sShopData.martType) != MART_TYPE_TMHM)
|
||||
SetBgTilemapPalette(1, 0, 14, 30, 6, paletteNum);
|
||||
else
|
||||
SetBgTilemapPalette(1, 0, 12, 30, 8, paletteNum);
|
||||
@@ -509,24 +509,24 @@ bool8 BuyMenuBuildListMenuTemplate(void)
|
||||
{
|
||||
u16 i, v;
|
||||
|
||||
sShopMenuListMenu = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuListMenu));
|
||||
sShopMenuListMenu = Alloc((sShopData.itemCount + 1) * sizeof(*sShopMenuListMenu));
|
||||
if (sShopMenuListMenu == NULL
|
||||
|| (sShopMenuItemStrings = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuItemStrings))) == NULL)
|
||||
|| (sShopMenuItemStrings = Alloc((sShopData.itemCount + 1) * sizeof(*sShopMenuItemStrings))) == NULL)
|
||||
{
|
||||
BuyMenuFreeMemory();
|
||||
SetShopExitCallback();
|
||||
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);
|
||||
sShopMenuListMenu[i].label = sShopMenuItemStrings[i];
|
||||
sShopMenuListMenu[i].index = -2;
|
||||
gMultiuseListMenuTemplate.items = sShopMenuListMenu;
|
||||
gMultiuseListMenuTemplate.totalItems = gShopData.itemCount + 1;
|
||||
gMultiuseListMenuTemplate.totalItems = sShopData.itemCount + 1;
|
||||
gMultiuseListMenuTemplate.windowId = 4;
|
||||
gMultiuseListMenuTemplate.header_X = 0;
|
||||
gMultiuseListMenuTemplate.item_X = 9;
|
||||
@@ -543,17 +543,17 @@ bool8 BuyMenuBuildListMenuTemplate(void)
|
||||
gMultiuseListMenuTemplate.scrollMultiple = 0;
|
||||
gMultiuseListMenuTemplate.cursorKind = 0;
|
||||
|
||||
if (gShopData.martType == MART_TYPE_TMHM)
|
||||
if (sShopData.martType == MART_TYPE_TMHM)
|
||||
v = 5;
|
||||
else
|
||||
v = 6;
|
||||
|
||||
if ((gShopData.itemCount + 1) > v)
|
||||
if ((sShopData.itemCount + 1) > v)
|
||||
gMultiuseListMenuTemplate.maxShowed = v;
|
||||
else
|
||||
gMultiuseListMenuTemplate.maxShowed = gShopData.itemCount + 1;
|
||||
gMultiuseListMenuTemplate.maxShowed = sShopData.itemCount + 1;
|
||||
|
||||
gShopData.field12 = gMultiuseListMenuTemplate.maxShowed;
|
||||
sShopData.itemsShowed = gMultiuseListMenuTemplate.maxShowed;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -577,15 +577,15 @@ static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, s
|
||||
description = gText_QuitShopping;
|
||||
|
||||
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)
|
||||
CreateItemMenuIcon(item, gShopData.itemSlot);
|
||||
CreateItemMenuIcon(item, sShopData.itemSlot);
|
||||
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);
|
||||
}
|
||||
else //TM Mart
|
||||
@@ -633,7 +633,7 @@ static void LoadTmHmNameInMart(s32 item)
|
||||
|
||||
u8 GetMartFontId(void)
|
||||
{
|
||||
return gShopData.fontId;
|
||||
return sShopData.fontId;
|
||||
}
|
||||
|
||||
static void BuyMenuPrintCursor(u8 listTaskId, u8 a1)
|
||||
@@ -686,31 +686,31 @@ static void SetShopExitCallback(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,
|
||||
(gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset);
|
||||
sShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 104,
|
||||
(sShopData.itemCount - sShopData.itemsShowed) + 1, 110, 110, &sShopData.scrollOffset);
|
||||
}
|
||||
else
|
||||
{
|
||||
gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 88,
|
||||
(gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset);
|
||||
sShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 88,
|
||||
(sShopData.itemCount - sShopData.itemsShowed) + 1, 110, 110, &sShopData.scrollOffset);
|
||||
}
|
||||
}
|
||||
|
||||
static void BuyQuantityAddScrollIndicatorArrows(void)
|
||||
{
|
||||
gShopData.unk18 = 1;
|
||||
gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0x98, 0x48, 0x68, 2, 0x6E, 0x6E, &gShopData.unk18);
|
||||
sShopData.unk18 = 1;
|
||||
sShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0x98, 0x48, 0x68, 2, 0x6E, 0x6E, &sShopData.unk18);
|
||||
}
|
||||
|
||||
static void BuyMenuRemoveScrollIndicatorArrows(void)
|
||||
{
|
||||
if ((gShopData.unk16_11) == 0x1F)
|
||||
if ((sShopData.unk16_11) == 0x1F)
|
||||
return;
|
||||
|
||||
RemoveScrollIndicatorArrowPair(gShopData.unk16_11);
|
||||
gShopData.unk16_11 = 0x1F;
|
||||
RemoveScrollIndicatorArrowPair(sShopData.unk16_11);
|
||||
sShopData.unk16_11 = 0x1F;
|
||||
}
|
||||
|
||||
static void BuyMenuDrawMapView(void)
|
||||
@@ -862,7 +862,7 @@ static void BuyMenuPrintItemQuantityAndPrice(u8 taskId)
|
||||
s16 *data = gTasks[taskId].data;
|
||||
|
||||
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);
|
||||
StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
|
||||
BuyMenuPrint(3, FONT_SMALL, gStringVar4, 2, 0xA, 0, 0, 0, 1);
|
||||
@@ -875,7 +875,7 @@ static void Task_BuyMenu(u8 taskId)
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
s32 itemId = ListMenu_ProcessInput(tListTaskId);
|
||||
ListMenuGetScrollAndRow(tListTaskId, &gShopData.scrollOffset, &gShopData.selectedRow);
|
||||
ListMenuGetScrollAndRow(tListTaskId, &sShopData.scrollOffset, &sShopData.selectedRow);
|
||||
switch (itemId)
|
||||
{
|
||||
case LIST_NOTHING_CHOSEN:
|
||||
@@ -891,8 +891,8 @@ static void Task_BuyMenu(u8 taskId)
|
||||
BuyMenuRemoveScrollIndicatorArrows();
|
||||
BuyMenuPrintCursor(tListTaskId, 2);
|
||||
RecolorItemDescriptionBox(1);
|
||||
gShopData.itemPrice = ItemId_GetPrice(itemId);
|
||||
if (!IsEnoughMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice))
|
||||
sShopData.itemPrice = ItemId_GetPrice(itemId);
|
||||
if (!IsEnoughMoney(&gSaveBlock1Ptr->money, sShopData.itemPrice))
|
||||
{
|
||||
BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, BuyMenuReturnToItemList);
|
||||
}
|
||||
@@ -922,9 +922,9 @@ static void Task_BuyHowManyDialogueInit(u8 taskId)
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / ItemId_GetPrice(tItemId);
|
||||
if (maxQuantity > 99)
|
||||
gShopData.maxQuantity = 99;
|
||||
sShopData.maxQuantity = 99;
|
||||
else
|
||||
gShopData.maxQuantity = (u8)maxQuantity;
|
||||
sShopData.maxQuantity = (u8)maxQuantity;
|
||||
|
||||
if (maxQuantity != 1)
|
||||
BuyQuantityAddScrollIndicatorArrows();
|
||||
@@ -936,9 +936,9 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId)
|
||||
{
|
||||
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);
|
||||
}
|
||||
else
|
||||
@@ -954,7 +954,7 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId)
|
||||
PutWindowTilemap(4);
|
||||
CopyItemName(tItemId, gStringVar1);
|
||||
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);
|
||||
}
|
||||
else if (JOY_NEW(B_BUTTON))
|
||||
@@ -995,7 +995,7 @@ static void BuyMenuTryMakePurchase(u8 taskId)
|
||||
static void BuyMenuSubtractMoney(u8 taskId)
|
||||
{
|
||||
IncrementGameStat(GAME_STAT_SHOPPED);
|
||||
RemoveMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice);
|
||||
RemoveMoney(&gSaveBlock1Ptr->money, sShopData.itemPrice);
|
||||
PlaySE(SE_SHOP);
|
||||
PrintMoneyAmountInMoneyBox(0, GetMoney(&gSaveBlock1Ptr->money), 0);
|
||||
gTasks[taskId].func = Task_ReturnToItemListAfterItemPurchase;
|
||||
@@ -1019,7 +1019,7 @@ static void BuyMenuReturnToItemList(u8 taskId)
|
||||
RecolorItemDescriptionBox(0);
|
||||
PutWindowTilemap(4);
|
||||
PutWindowTilemap(5);
|
||||
if (gShopData.martType == MART_TYPE_TMHM)
|
||||
if (sShopData.martType == MART_TYPE_TMHM)
|
||||
PutWindowTilemap(6);
|
||||
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
|
||||
Reference in New Issue
Block a user