summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/shop.s378
-rw-r--r--src/shop.c177
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;
+ }
+}