summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/shop.c121
1 files changed, 93 insertions, 28 deletions
diff --git a/src/shop.c b/src/shop.c
index 06ec45292..aca48cc2e 100644
--- a/src/shop.c
+++ b/src/shop.c
@@ -19,13 +19,17 @@
#include "field_map_obj.h"
#include "field_player_avatar.h"
#include "fieldmap.h"
+#include "item.h"
+
+extern void sub_80B39D0(int, int, int);
+extern void sub_80B3A70(void);
struct UnknownShopStruct
{
/* 0x0 */ void (* callback) (void);
/* 0x4 */ u16 *itemList;
/* 0x8 */ u8 itemCount;
- /* 0x9 */ u8 unk9;
+ /* 0x9 */ u8 cursor;
/* 0xA */ u8 unkA;
/* 0xB */ u8 unkB;
/* 0xC */ bool8 unkC;
@@ -35,10 +39,26 @@ struct UnknownShopStruct
extern struct UnknownShopStruct gUnknown_03000708;
extern struct MenuAction gUnknown_083CC6D0[];
+extern u8 ewram[];
+
extern u8 gUnknown_083CC6E8[];
extern u8 gUnknown_083CC6EB[];
extern u8 gBuyMenuFrame_Gfx[];
+#define ewram18000 ((u16 *)(ewram + 0x18000))
+#define ewram18300 ((u16 *)(ewram + 0x18300))
+
+// shop view window NPC info enum
+enum
+{
+ MAP_OBJ_ID,
+ X_COORD,
+ Y_COORD,
+ ANIM_NUM
+};
+
+extern s16 gUnknown_020386A4[][4]; // game freak barely uses 2d arrays wtf?
+
extern u16 gBuyMenuFrame_Tilemap[];
extern u16 gMenuMoneyPal[16];
extern u16 gUnknown_083CC710[2];
@@ -47,7 +67,7 @@ u8 CreateShopMenu(bool8 var)
{
ScriptContext2_Enable();
gUnknown_03000708.unkC = var;
- gUnknown_03000708.unk9 = 0;
+ gUnknown_03000708.cursor = 0;
if(var == FALSE)
{
@@ -89,35 +109,35 @@ void sub_80B2E38(u8 var)
{
const u8 local = var;
- if(gMain.newAndRepeatedKeys & 0x40)
+ if(gMain.newAndRepeatedKeys & DPAD_UP)
{
- if(gUnknown_03000708.unk9)
+ if(gUnknown_03000708.cursor) // can move cursor up?
{
PlaySE(0x5);
- gUnknown_03000708.unk9 = MoveMenuCursor(-1);
+ gUnknown_03000708.cursor = MoveMenuCursor(-1);
}
}
- else if(gMain.newAndRepeatedKeys & 0x80)
+ else if(gMain.newAndRepeatedKeys & DPAD_DOWN)
{
- if(gUnknown_03000708.unk9 != gUnknown_03000708.unkA)
+ if(gUnknown_03000708.cursor != gUnknown_03000708.unkA) // can move cursor down?
{
PlaySE(0x5);
- gUnknown_03000708.unk9 = MoveMenuCursor(1);
+ gUnknown_03000708.cursor = MoveMenuCursor(1);
}
}
- else if (gMain.newKeys & 1)
+ else if (gMain.newKeys & A_BUTTON)
{
PlaySE(0x5);
if(!gUnknown_03000708.unkC)
{
- gUnknown_083CC6D0[gUnknown_083CC6E8[gUnknown_03000708.unk9]].func(local);
+ gUnknown_083CC6D0[gUnknown_083CC6E8[gUnknown_03000708.cursor]].func(local);
}
else
{
- gUnknown_083CC6D0[gUnknown_083CC6EB[gUnknown_03000708.unk9]].func(local);
+ gUnknown_083CC6D0[gUnknown_083CC6EB[gUnknown_03000708.cursor]].func(local);
}
}
- else if(gMain.newKeys & 2)
+ else if(gMain.newKeys & B_BUTTON)
{
PlaySE(0x5);
HandleShopMenuQuit(local);
@@ -256,7 +276,7 @@ void BuyMenuDrawGraphics(void)
SetUpWindowConfig(&gWindowConfig_81E6DFC);
InitMenuWindow(&gWindowConfig_81E6DFC);
BuyMenuDrawMapGraphics();
- gUnknown_03000708.unk9 = zero;
+ gUnknown_03000708.cursor = zero;
gUnknown_03000708.unkB = zero2;
MenuZeroFillWindowRect(0, 0, 0x20, 0x20);
sub_80B7C14(gSaveBlock1.money, 0, 0);
@@ -401,8 +421,6 @@ void BuyMenuDrawMapGraphics(void)
sub_80B3420();
}
-extern s16 gUnknown_020386A4[][4];
-
void sub_80B356C(void)
{
s16 facingX;
@@ -415,7 +433,7 @@ void sub_80B356C(void)
GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY);
playerHeight = PlayerGetZCoord();
for (y = 0; y < 16; y++)
- gUnknown_020386A4[y][0] = 16;
+ gUnknown_020386A4[y][MAP_OBJ_ID] = 16;
for (y = 0; y < 5; y++)
{
for (x = 0; x < 7; x++)
@@ -424,17 +442,17 @@ void sub_80B356C(void)
if (mapObjId != 16)
{
- gUnknown_020386A4[r8][0] = mapObjId;
- gUnknown_020386A4[r8][1] = x;
- gUnknown_020386A4[r8][2] = y;
+ gUnknown_020386A4[r8][MAP_OBJ_ID] = mapObjId;
+ gUnknown_020386A4[r8][X_COORD] = x;
+ gUnknown_020386A4[r8][Y_COORD] = y;
if (gMapObjects[mapObjId].mapobj_unk_18 == 1)
- gUnknown_020386A4[r8][3] = 0;
+ gUnknown_020386A4[r8][ANIM_NUM] = 0;
if (gMapObjects[mapObjId].mapobj_unk_18 == 2)
- gUnknown_020386A4[r8][3] = 1;
+ gUnknown_020386A4[r8][ANIM_NUM] = 1;
if (gMapObjects[mapObjId].mapobj_unk_18 == 3)
- gUnknown_020386A4[r8][3] = 2;
+ gUnknown_020386A4[r8][ANIM_NUM] = 2;
if (gMapObjects[mapObjId].mapobj_unk_18 == 4)
- gUnknown_020386A4[r8][3] = 3;
+ gUnknown_020386A4[r8][ANIM_NUM] = 3;
r8++;
}
}
@@ -447,15 +465,62 @@ void sub_80B368C(void)
for(i = 0; i < 16; i++) // max objects?
{
- if(gUnknown_020386A4[i][0] == 16)
+ if(gUnknown_020386A4[i][MAP_OBJ_ID] == 16)
continue;
StartSpriteAnim(&gSprites[AddPseudoFieldObject(
- gMapObjects[gUnknown_020386A4[i][0]].graphicsId,
+ gMapObjects[gUnknown_020386A4[i][MAP_OBJ_ID]].graphicsId,
SpriteCallbackDummy,
- (u16)gUnknown_020386A4[i][1] * 16 + 8,
- (u16)gUnknown_020386A4[i][2] * 16 + 32,
+ (u16)gUnknown_020386A4[i][X_COORD] * 16 + 8,
+ (u16)gUnknown_020386A4[i][Y_COORD] * 16 + 32,
2)],
- gUnknown_020386A4[i][3]);
+ gUnknown_020386A4[i][ANIM_NUM]);
+ }
+}
+
+void sub_80B3720(void)
+{
+ s16 i;
+
+ for (i = 0; i < 0x400; i++)
+ {
+ if (ewram18000[i] != 0)
+ gBGTilemapBuffers[1][i] = ewram18000[i] + 0xC3E0;
}
}
+
+void sub_80B3764(int var1, int var2)
+{
+ sub_80B3720();
+ sub_80B39D0(var1, var2, 0);
+ InitMenu(0, 0xE, 0x2, 0x8, gUnknown_03000708.cursor, 0xF);
+}
+
+void sub_80B379C(void)
+{
+ u16 i, j;
+
+ for(i = 0; i < 8; i++)
+ for(j = 0; j < 14; j++)
+ gBGTilemapBuffers[1][32 * (i + 12) + j] = ewram18300[32 * i + j] + 0xC3E0;
+}
+
+void sub_80B37EC(void)
+{
+ sub_80B3A70();
+}
+
+void sub_80B37F8(u8 taskId)
+{
+ u16 itemListIndex = gUnknown_03000708.unkB + gUnknown_03000708.cursor;
+ u16 itemId = *(gUnknown_03000708.itemList + itemListIndex);
+ u32 price = (ItemId_GetPrice(itemId) >> GetPriceReduction(1));
+
+ sub_80B7A94(gTasks[taskId].data[1] * price, 6, 6, 11);
+ gStringVar1[0] = EXT_CTRL_CODE_BEGIN;
+ gStringVar1[1] = 0x14;
+ gStringVar1[2] = 0x6;
+ ConvertIntToDecimalStringN(&gStringVar1[3], gTasks[taskId].data[1], 1, 2);
+ MenuPrint(gOtherText_xString1, 1, 11);
+ sub_80A3FA0(gBGTilemapBuffers[1], 1, 11, 12, 2, 0xC3E1);
+}