summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2018-01-15 21:26:15 -0500
committerProjectRevoTPP <projectrevotpp@hotmail.com>2018-01-15 21:26:15 -0500
commit1771d7761e4ff1406a8ffe3da4e636d633ad3135 (patch)
tree1a89dadb12331fad13023facdc9f87040602d8ef /src
parentce391ed0696c22e8fa1f33430b4025a08a3bc360 (diff)
split out fldeff_escalator and label shop.c more
Diffstat (limited to 'src')
-rw-r--r--src/field/fldeff_escalator.c132
-rw-r--r--src/field/item_menu.c8
-rw-r--r--src/field/shop.c320
3 files changed, 236 insertions, 224 deletions
diff --git a/src/field/fldeff_escalator.c b/src/field/fldeff_escalator.c
new file mode 100644
index 000000000..981233480
--- /dev/null
+++ b/src/field/fldeff_escalator.c
@@ -0,0 +1,132 @@
+#include "global.h"
+#include "task.h"
+#include "fieldmap.h"
+#include "field_camera.h"
+#include "field_player_avatar.h"
+
+extern u8 gUnknown_02038731;
+
+void sub_80B45B4(u8 taskId, const s16 *list, u16 c)
+{
+ s16 r5 = gTasks[taskId].data[4] - 1;
+ s16 r3 = gTasks[taskId].data[5] - 1;
+ s16 r4 = gTasks[taskId].data[1];
+ s16 y;
+ s16 x;
+
+ if (gTasks[taskId].data[2] == 0)
+ {
+ for (y = 0; y < 3; y++)
+ {
+ for (x = 0; x < 3; x++)
+ {
+ s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
+
+ if (list[r4] == metatileId)
+ {
+ if (r4 != 2)
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[r4 + 1]);
+ else
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[0]);
+ }
+ }
+ }
+ }
+ else
+ {
+ for (y = 0; y < 3; y++)
+ {
+ for (x = 0; x < 3; x++)
+ {
+ s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
+
+ if (list[2 - r4] == metatileId)
+ {
+ if (r4 != 2)
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[1 - r4]);
+ else
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[2]);
+ }
+ }
+ }
+ }
+}
+
+const u16 gUnknown_083CC714[] = {0x284, 0x282, 0x280};
+const u16 gUnknown_083CC71A[] = {0x285, 0x283, 0x281};
+const u16 gUnknown_083CC720[] = {0x28C, 0x28A, 0x288};
+const u16 gUnknown_083CC726[] = {0x28D, 0x28B, 0x289};
+const u16 gUnknown_083CC72C[] = {0x2A0, 0x2A2, 0x2A4};
+const u16 gUnknown_083CC732[] = {0x2A1, 0x2A3, 0x2A5};
+const u16 gUnknown_083CC738[] = {0x2A8, 0x2AA, 0x2AC};
+
+void sub_80B4710(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ data[3] = 1;
+
+ switch (data[0])
+ {
+ case 0:
+ sub_80B45B4(taskId, gUnknown_083CC714, 0);
+ break;
+ case 1:
+ sub_80B45B4(taskId, gUnknown_083CC71A, 0);
+ break;
+ case 2:
+ sub_80B45B4(taskId, gUnknown_083CC720, 0xC00);
+ break;
+ case 3:
+ sub_80B45B4(taskId, gUnknown_083CC726, 0);
+ break;
+ case 4:
+ sub_80B45B4(taskId, gUnknown_083CC72C, 0xC00);
+ break;
+ case 5:
+ sub_80B45B4(taskId, gUnknown_083CC732, 0);
+ break;
+ case 6:
+ sub_80B45B4(taskId, gUnknown_083CC738, 0);
+ break;
+ }
+
+ data[0] = (data[0] + 1) & 7;
+ if (!data[0])
+ {
+ DrawWholeMapView();
+ data[1] = (data[1] + 1) % 3;
+ data[3] = 0;
+ }
+}
+
+u8 sub_80B47D8(u16 var)
+{
+ u8 taskId = CreateTask(sub_80B4710, 0);
+ s16 *data = gTasks[taskId].data;
+
+ PlayerGetDestCoords(&data[4], &data[5]);
+ data[0] = 0;
+ data[1] = 0;
+ data[2] = var;
+ sub_80B4710(taskId);
+ return taskId;
+}
+
+void sub_80B4824(u8 var)
+{
+ gUnknown_02038731 = sub_80B47D8(var);
+}
+
+void sub_80B483C(void)
+{
+ DestroyTask(gUnknown_02038731);
+}
+
+bool8 sub_80B4850(void)
+{
+ if (gTasks[gUnknown_02038731].data[3] == 0 && gTasks[gUnknown_02038731].data[1] == 2)
+ return FALSE;
+ else
+ return TRUE;
+}
diff --git a/src/field/item_menu.c b/src/field/item_menu.c
index e07021acd..d86550eb6 100644
--- a/src/field/item_menu.c
+++ b/src/field/item_menu.c
@@ -50,7 +50,7 @@ extern void pal_fill_black(void);
extern bool8 sub_807D770(void);
extern u8 sub_80F931C();
extern void sub_808A3F8(u8);
-extern void Shop_InitExitSellMenu(void);
+extern void Shop_FadeReturnToMartMenu(void);
extern void sub_80546B8(u8);
extern void sub_804E990(u8);
extern void sub_802E424(u8);
@@ -1901,7 +1901,7 @@ static void sub_80A50C8(u8 taskId)
}
}
-bool8 sub_80A52C4(u8 taskId, u16 b)
+bool8 SellMenu_QuantityRoller(u8 taskId, u16 b)
{
s16 *taskData = gTasks[taskId].data;
@@ -1948,7 +1948,7 @@ static bool8 sub_80A5350(u8 taskId)
{
s16 *taskData = gTasks[taskId].data;
- if (sub_80A52C4(taskId, gCurrentBagPocketItemSlots[gUnknown_02038560].quantity) == TRUE)
+ if (SellMenu_QuantityRoller(taskId, gCurrentBagPocketItemSlots[gUnknown_02038560].quantity) == TRUE)
{
// if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way
if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1)
@@ -2971,7 +2971,7 @@ void ItemMenu_LoadSellMenu(void)
static void OnBagClose_Shop(u8 taskId)
{
- gFieldCallback = Shop_InitExitSellMenu;
+ gFieldCallback = Shop_FadeReturnToMartMenu;
gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16;
gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch;
sub_80A5AE4(taskId);
diff --git a/src/field/shop.c b/src/field/shop.c
index ab529d9a2..233e430ee 100644
--- a/src/field/shop.c
+++ b/src/field/shop.c
@@ -28,23 +28,23 @@
#include "field_camera.h"
#include "ewram.h"
-extern bool8 sub_80A52C4(u8, u8);
+extern bool8 SellMenu_QuantityRoller(u8, u8);
extern u8 gBuyMenuFrame_Gfx[];
extern u16 gBuyMenuFrame_Tilemap[];
extern u16 gMenuMoneyPal[16];
-void Shop_DisplayPriceInList(int var1, int var2, bool32 hasControlCode);
+void Shop_DisplayPriceInList(int firstItemId, int lastItemId, bool32 hasControlCode);
void Shop_PrintItemDescText(void);
-void Shop_ReturnToBuyMenu(u8);
-void sub_80B43F0(u8);
+void Task_ReturnToBuyMenu(u8);
void Task_ExitBuyMenu(u8);
-void sub_80B4470(u8);
-void HandleShopMenuBuy(u8 taskId);
-void HandleShopMenuSell(u8 taskId);
-void HandleShopMenuQuit(u8 taskId);
-void Shop_DoItemPurchase(u8 taskId);
-void Shop_CancelItemPurchase(u8 taskId);
+void Task_ExitBuyMenuDoFade(u8);
+void Task_UpdatePurchaseHistory(u8);
+void Task_HandleShopMenuBuy(u8 taskId);
+void Task_HandleShopMenuSell(u8 taskId);
+void Task_HandleShopMenuQuit(u8 taskId);
+void Task_DoItemPurchase(u8 taskId);
+void Task_CancelItemPurchase(u8 taskId);
// iwram
static struct MartInfo gMartInfo;
@@ -54,14 +54,15 @@ EWRAM_DATA u32 gMartTotalCost = 0;
EWRAM_DATA s16 gMartViewportObjects[16][4] = {0};
EWRAM_DATA struct ItemSlot gMartPurchaseHistory[3] = {0};
EWRAM_DATA u8 gMartPurchaseHistoryId = 0;
-EWRAM_DATA u8 gUnknown_02038731 = 0;
+
+EWRAM_DATA u8 gUnknown_02038731 = 0; // This really should be in fldeff_escalator, but being in a new file aligns the ewram, which doesnt match the ROM.
// rodata
static const struct MenuAction2 sBuySellQuitMenuActions[] =
{
- { MartText_Buy, HandleShopMenuBuy },
- { MartText_Sell, HandleShopMenuSell },
- { MartText_Quit2, HandleShopMenuQuit },
+ { MartText_Buy, Task_HandleShopMenuBuy },
+ { MartText_Sell, Task_HandleShopMenuSell },
+ { MartText_Quit2, Task_HandleShopMenuQuit },
};
static const u8 gMartBuySellOptionList[] = {BUY, SELL, EXIT};
@@ -71,8 +72,8 @@ static const u16 gUnusedMartArray[] = {0x2, 0x3, 0x4, 0xD, 0x121, 0xE, 0xE, 0xE,
static const struct YesNoFuncTable sShopPurchaseYesNoFuncs[] =
{
- Shop_DoItemPurchase,
- Shop_CancelItemPurchase
+ Task_DoItemPurchase,
+ Task_CancelItemPurchase
};
u8 CreateShopMenu(u8 martType)
@@ -95,7 +96,7 @@ u8 CreateShopMenu(u8 martType)
}
InitMenu(0, 1, 1, gMartInfo.numChoices + 1, 0, 9); // add 1 for cancel
- return CreateTask(sub_80B2E38, 8);
+ return CreateTask(Task_DoBuySellMenu, 8);
}
void SetShopMenuCallback(void *callbackPtr)
@@ -117,9 +118,9 @@ void SetShopItemsForSale(u16 *items)
}
}
-void sub_80B2E38(u8 var)
+void Task_DoBuySellMenu(u8 taskId)
{
- const u8 local = var;
+ const u8 taskIdConst = taskId; // why is a local const needed to match?
if (gMain.newAndRepeatedKeys & DPAD_UP)
{
@@ -142,21 +143,21 @@ void sub_80B2E38(u8 var)
PlaySE(SE_SELECT);
if (gMartInfo.martType == MART_TYPE_0)
{
- sBuySellQuitMenuActions[gMartBuySellOptionList[gMartInfo.cursor]].func(local);
+ sBuySellQuitMenuActions[gMartBuySellOptionList[gMartInfo.cursor]].func(taskIdConst);
}
else
{
- sBuySellQuitMenuActions[gMartBuyNoSellOptionList[gMartInfo.cursor]].func(local);
+ sBuySellQuitMenuActions[gMartBuyNoSellOptionList[gMartInfo.cursor]].func(taskIdConst);
}
}
else if (gMain.newKeys & B_BUTTON)
{
PlaySE(SE_SELECT);
- HandleShopMenuQuit(local);
+ Task_HandleShopMenuQuit(taskIdConst);
}
}
-void HandleShopMenuBuy(u8 taskId)
+void Task_HandleShopMenuBuy(u8 taskId)
{
gTasks[taskId].data[8] = (u32)BuyMenuDrawGraphics >> 16;
gTasks[taskId].data[9] = (u32)BuyMenuDrawGraphics;
@@ -164,7 +165,7 @@ void HandleShopMenuBuy(u8 taskId)
fade_screen(1, 0);
}
-void HandleShopMenuSell(u8 taskId)
+void Task_HandleShopMenuSell(u8 taskId)
{
gTasks[taskId].data[8] = (u32)ItemMenu_LoadSellMenu >> 16;
gTasks[taskId].data[9] = (u32)ItemMenu_LoadSellMenu;
@@ -172,7 +173,7 @@ void HandleShopMenuSell(u8 taskId)
fade_screen(1, 0);
}
-void HandleShopMenuQuit(u8 taskId)
+void Task_HandleShopMenuQuit(u8 taskId)
{
Menu_DestroyCursor();
Menu_EraseWindowRect(0, 0, 11, 8);
@@ -199,7 +200,7 @@ void ReturnToShopMenuAfterExitingSellMenu(u8 taskId)
DestroyTask(taskId);
}
-void Task_ExitSellMenu(u8 taskId)
+void Task_ReturnToMartMenu(u8 taskId)
{
if (sub_807D770() == 1)
{
@@ -210,21 +211,21 @@ void Task_ExitSellMenu(u8 taskId)
}
}
-void Shop_InitExitSellMenu(void)
+void Shop_FadeReturnToMartMenu(void)
{
pal_fill_black();
- CreateTask(Task_ExitSellMenu, 0x8);
+ CreateTask(Task_ReturnToMartMenu, 0x8);
}
void Shop_RunExitSellMenuTask(u8 taskId)
{
- Task_ExitSellMenu(taskId);
+ Task_ReturnToMartMenu(taskId);
}
// unused
void Shop_LoadExitSellMenuTask(u8 taskId)
{
- gTasks[taskId].func = Task_ExitSellMenu;
+ gTasks[taskId].func = Task_ReturnToMartMenu;
}
static void MainCB2(void)
@@ -286,10 +287,10 @@ void BuyMenuDrawGraphics(void)
gMartInfo.choicesAbove = 0;
Menu_EraseWindowRect(0, 0, 0x20, 0x20);
OpenMoneyWindow(gSaveBlock1.money, 0, 0);
- sub_80B3764(0, 7);
+ Shop_InitMenus(0, 7);
Shop_PrintItemDesc();
- sub_80B3270();
- CreateTask(sub_80B40E8, 0x8);
+ DrawFirstMartScrollIndicators();
+ CreateTask(Shop_DoCursorAction, 0x8);
sub_80B3240();
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0);
gPaletteFade.bufferTransferDisabled = 0;
@@ -305,7 +306,7 @@ void sub_80B3240(void)
LoadPalette(&colors[0], 0xD8, sizeof colors[0]);
}
-void sub_80B3270(void)
+void DrawFirstMartScrollIndicators(void)
{
ClearVerticalScrollIndicatorPalettes();
@@ -319,20 +320,19 @@ void sub_80B3270(void)
void Shop_TryDrawVerticalScrollIndicators(void)
{
- // TOP ARROW
if (gMartInfo.choicesAbove == 0)
SetVerticalScrollIndicators(TOP_ARROW, INVISIBLE);
else
SetVerticalScrollIndicators(TOP_ARROW, VISIBLE);
- // DOWN ARROW
if (gMartInfo.choicesAbove + 7 >= gMartInfo.itemCount)
SetVerticalScrollIndicators(BOTTOM_ARROW, INVISIBLE);
else
SetVerticalScrollIndicators(BOTTOM_ARROW, VISIBLE);
}
-void sub_80B32EC(u16 *array, s16 offset1, s16 offset2)
+// what is the point of this function? the tiles always get overwritten by BuyMenuDrawTextboxBG.
+void BuyMenuDrawTextboxBG_Old(u16 *array, s16 offset1, s16 offset2)
{
array[offset1 + offset2] = 0xC3E1;
array[offset1 + offset2 + 1] = 0xC3E1;
@@ -340,10 +340,11 @@ void sub_80B32EC(u16 *array, s16 offset1, s16 offset2)
void BuyMenuDrawMapMetatileLayer(u16 *array, s16 offset1, s16 offset2, u16 *array2)
{
- array[offset1 + offset2] = array2[0];
- array[offset1 + offset2 + 1] = array2[1];
- array[offset1 + offset2 + 32] = array2[2];
- array[offset1 + offset2 + 33] = array2[3];
+ // This function draws a whole 2x2 metatile.
+ array[offset1 + offset2] = array2[0]; // top left
+ array[offset1 + offset2 + 1] = array2[1]; // top right
+ array[offset1 + offset2 + 32] = array2[2]; // bottom left
+ array[offset1 + offset2 + 33] = array2[3]; // bottom right
}
void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s32 var4)
@@ -369,7 +370,8 @@ void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s32 var4)
}
}
-void sub_80B33D0(s16 var1, int var2, u16 *var3)
+// used to draw the border tiles around the viewport.
+void BuyMenuDrawMapPartialMetatile(s16 var1, int var2, u16 *var3)
{
s16 offset1 = var1 * 2;
s16 offset2 = (var2 * 0x40) + 0x40;
@@ -407,13 +409,13 @@ void Shop_DrawViewportTiles(void)
else
{
if (metatileId < 512)
- sub_80B33D0(x, y, (u16 *)gMapHeader.mapData->primaryTileset->metatiles + metatileId * 8);
+ BuyMenuDrawMapPartialMetatile(x, y, (u16 *)gMapHeader.mapData->primaryTileset->metatiles + metatileId * 8);
else
- sub_80B33D0(x, y, (u16 *)gMapHeader.mapData->secondaryTileset->metatiles + (metatileId - 512) * 8);
+ BuyMenuDrawMapPartialMetatile(x, y, (u16 *)gMapHeader.mapData->secondaryTileset->metatiles + (metatileId - 512) * 8);
}
if (y == 0 && x != 0 && x != 6)
- sub_80B32EC(gBGTilemapBuffers[1], x * 2, 64);
+ BuyMenuDrawTextboxBG_Old(gBGTilemapBuffers[1], x * 2, 64);
}
}
}
@@ -483,7 +485,7 @@ void Shop_AnimViewportObjects(void)
}
}
-void sub_80B3720(void)
+void BuyMenuDrawTextboxBG(void)
{
s16 i;
@@ -494,14 +496,15 @@ void sub_80B3720(void)
}
}
-void sub_80B3764(int var1, int var2)
+void Shop_InitMenus(int firstItemId, int lastItemId)
{
- sub_80B3720();
- Shop_DisplayPriceInList(var1, var2, 0);
+ BuyMenuDrawTextboxBG();
+ Shop_DisplayPriceInList(firstItemId, lastItemId, 0);
InitMenu(0, 0xE, 0x2, 0x8, gMartInfo.cursor, 0xF);
}
-void sub_80B379C(void)
+// after printing the item quantity and price, restore the textbox tiles before the Yes/No prompt.
+void BuyMenuDrawTextboxBG_Restore(void)
{
u16 i, j;
@@ -589,11 +592,11 @@ void Shop_DisplayDecorationPriceInList(u16 itemId, u8 var2, bool32 hasControlCod
}
}
-void Shop_DisplayPriceInList(int var1, int var2, bool32 hasControlCode)
+void Shop_DisplayPriceInList(int firstItemId, int lastItemId, bool32 hasControlCode)
{
u8 i;
- for (i = var1; i <= var2 && gMartInfo.choicesAbove + i < gMartInfo.itemCount; i++)
+ for (i = firstItemId; i <= lastItemId && gMartInfo.choicesAbove + i < gMartInfo.itemCount; i++)
{
if (gMartInfo.martType == MART_TYPE_0)
Shop_DisplayNormalPriceInList(gMartInfo.itemList[gMartInfo.choicesAbove + i], (i << 1) + 2, hasControlCode);
@@ -627,7 +630,7 @@ void Shop_PrintItemDescText(void)
}
}
-void sub_80B3AEC(u8 taskId)
+void Shop_DoPremierBallCheck(u8 taskId)
{
if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
{
@@ -635,32 +638,32 @@ void sub_80B3AEC(u8 taskId)
PlaySE(SE_SELECT);
if (gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor] == ITEM_POKE_BALL && gTasks[taskId].tItemCount >= 10 && AddBagItem(ITEM_PREMIER_BALL, 1) == TRUE)
- DisplayItemMessageOnField(taskId, gOtherText_FreePremierBall, Shop_ReturnToBuyMenu, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gOtherText_FreePremierBall, Task_ReturnToBuyMenu, 0xC3E1);
else
- Shop_ReturnToBuyMenu(taskId);
+ Task_ReturnToBuyMenu(taskId);
}
}
-void sub_80B3B80(u8 taskId)
+void Shop_DoItemTransaction(u8 taskId)
{
IncrementGameStat(0x26);
RemoveMoney(&gSaveBlock1.money, gMartTotalCost);
PlaySE(SE_REGI);
UpdateMoneyWindow(gSaveBlock1.money, 0, 0);
- gTasks[taskId].func = sub_80B3AEC;
+ gTasks[taskId].func = Shop_DoPremierBallCheck;
}
-void sub_80B3BD0(u8 taskId)
+void Shop_DoPricePrintAndReturnToBuyMenu(u8 taskId)
{
- Shop_DisplayPriceInList(gMartInfo.cursor, gMartInfo.cursor, 0); // same thing as above?
- Shop_ReturnToBuyMenu(taskId);
+ Shop_DisplayPriceInList(gMartInfo.cursor, gMartInfo.cursor, 0);
+ Task_ReturnToBuyMenu(taskId);
}
-void Shop_DoItemPurchase(u8 taskId)
+void Task_DoItemPurchase(u8 taskId)
{
Menu_EraseWindowRect(0x7, 0x8, 0xD, 0xD);
sub_80A3FA0(gBGTilemapBuffers[1], 8, 9, 4, 4, 0);
- sub_80B379C();
+ BuyMenuDrawTextboxBG_Restore();
Shop_DrawViewportTiles();
if (IsEnoughMoney(gSaveBlock1.money, gMartTotalCost))
@@ -669,30 +672,30 @@ void Shop_DoItemPurchase(u8 taskId)
{
if (AddBagItem(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gTasks[taskId].tItemCount))
{
- DisplayItemMessageOnField(taskId, gOtherText_HereYouGo, sub_80B3B80, 0xC3E1);
- sub_80B4470(taskId);
+ DisplayItemMessageOnField(taskId, gOtherText_HereYouGo, Shop_DoItemTransaction, 0xC3E1);
+ Task_UpdatePurchaseHistory(taskId);
}
else
- DisplayItemMessageOnField(taskId, gOtherText_NoRoomFor, sub_80B3BD0, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gOtherText_NoRoomFor, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1);
}
else // a normal mart is only type 0, so types 1 and 2 are decoration marts.
{
if (IsThereStorageSpaceForDecoration(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]))
{
if (gMartInfo.martType == MART_TYPE_1)
- DisplayItemMessageOnField(taskId, gOtherText_HereYouGo2, sub_80B3B80, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gOtherText_HereYouGo2, Shop_DoItemTransaction, 0xC3E1);
else
- DisplayItemMessageOnField(taskId, gOtherText_HereYouGo3, sub_80B3B80, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gOtherText_HereYouGo3, Shop_DoItemTransaction, 0xC3E1);
}
else
{
StringExpandPlaceholders(gStringVar4, gOtherText_SpaceForIsFull);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3BD0, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gStringVar4, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1);
}
}
}
else
- DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1);
}
void Shop_DoYesNoPurchase(u8 taskId)
@@ -702,17 +705,17 @@ void Shop_DoYesNoPurchase(u8 taskId)
DoYesNoFuncWithChoice(taskId, sShopPurchaseYesNoFuncs);
}
-void Shop_CancelItemPurchase(u8 taskId)
+void Task_CancelItemPurchase(u8 taskId)
{
Shop_DisplayPriceInList(gMartInfo.cursor, gMartInfo.cursor, 0);
Menu_EraseWindowRect(0x7, 0x8, 0xD, 0xD);
sub_80A3FA0(gBGTilemapBuffers[1], 0x8, 0x9, 0x4, 0x4, 0);
- Shop_ReturnToBuyMenu(taskId);
+ Task_ReturnToBuyMenu(taskId);
}
void Shop_PrintPrice(u8 taskId)
{
- if (sub_80A52C4(taskId, gMartInfo.curItemCount) == TRUE)
+ if (SellMenu_QuantityRoller(taskId, gMartInfo.curItemCount) == TRUE)
Shop_DisplayPriceInCheckoutWindow(taskId);
if (gMain.newKeys & A_BUTTON)
@@ -720,7 +723,7 @@ void Shop_PrintPrice(u8 taskId)
gMartTotalCost = (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)) * gTasks[taskId].tItemCount; // set total cost of your purchase.
Menu_EraseWindowRect(0, 0xA, 0xD, 0xD);
sub_80A3FA0(gBGTilemapBuffers[1], 0x1, 0xB, 0xC, 0x2, 0);
- sub_80B379C();
+ BuyMenuDrawTextboxBG_Restore();
Shop_DrawViewportTiles();
CopyItemName(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gStringVar1);
ConvertIntToDecimalStringN(gStringVar2, gTasks[taskId].tItemCount, 0, 0x2);
@@ -731,11 +734,12 @@ void Shop_PrintPrice(u8 taskId)
else if (gMain.newKeys & B_BUTTON)
{
Shop_DisplayPriceInList(gMartInfo.cursor, gMartInfo.cursor, 0);
- Shop_ReturnToBuyMenu(taskId);
+ Task_ReturnToBuyMenu(taskId);
}
}
-void sub_80B3EFC(u8 taskId)
+// set the item count in the mart info to the maximum allowed by the player's budget.
+void Shop_UpdateCurItemCountToMax(u8 taskId)
{
u16 var;
@@ -753,7 +757,7 @@ void sub_80B3EFC(u8 taskId)
}
#ifdef NONMATCHING
-void sub_80B3F88(void)
+void Shop_MoveItemListUp(void)
{
u16 *r1;
u16 *r2;
@@ -795,7 +799,7 @@ void sub_80B3F88(void)
}
#else
__attribute__((naked))
-void sub_80B3F88(void)
+void Shop_MoveItemListUp(void)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -890,7 +894,7 @@ _080B4038: .4byte 0xfffffc40\n\
#endif
#ifdef NONMATCHING
-void sub_80B403C(void)
+void Shop_MoveItemListDown(void)
{
u16 *r1;
u16 *r2;
@@ -934,7 +938,7 @@ void sub_80B403C(void)
}
#else
__attribute__((naked))
-void sub_80B403C(void)
+void Shop_MoveItemListDown(void)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -1027,7 +1031,7 @@ _080B40E4: .4byte 0x800000f0\n\
}
#endif
-void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
+void Shop_DoCursorAction(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -1040,7 +1044,7 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
PlaySE(SE_SELECT);
gMartInfo.choicesAbove--; // since cursor is at the top and there are choices above the top, scroll the menu up by updating choicesAbove.
- sub_80B3F88();
+ Shop_MoveItemListUp();
Shop_DisplayPriceInList(0, 0, 0);
Shop_PrintItemDescText();
Shop_TryDrawVerticalScrollIndicators();
@@ -1061,7 +1065,7 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
PlaySE(SE_SELECT);
gMartInfo.choicesAbove++;
- sub_80B403C();
+ Shop_MoveItemListDown();
Shop_DisplayPriceInList(7, 7, 0);
Shop_PrintItemDescText();
Shop_TryDrawVerticalScrollIndicators();
@@ -1091,13 +1095,13 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
gMartTotalCost = (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)); // set 1x price
if (!IsEnoughMoney(gSaveBlock1.money, gMartTotalCost))
{
- DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1); // tail merge
+ DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1); // tail merge
}
else // _080B42BA
{
CopyItemName(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gStringVar1);
StringExpandPlaceholders(gStringVar4, gOtherText_HowManyYouWant);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3EFC, 0xC3E1);
+ DisplayItemMessageOnField(taskId, gStringVar4, Shop_UpdateCurItemCountToMax, 0xC3E1);
}
}
else // _080B428C
@@ -1106,7 +1110,7 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
if (!IsEnoughMoney(gSaveBlock1.money, gMartTotalCost))
{
- DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1); // tail merge
+ DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1); // tail merge
}
else
{
@@ -1126,38 +1130,38 @@ void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
}
}
else
- sub_80B43F0(taskId);
+ Task_ExitBuyMenu(taskId);
}
else if (gMain.newKeys & B_BUTTON) // go back to buy/sell/exit menu
{
PlaySE(SE_SELECT);
- sub_80B43F0(taskId);
+ Task_ExitBuyMenu(taskId);
}
}
}
-void Shop_ReturnToBuyMenu(u8 taskId)
+void Task_ReturnToBuyMenu(u8 taskId)
{
Menu_EraseWindowRect(0, 0xE, 0x1D, 0x13);
Menu_EraseWindowRect(0, 0xA, 0xD, 0xD);
sub_80A3FA0(gBGTilemapBuffers[1], 0x1, 0xB, 0xC, 0x2, 0);
Shop_DrawViewportTiles();
- sub_80B3764(6, 7);
+ Shop_InitMenus(6, 7);
Shop_PrintItemDesc();
StartVerticalScrollIndicators(TOP_ARROW);
StartVerticalScrollIndicators(BOTTOM_ARROW);
Shop_TryDrawVerticalScrollIndicators();
- gTasks[taskId].func = sub_80B40E8;
+ gTasks[taskId].func = Shop_DoCursorAction;
}
-void sub_80B43F0(u8 taskId)
+void Task_ExitBuyMenu(u8 taskId)
{
- gFieldCallback = Shop_InitExitSellMenu;
+ gFieldCallback = Shop_FadeReturnToMartMenu;
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskId].func = Task_ExitBuyMenu;
+ gTasks[taskId].func = Task_ExitBuyMenuDoFade;
}
-void Task_ExitBuyMenu(u8 taskId)
+void Task_ExitBuyMenuDoFade(u8 taskId)
{
if (!gPaletteFade.active)
{
@@ -1168,7 +1172,8 @@ void Task_ExitBuyMenu(u8 taskId)
}
}
-void sub_80B4470(u8 taskId)
+// Task_UpdatePurchaseHistory
+void Task_UpdatePurchaseHistory(u8 taskId)
{
u16 i;
@@ -1222,128 +1227,3 @@ void CreateDecorationShop2Menu(u16 *itemList)
SetShopItemsForSale(itemList);
SetShopMenuCallback(EnableBothScriptContexts);
}
-
-void sub_80B45B4(u8 taskId, const s16 *list, u16 c)
-{
- s16 r5 = gTasks[taskId].data[4] - 1;
- s16 r3 = gTasks[taskId].data[5] - 1;
- s16 r4 = gTasks[taskId].data[1];
- s16 y;
- s16 x;
-
- if (gTasks[taskId].data[2] == 0)
- {
- for (y = 0; y < 3; y++)
- {
- for (x = 0; x < 3; x++)
- {
- s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
-
- if (list[r4] == metatileId)
- {
- if (r4 != 2)
- MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[r4 + 1]);
- else
- MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[0]);
- }
- }
- }
- }
- else
- {
- for (y = 0; y < 3; y++)
- {
- for (x = 0; x < 3; x++)
- {
- s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
-
- if (list[2 - r4] == metatileId)
- {
- if (r4 != 2)
- MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[1 - r4]);
- else
- MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[2]);
- }
- }
- }
- }
-}
-
-static const u16 gUnknown_083CC714[] = {0x284, 0x282, 0x280};
-static const u16 gUnknown_083CC71A[] = {0x285, 0x283, 0x281};
-static const u16 gUnknown_083CC720[] = {0x28C, 0x28A, 0x288};
-static const u16 gUnknown_083CC726[] = {0x28D, 0x28B, 0x289};
-static const u16 gUnknown_083CC72C[] = {0x2A0, 0x2A2, 0x2A4};
-static const u16 gUnknown_083CC732[] = {0x2A1, 0x2A3, 0x2A5};
-static const u16 gUnknown_083CC738[] = {0x2A8, 0x2AA, 0x2AC};
-
-void sub_80B4710(u8 taskId)
-{
- s16 *data = gTasks[taskId].data;
-
- data[3] = 1;
-
- switch (data[0])
- {
- case 0:
- sub_80B45B4(taskId, gUnknown_083CC714, 0);
- break;
- case 1:
- sub_80B45B4(taskId, gUnknown_083CC71A, 0);
- break;
- case 2:
- sub_80B45B4(taskId, gUnknown_083CC720, 0xC00);
- break;
- case 3:
- sub_80B45B4(taskId, gUnknown_083CC726, 0);
- break;
- case 4:
- sub_80B45B4(taskId, gUnknown_083CC72C, 0xC00);
- break;
- case 5:
- sub_80B45B4(taskId, gUnknown_083CC732, 0);
- break;
- case 6:
- sub_80B45B4(taskId, gUnknown_083CC738, 0);
- break;
- }
-
- data[0] = (data[0] + 1) & 7;
- if (!data[0])
- {
- DrawWholeMapView();
- data[1] = (data[1] + 1) % 3;
- data[3] = 0;
- }
-}
-
-u8 sub_80B47D8(u16 var)
-{
- u8 taskId = CreateTask(sub_80B4710, 0);
- s16 *data = gTasks[taskId].data;
-
- PlayerGetDestCoords(&data[4], &data[5]);
- data[0] = 0;
- data[1] = 0;
- data[2] = var;
- sub_80B4710(taskId);
- return taskId;
-}
-
-void sub_80B4824(u8 var)
-{
- gUnknown_02038731 = sub_80B47D8(var);
-}
-
-void sub_80B483C(void)
-{
- DestroyTask(gUnknown_02038731);
-}
-
-bool8 sub_80B4850(void)
-{
- if (gTasks[gUnknown_02038731].data[3] == 0 && gTasks[gUnknown_02038731].data[1] == 2)
- return FALSE;
- else
- return TRUE;
-}