diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/berry_tag_screen.c | 877 |
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); +} |