summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/shop.c177
1 files changed, 168 insertions, 9 deletions
diff --git a/src/shop.c b/src/shop.c
index bab67daba..5148ddcca 100644
--- a/src/shop.c
+++ b/src/shop.c
@@ -7,14 +7,9 @@
#include "weather.h"
#include "palette.h"
#include "sprite.h"
-
-extern void sub_80B2FA0(u8);
-extern void BuyMenuDrawGraphics(void);
-extern void sub_80A6300(void);
-extern void sub_80BE3BC(void);
-extern void DisplayItemMessageOnField(u8, u8*, TaskFunc, u16);
-extern u8 sub_807D770(void);
-extern void pal_fill_black(void);
+#include "asm.h"
+#include "decompress.h"
+#include "money.h"
struct UnknownShopStruct
{
@@ -23,7 +18,7 @@ struct UnknownShopStruct
/* 0x8 */ u8 itemCount;
/* 0x9 */ u8 unk9;
/* 0xA */ u8 unkA;
- u8 unkB;
+ /* 0xB */ u8 unkB;
/* 0xC */ bool8 unkC;
// unknown size
};
@@ -35,9 +30,31 @@ extern u8 gUnknown_083CC6E8[];
extern u8 gUnknown_083CC6EB[];
extern u8 gOtherText_CanIHelpYou[];
extern u8 gOtherText_AnythingElse[];
+extern u8 gBuyMenuFrame_Gfx[];
+
+extern u16 gBuyMenuFrame_Tilemap[];
+extern u16 gMenuMoneyPal[16];
+extern u16 gUnknown_083CC710[2];
+
+extern void sub_80A6300(void);
+extern void sub_80BE3BC(void);
+extern void DisplayItemMessageOnField(u8, u8*, TaskFunc, u16);
+extern u8 sub_807D770(void);
+extern void pal_fill_black(void);
+extern void sub_80B3764(int, int);
+extern void sub_80B37EC(void);
+extern void sub_80B40E8(u8);
+extern void BuyMenuDrawMapGraphics(void);
+extern void sub_80F944C(void);
+extern void CreateVerticalScrollIndicators(u32, u32, u32); // unknown args
+extern void sub_80F979C(u32, u32); // unknown args
void sub_80B2E38(u8);
void HandleShopMenuQuit(u8);
+void sub_80B2FA0(u8);
+void BuyMenuDrawGraphics(void);
+void sub_80B3240(void);
+void sub_80B3270(void);
u8 CreateShopMenu(bool8 var)
{
@@ -197,3 +214,145 @@ void sub_80B3094(void)
RunTasks();
UpdatePaletteFade();
}
+
+void sub_80B30AC(void)
+{
+ void *addr;
+ void *addr2;
+ void *addr3;
+ u16 *tempArr;
+ u16 *tempArr2;
+ u16 *tempArr3;
+
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+
+ // temp vars needed to match for some dumb reason
+ tempArr = gBGTilemapBuffers[1];
+ addr = (void *)(VRAM + 0xE800);
+ DmaCopy16(3, tempArr, addr, 0x800);
+ tempArr2 = gBGTilemapBuffers[2];
+ addr2 = (void *)(VRAM + 0xE000);
+ DmaCopy16(3, tempArr2, addr2, 0x800);
+ tempArr3 = gBGTilemapBuffers[3];
+ addr3 = (void *)(VRAM + 0xF000);
+ DmaCopy16(3, tempArr3, addr3, 0x800);
+}
+
+// this function is fugly. pls fix
+void BuyMenuDrawGraphics(void)
+{
+ void *addr;
+ register u16 zero2 asm("r5");
+
+ sub_80F9438();
+ remove_some_task();
+ REG_BG1HOFS = (zero2 = 0);
+ REG_BG1VOFS = zero2;
+ REG_BG2HOFS = zero2;
+ REG_BG2VOFS = zero2;
+ REG_BG3HOFS = zero2;
+ REG_BG3VOFS = zero2;
+ gPaletteFade.bufferTransferDisabled = 1;
+ addr = (void*)OAM;
+ {
+ register const u32 zero asm("r6") = 0;
+ DmaFill32(3, zero, addr, OAM_SIZE);
+ LZDecompressVram(gBuyMenuFrame_Gfx, (void*)(VRAM + 0x7C00));
+ sub_800D238(gBuyMenuFrame_Tilemap, (void *)0x02018000);
+ LoadCompressedPalette(gMenuMoneyPal, 0xC0, sizeof(gMenuMoneyPal));
+ FreeAllSpritePalettes();
+ ResetPaletteFade();
+ ResetSpriteData();
+ ResetTasks();
+ SetUpWindowConfig(&gWindowConfig_81E6DFC);
+ InitMenuWindow(&gWindowConfig_81E6DFC);
+ BuyMenuDrawMapGraphics();
+ gUnknown_03000708.unk9 = zero;
+ gUnknown_03000708.unkB = zero2;
+ MenuZeroFillWindowRect(0, 0, 0x20, 0x20);
+ sub_80B7C14(gSaveBlock1.money, 0, 0);
+ sub_80B3764(0, 7);
+ sub_80B37EC();
+ sub_80B3270();
+ CreateTask(sub_80B40E8, 0x8);
+ sub_80B3240();
+ asm("":::"r4"); // what??
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, zero);
+ gPaletteFade.bufferTransferDisabled = 0;
+ SetVBlankCallback(sub_80B30AC);
+ SetMainCallback2(sub_80B3094);
+ }
+}
+
+void sub_80B3240(void)
+{
+ u16 tempArr[2];
+
+ memcpy(tempArr, gUnknown_083CC710, sizeof(tempArr));
+ LoadPalette(&tempArr[1], 0xD1, 2);
+ LoadPalette(&tempArr[0], 0xD8, 2);
+}
+
+void sub_80B3270(void)
+{
+ sub_80F944C();
+
+ if(gUnknown_03000708.itemCount > 7)
+ {
+ CreateVerticalScrollIndicators(0, 172, 12);
+ CreateVerticalScrollIndicators(1, 172, 148);
+ sub_80F979C(0, 1);
+ }
+}
+
+void sub_80B32A4(void)
+{
+ if(gUnknown_03000708.unkB == 0)
+ sub_80F979C(0, 1);
+ else
+ sub_80F979C(0, 0);
+
+ if(gUnknown_03000708.unkB + 7 >= gUnknown_03000708.itemCount)
+ sub_80F979C(1, 1);
+ else
+ sub_80F979C(1, 0);
+}
+
+void sub_80B32EC(u16 *array, s16 offset1, s16 offset2)
+{
+ array[offset1 + offset2] = 0xC3E1;
+ array[offset1 + offset2 + 1] = 0xC3E1;
+}
+
+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];
+}
+
+void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s8 var4)
+{
+ u8 tempVar4 = var4;
+ s16 offset1 = var1 * 2;
+ s16 offset2 = (var2 * 0x40) + 0x40;
+
+ switch(tempVar4)
+ {
+ case 0: // _080B335C
+ BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3);
+ BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[1], offset1, offset2, var3 + 4);
+ break;
+ case 1: // _080B3364
+ BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[3], offset1, offset2, var3);
+ BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3 + 4);
+ break;
+ case 2: // _080B3398
+ BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[3], offset1, offset2, var3);
+ BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[1], offset1, offset2, var3 + 4);
+ break;
+ }
+}