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 | |
parent | 83134f6dda6832e3fb4551a9fd220f054627fe79 (diff) |
decompile more of shop.c (#237)
* start decompiling shop.c
* decompile sub_80B30AC and BuyMenuDrawGraphics
* decompile more of shop.c
* formatting
-rw-r--r-- | asm/shop.s | 378 | ||||
-rw-r--r-- | src/shop.c | 177 |
2 files changed, 168 insertions, 387 deletions
diff --git a/asm/shop.s b/asm/shop.s index b23b07003..1d0863469 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -6,384 +6,6 @@ .text - thumb_func_start sub_80B30AC -sub_80B30AC: @ 80B30AC - push {r4,lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - ldr r3, _080B30F0 @ =gBGTilemapBuffers + 0x800 - ldr r1, _080B30F4 @ =0x0600e800 - ldr r0, _080B30F8 @ =0x040000d4 - str r3, [r0] - str r1, [r0, 0x4] - ldr r4, _080B30FC @ =0x80000400 - str r4, [r0, 0x8] - ldr r1, [r0, 0x8] - movs r2, 0x80 - lsls r2, 4 - adds r1, r3, r2 - ldr r2, _080B3100 @ =0x0600e000 - str r1, [r0] - str r2, [r0, 0x4] - str r4, [r0, 0x8] - ldr r1, [r0, 0x8] - movs r1, 0x80 - lsls r1, 5 - adds r3, r1 - ldr r1, _080B3104 @ =0x0600f000 - str r3, [r0] - str r1, [r0, 0x4] - str r4, [r0, 0x8] - ldr r0, [r0, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B30F0: .4byte gBGTilemapBuffers + 0x800 -_080B30F4: .4byte 0x0600e800 -_080B30F8: .4byte 0x040000d4 -_080B30FC: .4byte 0x80000400 -_080B3100: .4byte 0x0600e000 -_080B3104: .4byte 0x0600f000 - thumb_func_end sub_80B30AC - - thumb_func_start BuyMenuDrawGraphics -BuyMenuDrawGraphics: @ 80B3108 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x8 - bl sub_80F9438 - bl remove_some_task - ldr r0, _080B3204 @ =REG_BG1HOFS - movs r5, 0 - strh r5, [r0] - adds r0, 0x2 - strh r5, [r0] - adds r0, 0x2 - strh r5, [r0] - adds r0, 0x2 - strh r5, [r0] - adds r0, 0x2 - strh r5, [r0] - adds r0, 0x2 - strh r5, [r0] - ldr r0, _080B3208 @ =gPaletteFade - mov r8, r0 - ldrb r0, [r0, 0x8] - movs r1, 0x80 - orrs r0, r1 - mov r1, r8 - strb r0, [r1, 0x8] - movs r1, 0xE0 - lsls r1, 19 - movs r6, 0 - str r6, [sp, 0x4] - ldr r0, _080B320C @ =0x040000d4 - add r2, sp, 0x4 - str r2, [r0] - str r1, [r0, 0x4] - ldr r1, _080B3210 @ =0x85000100 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - ldr r0, _080B3214 @ =gBuyMenuFrame_Gfx - ldr r1, _080B3218 @ =0x06007c00 - bl LZDecompressVram - ldr r0, _080B321C @ =gBuyMenuFrame_Tilemap - ldr r1, _080B3220 @ =0x02018000 - bl sub_800D238 - ldr r0, _080B3224 @ =gMenuMoneyPal - movs r1, 0xC0 - movs r2, 0x20 - bl LoadCompressedPalette - bl FreeAllSpritePalettes - bl ResetPaletteFade - bl ResetSpriteData - bl ResetTasks - ldr r4, _080B3228 @ =gWindowConfig_81E6DFC - adds r0, r4, 0 - bl SetUpWindowConfig - adds r0, r4, 0 - bl InitMenuWindow - bl BuyMenuDrawMapGraphics - ldr r0, _080B322C @ =gUnknown_03000708 - strb r6, [r0, 0x9] - strb r5, [r0, 0xB] - movs r0, 0 - movs r1, 0 - movs r2, 0x20 - movs r3, 0x20 - bl MenuZeroFillWindowRect - ldr r0, _080B3230 @ =gSaveBlock1 - movs r1, 0x92 - lsls r1, 3 - adds r0, r1 - ldr r0, [r0] - movs r1, 0 - movs r2, 0 - bl sub_80B7C14 - movs r0, 0 - movs r1, 0x7 - bl sub_80B3764 - bl sub_80B37EC - bl sub_80B3270 - ldr r0, _080B3234 @ =sub_80B40E8 - movs r1, 0x8 - bl CreateTask - bl sub_80B3240 - movs r0, 0x1 - negs r0, r0 - str r6, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - mov r2, r8 - ldrb r1, [r2, 0x8] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2, 0x8] - ldr r0, _080B3238 @ =sub_80B30AC - bl SetVBlankCallback - ldr r0, _080B323C @ =sub_80B3094 - bl SetMainCallback2 - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B3204: .4byte REG_BG1HOFS -_080B3208: .4byte gPaletteFade -_080B320C: .4byte 0x040000d4 -_080B3210: .4byte 0x85000100 -_080B3214: .4byte gBuyMenuFrame_Gfx -_080B3218: .4byte 0x06007c00 -_080B321C: .4byte gBuyMenuFrame_Tilemap -_080B3220: .4byte 0x02018000 -_080B3224: .4byte gMenuMoneyPal -_080B3228: .4byte gWindowConfig_81E6DFC -_080B322C: .4byte gUnknown_03000708 -_080B3230: .4byte gSaveBlock1 -_080B3234: .4byte sub_80B40E8 -_080B3238: .4byte sub_80B30AC -_080B323C: .4byte sub_80B3094 - thumb_func_end BuyMenuDrawGraphics - - thumb_func_start sub_80B3240 -sub_80B3240: @ 80B3240 - push {lr} - sub sp, 0x4 - ldr r1, _080B326C @ =gUnknown_083CC710 - mov r0, sp - movs r2, 0x4 - bl memcpy - mov r0, sp - adds r0, 0x2 - movs r1, 0xD1 - movs r2, 0x2 - bl LoadPalette - mov r0, sp - movs r1, 0xD8 - movs r2, 0x2 - bl LoadPalette - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080B326C: .4byte gUnknown_083CC710 - thumb_func_end sub_80B3240 - - thumb_func_start sub_80B3270 -sub_80B3270: @ 80B3270 - push {lr} - bl sub_80F944C - ldr r0, _080B32A0 @ =gUnknown_03000708 - ldrb r0, [r0, 0x8] - cmp r0, 0x7 - bls _080B329A - movs r0, 0 - movs r1, 0xAC - movs r2, 0xC - bl CreateVerticalScrollIndicators - movs r0, 0x1 - movs r1, 0xAC - movs r2, 0x94 - bl CreateVerticalScrollIndicators - movs r0, 0 - movs r1, 0x1 - bl sub_80F979C -_080B329A: - pop {r0} - bx r0 - .align 2, 0 -_080B32A0: .4byte gUnknown_03000708 - thumb_func_end sub_80B3270 - - thumb_func_start sub_80B32A4 -sub_80B32A4: @ 80B32A4 - push {lr} - ldr r0, _080B32B8 @ =gUnknown_03000708 - ldrb r0, [r0, 0xB] - cmp r0, 0 - bne _080B32BC - movs r0, 0 - movs r1, 0x1 - bl sub_80F979C - b _080B32C4 - .align 2, 0 -_080B32B8: .4byte gUnknown_03000708 -_080B32BC: - movs r0, 0 - movs r1, 0 - bl sub_80F979C -_080B32C4: - ldr r1, _080B32DC @ =gUnknown_03000708 - ldrb r0, [r1, 0xB] - adds r0, 0x7 - ldrb r1, [r1, 0x8] - cmp r0, r1 - blt _080B32E0 - movs r0, 0x1 - movs r1, 0x1 - bl sub_80F979C - b _080B32E8 - .align 2, 0 -_080B32DC: .4byte gUnknown_03000708 -_080B32E0: - movs r0, 0x1 - movs r1, 0 - bl sub_80F979C -_080B32E8: - pop {r0} - bx r0 - thumb_func_end sub_80B32A4 - - thumb_func_start sub_80B32EC -sub_80B32EC: @ 80B32EC - lsls r1, 16 - asrs r1, 16 - lsls r2, 16 - asrs r2, 16 - adds r1, r2 - lsls r1, 1 - adds r1, r0 - ldr r2, _080B3304 @ =0x0000c3e1 - adds r0, r2, 0 - strh r0, [r1] - strh r0, [r1, 0x2] - bx lr - .align 2, 0 -_080B3304: .4byte 0x0000c3e1 - thumb_func_end sub_80B32EC - - thumb_func_start BuyMenuDrawMapMetatileLayer -BuyMenuDrawMapMetatileLayer: @ 80B3308 - lsls r1, 16 - asrs r1, 16 - lsls r2, 16 - asrs r2, 16 - adds r1, r2 - lsls r1, 1 - adds r1, r0 - ldrh r0, [r3] - strh r0, [r1] - ldrh r0, [r3, 0x2] - strh r0, [r1, 0x2] - adds r2, r1, 0 - adds r2, 0x40 - ldrh r0, [r3, 0x4] - strh r0, [r2] - adds r1, 0x42 - ldrh r0, [r3, 0x6] - strh r0, [r1] - bx lr - thumb_func_end BuyMenuDrawMapMetatileLayer - - thumb_func_start BuyMenuDrawMapMetatile -BuyMenuDrawMapMetatile: @ 80B3330 - push {r4-r7,lr} - adds r7, r2, 0 - lsls r3, 24 - lsrs r3, 24 - adds r2, r3, 0 - lsls r0, 17 - lsrs r0, 16 - lsls r1, 22 - movs r4, 0x80 - lsls r4, 15 - adds r1, r4 - lsrs r1, 16 - cmp r3, 0x1 - beq _080B3364 - cmp r3, 0x1 - bgt _080B3356 - cmp r3, 0 - beq _080B335C - b _080B33C0 -_080B3356: - cmp r2, 0x2 - beq _080B3398 - b _080B33C0 -_080B335C: - ldr r5, _080B3360 @ =gBGTilemapBuffers + 0x1000 - b _080B3366 - .align 2, 0 -_080B3360: .4byte gBGTilemapBuffers + 0x1000 -_080B3364: - ldr r5, _080B3390 @ =gBGTilemapBuffers + 0x1800 -_080B3366: - lsls r6, r0, 16 - asrs r6, 16 - lsls r4, r1, 16 - asrs r4, 16 - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r4, 0 - adds r3, r7, 0 - bl BuyMenuDrawMapMetatileLayer - ldr r0, _080B3394 @ =0xfffff800 - adds r5, r0 - adds r3, r7, 0 - adds r3, 0x8 - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r4, 0 - bl BuyMenuDrawMapMetatileLayer - b _080B33C0 - .align 2, 0 -_080B3390: .4byte gBGTilemapBuffers + 0x1800 -_080B3394: .4byte 0xfffff800 -_080B3398: - ldr r5, _080B33C8 @ =gBGTilemapBuffers + 0x1800 - lsls r6, r0, 16 - asrs r6, 16 - lsls r4, r1, 16 - asrs r4, 16 - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r4, 0 - adds r3, r7, 0 - bl BuyMenuDrawMapMetatileLayer - ldr r0, _080B33CC @ =0xfffff000 - adds r5, r0 - adds r3, r7, 0 - adds r3, 0x8 - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r4, 0 - bl BuyMenuDrawMapMetatileLayer -_080B33C0: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B33C8: .4byte gBGTilemapBuffers + 0x1800 -_080B33CC: .4byte 0xfffff000 - thumb_func_end BuyMenuDrawMapMetatile - thumb_func_start sub_80B33D0 sub_80B33D0: @ 80B33D0 push {r4-r6,lr} 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; + } +} |