get rid of apprentice fakematching(s)

This commit is contained in:
ProjectRevoTPP 2021-04-22 16:40:46 -04:00
parent ddc1534098
commit 5c51a3ecc6

View File

@ -322,17 +322,8 @@ static void SetRandomQuestionData(void)
FREE_AND_SET_NULL(gApprenticePartyMovesData);
}
// No idea why a do-while loop is needed, but it will not match without it.
#define APPRENTICE_SPECIES_ID(speciesArrId, monId) speciesArrId = (PLAYER_APPRENTICE.speciesIds[monId] >> \
(((PLAYER_APPRENTICE.party >> monId) & 1) << 2)) & 0xF; \
do {} while (0)
// Why the need to have two macros do the exact thing differently?
#define APPRENTICE_SPECIES_ID_2(speciesArrId, monId) { u8 a0 = ((PLAYER_APPRENTICE.party >> monId) & 1);\
speciesArrId = PLAYER_APPRENTICE.speciesIds[monId]; \
speciesArrId = ((speciesArrId) >> (a0 << 2)) & 0xF; \
}
#define APPRENTICE_SPECIES_ID(monId) \
((monId < MULTI_PARTY_SIZE) ? (PLAYER_APPRENTICE.speciesIds[monId] >> (((PLAYER_APPRENTICE.party >> monId) & 1) << 2) & 0xF) : 0)
// Get the second move choice for the "Which move" question
// Unlike the first move choice, this can be either a level up move or a TM/HM move
@ -348,15 +339,7 @@ static u16 GetRandomAlternateMove(u8 monId)
bool32 shouldUseMove;
u8 level;
if (monId < MULTI_PARTY_SIZE)
{
APPRENTICE_SPECIES_ID(id, monId);
}
else
{
id = 0;
}
id = APPRENTICE_SPECIES_ID(monId);
species = gApprentices[PLAYER_APPRENTICE.id].species[id];
learnset = gLevelUpLearnsets[species];
j = 0;
@ -551,7 +534,7 @@ static void SaveApprenticeParty(u8 numQuestions)
// Save party species
for (i = 0; i < MULTI_PARTY_SIZE; i++)
{
APPRENTICE_SPECIES_ID(speciesTableId, i);
speciesTableId = APPRENTICE_SPECIES_ID(i);
apprenticeMons[i]->species = gApprentices[PLAYER_APPRENTICE.id].species[speciesTableId];
GetLatestLearnedMoves(apprenticeMons[i]->species, apprenticeMons[i]->moves);
}
@ -605,7 +588,7 @@ static void CreateApprenticeMenu(u8 menu)
u16 species;
u32 speciesTableId;
APPRENTICE_SPECIES_ID(speciesTableId, i);
speciesTableId = APPRENTICE_SPECIES_ID(i);
species = gApprentices[PLAYER_APPRENTICE.id].species[speciesTableId];
strings[i] = gSpeciesNames[species];
}
@ -1014,9 +997,12 @@ static void InitQuestionData(void)
&& PLAYER_APPRENTICE.questionsAnswered < count + NUM_WHICH_MON_QUESTIONS
&& PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].questionId == QUESTION_ID_WHICH_MOVE)
{
u8 a0;
// count re-used as monId
count = PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].monId;
APPRENTICE_SPECIES_ID_2(id1, count);
a0 = ((PLAYER_APPRENTICE.party >> count) & 1);
id1 = PLAYER_APPRENTICE.speciesIds[count];
id1 = ((id1) >> (a0 << 2)) & 0xF;
gApprenticeQuestionData->speciesId = gApprentices[PLAYER_APPRENTICE.id].species[id1];
gApprenticeQuestionData->moveId1 = GetDefaultMove(count, id1, PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].moveSlot);
gApprenticeQuestionData->moveId2 = PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].data;
@ -1028,9 +1014,12 @@ static void InitQuestionData(void)
&& PLAYER_APPRENTICE.questionsAnswered < count + NUM_WHICH_MON_QUESTIONS
&& PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].questionId == QUESTION_ID_WHAT_ITEM)
{
u8 a0;
// count re-used as monId
count = PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].monId;
APPRENTICE_SPECIES_ID_2(id2, count);
a0 = ((PLAYER_APPRENTICE.party >> count) & 1);
id2 = PLAYER_APPRENTICE.speciesIds[count];
id2 = ((id2) >> (a0 << 2)) & 0xF;
gApprenticeQuestionData->speciesId = gApprentices[PLAYER_APPRENTICE.id].species[id2];
}
}
@ -1097,14 +1086,7 @@ static void ApprenticeBufferString(void)
StringCopy(stringDst, gStringVar4);
break;
case APPRENTICE_BUFF_LEAD_MON_SPECIES:
if (PLAYER_APPRENTICE.leadMonId < MULTI_PARTY_SIZE)
{
APPRENTICE_SPECIES_ID(speciesArrayId, PLAYER_APPRENTICE.leadMonId);
}
else
{
speciesArrayId = 0;
}
speciesArrayId = APPRENTICE_SPECIES_ID(PLAYER_APPRENTICE.leadMonId);
StringCopy(stringDst, gSpeciesNames[gApprentices[PLAYER_APPRENTICE.id].species[speciesArrayId]]);
break;
}