summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2021-04-22 16:40:46 -0400
committerProjectRevoTPP <projectrevotpp@hotmail.com>2021-04-22 16:40:46 -0400
commit5c51a3ecc6558caca77e59761150def944cbb76c (patch)
tree43e74d639516f711fe63e66699e1510280dbaaaf
parentddc15340980898a949e2ece62ce9c846a992a4b6 (diff)
get rid of apprentice fakematching(s)
-rw-r--r--src/apprentice.c46
1 files changed, 14 insertions, 32 deletions
diff --git a/src/apprentice.c b/src/apprentice.c
index 7053a8b63..0afee8d9b 100644
--- a/src/apprentice.c
+++ b/src/apprentice.c
@@ -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;
}