summaryrefslogtreecommitdiff
path: root/src/record_mixing.c
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2020-09-09 16:27:24 -0400
committerGitHub <noreply@github.com>2020-09-09 16:27:24 -0400
commitd260943249387a5d25cbb60886b6c8aa72e3f24f (patch)
tree7e326cc3ea683c03827e7715fa7ef1836e87671d /src/record_mixing.c
parent8f6d6b933e081d6e7a35b52bd36da9d11952145b (diff)
parent7f1827767c27c6b696a9cd1a8c15b2b31a125b78 (diff)
Merge pull request #1182 from PokeCodec/PokemonLogicFix
Fix more fakematches
Diffstat (limited to 'src/record_mixing.c')
-rw-r--r--src/record_mixing.c44
1 files changed, 20 insertions, 24 deletions
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 6c0a02d8c..b12b71697 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -713,17 +713,18 @@ static u8 sub_80E7A9C(struct DayCareMail *rmMail)
return rmMail->message.itemId;
}
-static void sub_80E7AA4(struct RecordMixingDayCareMail *src, size_t recordSize, u8 (*idxs)[2], u8 which0, u8 which1)
+static void ExchangeMail(struct RecordMixingDayCareMail *src, size_t recordSize, u8 (*idxs)[2], u8 which0, u8 which1)
{
struct DayCareMail buffer;
struct RecordMixingDayCareMail *mail1;
struct RecordMixingDayCareMail *mail2;
mail1 = (void *)src + recordSize * idxs[which0][0];
- memcpy(&buffer, &mail1->mail[idxs[which0][1]], sizeof(struct DayCareMail));
+ buffer = mail1->mail[idxs[which0][1]];
+
mail2 = (void *)src + recordSize * idxs[which1][0];
- memcpy(&mail1->mail[idxs[which0][1]], &mail2->mail[idxs[which1][1]], sizeof(struct DayCareMail));
- memcpy(&mail2->mail[idxs[which1][1]], &buffer, sizeof(struct DayCareMail));
+ mail1->mail[idxs[which0][1]] = mail2->mail[idxs[which1][1]];
+ mail2->mail[idxs[which1][1]] = buffer;
}
static void sub_80E7B2C(const u8 *src)
@@ -865,27 +866,22 @@ static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t r
}
else if (sp1c[i][0] == TRUE && sp1c[i][1] == TRUE)
{
- u32 var1, var2;
+ u8 mail1, mail2;
sp24[j][0] = i;
- var1 = sub_80E7A9C(&_src->mail[0]);
- var2 = sub_80E7A9C(&_src->mail[1]);
- if (!var1 && var2)
+ mail1 = sub_80E7A9C(&_src->mail[0]);
+ mail2 = sub_80E7A9C(&_src->mail[1]);
+ if (!(mail1 || mail2) || (mail1 && mail2)) //Logical (not bitwise) XOR. Should be ((mail1 || mail2) && !(mail1 && mail2)), but that doesn't match.
{
- #ifndef NONMATCHING
- register u8 one asm("r0") = 1; // boo, a fakematch
- sp24[j][1] = one;
- #else
- sp24[j][1] = 1;
- #endif
+ sp24[j][1] = Random2() % 2;
}
- else if ((var1 && var2) || (!var1 && !var2))
+ else if (mail1 && !mail2)
{
- sp24[j][1] = Random2() % 2;
+ sp24[j][1] = 0;
}
- else if (var1 && !var2)
+ else if (!mail1 && mail2)
{
- sp24[j][1] = 0;
+ sp24[j][1] = 1;
}
j++;
}
@@ -901,27 +897,27 @@ static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t r
switch (sp34)
{
case 2:
- sub_80E7AA4(src, recordSize, sp24, 0, 1);
+ ExchangeMail(src, recordSize, sp24, 0, 1);
break;
case 3:
which0 = gUnknown_0858CFB8[tableId][0];
which1 = gUnknown_0858CFB8[tableId][1];
- sub_80E7AA4(src, recordSize, sp24, which0, which1);
+ ExchangeMail(src, recordSize, sp24, which0, which1);
break;
case 4:
ptr = sp24;
which0 = gUnknown_0858CFBE[tableId][0];
which1 = gUnknown_0858CFBE[tableId][1];
- sub_80E7AA4(src, recordSize, ptr, which0, which1);
+ ExchangeMail(src, recordSize, ptr, which0, which1);
which0 = gUnknown_0858CFBE[tableId][2];
which1 = gUnknown_0858CFBE[tableId][3];
- sub_80E7AA4(src, recordSize, ptr, which0, which1);
+ ExchangeMail(src, recordSize, ptr, which0, which1);
break;
}
_src = (void *)src + which * recordSize;
- memcpy(&gSaveBlock1Ptr->daycare.mons[0].mail, &_src->mail[0], sizeof(struct DayCareMail));
- memcpy(&gSaveBlock1Ptr->daycare.mons[1].mail, &_src->mail[1], sizeof(struct DayCareMail));
+ gSaveBlock1Ptr->daycare.mons[0].mail = _src->mail[0];
+ gSaveBlock1Ptr->daycare.mons[1].mail = _src->mail[1];
SeedRng(oldSeed);
}