diff options
author | PikalaxALT <PikalaxALT@users.noreply.github.com> | 2020-09-09 16:27:24 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-09 16:27:24 -0400 |
commit | d260943249387a5d25cbb60886b6c8aa72e3f24f (patch) | |
tree | 7e326cc3ea683c03827e7715fa7ef1836e87671d /src/record_mixing.c | |
parent | 8f6d6b933e081d6e7a35b52bd36da9d11952145b (diff) | |
parent | 7f1827767c27c6b696a9cd1a8c15b2b31a125b78 (diff) |
Merge pull request #1182 from PokeCodec/PokemonLogicFix
Fix more fakematches
Diffstat (limited to 'src/record_mixing.c')
-rw-r--r-- | src/record_mixing.c | 44 |
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); } |