diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-05-30 18:05:37 -0500 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2018-05-30 18:18:37 -0500 |
commit | e3916a561a213a1dfe1d13339c49cd06a1dcbe37 (patch) | |
tree | 4b6701919f914b12c4892c483d421c8586898c9a /src | |
parent | d1965e3c751b77243c11d62eadc994422dc682ae (diff) |
Fix nonmatchings in daycare
Diffstat (limited to 'src')
-rw-r--r-- | src/daycare.c | 764 |
1 files changed, 63 insertions, 701 deletions
diff --git a/src/daycare.c b/src/daycare.c index 5220a3738..795c42a96 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -67,7 +67,7 @@ u8 CountPokemonInDaycare(struct DayCare *daycare) u8 i, count; count = 0; - for (i = 0; i < 2; i++) + for (i = 0; i < DAYCARE_MON_COUNT; i++) { if (GetBoxMonData(&daycare->mons[i], MON_DATA_SPECIES) != 0) count++; @@ -81,7 +81,7 @@ void InitDaycareMailRecordMixing(struct BoxPokemon * daycareMons, struct RecordM u8 i; u8 numDaycareMons = 0; - for (i = 0; i < 2; i++) + for (i = 0; i < DAYCARE_MON_COUNT; i++) { if (GetBoxMonData(&daycareMons[i], MON_DATA_SPECIES) != SPECIES_NONE) { @@ -108,7 +108,7 @@ static s8 Daycare_FindEmptySpot(struct BoxPokemon * daycareMons) { u8 i; - for (i = 0; i < 2; i++) + for (i = 0; i < DAYCARE_MON_COUNT; i++) { if (GetBoxMonData(&daycareMons[i], MON_DATA_SPECIES) == 0) return i; @@ -466,12 +466,9 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) } } -#ifdef NONMATCHING -static -#endif // Counts the number of egg moves a pokemon learns and stores the moves in // the given array. -u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves) +static u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves) { u16 eggMoveIdx; u16 numEggMoves; @@ -505,11 +502,10 @@ u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves) return numEggMoves; } -#ifdef NONMATCHING void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, struct BoxPokemon *mother) { u16 numSharedParentMoves; - u8 numLevelUpMoves; + u32 numLevelUpMoves; u16 numEggMoves; u16 i, j; @@ -549,8 +545,11 @@ void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, struct BoxP } } else + { break; + } } + for (i = 0; i < 4; i++) { if (gHatchedEggFatherMoves[i] != MOVE_NONE) @@ -565,10 +564,9 @@ void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, struct BoxP } } } - for (i = 0; i < 4; i++) + + for (i = 0; i < 4 && gHatchedEggFatherMoves[i] != MOVE_NONE; i++) { - if (gHatchedEggFatherMoves[i] == MOVE_NONE) - break; for (j = 0; j < 4; j++) { if (gHatchedEggFatherMoves[i] == gHatchedEggMotherMoves[j] && gHatchedEggFatherMoves[i] != MOVE_NONE) @@ -576,10 +574,8 @@ void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, struct BoxP } } - for (i = 0; i < 4; i++) + for (i = 0; i < 4 && gHatchedEggFinalMoves[i] != MOVE_NONE; i++) { - if (gHatchedEggFinalMoves[i] == MOVE_NONE) - break; for (j = 0; j < numLevelUpMoves; j++) { if (gHatchedEggLevelUpMoves[j] != MOVE_NONE && gHatchedEggFinalMoves[i] == gHatchedEggLevelUpMoves[j]) @@ -591,346 +587,6 @@ void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, struct BoxP } } } -#else -NAKED -void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, struct BoxPokemon *mother) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0xC\n" - "\tadds r7, r0, 0\n" - "\tmov r10, r1\n" - "\tmov r9, r2\n" - "\tmovs r0, 0\n" - "\tstr r0, [sp]\n" - "\tmovs r6, 0\n" - "\tldr r5, _08041CC8 @ =gHatchedEggMotherMoves\n" - "\tmovs r2, 0\n" - "\tldr r4, _08041CCC @ =gHatchedEggFatherMoves\n" - "\tldr r3, _08041CD0 @ =gHatchedEggFinalMoves\n" - "_08041BE4:\n" - "\tlsls r1, r6, 1\n" - "\tadds r0, r1, r5\n" - "\tstrh r2, [r0]\n" - "\tadds r0, r1, r4\n" - "\tstrh r2, [r0]\n" - "\tadds r1, r3\n" - "\tstrh r2, [r1]\n" - "\tadds r0, r6, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r6, r0, 16\n" - "\tcmp r6, 0x3\n" - "\tbls _08041BE4\n" - "\tmovs r6, 0\n" - "\tldr r2, _08041CD4 @ =gHatchedEggEggMoves\n" - "\tmovs r1, 0\n" - "_08041C02:\n" - "\tlsls r0, r6, 1\n" - "\tadds r0, r2\n" - "\tstrh r1, [r0]\n" - "\tadds r0, r6, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r6, r0, 16\n" - "\tcmp r6, 0x9\n" - "\tbls _08041C02\n" - "\tmovs r6, 0\n" - "\tldr r2, _08041CD8 @ =gHatchedEggLevelUpMoves\n" - "\tmovs r1, 0\n" - "_08041C18:\n" - "\tlsls r0, r6, 1\n" - "\tadds r0, r2\n" - "\tstrh r1, [r0]\n" - "\tadds r0, r6, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r6, r0, 16\n" - "\tcmp r6, 0x31\n" - "\tbls _08041C18\n" - "\tadds r0, r7, 0\n" - "\tmovs r1, 0xB\n" - "\tbl GetMonData\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tldr r1, _08041CD8 @ =gHatchedEggLevelUpMoves\n" - "\tbl GetLevelUpMovesBySpecies\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tstr r0, [sp, 0x4]\n" - "\tmovs r6, 0\n" - "\tldr r1, _08041CCC @ =gHatchedEggFatherMoves\n" - "\tmov r8, r1\n" - "_08041C46:\n" - "\tadds r5, r6, 0\n" - "\tadds r5, 0xD\n" - "\tmov r0, r10\n" - "\tadds r1, r5, 0\n" - "\tbl GetBoxMonData\n" - "\tlsls r4, r6, 1\n" - "\tmov r2, r8\n" - "\tadds r1, r4, r2\n" - "\tstrh r0, [r1]\n" - "\tmov r0, r9\n" - "\tadds r1, r5, 0\n" - "\tbl GetBoxMonData\n" - "\tldr r1, _08041CC8 @ =gHatchedEggMotherMoves\n" - "\tadds r4, r1\n" - "\tstrh r0, [r4]\n" - "\tadds r0, r6, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r6, r0, 16\n" - "\tcmp r6, 0x3\n" - "\tbls _08041C46\n" - "\tldr r1, _08041CD4 @ =gHatchedEggEggMoves\n" - "\tadds r0, r7, 0\n" - "\tbl GetEggMoves\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tmov r8, r0\n" - "\tmovs r6, 0\n" - "_08041C82:\n" - "\tldr r0, _08041CCC @ =gHatchedEggFatherMoves\n" - "\tlsls r1, r6, 1\n" - "\tadds r2, r1, r0\n" - "\tldrh r1, [r2]\n" - "\tmov r9, r0\n" - "\tcmp r1, 0\n" - "\tbeq _08041CF8\n" - "\tmovs r5, 0\n" - "\tcmp r5, r8\n" - "\tbcs _08041CEA\n" - "\tadds r4, r2, 0\n" - "\tldr r2, _08041CDC @ =0x0000ffff\n" - "_08041C9A:\n" - "\tldr r0, _08041CD4 @ =gHatchedEggEggMoves\n" - "\tlsls r1, r5, 1\n" - "\tadds r1, r0\n" - "\tldrh r0, [r4]\n" - "\tldrh r1, [r1]\n" - "\tcmp r0, r1\n" - "\tbne _08041CE0\n" - "\tadds r1, r0, 0\n" - "\tadds r0, r7, 0\n" - "\tstr r2, [sp, 0x8]\n" - "\tbl GiveMoveToMon\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tldr r2, [sp, 0x8]\n" - "\tcmp r0, r2\n" - "\tbne _08041CEA\n" - "\tldrh r1, [r4]\n" - "\tadds r0, r7, 0\n" - "\tbl DeleteFirstMoveAndGiveMoveToMon\n" - "\tb _08041CEA\n" - "\t.align 2, 0\n" - "_08041CC8: .4byte gHatchedEggMotherMoves\n" - "_08041CCC: .4byte gHatchedEggFatherMoves\n" - "_08041CD0: .4byte gHatchedEggFinalMoves\n" - "_08041CD4: .4byte gHatchedEggEggMoves\n" - "_08041CD8: .4byte gHatchedEggLevelUpMoves\n" - "_08041CDC: .4byte 0x0000ffff\n" - "_08041CE0:\n" - "\tadds r0, r5, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r5, r0, 16\n" - "\tcmp r5, r8\n" - "\tbcc _08041C9A\n" - "_08041CEA:\n" - "\tadds r0, r6, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r6, r0, 16\n" - "\tldr r3, _08041E14 @ =gHatchedEggFatherMoves\n" - "\tmov r9, r3\n" - "\tcmp r6, 0x3\n" - "\tbls _08041C82\n" - "_08041CF8:\n" - "\tmovs r6, 0\n" - "_08041CFA:\n" - "\tlsls r0, r6, 1\n" - "\tmov r2, r9\n" - "\tadds r1, r0, r2\n" - "\tldrh r1, [r1]\n" - "\tadds r2, r0, 0\n" - "\tadds r6, 0x1\n" - "\tmov r8, r6\n" - "\tcmp r1, 0\n" - "\tbeq _08041D5C\n" - "\tmovs r5, 0\n" - "\tldr r0, _08041E14 @ =gHatchedEggFatherMoves\n" - "\tadds r4, r2, r0\n" - "\tldr r6, _08041E18 @ =0x0000ffff\n" - "\tmov r9, r0\n" - "_08041D16:\n" - "\tldr r3, _08041E1C @ =0x00000121\n" - "\tadds r0, r5, r3\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tbl ItemIdToBattleMoveId\n" - "\tldrh r1, [r4]\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tcmp r1, r0\n" - "\tbne _08041D52\n" - "\tlsls r1, r5, 24\n" - "\tlsrs r1, 24\n" - "\tadds r0, r7, 0\n" - "\tbl CanMonLearnTMHM\n" - "\tcmp r0, 0\n" - "\tbeq _08041D52\n" - "\tldrh r1, [r4]\n" - "\tadds r0, r7, 0\n" - "\tbl GiveMoveToMon\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tcmp r0, r6\n" - "\tbne _08041D52\n" - "\tldrh r1, [r4]\n" - "\tadds r0, r7, 0\n" - "\tbl DeleteFirstMoveAndGiveMoveToMon\n" - "_08041D52:\n" - "\tadds r0, r5, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r5, r0, 16\n" - "\tcmp r5, 0x39\n" - "\tbls _08041D16\n" - "_08041D5C:\n" - "\tmov r1, r8\n" - "\tlsls r0, r1, 16\n" - "\tlsrs r6, r0, 16\n" - "\tcmp r6, 0x3\n" - "\tbls _08041CFA\n" - "\tmovs r6, 0\n" - "\tmov r2, r9\n" - "\tldrh r0, [r2]\n" - "\tldr r3, _08041E20 @ =gHatchedEggFinalMoves\n" - "\tmov r10, r3\n" - "\tcmp r0, 0\n" - "\tbeq _08041DC6\n" - "\tmov r4, r9\n" - "\tldr r0, _08041E24 @ =gHatchedEggMotherMoves\n" - "\tmov r9, r0\n" - "\tmov r12, r10\n" - "_08041D7C:\n" - "\tmovs r5, 0\n" - "\tlsls r2, r6, 1\n" - "\tadds r6, 0x1\n" - "\tmov r8, r6\n" - "\tadds r3, r2, r4\n" - "_08041D86:\n" - "\tlsls r0, r5, 1\n" - "\tadd r0, r9\n" - "\tldrh r2, [r3]\n" - "\tadds r1, r2, 0\n" - "\tldrh r0, [r0]\n" - "\tcmp r1, r0\n" - "\tbne _08041DA8\n" - "\tcmp r1, 0\n" - "\tbeq _08041DA8\n" - "\tldr r1, [sp]\n" - "\tadds r0, r1, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tstr r0, [sp]\n" - "\tlsls r1, 1\n" - "\tadd r1, r12\n" - "\tstrh r2, [r1]\n" - "_08041DA8:\n" - "\tadds r0, r5, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r5, r0, 16\n" - "\tcmp r5, 0x3\n" - "\tbls _08041D86\n" - "\tmov r1, r8\n" - "\tlsls r0, r1, 16\n" - "\tlsrs r6, r0, 16\n" - "\tcmp r6, 0x3\n" - "\tbhi _08041DC6\n" - "\tlsls r0, r6, 1\n" - "\tadds r0, r4\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbne _08041D7C\n" - "_08041DC6:\n" - "\tmovs r6, 0\n" - "\tmov r2, r10\n" - "\tldrh r0, [r2]\n" - "\tcmp r0, 0\n" - "\tbeq _08041E50\n" - "_08041DD0:\n" - "\tmovs r5, 0\n" - "\tadds r3, r6, 0x1\n" - "\tmov r8, r3\n" - "\tldr r0, [sp, 0x4]\n" - "\tcmp r5, r0\n" - "\tbcs _08041E38\n" - "\tldr r2, _08041E18 @ =0x0000ffff\n" - "_08041DDE:\n" - "\tldr r1, _08041E28 @ =gHatchedEggLevelUpMoves\n" - "\tlsls r0, r5, 1\n" - "\tadds r0, r1\n" - "\tldrh r1, [r0]\n" - "\tcmp r1, 0\n" - "\tbeq _08041E2C\n" - "\tlsls r0, r6, 1\n" - "\tmov r3, r10\n" - "\tadds r4, r0, r3\n" - "\tldrh r0, [r4]\n" - "\tcmp r0, r1\n" - "\tbne _08041E2C\n" - "\tadds r1, r0, 0\n" - "\tadds r0, r7, 0\n" - "\tstr r2, [sp, 0x8]\n" - "\tbl GiveMoveToMon\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tldr r2, [sp, 0x8]\n" - "\tcmp r0, r2\n" - "\tbne _08041E38\n" - "\tldrh r1, [r4]\n" - "\tadds r0, r7, 0\n" - "\tbl DeleteFirstMoveAndGiveMoveToMon\n" - "\tb _08041E38\n" - "\t.align 2, 0\n" - "_08041E14: .4byte gHatchedEggFatherMoves\n" - "_08041E18: .4byte 0x0000ffff\n" - "_08041E1C: .4byte 0x00000121\n" - "_08041E20: .4byte gHatchedEggFinalMoves\n" - "_08041E24: .4byte gHatchedEggMotherMoves\n" - "_08041E28: .4byte gHatchedEggLevelUpMoves\n" - "_08041E2C:\n" - "\tadds r0, r5, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r5, r0, 16\n" - "\tldr r0, [sp, 0x4]\n" - "\tcmp r5, r0\n" - "\tbcc _08041DDE\n" - "_08041E38:\n" - "\tmov r1, r8\n" - "\tlsls r0, r1, 16\n" - "\tlsrs r6, r0, 16\n" - "\tcmp r6, 0x3\n" - "\tbhi _08041E50\n" - "\tldr r0, _08041E60 @ =gHatchedEggFinalMoves\n" - "\tlsls r1, r6, 1\n" - "\tadds r1, r0\n" - "\tldrh r1, [r1]\n" - "\tmov r10, r0\n" - "\tcmp r1, 0\n" - "\tbne _08041DD0\n" - "_08041E50:\n" - "\tadd sp, 0xC\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_08041E60: .4byte gHatchedEggFinalMoves"); -} -#endif static void RemoveEggFromDayCare(struct DayCare *daycare) { @@ -971,7 +627,7 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent // Determine which of the daycare mons is the mother and father of the egg. // The 0th index of the parentSlots array is considered the mother slot, and the // 1st index is the father slot. - for (i = 0; i < 2; i++) + for (i = 0; i < DAYCARE_MON_COUNT; i++) { species[i] = GetBoxMonData(&daycare->mons[i], MON_DATA_SPECIES); if (species[i] == SPECIES_DITTO) @@ -1079,169 +735,47 @@ void GiveEggFromDaycare(void) _GiveEggFromDaycare(&gSaveBlock1.daycare); } -#ifdef NONMATCHING static bool8 _ShouldEggHatch(struct DayCare *daycare) { struct BoxPokemon *parent; u32 i; - int v0; - int steps; - v0 = 0; - for (i=0, parent=&daycare->mons[0]; i<2; parent++, i++) + int numParents; + + numParents = 0; + for (i = 0; i < DAYCARE_MON_COUNT; i++) { - if (GetBoxMonData(parent, MON_DATA_SANITY_BIT2, v0)) + parent = &daycare->mons[i]; + if (GetBoxMonData(parent, MON_DATA_SANITY_BIT2)) { daycare->misc.countersEtc.steps[i]++; - v0++; + numParents++; } } - if (daycare->misc.countersEtc.pendingEggPersonality == 0 && v0 == 2 && daycare->misc.extra.misc[4] == 0xff && GetDaycareCompatibilityScore(daycare) > (u32)((u32)(Random() * 100) / 0xffff)) - { + + if (daycare->misc.countersEtc.pendingEggPersonality == 0 && numParents == 2 && (daycare->misc.countersEtc.steps[1] % 256) == 255 && GetDaycareCompatibilityScore(daycare) > (u32)(Random() * 100) / 0xffff) TriggerPendingDaycareEgg(); - } - if ((++daycare->misc.countersEtc.eggCycleStepsRemaining) == 0xff) + + if (++daycare->misc.countersEtc.eggCycleStepsRemaining == 255) { - for (i=0; i<gPlayerPartyCount; i++) + for (i = 0; i < gPlayerPartyCount; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) { - steps = GetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP); - if (steps == 0) + int friendship = GetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP); + if (friendship == 0) { gSpecialVar_0x8004 = i; return TRUE; } - steps--; - SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &steps); + + friendship--; + SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &friendship); } } } + return FALSE; } -#else -NAKED -static bool8 _ShouldEggHatch(struct DayCare *daycare) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tsub sp, 0x8\n" - "\tadds r7, r0, 0\n" - "\tmovs r2, 0\n" - "\tmovs r6, 0\n" - "\tadds r5, r7, 0\n" - "_080421BC:\n" - "\tlsls r4, r6, 2\n" - "\tadds r0, r5, 0\n" - "\tmovs r1, 0x5\n" - "\tstr r2, [sp, 0x4]\n" - "\tbl GetBoxMonData\n" - "\tldr r2, [sp, 0x4]\n" - "\tcmp r0, 0\n" - "\tbeq _080421DE\n" - "\tmovs r0, 0x88\n" - "\tlsls r0, 1\n" - "\tadds r1, r7, r0\n" - "\tadds r1, r4\n" - "\tldr r0, [r1]\n" - "\tadds r0, 0x1\n" - "\tstr r0, [r1]\n" - "\tadds r2, 0x1\n" - "_080421DE:\n" - "\tadds r5, 0x50\n" - "\tadds r6, 0x1\n" - "\tcmp r6, 0x1\n" - "\tbls _080421BC\n" - "\tmovs r1, 0x8C\n" - "\tlsls r1, 1\n" - "\tadds r0, r7, r1\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbne _08042226\n" - "\tcmp r2, 0x2\n" - "\tbne _08042226\n" - "\tsubs r1, 0x4\n" - "\tadds r0, r7, r1\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0xFF\n" - "\tbne _08042226\n" - "\tadds r0, r7, 0\n" - "\tbl GetDaycareCompatibilityScore\n" - "\tadds r4, r0, 0\n" - "\tlsls r4, 24\n" - "\tlsrs r4, 24\n" - "\tbl Random\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tmovs r1, 0x64\n" - "\tmuls r0, r1\n" - "\tldr r1, _08042240 @ =0x0000ffff\n" - "\tbl __udivsi3\n" - "\tcmp r4, r0\n" - "\tbls _08042226\n" - "\tbl TriggerPendingDaycareEgg\n" - "_08042226:\n" - "\tmovs r0, 0x8D\n" - "\tlsls r0, 1\n" - "\tadds r1, r7, r0\n" - "\tldrb r0, [r1]\n" - "\tadds r0, 0x1\n" - "\tstrb r0, [r1]\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0xFF\n" - "\tbne _08042290\n" - "\tmovs r6, 0\n" - "\tb _08042288\n" - "\t.align 2, 0\n" - "_08042240: .4byte 0x0000ffff\n" - "_08042244:\n" - "\tmovs r0, 0x64\n" - "\tadds r1, r6, 0\n" - "\tmuls r1, r0\n" - "\tldr r0, _08042270 @ =gPlayerParty\n" - "\tadds r4, r1, r0\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0x2D\n" - "\tbl GetMonData\n" - "\tcmp r0, 0\n" - "\tbeq _08042286\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0x20\n" - "\tbl GetMonData\n" - "\tstr r0, [sp]\n" - "\tcmp r0, 0\n" - "\tbne _08042278\n" - "\tldr r0, _08042274 @ =gSpecialVar_0x8004\n" - "\tstrh r6, [r0]\n" - "\tmovs r0, 0x1\n" - "\tb _08042292\n" - "\t.align 2, 0\n" - "_08042270: .4byte gPlayerParty\n" - "_08042274: .4byte gSpecialVar_0x8004\n" - "_08042278:\n" - "\tsubs r0, 0x1\n" - "\tstr r0, [sp]\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0x20\n" - "\tmov r2, sp\n" - "\tbl SetMonData\n" - "_08042286:\n" - "\tadds r6, 0x1\n" - "_08042288:\n" - "\tldr r0, _0804229C @ =gPlayerPartyCount\n" - "\tldrb r0, [r0]\n" - "\tcmp r6, r0\n" - "\tbcc _08042244\n" - "_08042290:\n" - "\tmovs r0, 0\n" - "_08042292:\n" - "\tadd sp, 0x8\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1\n" - "\t.align 2, 0\n" - "_0804229C: .4byte gPlayerPartyCount"); -} -#endif bool8 ShouldEggHatch(void) { @@ -1305,21 +839,17 @@ u8 GetDaycareState(void) return 0; } -#ifdef NONMATCHING -static -#endif -bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2) +static bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2) { // Determine if the two given egg group lists contain any of the // same egg groups. s32 i, j; - u16 *v0, *v1, v2; - for (i = 0, v0 = eggGroups1; i < 2; v0++, i++) + for (i = 0; i < DAYCARE_MON_COUNT; i++) { - for (j = 0, v2 = *v0, v1 = eggGroups2; j < 2; v1++, j++) + for (j = 0; j < DAYCARE_MON_COUNT; j++) { - if (v2 == *v1) + if (eggGroups1[i] == eggGroups2[j]) { return TRUE; } @@ -1329,226 +859,58 @@ bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2) return FALSE; } -#ifdef NONMATCHING static u8 GetDaycareCompatibilityScore(struct DayCare *daycare) { + u32 i; + u16 eggGroups[2][2]; u16 species[2]; - u32 otIds[2]; u32 genders[2]; - u16 eggGroups[2][2]; - int i; - u16 *spc; - u32 *ids; - u32 *gnd; - u16 *egg1; - u16 *egg2; - struct BoxPokemon *parent; + u32 otIds[2]; + u32 personality; - for (i=0, parent=&daycare->mons[0], spc=species, ids=otIds, gnd=genders, egg1=&eggGroups[0][0], egg2=&eggGroups[0][1]; i<2; spc++, egg1+=2, egg2+=2, parent++, i++) + for (i = 0; i < DAYCARE_MON_COUNT; i++) { - *spc = GetBoxMonData(parent, MON_DATA_SPECIES); - *ids++ = GetBoxMonData(parent, MON_DATA_OT_ID); - *gnd++ = GetGenderFromSpeciesAndPersonality(*spc, GetBoxMonData(parent, MON_DATA_PERSONALITY)); - *egg1 = gBaseStats[*spc].eggGroup1; - *egg2 = gBaseStats[*spc].eggGroup2; - } - if (eggGroups[0][0] == 0xf) - { - return 0; + species[i] = GetBoxMonData(&daycare->mons[i], MON_DATA_SPECIES); + otIds[i] = GetBoxMonData(&daycare->mons[i], MON_DATA_OT_ID); + personality = GetBoxMonData(&daycare->mons[i], MON_DATA_PERSONALITY); + genders[i] = GetGenderFromSpeciesAndPersonality(species[i], personality); + eggGroups[i][0] = gBaseStats[species[i]].eggGroup1; + eggGroups[i][1] = gBaseStats[species[i]].eggGroup2; } - if (eggGroups[1][0] == 0xf) - { + + if (eggGroups[0][0] == EGG_GROUP_UNDISCOVERED || eggGroups[1][0] == EGG_GROUP_UNDISCOVERED) return 0; - } - if (eggGroups[0][0] == 0xd && eggGroups[1][0] == 0xd) - { + + if (eggGroups[0][0] == EGG_GROUP_DITTO && eggGroups[1][0] == EGG_GROUP_DITTO) return 0; - } - else if (eggGroups[0][0] == 0xd || eggGroups[1][0] == 0xd) + + if (eggGroups[0][0] == EGG_GROUP_DITTO || eggGroups[1][0] == EGG_GROUP_DITTO) { if (otIds[0] == otIds[1]) - { return 20; - } - return 50; + else + return 50; } + if (genders[0] == genders[1] || genders[0] == MON_GENDERLESS || genders[1] == MON_GENDERLESS) - { return 0; - } + if (!EggGroupsOverlap(eggGroups[0], eggGroups[1])) - { return 0; - } + if (species[0] == species[1]) { if (otIds[0] == otIds[1]) - { return 50; - } - return 70; + else + return 70; } + + if (otIds[0] != otIds[1]) + return 50; else - { - if (otIds[0] != otIds[1]) - { - return 50; - } return 20; - } -} -#else -NAKED -static u8 GetDaycareCompatibilityScore(struct DayCare *daycare) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x2C\n" - "\tmovs r1, 0\n" - "\tmov r8, r1\n" - "\tmov r2, sp\n" - "\tadds r2, 0x8\n" - "\tstr r2, [sp, 0x1C]\n" - "\tadd r1, sp, 0xC\n" - "\tmov r10, r1\n" - "\tadds r2, 0xC\n" - "\tstr r2, [sp, 0x20]\n" - "\tmov r1, sp\n" - "\tadds r1, 0x2\n" - "\tldr r2, _08042488 @ =gBaseStats\n" - "\tmov r9, r2\n" - "\tldr r5, [sp, 0x1C]\n" - "\tadds r7, r1, 0\n" - "\tmov r6, sp\n" - "\tldr r1, [sp, 0x20]\n" - "\tstr r1, [sp, 0x24]\n" - "\tmov r2, r10\n" - "\tstr r2, [sp, 0x28]\n" - "\tadds r4, r0, 0\n" - "_0804240E:\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0xB\n" - "\tbl GetBoxMonData\n" - "\tstrh r0, [r5]\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0x1\n" - "\tbl GetBoxMonData\n" - "\tldr r1, [sp, 0x28]\n" - "\tstm r1!, {r0}\n" - "\tstr r1, [sp, 0x28]\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0\n" - "\tbl GetBoxMonData\n" - "\tadds r1, r0, 0\n" - "\tldrh r0, [r5]\n" - "\tbl GetGenderFromSpeciesAndPersonality\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tldr r2, [sp, 0x24]\n" - "\tstm r2!, {r0}\n" - "\tstr r2, [sp, 0x24]\n" - "\tldrh r1, [r5]\n" - "\tlsls r0, r1, 3\n" - "\tsubs r0, r1\n" - "\tlsls r0, 2\n" - "\tadd r0, r9\n" - "\tldrb r0, [r0, 0x14]\n" - "\tstrh r0, [r6]\n" - "\tldrh r1, [r5]\n" - "\tlsls r0, r1, 3\n" - "\tsubs r0, r1\n" - "\tlsls r0, 2\n" - "\tadd r0, r9\n" - "\tldrb r0, [r0, 0x15]\n" - "\tstrh r0, [r7]\n" - "\tadds r5, 0x2\n" - "\tadds r7, 0x4\n" - "\tadds r6, 0x4\n" - "\tadds r4, 0x50\n" - "\tmovs r0, 0x1\n" - "\tadd r8, r0\n" - "\tmov r1, r8\n" - "\tcmp r1, 0x1\n" - "\tbls _0804240E\n" - "\tmov r0, sp\n" - "\tldrh r1, [r0]\n" - "\tcmp r1, 0xF\n" - "\tbeq _08042484\n" - "\tldrh r0, [r0, 0x4]\n" - "\tcmp r0, 0xF\n" - "\tbeq _08042484\n" - "\tcmp r1, 0xD\n" - "\tbne _0804248C\n" - "\tcmp r0, 0xD\n" - "\tbne _08042490\n" - "_08042484:\n" - "\tmovs r0, 0\n" - "\tb _080424E4\n" - "\t.align 2, 0\n" - "_08042488: .4byte gBaseStats\n" - "_0804248C:\n" - "\tcmp r0, 0xD\n" - "\tbne _0804249C\n" - "_08042490:\n" - "\tldr r1, [sp, 0xC]\n" - "\tmov r2, r10\n" - "\tldr r0, [r2, 0x4]\n" - "\tcmp r1, r0\n" - "\tbeq _080424DE\n" - "\tb _080424E2\n" - "_0804249C:\n" - "\tldr r0, [sp, 0x14]\n" - "\tldr r2, [sp, 0x20]\n" - "\tldr r1, [r2, 0x4]\n" - "\tcmp r0, r1\n" - "\tbeq _08042484\n" - "\tcmp r0, 0xFF\n" - "\tbeq _08042484\n" - "\tcmp r1, 0xFF\n" - "\tbeq _08042484\n" - "\tadd r1, sp, 0x4\n" - "\tmov r0, sp\n" - "\tbl EggGroupsOverlap\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _08042484\n" - "\tldr r0, [sp, 0x1C]\n" - "\tldrh r1, [r0, 0x2]\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, r1\n" - "\tbne _080424D4\n" - "\tldr r1, [sp, 0xC]\n" - "\tmov r2, r10\n" - "\tldr r0, [r2, 0x4]\n" - "\tcmp r1, r0\n" - "\tbeq _080424E2\n" - "\tmovs r0, 0x46\n" - "\tb _080424E4\n" - "_080424D4:\n" - "\tldr r1, [sp, 0xC]\n" - "\tmov r2, r10\n" - "\tldr r0, [r2, 0x4]\n" - "\tcmp r1, r0\n" - "\tbne _080424E2\n" - "_080424DE:\n" - "\tmovs r0, 0x14\n" - "\tb _080424E4\n" - "_080424E2:\n" - "\tmovs r0, 0x32\n" - "_080424E4:\n" - "\tadd sp, 0x2C\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1"); } -#endif u8 GetDaycareCompatibilityScoreFromSave(void) { @@ -1619,7 +981,7 @@ static void GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest) u8 i; *dest = EOS; - for (i = 0; i < 2; i++) + for (i = 0; i < DAYCARE_MON_COUNT; i++) { GetBoxMonNick(&daycare->mons[i], monNames[i]); AppendMonGenderSymbol(monNames[i], &daycare->mons[i]); @@ -1638,7 +1000,7 @@ static void GetDaycareLevelMenuLevelText(struct DayCare *daycare, u8 *dest) u8 level; *dest = EOS; - for (i = 0; i < 2; i++) + for (i = 0; i < DAYCARE_MON_COUNT; i++) { level = GetLevelAfterDaycareSteps(&daycare->mons[i], daycare->misc.countersEtc.steps[i]); dest[0] = 0x34; |