summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2017-08-22 02:33:18 -0400
committerProjectRevoTPP <projectrevotpp@hotmail.com>2017-08-22 02:33:18 -0400
commit05c2f2e4fc7ad2fc98315e53a0b1adb7d4d4c0d1 (patch)
tree7c35a75bbe0dc3f65c2c03e94677e14c0602bbee
parent878b0d50996ba8be9d18a8c0df39b1f7f255033b (diff)
decompile up to sub_80B37F8
-rw-r--r--asm/shop.s193
-rw-r--r--src/shop.c121
2 files changed, 93 insertions, 221 deletions
diff --git a/asm/shop.s b/asm/shop.s
index edbbbdbad..4c284fc4e 100644
--- a/asm/shop.s
+++ b/asm/shop.s
@@ -6,199 +6,6 @@
.text
- thumb_func_start sub_80B3720
-sub_80B3720: @ 80B3720
- push {r4-r6,lr}
- movs r1, 0
- ldr r6, _080B3754 @ =gBGTilemapBuffers + 0x800
- ldr r5, _080B3758 @ =0x000003ff
- ldr r4, _080B375C @ =0x02018000
- ldr r0, _080B3760 @ =0x0000c3e0
- adds r3, r0, 0
-_080B372E:
- lsls r0, r1, 16
- asrs r2, r0, 16
- lsls r1, r2, 1
- adds r0, r1, r4
- ldrh r0, [r0]
- cmp r0, 0
- beq _080B3742
- adds r1, r6
- adds r0, r3
- strh r0, [r1]
-_080B3742:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- asrs r0, 16
- cmp r0, r5
- ble _080B372E
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3754: .4byte gBGTilemapBuffers + 0x800
-_080B3758: .4byte 0x000003ff
-_080B375C: .4byte 0x02018000
-_080B3760: .4byte 0x0000c3e0
- thumb_func_end sub_80B3720
-
- thumb_func_start sub_80B3764
-sub_80B3764: @ 80B3764
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r1, 0
- bl sub_80B3720
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0
- bl sub_80B39D0
- ldr r0, _080B3798 @ =gUnknown_03000708
- ldrb r0, [r0, 0x9]
- str r0, [sp]
- movs r0, 0xF
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0xE
- movs r2, 0x2
- movs r3, 0x8
- bl InitMenu
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3798: .4byte gUnknown_03000708
- thumb_func_end sub_80B3764
-
- thumb_func_start sub_80B379C
-sub_80B379C: @ 80B379C
- push {r4-r7,lr}
- movs r1, 0
- ldr r0, _080B37E0 @ =gBGTilemapBuffers + 0x800
- mov r12, r0
- ldr r7, _080B37E4 @ =0x02018300
- ldr r0, _080B37E8 @ =0x0000c3e0
- adds r6, r0, 0
-_080B37AA:
- movs r2, 0
- adds r0, r1, 0
- adds r0, 0xC
- adds r5, r1, 0x1
- lsls r4, r0, 5
- lsls r3, r1, 5
-_080B37B6:
- adds r1, r4, r2
- lsls r1, 1
- add r1, r12
- adds r0, r3, r2
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- adds r0, r6, r0
- strh r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0xD
- bls _080B37B6
- lsls r0, r5, 16
- lsrs r1, r0, 16
- cmp r1, 0x7
- bls _080B37AA
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B37E0: .4byte gBGTilemapBuffers + 0x800
-_080B37E4: .4byte 0x02018300
-_080B37E8: .4byte 0x0000c3e0
- thumb_func_end sub_80B379C
-
- thumb_func_start sub_80B37EC
-sub_80B37EC: @ 80B37EC
- push {lr}
- bl sub_80B3A70
- pop {r0}
- bx r0
- thumb_func_end sub_80B37EC
-
- thumb_func_start sub_80B37F8
-sub_80B37F8: @ 80B37F8
- push {r4-r6,lr}
- sub sp, 0x8
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- ldr r1, _080B3884 @ =gUnknown_03000708
- ldrb r0, [r1, 0xB]
- ldrb r2, [r1, 0x9]
- adds r0, r2
- ldr r1, [r1, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- bl ItemId_GetPrice
- adds r4, r0, 0
- movs r0, 0x1
- bl GetPriceReduction
- lsls r4, 16
- lsrs r4, 16
- lsls r0, 24
- lsrs r0, 24
- asrs r4, r0
- ldr r0, _080B3888 @ =gTasks
- lsls r5, r6, 2
- adds r5, r6
- lsls r5, 3
- adds r5, r0
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- muls r0, r4
- movs r1, 0x6
- movs r2, 0x6
- movs r3, 0xB
- bl sub_80B7A94
- ldr r0, _080B388C @ =gStringVar1
- movs r1, 0xFC
- strb r1, [r0]
- movs r1, 0x14
- strb r1, [r0, 0x1]
- movs r1, 0x6
- strb r1, [r0, 0x2]
- adds r0, 0x3
- movs r2, 0xA
- ldrsh r1, [r5, r2]
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r0, _080B3890 @ =gOtherText_xString1
- movs r1, 0x1
- movs r2, 0xB
- bl MenuPrint
- ldr r0, _080B3894 @ =gBGTilemapBuffers + 0x800
- movs r1, 0x2
- str r1, [sp]
- ldr r1, _080B3898 @ =0x0000c3e1
- str r1, [sp, 0x4]
- movs r1, 0x1
- movs r2, 0xB
- movs r3, 0xC
- bl sub_80A3FA0
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3884: .4byte gUnknown_03000708
-_080B3888: .4byte gTasks
-_080B388C: .4byte gStringVar1
-_080B3890: .4byte gOtherText_xString1
-_080B3894: .4byte gBGTilemapBuffers + 0x800
-_080B3898: .4byte 0x0000c3e1
- thumb_func_end sub_80B37F8
-
thumb_func_start sub_80B389C
sub_80B389C: @ 80B389C
push {r4-r7,lr}
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);
+}