summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/berry_tag_screen.c877
1 files changed, 877 insertions, 0 deletions
diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c
new file mode 100644
index 000000000..e7ef9ca76
--- /dev/null
+++ b/src/berry_tag_screen.c
@@ -0,0 +1,877 @@
+#include "global.h"
+#include "berry_tag_screen.h"
+#include "asm.h"
+#include "berry.h"
+#include "decompress.h"
+#include "main.h"
+#include "menu.h"
+#include "palette.h"
+#include "rom4.h"
+#include "songs.h"
+#include "sound.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "task.h"
+#include "text.h"
+
+#define OFFSET_7B (123)
+#define FIRST_BERRY (0x85) // ITEM_CHERI_BERRY
+
+struct Struct2000000 {
+ /*0x00*/ u8 filler_0[0x1FFFF];
+ /*0x1FFFF*/ bool8 var_1FFFF;
+};
+
+struct BerryTagStatus {
+ s16 circles[5];
+};
+
+extern struct Struct2000000 unk_2000000;
+extern u16 gBGTilemapBuffers[4][0x400];
+extern u8 gUnknown_0203932C;
+extern struct BerryTagStatus gUnknown_0203932E;
+extern u16 gScriptItemId;
+extern u16 gUnknown_030041B4;
+
+extern const struct SpriteSheet gUnknown_083C1F74;
+extern const struct SpritePalette gUnknown_083C1F7C;
+
+extern u8 gOtherText_ThreeQuestions2[];
+extern u8 gOtherText_Size[];
+extern u8 gOtherText_Firm[];
+extern u8 gContestStatsText_Unknown1[];
+extern u8 *gUnknown_0841192C[];
+
+extern u8 gBerryCheck_Gfx[];
+extern u8 gBerryCheck_Pal[];
+extern u8 gUnknown_08E788E4[];
+extern u8 gUnknown_08E78A84[];
+
+static void sub_8146014(void);
+static void sub_814602C(void);
+static bool8 sub_8146058(void);
+static void sub_8146288(void);
+static bool8 sub_81462B8(void);
+static void sub_814640C(u8 taskId);
+static void sub_8146440(u8 taskId);
+static void sub_8146480(u8 taskid);
+static void sub_81464E4(void);
+static void sub_8146600(u8 berry);
+// static void sub_81466A0(void);
+static void sub_81466E8(u8 taskId, s32 direction);
+// static void sub_8146798(u8 berry);
+// static void sub_8146810(u8 berry);
+// static void sub_81468BC(void);
+
+static void sub_8146014(void) {
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTasks();
+ UpdatePaletteFade();
+}
+
+static void sub_814602C(void) {
+ REG_BG0VOFS = gUnknown_030041B4;
+ REG_BG1VOFS = gUnknown_030041B4;
+
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static bool8 sub_8146058(void) {
+ u8 berry;
+ u16 backup;
+
+ switch (gMain.state) {
+ case 0:
+ sub_80F9438();
+ sub_80F9368();
+ sub_8146288();
+ REG_BLDCNT = 0;
+ gMain.state += 1;
+ break;
+
+ case 1:
+ ResetPaletteFade();
+ gPaletteFade.bufferTransferDisabled = 1;
+ gMain.state += 1;
+ break;
+
+ case 2:
+ ResetSpriteData();
+ gMain.state += 1;
+ break;
+
+ case 3:
+ SetUpWindowConfig(&gWindowConfig_81E6E18);
+ gMain.state += 1;
+ break;
+
+ case 4:
+ MultistepInitMenuWindowBegin(&gWindowConfig_81E6E18);
+ gMain.state += 1;
+ break;
+
+ case 5:
+ if (!MultistepInitMenuWindowContinue()) {
+ return FALSE;
+ }
+ unk_2000000.var_1FFFF = 0;
+ gMain.state += 1;
+ break;
+
+ case 6:
+ if (!sub_81462B8()) {
+ break;
+ }
+
+ unk_2000000.var_1FFFF = 0;
+ gMain.state += 1;
+ break;
+
+ case 7:
+ sub_81464E4();
+ gMain.state += 1;
+ break;
+
+ case 8:
+ berry = gScriptItemId + OFFSET_7B;
+ gUnknown_0203932C = sub_80A7D8C(berry, 56, 64);
+ gMain.state += 1;
+ break;
+
+ case 9:
+ sub_8146600(gScriptItemId + OFFSET_7B);
+ gMain.state += 1;
+ break;
+
+ case 10:
+ backup = REG_IME;
+ REG_IME = 0;
+ REG_IE |= INTR_FLAG_VBLANK;
+ REG_IME = backup;
+
+ REG_DISPSTAT |= DISPSTAT_VBLANK_INTR;
+ SetVBlankCallback(sub_814602C);
+ REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP;
+ gMain.state += 1;
+ break;
+
+ case 11:
+ if (sub_8055870() == TRUE) {
+ break;
+ }
+ gMain.state += 1;
+ break;
+
+ case 12:
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
+ gPaletteFade.bufferTransferDisabled = 0;
+ SetMainCallback2(sub_8146014);
+ return TRUE;
+
+ }
+
+ return FALSE;
+}
+
+void BerryTagScreen_814625C(u8 taskId) {
+ do {
+ if (sub_8146058() == TRUE) {
+ CreateTask(sub_8146480, 0);
+ return;
+ }
+
+ } while (sub_80F9344() != TRUE);
+}
+
+static void sub_8146288(void) {
+ REG_BG1CNT = 0x502;
+ REG_BG2CNT = 0x600;
+ REG_BG3CNT = 0x703;
+ gUnknown_030041B4 = 0;
+}
+
+#ifdef NONMATCHING
+bool8 sub_81462B8(void) {
+ u16 i;
+
+ switch (unk_2000000.var_1FFFF) {
+ case 0:
+ LZDecompressVram(gBerryCheck_Gfx, (void *) VRAM);
+ unk_2000000.var_1FFFF += 1;
+ break;
+
+ case 1:
+ LZDecompressVram(gUnknown_08E788E4, (void *) VRAM + 0x2800);
+ unk_2000000.var_1FFFF += 1;
+ break;
+
+ case 2:
+ LZDecompressVram(gUnknown_08E78A84, (void *) VRAM + 0x3000);
+ unk_2000000.var_1FFFF += 1;
+ break;
+
+ case 3:
+ for (i = 0; i < 0x400; i++) {
+ u16 (*buffer)[0x400] = &gBGTilemapBuffers[3];
+ if (gSaveBlock2.playerGender == MALE) {
+ (*buffer)[i] = 0x4042;
+ } else {
+ (*buffer)[i] = 0x5042;
+ }
+ }
+ unk_2000000.var_1FFFF += 1;
+ break;
+
+ case 4:
+ LoadCompressedPalette(gBerryCheck_Pal, 0, 96 * 2);
+ unk_2000000.var_1FFFF += 1;
+ break;
+
+ case 5:
+ LoadCompressedObjectPic(&gUnknown_083C1F74);
+ unk_2000000.var_1FFFF += 1;
+ break;
+
+ case 6:
+ LoadCompressedObjectPalette(&gUnknown_083C1F7C);
+ unk_2000000.var_1FFFF = 0;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+#else
+__attribute__((naked))
+static bool8 sub_81462B8(void) {
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ ldr r1, _081462D4 @ =0x02000000\n\
+ ldr r2, _081462D8 @ =0x0001ffff\n\
+ adds r0, r1, r2\n\
+ ldrb r0, [r0]\n\
+ mov r12, r1\n\
+ cmp r0, 0x6\n\
+ bls _081462CA\n\
+ b _08146404\n\
+_081462CA:\n\
+ lsls r0, 2\n\
+ ldr r1, _081462DC @ =_081462E0\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_081462D4: .4byte 0x02000000\n\
+_081462D8: .4byte 0x0001ffff\n\
+_081462DC: .4byte _081462E0\n\
+ .align 2, 0\n\
+_081462E0:\n\
+ .4byte _081462FC\n\
+ .4byte _0814630C\n\
+ .4byte _0814632C\n\
+ .4byte _08146340\n\
+ .4byte _081463A4\n\
+ .4byte _081463C4\n\
+ .4byte _081463E4\n\
+_081462FC:\n\
+ ldr r0, _08146308 @ =gBerryCheck_Gfx\n\
+ movs r1, 0xC0\n\
+ lsls r1, 19\n\
+ bl LZDecompressVram\n\
+ b _081463CA\n\
+ .align 2, 0\n\
+_08146308: .4byte gBerryCheck_Gfx\n\
+_0814630C:\n\
+ ldr r0, _0814631C @ =gUnknown_08E788E4\n\
+ ldr r1, _08146320 @ =0x06002800\n\
+ bl LZDecompressVram\n\
+ ldr r1, _08146324 @ =0x02000000\n\
+ ldr r2, _08146328 @ =0x0001ffff\n\
+ adds r1, r2\n\
+ b _081463D0\n\
+ .align 2, 0\n\
+_0814631C: .4byte gUnknown_08E788E4\n\
+_08146320: .4byte 0x06002800\n\
+_08146324: .4byte 0x02000000\n\
+_08146328: .4byte 0x0001ffff\n\
+_0814632C:\n\
+ ldr r0, _08146338 @ =gUnknown_08E78A84\n\
+ ldr r1, _0814633C @ =0x06003000\n\
+ bl LZDecompressVram\n\
+ b _081463CA\n\
+ .align 2, 0\n\
+_08146338: .4byte gUnknown_08E78A84\n\
+_0814633C: .4byte 0x06003000\n\
+_08146340:\n\
+ movs r1, 0\n\
+ ldr r7, _0814635C @ =gBGTilemapBuffers + 0x1000\n\
+ adds r2, r7, 0\n\
+ ldr r6, _08146360 @ =0x00004042\n\
+ ldr r5, _08146364 @ =gSaveBlock2\n\
+ ldr r4, _08146368 @ =0x00005042\n\
+ ldr r3, _0814636C @ =0x000003ff\n\
+_0814634E:\n\
+ ldrb r0, [r5, 0x8]\n\
+ cmp r0, 0\n\
+ bne _08146370\n\
+ lsls r0, r1, 1\n\
+ adds r0, r2\n\
+ strh r6, [r0]\n\
+ b _08146376\n\
+ .align 2, 0\n\
+_0814635C: .4byte gBGTilemapBuffers + 0x1000\n\
+_08146360: .4byte 0x00004042\n\
+_08146364: .4byte gSaveBlock2\n\
+_08146368: .4byte 0x00005042\n\
+_0814636C: .4byte 0x000003ff\n\
+_08146370:\n\
+ lsls r0, r1, 1\n\
+ adds r0, r2\n\
+ strh r4, [r0]\n\
+_08146376:\n\
+ adds r0, r1, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r1, r0, 16\n\
+ cmp r1, r3\n\
+ bls _0814634E\n\
+ ldr r1, _08146394 @ =0x06003800\n\
+ ldr r0, _08146398 @ =0x040000d4\n\
+ str r7, [r0]\n\
+ str r1, [r0, 0x4]\n\
+ ldr r1, _0814639C @ =0x80000400\n\
+ str r1, [r0, 0x8]\n\
+ ldr r0, [r0, 0x8]\n\
+ ldr r1, _081463A0 @ =0x0001ffff\n\
+ add r1, r12\n\
+ b _081463D0\n\
+ .align 2, 0\n\
+_08146394: .4byte 0x06003800\n\
+_08146398: .4byte 0x040000d4\n\
+_0814639C: .4byte 0x80000400\n\
+_081463A0: .4byte 0x0001ffff\n\
+_081463A4:\n\
+ ldr r0, _081463B8 @ =gBerryCheck_Pal\n\
+ movs r1, 0\n\
+ movs r2, 0xC0\n\
+ bl LoadCompressedPalette\n\
+ ldr r1, _081463BC @ =0x02000000\n\
+ ldr r2, _081463C0 @ =0x0001ffff\n\
+ adds r1, r2\n\
+ b _081463D0\n\
+ .align 2, 0\n\
+_081463B8: .4byte gBerryCheck_Pal\n\
+_081463BC: .4byte 0x02000000\n\
+_081463C0: .4byte 0x0001ffff\n\
+_081463C4:\n\
+ ldr r0, _081463D8 @ =gUnknown_083C1F74\n\
+ bl LoadCompressedObjectPic\n\
+_081463CA:\n\
+ ldr r1, _081463DC @ =0x02000000\n\
+ ldr r0, _081463E0 @ =0x0001ffff\n\
+ adds r1, r0\n\
+_081463D0:\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1]\n\
+ b _08146404\n\
+ .align 2, 0\n\
+_081463D8: .4byte gUnknown_083C1F74\n\
+_081463DC: .4byte 0x02000000\n\
+_081463E0: .4byte 0x0001ffff\n\
+_081463E4:\n\
+ ldr r0, _081463F8 @ =gUnknown_083C1F7C\n\
+ bl LoadCompressedObjectPalette\n\
+ ldr r0, _081463FC @ =0x02000000\n\
+ ldr r1, _08146400 @ =0x0001ffff\n\
+ adds r0, r1\n\
+ movs r1, 0\n\
+ strb r1, [r0]\n\
+ movs r0, 0x1\n\
+ b _08146406\n\
+ .align 2, 0\n\
+_081463F8: .4byte gUnknown_083C1F7C\n\
+_081463FC: .4byte 0x02000000\n\
+_08146400: .4byte 0x0001ffff\n\
+_08146404:\n\
+ movs r0, 0\n\
+_08146406:\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .syntax divided\n");
+}
+#endif
+
+static void sub_814640C(u8 taskId) {
+ if (gPaletteFade.active) {
+ return;
+ }
+
+ SetMainCallback2(sub_80A5B40);
+ sub_80A7DD4();
+ gpu_pal_allocator_reset__manage_upper_four();
+ DestroyTask(taskId);
+}
+
+static void sub_8146440(u8 taskId) {
+ PlaySE(SE_SELECT);
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+
+ gTasks[taskId].func = sub_814640C;
+}
+
+static void sub_8146480(u8 taskid) {
+ register u16 keys asm("r1");
+
+ if (gPaletteFade.active) {
+ return;
+ }
+
+ keys = gMain.newAndRepeatedKeys & (DPAD_RIGHT | DPAD_LEFT | DPAD_UP | DPAD_DOWN);
+ if (keys == DPAD_UP) {
+ sub_81466E8(taskid, -1);
+ }
+
+ keys = gMain.newAndRepeatedKeys & (DPAD_RIGHT | DPAD_LEFT | DPAD_UP | DPAD_DOWN);
+ if (keys == DPAD_DOWN) {
+ sub_81466E8(taskid, 1);
+ }
+
+ if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) {
+ sub_8146440(taskid);
+ }
+}
+
+static void sub_81464E4(void) {
+ struct Berry *berryInfo;
+ u32 size;
+ s32 sizeMajor;
+ s32 sizeMinor;
+
+ berryInfo = GetBerryInfo(gScriptItemId + OFFSET_7B + 1);
+
+ ConvertIntToDecimalStringN(gStringVar1, gScriptItemId - FIRST_BERRY + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
+ MenuPrint(gStringVar1, 12, 4);
+
+ MenuPrint(berryInfo->name, 14, 4);
+ MenuPrint(berryInfo->description1, 4, 14);
+ MenuPrint(berryInfo->description2, 4, 16);
+
+ size = (berryInfo->size * 1000) / 254;
+ if (size % 10 >= 5) {
+ size += 10;
+ }
+ sizeMinor = (size % 100) / 10;
+ sizeMajor = size / 100;
+
+ MenuPrint(gOtherText_Size, 11, 7);
+ if (berryInfo->size != 0) {
+ ConvertIntToDecimalStringN(gStringVar1, sizeMajor, STR_CONV_MODE_LEFT_ALIGN, 2);
+ ConvertIntToDecimalStringN(gStringVar2, sizeMinor, STR_CONV_MODE_LEFT_ALIGN, 2);
+ MenuPrint(gContestStatsText_Unknown1, 16, 7);
+ } else {
+ MenuPrint(gOtherText_ThreeQuestions2, 16, 7);
+ }
+
+ MenuPrint(gOtherText_Firm, 11, 9);
+ if (berryInfo->firmness != 0) {
+ MenuPrint(gUnknown_0841192C[berryInfo->firmness - 1], 16, 9);
+ } else {
+ MenuPrint(gOtherText_ThreeQuestions2, 16, 9);
+ }
+}
+
+#ifdef NONMATCHING
+static void sub_8146600(u8 berry) {
+ struct Berry *berryInfo;
+ u16 i;
+
+ berryInfo = GetBerryInfo(berry +1);
+
+ for (i = 0; i < 5; i++) {
+ gUnknown_0203932E.circles[i] |= 0xFFFF;
+ }
+
+ if (berryInfo->spicy) {
+ // argument is the center of the circle
+ gUnknown_0203932E.circles[0] = sub_80A7E5C(48);
+ }
+
+ if (berryInfo->dry) {
+ gUnknown_0203932E.circles[1] = sub_80A7E5C(88);
+ }
+
+ if (berryInfo->sweet) {
+ gUnknown_0203932E.circles[2] = sub_80A7E5C(128);
+ }
+
+ if (berryInfo->bitter) {
+ gUnknown_0203932E.circles[3] = sub_80A7E5C(168);
+ }
+
+ if (berryInfo->sour) {
+ gUnknown_0203932E.circles[4] = sub_80A7E5C(208);
+ }
+}
+#else
+__attribute__((naked))
+static void sub_8146600(u8 berry) {
+ asm(".syntax unified\n\
+ push {r4,r5,lr}\n\
+ lsls r0, 24\n\
+ movs r1, 0x80\n\
+ lsls r1, 17\n\
+ adds r0, r1\n\
+ lsrs r0, 24\n\
+ bl GetBerryInfo\n\
+ adds r4, r0, 0\n\
+ movs r2, 0\n\
+ ldr r5, _08146698 @ =gUnknown_0203932E\n\
+ ldr r0, _0814669C @ =0x0000ffff\n\
+ adds r3, r0, 0\n\
+_0814661A:\n\
+ lsls r0, r2, 1\n\
+ adds r0, r5\n\
+ ldrh r1, [r0]\n\
+ orrs r1, r3\n\
+ strh r1, [r0]\n\
+ adds r0, r2, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+ cmp r2, 0x4\n\
+ bls _0814661A\n\
+ ldrb r0, [r4, 0x15]\n\
+ cmp r0, 0\n\
+ beq _08146642\n\
+ movs r0, 0x30\n\
+ bl sub_80A7E5C\n\
+ ldr r1, _08146698 @ =gUnknown_0203932E\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ strh r0, [r1]\n\
+_08146642:\n\
+ ldrb r0, [r4, 0x16]\n\
+ cmp r0, 0\n\
+ beq _08146656\n\
+ movs r0, 0x58\n\
+ bl sub_80A7E5C\n\
+ ldr r1, _08146698 @ =gUnknown_0203932E\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ strh r0, [r1, 0x2]\n\
+_08146656:\n\
+ ldrb r0, [r4, 0x17]\n\
+ cmp r0, 0\n\
+ beq _0814666A\n\
+ movs r0, 0x80\n\
+ bl sub_80A7E5C\n\
+ ldr r1, _08146698 @ =gUnknown_0203932E\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ strh r0, [r1, 0x4]\n\
+_0814666A:\n\
+ ldrb r0, [r4, 0x18]\n\
+ cmp r0, 0\n\
+ beq _0814667E\n\
+ movs r0, 0xA8\n\
+ bl sub_80A7E5C\n\
+ ldr r1, _08146698 @ =gUnknown_0203932E\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ strh r0, [r1, 0x6]\n\
+_0814667E:\n\
+ ldrb r0, [r4, 0x19]\n\
+ cmp r0, 0\n\
+ beq _08146692\n\
+ movs r0, 0xD0\n\
+ bl sub_80A7E5C\n\
+ ldr r1, _08146698 @ =gUnknown_0203932E\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ strh r0, [r1, 0x8]\n\
+_08146692:\n\
+ pop {r4,r5}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08146698: .4byte gUnknown_0203932E\n\
+_0814669C: .4byte 0x0000ffff\n\
+ .syntax divided\n");
+}
+#endif
+
+
+void sub_81466A0(void) {
+ u16 i;
+
+ for (i = 0; i < 5; i++) {
+ if (gUnknown_0203932E.circles[i] != -1) {
+ DestroySprite(&gSprites[gUnknown_0203932E.circles[i]]);
+ gUnknown_0203932E.circles[i] = -1;
+ }
+ }
+}
+
+
+__attribute__((naked))
+static void sub_81466E8(u8 taskId, s32 direction) {
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ lsls r1, 24\n\
+ lsrs r2, r1, 24\n\
+ lsls r0, r7, 2\n\
+ adds r0, r7\n\
+ lsls r0, 3\n\
+ ldr r1, _08146748 @ =gTasks + 0x8\n\
+ adds r6, r0, r1\n\
+ ldr r4, _0814674C @ =gUnknown_03005D10\n\
+ movs r0, 0xC\n\
+ adds r0, r4\n\
+ mov r8, r0\n\
+ ldrb r1, [r0, 0x1]\n\
+ ldrb r0, [r4, 0xC]\n\
+ adds r1, r0\n\
+ cmp r1, 0\n\
+ bne _08146718\n\
+ lsls r0, r2, 24\n\
+ cmp r0, 0\n\
+ blt _0814678C\n\
+_08146718:\n\
+ adds r0, r1, 0x1\n\
+ lsls r5, r2, 24\n\
+ mov r1, r8\n\
+ ldrb r1, [r1, 0x2]\n\
+ cmp r0, r1\n\
+ bne _08146728\n\
+ cmp r5, 0\n\
+ bgt _0814678C\n\
+_08146728:\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ mov r2, r8\n\
+ ldrb r3, [r2, 0x1]\n\
+ ldrb r4, [r4, 0xC]\n\
+ mov r12, r4\n\
+ adds r0, r3, r4\n\
+ asrs r2, r5, 24\n\
+ adds r1, r0, r2\n\
+ cmp r1, 0\n\
+ bge _08146750\n\
+ negs r0, r0\n\
+ strh r0, [r6, 0x2]\n\
+ b _08146766\n\
+ .align 2, 0\n\
+_08146748: .4byte gTasks + 0x8\n\
+_0814674C: .4byte gUnknown_03005D10\n\
+_08146750:\n\
+ mov r4, r8\n\
+ ldrb r0, [r4, 0x2]\n\
+ cmp r1, r0\n\
+ blt _08146764\n\
+ subs r0, r3\n\
+ mov r1, r12\n\
+ subs r0, r1\n\
+ subs r0, 0x1\n\
+ strh r0, [r6, 0x2]\n\
+ b _08146766\n\
+_08146764:\n\
+ strh r2, [r6, 0x2]\n\
+_08146766:\n\
+ ldr r0, _08146780 @ =gTasks\n\
+ lsls r1, r7, 2\n\
+ adds r1, r7\n\
+ lsls r1, 3\n\
+ adds r1, r0\n\
+ ldr r0, _08146784 @ =sub_8146798\n\
+ str r0, [r1]\n\
+ cmp r5, 0\n\
+ bge _08146788\n\
+ movs r2, 0x10\n\
+ negs r2, r2\n\
+ adds r0, r2, 0\n\
+ b _0814678A\n\
+ .align 2, 0\n\
+_08146780: .4byte gTasks\n\
+_08146784: .4byte sub_8146798\n\
+_08146788:\n\
+ movs r0, 0x10\n\
+_0814678A:\n\
+ strh r0, [r6]\n\
+_0814678C:\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+
+__attribute__((naked))
+void sub_8146798(u8 berry) {
+ asm(".syntax unified\n\
+ push {r4,r5,lr}\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ lsls r0, r4, 2\n\
+ adds r0, r4\n\
+ lsls r0, 3\n\
+ ldr r1, _08146800 @ =gTasks + 0x8\n\
+ adds r0, r1\n\
+ ldr r2, _08146804 @ =gUnknown_030041B4\n\
+ ldrh r1, [r0]\n\
+ ldrh r5, [r2]\n\
+ adds r3, r1, r5\n\
+ movs r1, 0xFF\n\
+ ands r3, r1\n\
+ strh r3, [r2]\n\
+ movs r1, 0\n\
+ ldrsh r0, [r0, r1]\n\
+ cmp r0, 0\n\
+ ble _081467C2\n\
+ cmp r3, 0x90\n\
+ beq _081467CA\n\
+_081467C2:\n\
+ cmp r0, 0\n\
+ bge _081467E0\n\
+ cmp r3, 0x70\n\
+ bne _081467E0\n\
+_081467CA:\n\
+ ldr r0, _08146808 @ =gTasks\n\
+ lsls r1, r4, 2\n\
+ adds r1, r4\n\
+ lsls r1, 3\n\
+ adds r1, r0\n\
+ movs r0, 0xA\n\
+ ldrsb r0, [r1, r0]\n\
+ bl sub_8146810\n\
+ bl sub_81468BC\n\
+_081467E0:\n\
+ ldr r0, _08146804 @ =gUnknown_030041B4\n\
+ ldrh r2, [r0]\n\
+ cmp r2, 0\n\
+ bne _081467FA\n\
+ ldr r0, _08146808 @ =gTasks\n\
+ lsls r1, r4, 2\n\
+ adds r1, r4\n\
+ lsls r1, 3\n\
+ adds r1, r0\n\
+ strh r2, [r1, 0x8]\n\
+ strh r2, [r1, 0xA]\n\
+ ldr r0, _0814680C @ =sub_8146480\n\
+ str r0, [r1]\n\
+_081467FA:\n\
+ pop {r4,r5}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08146800: .4byte gTasks + 0x8\n\
+_08146804: .4byte gUnknown_030041B4\n\
+_08146808: .4byte gTasks\n\
+_0814680C: .4byte sub_8146480\n\
+ .syntax divided\n");
+}
+
+__attribute__((naked))
+void sub_8146810(u8 berry) {
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ lsls r0, 24\n\
+ lsrs r3, r0, 24\n\
+ adds r4, r3, 0\n\
+ lsls r0, r3, 24\n\
+ asrs r1, r0, 24\n\
+ cmp r1, 0\n\
+ ble _08146848\n\
+ ldr r0, _08146840 @ =gUnknown_03005D10\n\
+ adds r4, r0, 0\n\
+ adds r4, 0xC\n\
+ ldrb r2, [r0, 0xC]\n\
+ adds r1, r2, r1\n\
+ adds r6, r0, 0\n\
+ cmp r1, 0x7\n\
+ ble _08146844\n\
+ adds r0, r3, 0\n\
+ adds r0, 0xF9\n\
+ adds r0, r2, r0\n\
+ ldrb r1, [r4, 0x1]\n\
+ adds r0, r1\n\
+ strb r0, [r4, 0x1]\n\
+ movs r0, 0x7\n\
+ b _0814686E\n\
+ .align 2, 0\n\
+_08146840: .4byte gUnknown_03005D10\n\
+_08146844:\n\
+ adds r0, r2, r3\n\
+ b _0814686E\n\
+_08146848:\n\
+ ldr r0, _08146868 @ =gUnknown_03005D10\n\
+ adds r5, r0, 0\n\
+ adds r5, 0xC\n\
+ ldrb r2, [r0, 0xC]\n\
+ adds r1, r2, r1\n\
+ adds r6, r0, 0\n\
+ cmp r1, 0\n\
+ bge _0814686C\n\
+ adds r0, r2, r3\n\
+ ldrb r1, [r5, 0x1]\n\
+ adds r0, r1\n\
+ movs r1, 0\n\
+ strb r0, [r5, 0x1]\n\
+ strb r1, [r6, 0xC]\n\
+ b _08146870\n\
+ .align 2, 0\n\
+_08146868: .4byte gUnknown_03005D10\n\
+_0814686C:\n\
+ adds r0, r2, r4\n\
+_0814686E:\n\
+ strb r0, [r6, 0xC]\n\
+_08146870:\n\
+ ldr r2, _081468AC @ =gScriptItemId\n\
+ movs r0, 0x3\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldrb r1, [r0, 0x1]\n\
+ ldrb r0, [r0]\n\
+ adds r1, r0\n\
+ ldr r0, _081468B0 @ =gUnknown_03005D24\n\
+ ldr r0, [r0]\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ ldrh r0, [r1]\n\
+ strh r0, [r2]\n\
+ ldr r0, _081468B4 @ =gUnknown_0203932C\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ ldr r1, _081468B8 @ =gSprites\n\
+ adds r0, r1\n\
+ bl DestroySprite\n\
+ bl sub_81466A0\n\
+ bl sub_80A7DD4\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_081468AC: .4byte gScriptItemId\n\
+_081468B0: .4byte gUnknown_03005D24\n\
+_081468B4: .4byte gUnknown_0203932C\n\
+_081468B8: .4byte gSprites\n\
+ .syntax divided\n");
+}
+
+void sub_81468BC(void) {
+ MenuZeroFillWindowRect(0, 4, 29, 19);
+ sub_81464E4();
+
+ // center of berry sprite
+ gUnknown_0203932C = sub_80A7D8C(gScriptItemId + OFFSET_7B, 56, 64);
+
+ sub_8146600(gScriptItemId + OFFSET_7B);
+}