diff options
Diffstat (limited to 'src/berry.c')
-rw-r--r-- | src/berry.c | 105 |
1 files changed, 22 insertions, 83 deletions
diff --git a/src/berry.c b/src/berry.c index d4ea0dae3..c5b8af7f8 100644 --- a/src/berry.c +++ b/src/berry.c @@ -3,10 +3,6 @@ #include "text.h" #include "constants/items.h" -#if !defined(NONMATCHING) && MODERN -#define static -#endif - static const u8 sBerryDescriptionPart1_Cheri[] = _("とても かわいい はなが さく."); static const u8 sBerryDescriptionPart2_Cheri[] = _("まっかな みは とても からい."); static const u8 sBerryDescriptionPart1_Chesto[] = _("そとの かわの ぶぶんも なかみも すべてが"); @@ -925,7 +921,7 @@ const struct BerryTree gBlankBerryTree = {}; berries[ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX]; \ }) -void sub_809C718(void) +void InitEnigmaBerry(void) { s32 i; @@ -937,96 +933,39 @@ void sub_809C718(void) gSaveBlock1Ptr->enigmaBerry.checksum = GetEnigmaBerryChecksum(&gSaveBlock1Ptr->enigmaBerry); } -void sub_809C794(void) +void ClearEnigmaBerries(void) { CpuFill16(0, &gSaveBlock1Ptr->enigmaBerry, sizeof(gSaveBlock1Ptr->enigmaBerry)); - sub_809C718(); + InitEnigmaBerry(); } -#ifdef NONMATCHING +struct ReceivedEnigmaBerry +{ + struct Berry2 berry; + u8 unk_001C[0x4FA]; + u8 itemEffect[18]; + u8 holdEffect; + u8 holdEffectParam; +}; + void SetEnigmaBerry(u8 * berry) { struct EnigmaBerry * enigmaBerry; + struct ReceivedEnigmaBerry * src2; + s32 i; - sub_809C794(); - - { - const struct Berry2 * src = (const struct Berry2 *)berry; - struct Berry2 * dest = &gSaveBlock1Ptr->enigmaBerry.berry; - *dest = *src; - } + ClearEnigmaBerries(); + src2 = (struct ReceivedEnigmaBerry *)berry; enigmaBerry = &gSaveBlock1Ptr->enigmaBerry; - { - s32 i = 0; - u8 * dest = gSaveBlock1Ptr->enigmaBerry.itemEffect; - const u8 * src = berry + 0x516; - - for (i = 0; i < 18; i++) dest[i] = src[i]; - } - enigmaBerry->holdEffect = berry[0x528]; - enigmaBerry->holdEffectParam = berry[0x529]; + + enigmaBerry->berry = src2->berry; + for (i = 0; i < 18; i++) + enigmaBerry->itemEffect[i] = src2->itemEffect[i]; + enigmaBerry->holdEffect = src2->holdEffect; + enigmaBerry->holdEffectParam = src2->holdEffectParam; enigmaBerry->checksum = GetEnigmaBerryChecksum(enigmaBerry); } -#else -NAKED -void SetEnigmaBerry(u8 * berry) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tadds r4, r0, 0\n" - "\tbl sub_809C794\n" - "\tadds r5, r4, 0\n" - "\tldr r0, _0809C824 @ =gSaveBlock1Ptr\n" - "\tldr r2, [r0]\n" - "\tldr r0, _0809C828 @ =0x000030ec\n" - "\tadds r4, r2, r0\n" - "\tadds r1, r4, 0\n" - "\tadds r0, r5, 0\n" - "\tldm r0!, {r3,r6,r7}\n" - "\tstm r1!, {r3,r6,r7}\n" - "\tldm r0!, {r3,r6,r7}\n" - "\tstm r1!, {r3,r6,r7}\n" - "\tldr r0, [r0]\n" - "\tstr r0, [r1]\n" - "\tmovs r3, 0\n" - "\tldr r0, _0809C82C @ =0x00003108\n" - "\tadds r6, r2, r0\n" - "\tldr r1, _0809C830 @ =0x00000516\n" - "\tadds r2, r5, r1\n" - "_0809C7F0:\n" - "\tadds r0, r6, r3\n" - "\tadds r1, r2, r3\n" - "\tldrb r1, [r1]\n" - "\tstrb r1, [r0]\n" - "\tadds r3, 0x1\n" - "\tcmp r3, 0x11\n" - "\tble _0809C7F0\n" - "\tmovs r3, 0xA5\n" - "\tlsls r3, 3\n" - "\tadds r0, r5, r3\n" - "\tldrb r0, [r0]\n" - "\tadds r1, r4, 0\n" - "\tadds r1, 0x2E\n" - "\tstrb r0, [r1]\n" - "\tldr r6, _0809C834 @ =0x00000529\n" - "\tadds r0, r5, r6\n" - "\tldrb r0, [r0]\n" - "\tadds r1, 0x1\n" - "\tstrb r0, [r1]\n" - "\tadds r0, r4, 0\n" - "\tbl GetEnigmaBerryChecksum\n" - "\tstr r0, [r4, 0x30]\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_0809C824: .4byte gSaveBlock1Ptr\n" - "_0809C828: .4byte 0x000030ec\n" - "_0809C82C: .4byte 0x00003108\n" - "_0809C830: .4byte 0x00000516\n" - "_0809C834: .4byte 0x00000529"); -} -#endif u32 GetEnigmaBerryChecksum(struct EnigmaBerry * enigmaBerry) { |