summaryrefslogtreecommitdiff
path: root/src/berry.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/berry.c')
-rw-r--r--src/berry.c105
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)
{