diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2017-02-24 14:15:05 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-02-24 11:15:05 -0800 |
commit | 81099d83683a3ac8cdddf587877b7c46239dba39 (patch) | |
tree | a490b9fe8e19558cf7d06a3d8fc48cef15d618e1 /src | |
parent | 83134f6dda6832e3fb4551a9fd220f054627fe79 (diff) |
decompile more of shop.c (#237)
* start decompiling shop.c
* decompile sub_80B30AC and BuyMenuDrawGraphics
* decompile more of shop.c
* formatting
Diffstat (limited to 'src')
-rw-r--r-- | src/shop.c | 177 |
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; + } +} |