mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-11-16 19:47:35 +01:00
Merge pull request #1352 from huderlem/GetOpponentMostCommonMonType
Document GetOpponentMostCommonMonType and fix its fake matching
This commit is contained in:
commit
8bfd1370c9
@ -592,39 +592,58 @@ static void GenerateInitialRentalMons(void)
|
||||
}
|
||||
}
|
||||
|
||||
// Determines if the upcoming opponent has a single most-common
|
||||
// type in its party. If there are two different types that are
|
||||
// tied, then the opponent is deemed to have no preferred type,
|
||||
// and NUMBER_OF_MON_TYPES is the result.
|
||||
static void GetOpponentMostCommonMonType(void)
|
||||
{
|
||||
u8 i;
|
||||
u8 typesCount[NUMBER_OF_MON_TYPES];
|
||||
u8 usedType[2];
|
||||
u8 typeCounts[NUMBER_OF_MON_TYPES];
|
||||
u8 mostCommonTypes[2];
|
||||
|
||||
gFacilityTrainerMons = gBattleFrontierMons;
|
||||
for (i = 0; i < NUMBER_OF_MON_TYPES; i++)
|
||||
typesCount[i] = 0;
|
||||
|
||||
// Count the number of times each type occurs in the opponent's party.
|
||||
for (i = TYPE_NORMAL; i < NUMBER_OF_MON_TYPES; i++)
|
||||
typeCounts[i] = 0;
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
u32 species = gFacilityTrainerMons[gFrontierTempParty[i]].species;
|
||||
|
||||
typesCount[gBaseStats[species].type1]++;
|
||||
typeCounts[gBaseStats[species].type1]++;
|
||||
if (gBaseStats[species].type1 != gBaseStats[species].type2)
|
||||
typesCount[gBaseStats[species].type2]++;
|
||||
typeCounts[gBaseStats[species].type2]++;
|
||||
}
|
||||
|
||||
usedType[0] = 0;
|
||||
usedType[1] = 0;
|
||||
for (i = 1; i < NUMBER_OF_MON_TYPES; i++)
|
||||
// Determine which are the two most-common types.
|
||||
// The second most-common type is only updated if
|
||||
// its count is equal to the most-common type.
|
||||
mostCommonTypes[0] = TYPE_NORMAL;
|
||||
mostCommonTypes[1] = TYPE_NORMAL;
|
||||
for (i = TYPE_FIGHTING; i < NUMBER_OF_MON_TYPES; i++)
|
||||
{
|
||||
if (typesCount[usedType[0]] < typesCount[i])
|
||||
usedType[0] = i;
|
||||
else if (typesCount[usedType[0]] == typesCount[i])
|
||||
usedType[1] = i;
|
||||
if (typeCounts[mostCommonTypes[0]] < typeCounts[i])
|
||||
mostCommonTypes[0] = i;
|
||||
else if (typeCounts[mostCommonTypes[0]] == typeCounts[i])
|
||||
mostCommonTypes[1] = i;
|
||||
}
|
||||
|
||||
gSpecialVar_Result = gSpecialVar_Result; // Needed to match. Don't ask me why.
|
||||
if (typesCount[usedType[0]] != 0 && (typesCount[usedType[0]] > typesCount[usedType[1]] || usedType[0] == usedType[1]))
|
||||
gSpecialVar_Result = usedType[0];
|
||||
if (typeCounts[mostCommonTypes[0]] != 0)
|
||||
{
|
||||
// The most-common type must be strictly greater than
|
||||
// the second-most-common type, or the top two must be
|
||||
// the same type.
|
||||
if (typeCounts[mostCommonTypes[0]] > typeCounts[mostCommonTypes[1]])
|
||||
gSpecialVar_Result = mostCommonTypes[0];
|
||||
else if (mostCommonTypes[0] == mostCommonTypes[1])
|
||||
gSpecialVar_Result = mostCommonTypes[0];
|
||||
else
|
||||
gSpecialVar_Result = NUMBER_OF_MON_TYPES;
|
||||
}
|
||||
else
|
||||
{
|
||||
gSpecialVar_Result = NUMBER_OF_MON_TYPES;
|
||||
}
|
||||
}
|
||||
|
||||
static void GetOpponentBattleStyle(void)
|
||||
|
Loading…
Reference in New Issue
Block a user