summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/shop.c368
1 files changed, 368 insertions, 0 deletions
diff --git a/src/shop.c b/src/shop.c
index 5cc1f276e..b832b5a26 100644
--- a/src/shop.c
+++ b/src/shop.c
@@ -16,6 +16,7 @@
#include "task.h"
#include "tv.h"
#include "unknown_task.h"
+#include "field_map_obj.h"
struct UnknownShopStruct
{
@@ -349,3 +350,370 @@ void sub_80B33D0(s16 var1, int var2, u16 *var3)
BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[3], offset1, offset2, var3);
BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3 + 4);
}
+
+// no. for loop too hard.
+__attribute__((naked))
+void sub_80B3420() // dont know args
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x4\n\
+ mov r4, sp\n\
+ adds r4, 0x2\n\
+ mov r0, sp\n\
+ adds r1, r4, 0\n\
+ bl GetXYCoordsOneStepInFrontOfPlayer\n\
+ mov r1, sp\n\
+ mov r0, sp\n\
+ ldrh r0, [r0]\n\
+ subs r0, 0x3\n\
+ strh r0, [r1]\n\
+ ldrh r0, [r4]\n\
+ subs r0, 0x3\n\
+ strh r0, [r4]\n\
+ movs r1, 0\n\
+ ldr r0, _080B34A8 @ =0x000001ff\n\
+ mov r10, r0\n\
+ ldr r2, _080B34AC @ =gMapHeader\n\
+ mov r9, r2\n\
+_080B3452:\n\
+ movs r4, 0\n\
+ lsls r1, 16\n\
+ mov r8, r1\n\
+ asrs r7, r1, 16\n\
+_080B345A:\n\
+ mov r0, sp\n\
+ movs r3, 0\n\
+ ldrsh r0, [r0, r3]\n\
+ lsls r4, 16\n\
+ asrs r6, r4, 16\n\
+ adds r0, r6\n\
+ mov r2, sp\n\
+ movs r3, 0x2\n\
+ ldrsh r1, [r2, r3]\n\
+ adds r1, r7\n\
+ bl MapGridGetMetatileIdAt\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r7, 0x5\n\
+ beq _080B34D0\n\
+ cmp r6, 0x6\n\
+ beq _080B34D0\n\
+ mov r0, sp\n\
+ movs r1, 0\n\
+ ldrsh r0, [r0, r1]\n\
+ adds r0, r6\n\
+ mov r2, sp\n\
+ movs r3, 0x2\n\
+ ldrsh r1, [r2, r3]\n\
+ adds r1, r7\n\
+ bl MapGridGetMetatileLayerTypeAt\n\
+ lsls r0, 24\n\
+ lsrs r3, r0, 24\n\
+ cmp r5, r10\n\
+ bhi _080B34B0\n\
+ mov r1, r9\n\
+ ldr r0, [r1]\n\
+ ldr r0, [r0, 0x10]\n\
+ lsls r1, r5, 4\n\
+ ldr r2, [r0, 0xC]\n\
+ adds r2, r1\n\
+ b _080B34C0\n\
+ .align 2, 0\n\
+_080B34A8: .4byte 0x000001ff\n\
+_080B34AC: .4byte gMapHeader\n\
+_080B34B0:\n\
+ mov r2, r9\n\
+ ldr r0, [r2]\n\
+ ldr r1, [r0, 0x14]\n\
+ ldr r2, _080B34CC @ =0xfffffe00\n\
+ adds r0, r5, r2\n\
+ lsls r0, 4\n\
+ ldr r2, [r1, 0xC]\n\
+ adds r2, r0\n\
+_080B34C0:\n\
+ adds r0, r6, 0\n\
+ adds r1, r7, 0\n\
+ bl BuyMenuDrawMapMetatile\n\
+ b _080B3506\n\
+ .align 2, 0\n\
+_080B34CC: .4byte 0xfffffe00\n\
+_080B34D0:\n\
+ cmp r5, r10\n\
+ bhi _080B34EC\n\
+ asrs r0, r4, 16\n\
+ mov r3, r9\n\
+ ldr r1, [r3]\n\
+ ldr r1, [r1, 0x10]\n\
+ lsls r3, r5, 4\n\
+ ldr r2, [r1, 0xC]\n\
+ adds r2, r3\n\
+ mov r3, r8\n\
+ asrs r1, r3, 16\n\
+ bl sub_80B33D0\n\
+ b _080B3506\n\
+_080B34EC:\n\
+ asrs r0, r4, 16\n\
+ mov r2, r9\n\
+ ldr r1, [r2]\n\
+ ldr r2, [r1, 0x14]\n\
+ ldr r3, _080B354C @ =0xfffffe00\n\
+ adds r1, r5, r3\n\
+ lsls r1, 4\n\
+ ldr r2, [r2, 0xC]\n\
+ adds r2, r1\n\
+ mov r3, r8\n\
+ asrs r1, r3, 16\n\
+ bl sub_80B33D0\n\
+_080B3506:\n\
+ cmp r7, 0\n\
+ bne _080B3520\n\
+ asrs r1, r4, 16\n\
+ cmp r1, 0\n\
+ beq _080B3520\n\
+ cmp r1, 0x6\n\
+ beq _080B3520\n\
+ lsls r1, 17\n\
+ asrs r1, 16\n\
+ ldr r0, _080B3550 @ =gBGTilemapBuffers + 0x800\n\
+ movs r2, 0x40\n\
+ bl sub_80B32EC\n\
+_080B3520:\n\
+ movs r1, 0x80\n\
+ lsls r1, 9\n\
+ adds r0, r4, r1\n\
+ lsrs r4, r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x6\n\
+ ble _080B345A\n\
+ adds r0, r1, 0\n\
+ add r0, r8\n\
+ lsrs r1, r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x5\n\
+ ble _080B3452\n\
+ add sp, 0x4\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080B354C: .4byte 0xfffffe00\n\
+_080B3550: .4byte gBGTilemapBuffers + 0x800\n\
+ .syntax divided");
+}
+
+void BuyMenuDrawMapGraphics(void)
+{
+ sub_80F9020();
+ sub_80B356C();
+ sub_80B368C();
+ sub_80B3420();
+}
+
+// yet another difficult multi for-loop. No.
+__attribute__((naked))
+void sub_80B356C(void) // PopulateShopViewWindowObjectInfo ?
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x8\n\
+ movs r0, 0\n\
+ mov r8, r0\n\
+ mov r4, sp\n\
+ adds r4, 0x2\n\
+ mov r0, sp\n\
+ adds r1, r4, 0\n\
+ bl GetXYCoordsOneStepInFrontOfPlayer\n\
+ bl PlayerGetZCoord\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x4]\n\
+ movs r5, 0\n\
+ ldr r2, _080B3674 @ =gUnknown_020386A4\n\
+ movs r1, 0x10\n\
+_080B3598:\n\
+ lsls r0, r5, 3\n\
+ adds r0, r2\n\
+ strh r1, [r0]\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ cmp r5, 0xF\n\
+ bls _080B3598\n\
+ movs r5, 0\n\
+ ldr r7, _080B3678 @ =gUnknown_020386AA\n\
+ subs r1, r7, 0x6\n\
+ mov r9, r1\n\
+_080B35B0:\n\
+ movs r4, 0\n\
+ adds r2, r5, 0x1\n\
+ mov r10, r2\n\
+_080B35B6:\n\
+ mov r1, sp\n\
+ ldr r3, _080B367C @ =0x0000fffd\n\
+ adds r0, r3, 0\n\
+ ldrh r1, [r1]\n\
+ adds r0, r1\n\
+ adds r0, r4\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ ldr r2, _080B3680 @ =0x0000fffe\n\
+ adds r1, r2, 0\n\
+ mov r3, sp\n\
+ ldrh r3, [r3, 0x2]\n\
+ adds r1, r3\n\
+ adds r1, r5\n\
+ lsls r1, 16\n\
+ lsrs r1, 16\n\
+ ldr r2, [sp, 0x4]\n\
+ bl GetFieldObjectIdByXYZ\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ cmp r2, 0x10\n\
+ beq _080B3650\n\
+ mov r0, r8\n\
+ lsls r3, r0, 3\n\
+ mov r1, r9\n\
+ adds r0, r3, r1\n\
+ movs r6, 0\n\
+ strh r2, [r0]\n\
+ mov r0, r9\n\
+ adds r0, 0x2\n\
+ adds r0, r3, r0\n\
+ strh r4, [r0]\n\
+ ldr r1, _080B3684 @ =gUnknown_020386A8\n\
+ adds r0, r3, r1\n\
+ strh r5, [r0]\n\
+ ldr r1, _080B3688 @ =gMapObjects\n\
+ lsls r0, r2, 3\n\
+ adds r0, r2\n\
+ lsls r0, 2\n\
+ adds r2, r0, r1\n\
+ ldrb r0, [r2, 0x18]\n\
+ lsls r0, 28\n\
+ lsrs r0, 28\n\
+ cmp r0, 0x1\n\
+ bne _080B3616\n\
+ adds r0, r3, r7\n\
+ strh r6, [r0]\n\
+_080B3616:\n\
+ ldrb r0, [r2, 0x18]\n\
+ lsls r0, 28\n\
+ lsrs r0, 28\n\
+ cmp r0, 0x2\n\
+ bne _080B3626\n\
+ adds r1, r3, r7\n\
+ movs r0, 0x1\n\
+ strh r0, [r1]\n\
+_080B3626:\n\
+ ldrb r0, [r2, 0x18]\n\
+ lsls r0, 28\n\
+ lsrs r0, 28\n\
+ cmp r0, 0x3\n\
+ bne _080B3636\n\
+ adds r1, r3, r7\n\
+ movs r0, 0x2\n\
+ strh r0, [r1]\n\
+_080B3636:\n\
+ ldrb r0, [r2, 0x18]\n\
+ lsls r0, 28\n\
+ lsrs r0, 28\n\
+ cmp r0, 0x4\n\
+ bne _080B3646\n\
+ adds r1, r3, r7\n\
+ movs r0, 0x3\n\
+ strh r0, [r1]\n\
+_080B3646:\n\
+ mov r0, r8\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+_080B3650:\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0x6\n\
+ bls _080B35B6\n\
+ mov r2, r10\n\
+ lsls r0, r2, 24\n\
+ lsrs r5, r0, 24\n\
+ cmp r5, 0x4\n\
+ bls _080B35B0\n\
+ add sp, 0x8\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080B3674: .4byte gUnknown_020386A4\n\
+_080B3678: .4byte gUnknown_020386AA\n\
+_080B367C: .4byte 0x0000fffd\n\
+_080B3680: .4byte 0x0000fffe\n\
+_080B3684: .4byte gUnknown_020386A8\n\
+_080B3688: .4byte gMapObjects\n\
+ .syntax divided");
+}
+/*
+struct UnkStruct_20386A4
+{
+ s16 mapObjId;
+ u16 unk2;
+ u16 unk4;
+ u8 unk6[2];
+};
+*/
+
+//extern s16 gUnknown_020386A4[][];
+//extern struct UnkStruct_20386A4 gUnknown_020386A4[];
+
+// all 3 of these are incredibly hard, please help
+/*void sub_80B368C(void)
+{
+ // r0 = spriteId
+ // r1 = gUnknown_020386A4 + 6
+ // r2 = gSprites[spriteId]
+ // r3 = gUnknown_020386A4[i].unk4 + 32
+ // r4 = i * 8
+ // r5 = 0 (i)
+ // r6 = gUnknown_020386A4
+ // r7 = gMapObjects
+ // r8 = gUnknown_020386A4 + 6
+ // r9 =
+ // r10 =
+ // r11 =
+ // r12 =
+
+ u8 i = 0;
+ u8 *unkArray = (u8 *)&gUnknown_020386A4[6];
+
+ for(; i < 16; i++) // max objects?
+ {
+ s16 mapObjId = unkStruct[i].mapObjId;
+ if(mapObjId != 16)
+ {
+ u8 spriteId = AddPseudoFieldObject(
+ gMapObjects[mapObjId].graphicsId,
+ SpriteCallbackDummy,
+ unkStruct[i].unk2 * 16 + 8,
+ unkStruct[i].unk4 + 12,
+ 2);
+ StartSpriteAnim(&gSprites[spriteId], unkArray[i]);
+ }
+ }
+}*/