diff options
author | DizzyEggg <jajkodizzy@wp.pl> | 2018-11-01 21:31:10 +0100 |
---|---|---|
committer | DizzyEggg <jajkodizzy@wp.pl> | 2018-11-01 21:31:10 +0100 |
commit | 0bb51037d7d3e257a84b1488016441aafd34b020 (patch) | |
tree | 80be30e68eb7b53be9cc85c5e4b55c09140b546d /src | |
parent | 37d742cbd86eab628e0d84d5957a805c407b0948 (diff) |
Finish frontier util
Diffstat (limited to 'src')
-rw-r--r-- | src/apprentice.c | 2 | ||||
-rw-r--r-- | src/battle_dome.c | 26 | ||||
-rw-r--r-- | src/battle_tent.c | 2 | ||||
-rw-r--r-- | src/battle_tower.c | 16 | ||||
-rw-r--r-- | src/field_control_avatar.c | 3 | ||||
-rw-r--r-- | src/field_poison.c | 2 | ||||
-rw-r--r-- | src/fieldmap.c | 2 | ||||
-rw-r--r-- | src/frontier_util.c | 789 | ||||
-rwxr-xr-x | src/item_menu.c | 2 | ||||
-rw-r--r-- | src/new_game.c | 20 | ||||
-rw-r--r-- | src/pokemon_summary_screen.c | 2 | ||||
-rw-r--r-- | src/record_mixing.c | 24 | ||||
-rw-r--r-- | src/recorded_battle.c | 22 | ||||
-rw-r--r-- | src/scrcmd.c | 5 | ||||
-rw-r--r-- | src/start_menu.c | 2 | ||||
-rw-r--r-- | src/walda_phrase.c | 2 |
16 files changed, 765 insertions, 156 deletions
diff --git a/src/apprentice.c b/src/apprentice.c index b4c1f849e..2feac49a7 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -2238,7 +2238,7 @@ static void sub_81A1370(void) r9 = -1; for (i = 1; i < 4; i++) { - if (ReadUnalignedWord(gSaveBlock2Ptr->apprentices[i].playerId) == ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId) + if (GetTrainerId(gSaveBlock2Ptr->apprentices[i].playerId) == GetTrainerId(gSaveBlock2Ptr->playerTrainerId) && gSaveBlock2Ptr->apprentices[i].number < r10) { r10 = gSaveBlock2Ptr->apprentices[i].number; diff --git a/src/battle_dome.c b/src/battle_dome.c index ba8cf6185..d5489f529 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -57,12 +57,12 @@ struct UnkStruct_860DD10 }; extern void sub_81B8558(void); -extern u16 sub_81A5060(u8 monId, u8 moveSlotId); -extern u8 sub_81A50F0(u8, u8); -extern u8 sub_81A50B0(u8); +extern u16 GetFrontierBrainMonMove(u8 monId, u8 moveSlotId); +extern u8 GetFrontierBrainMonEvs(u8, u8); +extern u8 GetFrontierBrainMonNature(u8); extern void sub_81A4C30(void); extern u8 sub_81A3610(void); -extern u16 sub_81A4FF0(u8); +extern u16 GetFrontierBrainMonSpecies(u8); extern void ReducePlayerPartyToThree(void); extern u8 gUnknown_0203CEF8[]; @@ -2737,7 +2737,7 @@ static void InitDomeTrainers(void) } for (i = 0; i < 3; i++) - gSaveBlock2Ptr->frontier.domeMonIds[j][i] = sub_81A4FF0(i); + gSaveBlock2Ptr->frontier.domeMonIds[j][i] = GetFrontierBrainMonSpecies(i); } Free(statSums); @@ -2856,7 +2856,7 @@ static void CreateDomeTrainerMons(u16 tournamentTrainerId) s32 i, bits; ZeroEnemyPartyMons(); - bits = GetTrainerMonCountInBits(tournamentTrainerId); + bits = GetDomeTrainerMonCountInBits(tournamentTrainerId); otId = Random32(); if (Random() % 10 > 5) { @@ -2884,7 +2884,7 @@ static void CreateDomeTrainerMons(u16 tournamentTrainerId) } } -s32 GetTrainerMonCountInBits(u16 tournamentTrainerId) +s32 GetDomeTrainerMonCountInBits(u16 tournamentTrainerId) { s32 bits; if (Random() & 1) @@ -2917,7 +2917,7 @@ static s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1) { if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) { - array[i] += GetTypeEffectivenessPoints(sub_81A5060(i, moveId), + array[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId), GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0); } else @@ -2945,7 +2945,7 @@ static s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1) { if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) { - array[i] += GetTypeEffectivenessPoints(sub_81A5060(i, moveId), + array[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId), GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1); } else @@ -4875,7 +4875,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) for (k = 0; k < DOME_TOURNAMENT_TRAINERS_COUNT; k++) { if (trainerId == TRAINER_FRONTIER_BRAIN) - allocatedArray[k] += sMovePointsForDomeTrainers[sub_81A5060(i, j)][k]; + allocatedArray[k] += sMovePointsForDomeTrainers[GetFrontierBrainMonMove(i, j)][k]; else if (trainerId == TRAINER_PLAYER) allocatedArray[k] += sMovePointsForDomeTrainers[gSaveBlock2Ptr->frontier.field_EFC[i].moves[j]][k]; else @@ -4916,7 +4916,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) for (j = 0; j < 6; j++) { if (trainerId == TRAINER_FRONTIER_BRAIN) - allocatedArray[j] = sub_81A50F0(i, j); + allocatedArray[j] = GetFrontierBrainMonEvs(i, j); else allocatedArray[j] = gSaveBlock2Ptr->frontier.field_EFC[i].evs[j]; } @@ -4924,7 +4924,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) for (j = 0; j < 5; j++) { if (trainerId == TRAINER_FRONTIER_BRAIN) - nature = sub_81A50B0(i); + nature = GetFrontierBrainMonNature(i); else nature = gSaveBlock2Ptr->frontier.field_EFC[i].nature; @@ -5564,7 +5564,7 @@ static u16 GetWinningMove(s32 winnerTournamentId, s32 loserTournamentId, u8 roun { moveScores[i * 4 + j] = 0; if (gSaveBlock2Ptr->frontier.domeTrainers[winnerTournamentId].trainerId == TRAINER_FRONTIER_BRAIN) - moveIds[i * 4 + j] = sub_81A5060(i, j); + moveIds[i * 4 + j] = GetFrontierBrainMonMove(i, j); else moveIds[i * 4 + j] = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[winnerTournamentId][i]].moves[j]; diff --git a/src/battle_tent.c b/src/battle_tent.c index 9c66a0325..f3aec1345 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -19,6 +19,8 @@ extern const u16 gBattleFrontierHeldItems[]; extern u16 gUnknown_03006298[]; +extern void sub_81A4C30(void); + // This file's functions. static void sub_81B99D4(void); static void sub_81B9A28(void); diff --git a/src/battle_tower.c b/src/battle_tower.c index f02336ef5..e95eaf156 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -9,7 +9,6 @@ #include "main.h" #include "international_string_util.h" #include "battle.h" -#include "battle_frontier_1.h" #include "frontier_util.h" #include "recorded_battle.h" #include "easy_chat.h" @@ -30,14 +29,9 @@ extern u16 gUnknown_03006298[]; -extern void sub_81A3ACC(void); -extern void CreateFrontierBrainPokemon(void); extern void sub_81A6CD0(void); -extern void SetFrontierBrainTrainerGfxId(void); -extern u8 GetFrontierBrainTrainerPicIndex(void); -extern u8 GetFrontierBrainTrainerClass(void); -extern u8 IsFrontierBrainFemale(void); -extern void CopyFrontierBrainTrainerName(u8 *dst); +extern void sub_81A4C30(void); +extern u8 sub_81A6CA8(u8, u8); extern void SetMonMoveAvoidReturn(struct Pokemon *mon, u16 move, u8 moveSlot); extern const u8 *const *const gUnknown_085DD690[]; @@ -525,7 +519,7 @@ void SetBattleFacilityTrainerGfxId(u16 trainerId, u8 tempVarId) } else if (trainerId == TRAINER_FRONTIER_BRAIN) { - SetFrontierBrainTrainerGfxId(); + SetFrontierBrainEventObjGfx_2(); return; } else if (trainerId < TRAINER_RECORD_MIXING_FRIEND) @@ -1509,7 +1503,7 @@ static void sub_8163EE4(void) } playerRecord->lvlMode = lvlMode; playerRecord->facilityClass = class; - CopyUnalignedWord(playerRecord->trainerId, gSaveBlock2Ptr->playerTrainerId); + CopyTrainerId(playerRecord->trainerId, gSaveBlock2Ptr->playerTrainerId); StringCopy7(playerRecord->name, gSaveBlock2Ptr->playerName); playerRecord->winStreak = GetCurrentBattleTowerWinStreak(lvlMode, battleMode); @@ -2165,7 +2159,7 @@ static void FillEReaderTrainerWithPlayerData(void) + gSaveBlock2Ptr->playerTrainerId[2] + gSaveBlock2Ptr->playerTrainerId[3]) % ARRAY_COUNT(gTowerMaleFacilityClasses)]; } - CopyUnalignedWord(ereaderTrainer->trainerId, gSaveBlock2Ptr->playerTrainerId); + CopyTrainerId(ereaderTrainer->trainerId, gSaveBlock2Ptr->playerTrainerId); StringCopy7(ereaderTrainer->name, gSaveBlock2Ptr->playerName); ereaderTrainer->winStreak = 1; diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index fef403c04..738826020 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -1,6 +1,5 @@ #include "global.h" #include "battle_setup.h" -#include "battle_frontier_1.h" #include "bike.h" #include "coord_event_weather.h" #include "daycare.h" @@ -31,6 +30,8 @@ #include "constants/map_types.h" #include "constants/songs.h" +extern bool32 sub_8196034(void); + static EWRAM_DATA u8 sWildEncounterImmunitySteps = 0; static EWRAM_DATA u16 sPreviousPlayerMetatileBehavior = 0; diff --git a/src/field_poison.c b/src/field_poison.c index c11f01a45..e2fd994fc 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -14,6 +14,8 @@ #include "fldeff_80F9BCC.h" #include "field_poison.h" +extern bool8 InBattlePike(void); + static bool32 sub_80F9568(struct Pokemon *pokemon) { u16 species = GetMonData(pokemon, MON_DATA_SPECIES2); diff --git a/src/fieldmap.c b/src/fieldmap.c index 70132ff17..5019b5dc7 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -14,6 +14,8 @@ #include "secret_base.h" #include "tv.h" +extern void sub_81AA078(u16*, u8); + struct ConnectionFlags { u8 south:1; diff --git a/src/frontier_util.c b/src/frontier_util.c index 729b1e622..33cef0ac6 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -33,25 +33,55 @@ #include "constants/species.h" #include "constants/game_stat.h" #include "constants/moves.h" +#include "constants/items.h" +#include "constants/event_objects.h" extern u8 gUnknown_0203CEF8[]; -extern void (* const gUnknown_08611C18[])(void); -extern const u16 gUnknown_08611BFC[][2]; +struct FrontierBrainMon +{ + u16 species; + u16 heldItem; + u8 fixedIV; + u8 nature; + u8 evs[6]; + u16 moves[4]; +}; + extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; -extern const struct WindowTemplate gUnknown_08611C74; -extern const struct WindowTemplate gUnknown_08611C7C; -extern const struct WindowTemplate gUnknown_08611C84; -extern const u8 gUnknown_086118B4[29][7][4]; -extern const u16 gUnknown_08611C9A[]; extern const u8 *const gUnknown_08611D08[]; extern const u8 *const gUnknown_08611CB0[][2]; extern const u8 *const gUnknown_08611D00[]; +extern const u8 *const *const gUnknown_08611DB0[]; +extern const u8 *const *const gUnknown_08611DB8[]; +extern const u16 gFacilityToBrainTrainerId[]; extern void sub_81B8558(void); // This file's functions. -u8 sub_81A3B30(u8 facility); +static void sub_81A17A0(void); +static void sub_81A1830(void); +static void sub_81A1968(void); +static void sub_81A1AD4(void); +static void DoSoftReset_(void); +static void sub_81A1B28(void); +static void sub_81A1B38(void); +static void ShowFacilityResultsWindow(void); +static void sub_81A31FC(void); +static void sub_81A35EC(void); +static void sub_81A3B00(void); +static void sub_81A3B64(void); +static void sub_81A3D30(void); +static void sub_81A3D58(void); +static void sub_81A3DA0(void); +static void sub_81A3FD4(void); +static void sub_81A4224(void); +static void sub_81A4230(void); +static void sub_81A43A8(void); +static void sub_81A4410(void); +static void sub_81A443C(void); +static void sub_81A447C(void); +static void sub_81A457C(void); static void ShowTowerResultsWindow(u8); static void ShowDomeResultsWindow(u8); static void ShowPalaceResultsWindow(u8); @@ -60,12 +90,10 @@ static void ShowFactoryResultsWindow(u8); static void ShowArenaResultsWindow(void); static void ShowPyramidResultsWindow(void); static void ShowLinkContestResultsWindow(void); -u8 sub_81A3610(void); static void CopyFrontierBrainText(bool8 playerWonText); -void sub_81A5030(u8); // const rom data -const u8 gUnknown_08611550[][4] = +static const u8 gUnknown_08611550[][4] = { [FRONTIER_FACILITY_TOWER] = {0x23, 0x46, 0x23, 0x01}, [FRONTIER_FACILITY_DOME] = {0x04, 0x09, 0x05, 0x00}, @@ -76,13 +104,599 @@ const u8 gUnknown_08611550[][4] = [FRONTIER_FACILITY_PYRAMID] = {0x15, 0x46, 0x23, 0x00}, }; +static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] = +{ + [FRONTIER_FACILITY_TOWER] = + { + // Silver Symbol. + { + { + .species = SPECIES_ALAKAZAM, + .heldItem = ITEM_BRIGHT_POWDER, + .fixedIV = 24, + .nature = 15, + .evs = {106, 0, 152, 152, 100, 0}, + .moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_DISABLE}, + }, + { + .species = SPECIES_ENTEI, + .heldItem = ITEM_LUM_BERRY, + .fixedIV = 24, + .nature = 1, + .evs = {100, 152, 152, 0, 100, 6}, + .moves = {MOVE_FIRE_BLAST, MOVE_CALM_MIND, MOVE_RETURN, MOVE_ROAR}, + }, + { + .species = SPECIES_SNORLAX, + .heldItem = ITEM_QUICK_CLAW, + .fixedIV = 24, + .nature = 3, + .evs = {152, 152, 0, 0, 106, 100}, + .moves = {MOVE_BODY_SLAM, MOVE_BELLY_DRUM, MOVE_YAWN, MOVE_SHADOW_BALL}, + }, + }, + // Gold Symbol. + { + { + .species = SPECIES_RAIKOU, + .heldItem = ITEM_LUM_BERRY, + .fixedIV = 31, + .nature = 15, + .evs = {158, 0, 252, 100, 0, 0}, + .moves = {MOVE_THUNDERBOLT, MOVE_CALM_MIND, MOVE_REFLECT, MOVE_REST}, + }, + { + .species = SPECIES_LATIOS, + .heldItem = ITEM_BRIGHT_POWDER, + .fixedIV = 31, + .nature = 15, + .evs = {252, 0, 252, 6, 0, 0}, + .moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_RECOVER, MOVE_DRAGON_CLAW}, + }, + { + .species = SPECIES_SNORLAX, + .heldItem = ITEM_CHESTO_BERRY, + .fixedIV = 31, + .nature = 3, + .evs = {252, 252, 0, 0, 6, 0}, + .moves = {MOVE_CURSE, MOVE_RETURN, MOVE_REST, MOVE_SHADOW_BALL}, + }, + }, + }, + [FRONTIER_FACILITY_DOME] = + { + // Silver Symbol. + { + { + .species = SPECIES_SWAMPERT, + .heldItem = ITEM_FOCUS_BAND, + .fixedIV = 20, + .nature = 2, + .evs = {152, 152, 106, 0, 100, 0}, + .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_COUNTER}, + }, + { + .species = SPECIES_SALAMENCE, + .heldItem = ITEM_LUM_BERRY, + .fixedIV = 20, + .nature = 3, + .evs = {152, 152, 106, 100, 0, 0}, + .moves = {MOVE_EARTHQUAKE, MOVE_BRICK_BREAK, MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE}, + }, + { + .species = SPECIES_CHARIZARD, + .heldItem = ITEM_WHITE_HERB, + .fixedIV = 20, + .nature = 17, + .evs = {100, 152, 106, 152, 0, 0}, + .moves = {MOVE_OVERHEAT, MOVE_ROCK_SLIDE, MOVE_AERIAL_ACE, MOVE_EARTHQUAKE}, + }, + }, + // Gold Symbol. + { + { + .species = SPECIES_SWAMPERT, + .heldItem = ITEM_LEFTOVERS, + .fixedIV = 31, + .nature = 2, + .evs = {252, 252, 6, 0, 0, 0}, + .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_MIRROR_COAT}, + }, + { + .species = SPECIES_METAGROSS, + .heldItem = ITEM_QUICK_CLAW, + .fixedIV = 31, + .nature = 2, + .evs = {252, 252, 6, 0, 0, 0}, + .moves = {MOVE_PSYCHIC, MOVE_METEOR_MASH, MOVE_EARTHQUAKE, MOVE_PROTECT}, + }, + { + .species = SPECIES_LATIAS, + .heldItem = ITEM_CHESTO_BERRY, + .fixedIV = 31, + .nature = 15, + .evs = {252, 0, 252, 6, 0, 0}, + .moves = {MOVE_THUNDERBOLT, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_REST}, + }, + }, + }, + [FRONTIER_FACILITY_PALACE] = + { + // Silver Symbol. + { + { + .species = SPECIES_CROBAT, + .heldItem = ITEM_BRIGHT_POWDER, + .fixedIV = 16, + .nature = 3, + .evs = {152, 0, 0, 152, 100, 106}, + .moves = {MOVE_CONFUSE_RAY, MOVE_DOUBLE_TEAM, MOVE_TOXIC, MOVE_FLY}, + }, + { + .species = SPECIES_SLAKING, + .heldItem = ITEM_SCOPE_LENS, + .fixedIV = 16, + .nature = 0, + .evs = {152, 152, 0, 106, 100, 0}, + .moves = {MOVE_EARTHQUAKE, MOVE_SWAGGER, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK}, + }, + { + .species = SPECIES_LAPRAS, + .heldItem = ITEM_QUICK_CLAW, + .fixedIV = 16, + .nature = 17, + .evs = {0, 0, 252, 0, 106, 152}, + .moves = {MOVE_ICE_BEAM, MOVE_HORN_DRILL, MOVE_CONFUSE_RAY, MOVE_PROTECT}, + }, + }, + // Gold Symbol. + { + { + .species = SPECIES_ARCANINE, + .heldItem = ITEM_WHITE_HERB, + .fixedIV = 31, + .nature = 11, + .evs = {6, 252, 252, 0, 0, 0}, + .moves = {MOVE_OVERHEAT, MOVE_EXTREME_SPEED, MOVE_ROAR, MOVE_PROTECT}, + }, + { + .species = SPECIES_SLAKING, + .heldItem = ITEM_SCOPE_LENS, + .fixedIV = 31, + .nature = 0, + .evs = {6, 252, 0, 252, 0, 0}, + .moves = {MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_YAWN}, + }, + { + .species = SPECIES_SUICUNE, + .heldItem = ITEM_KINGS_ROCK, + .fixedIV = 31, + .nature = 11, + .evs = {252, 0, 252, 6, 0, 0}, + .moves = {MOVE_BLIZZARD, MOVE_SURF, MOVE_BITE, MOVE_CALM_MIND}, + }, + }, + }, + [FRONTIER_FACILITY_ARENA] = + { + // Silver Symbol. + { + { + .species = SPECIES_HERACROSS, + .heldItem = ITEM_SALAC_BERRY, + .fixedIV = 20, + .nature = 13, + .evs = {106, 152, 0, 152, 0, 100}, + .moves = {MOVE_MEGAHORN, MOVE_ROCK_TOMB, MOVE_ENDURE, MOVE_REVERSAL}, + }, + { + .species = SPECIES_UMBREON, + .heldItem = ITEM_LEFTOVERS, + .fixedIV = 20, + .nature = 20, + .evs = {152, 0, 100, 0, 152, 106}, + .moves = {MOVE_BODY_SLAM, MOVE_CONFUSE_RAY, MOVE_PSYCHIC, MOVE_FAINT_ATTACK}, + }, + { + .species = SPECIES_SHEDINJA, + .heldItem = ITEM_BRIGHT_POWDER, + .fixedIV = 20, + .nature = 3, + .evs = {0, 252, 6, 252, 0, 0}, + .moves = {MOVE_SHADOW_BALL, MOVE_RETURN, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE}, + }, + }, + // Gold Symbol. + { + { + .species = SPECIES_UMBREON, + .heldItem = ITEM_CHESTO_BERRY, + .fixedIV = 31, + .nature = 20, + .evs = {252, 0, 0, 0, 252, 6}, + .moves = {MOVE_DOUBLE_EDGE, MOVE_CONFUSE_RAY, MOVE_REST, MOVE_PSYCHIC}, + }, + { + .species = SPECIES_GENGAR, + .heldItem = ITEM_LEFTOVERS, + .fixedIV = 31, + .nature = 15, + .evs = {252, 0, 252, 0, 6, 0}, + .moves = {MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_DESTINY_BOND}, + }, + { + .species = SPECIES_BRELOOM, + .heldItem = ITEM_LUM_BERRY, + .fixedIV = 31, + .nature = 13, + .evs = {6, 252, 0, 252, 0, 0}, + .moves = {MOVE_SPORE, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_HEADBUTT}, + }, + }, + }, + [FRONTIER_FACILITY_FACTORY] = + { + // Silver Symbol. + { + { + .species = SPECIES_METANG, + .heldItem = ITEM_SITRUS_BERRY, + .fixedIV = 31, + .nature = 2, + .evs = {0, 252, 252, 0, 6, 0}, + .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW}, + }, + { + .species = SPECIES_SKARMORY, + .heldItem = ITEM_SITRUS_BERRY, + .fixedIV = 31, + .nature = 8, + .evs = {252, 0, 0, 0, 6, 252}, + .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING}, + }, + { + .species = SPECIES_AGGRON, + .heldItem = ITEM_SITRUS_BERRY, + .fixedIV = 31, + .nature = 3, + .evs = {0, 252, 0, 0, 252, 6}, + .moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW}, + }, + }, + // Gold Symbol. + { + { + .species = SPECIES_METANG, + .heldItem = ITEM_SITRUS_BERRY, + .fixedIV = 31, + .nature = 2, + .evs = {0, 252, 252, 0, 6, 0}, + .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW}, + }, + { + .species = SPECIES_SKARMORY, + .heldItem = ITEM_SITRUS_BERRY, + .fixedIV = 31, + .nature = 8, + .evs = {252, 0, 0, 0, 6, 252}, + .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING}, + }, + { + .species = SPECIES_AGGRON, + .heldItem = ITEM_SITRUS_BERRY, + .fixedIV = 31, + .nature = 3, + .evs = {0, 252, 0, 0, 252, 6}, + .moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW}, + }, + }, + }, + [FRONTIER_FACILITY_PIKE] = + { + // Silver Symbol. + { + { + .species = SPECIES_SEVIPER, + .heldItem = ITEM_QUICK_CLAW, + .fixedIV = 16, + .nature = 2, + .evs = {252, 0, 252, 0, 6, 0}, + .moves = {MOVE_SWAGGER, MOVE_CRUNCH, MOVE_POISON_FANG, MOVE_GIGA_DRAIN}, + }, + { + .species = SPECIES_SHUCKLE, + .heldItem = ITEM_CHESTO_BERRY, + .fixedIV = 16, + .nature = 5, + .evs = {252, 0, 0, 0, 106, 252}, + .moves = {MOVE_TOXIC, MOVE_SANDSTORM, MOVE_PROTECT, MOVE_REST}, + }, + { + .species = SPECIES_MILOTIC, + .heldItem = ITEM_LEFTOVERS, + .fixedIV = 16, + .nature = 15, + .evs = {152, 0, 100, 0, 152, 106}, + .moves = {MOVE_ICE_BEAM, MOVE_MIRROR_COAT, MOVE_SURF, MOVE_RECOVER}, + }, + }, + // Gold Symbol. + { + { + .species = SPECIES_SEVIPER, + .heldItem = ITEM_FOCUS_BAND, + .fixedIV = 31, + .nature = 5, + .evs = {252, 0, 0, 0, 252, 6}, + .moves = {MOVE_SWAGGER, MOVE_CRUNCH, MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN}, + }, + { + .species = SPECIES_STEELIX, + .heldItem = ITEM_BRIGHT_POWDER, + .fixedIV = 31, + .nature = 2, + .evs = {252, 0, 0, 0, 6, 252}, + .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_EXPLOSION, MOVE_SCREECH}, + }, + { + .species = SPECIES_GYARADOS, + .heldItem = ITEM_CHESTO_BERRY, + .fixedIV = 31, + .nature = 3, + .evs = {252, 6, 0, 0, 0, 252}, + .moves = {MOVE_DRAGON_DANCE, MOVE_RETURN, MOVE_ROAR, MOVE_REST}, + }, + }, + }, + [FRONTIER_FACILITY_PYRAMID] = + { + // Silver Symbol. + { + { + .species = SPECIES_REGIROCK, + .heldItem = ITEM_QUICK_CLAW, + .fixedIV = 16, + .nature = 3, + .evs = {152, 152, 0, 0, 106, 100}, + .moves = {MOVE_EXPLOSION, MOVE_SUPERPOWER, MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER}, + }, + { + .species = SPECIES_REGISTEEL, + .heldItem = ITEM_LEFTOVERS, + .fixedIV = 16, + .nature = 3, + .evs = {152, 152, 0, 0, 6, 200}, + .moves = {MOVE_EARTHQUAKE, MOVE_METAL_CLAW, MOVE_TOXIC, MOVE_IRON_DEFENSE}, + }, + { + .species = SPECIES_REGICE, + .heldItem = ITEM_CHESTO_BERRY, + .fixedIV = 16, + .nature = 15, + .evs = {106, 0, 152, 0, 100, 152}, + .moves = {MOVE_ICE_BEAM, MOVE_AMNESIA, MOVE_THUNDER, MOVE_REST}, + }, + }, + // Gold Symbol. + { + { + .species = SPECIES_ARTICUNO, + .heldItem = ITEM_SCOPE_LENS, + .fixedIV = 31, + .nature = 16, + .evs = {6, 0, 252, 252, 0, 0}, + .moves = {MOVE_BLIZZARD, MOVE_WATER_PULSE, MOVE_AERIAL_ACE, MOVE_REFLECT}, + }, + { + .species = SPECIES_ZAPDOS, + .heldItem = ITEM_LUM_BERRY, + .fixedIV = 31, + .nature = 16, + .evs = {6, 0, 252, 252, 0, 0}, + .moves = {MOVE_THUNDER, MOVE_DETECT, MOVE_DRILL_PECK, MOVE_LIGHT_SCREEN}, + }, + { + .species = SPECIES_MOLTRES, + .heldItem = ITEM_BRIGHT_POWDER, + .fixedIV = 31, + .nature = 16, + .evs = {6, 0, 252, 252, 0, 0}, + .moves = {MOVE_FIRE_BLAST, MOVE_HYPER_BEAM, MOVE_AERIAL_ACE, MOVE_SAFEGUARD}, + }, + }, + }, +}; + +static const u8 gUnknown_086118B4[][7][4] = +{ + { + {1, 2, 3, 3}, {1, 1, 0, 0}, {4, 5, 0, 0}, {1, 0, 0, 0}, {3, 4, 0, 0}, {1, 0, 0, 0}, {5, 0, 0, 0} + }, + { + {2, 3, 4, 4}, {1, 1, 0, 0}, {4, 5, 0, 0}, {1, 0, 0, 0}, {3, 4, 0, 0}, {1, 0, 0, 0}, {5, 0, 0, 0} + }, + { + {3, 4, 5, 5}, {2, 2, 0, 0}, {5, 6, 0, 0}, {1, 0, 0, 0}, {4, 5, 0, 0}, {2, 0, 0, 0}, {6, 0, 0, 0} + }, + { + {4, 5, 6, 6}, {2, 2, 0, 0}, {5, 6, 0, 0}, {2, 0, 0, 0}, {4, 5, 0, 0}, {2, 0, 0, 0}, {6, 0, 0, 0} + }, + { + {5, 6, 7, 7}, {3, 3, 0, 0}, {6, 7, 0, 0}, {2, 0, 0, 0}, {5, 6, 0, 0}, {2, 0, 0, 0}, {7, 0, 0, 0} + }, + { + {6, 7, 8, 8}, {3, 3, 0, 0}, {6, 7, 0, 0}, {2, 0, 0, 0}, {5, 6, 0, 0}, {4, 0, 0, 0}, {7, 0, 0, 0} + }, + { + {7, 8, 9, 9}, {4, 4, 0, 0}, {7, 8, 0, 0}, {3, 0, 0, 0}, {6, 7, 0, 0}, {4, 0, 0, 0}, {8, 0, 0, 0} + }, + { + {8, 9, 10, 10}, {4, 4, 0, 0}, {7, 8, 0, 0}, {3, 0, 0, 0},{6, 7, 0, 0}, {4, 0, 0, 0}, {8, 0, 0, 0} + }, + { + {9, 10, 11, 11}, {5, 5, 0, 0}, {8, 9, 0, 0}, {4, 0, 0, 0}, {7, 8, 0, 0}, {8, 0, 0, 0}, {9, 0, 0, 0} + }, + { + {10, 11, 12, 12}, {5, 5, 0, 0}, {8, 9, 0, 0}, {4, 0, 0, 0}, {7, 8, 0, 0}, {8, 0, 0, 0}, {9, 0, 0, 0} + }, + { + {11, 12, 13, 13}, {6, 6, 0, 0}, {9, 10, 0, 0}, {5, 0, 0,0}, {8, 9, 0, 0}, {8, 0, 0, 0}, {10, 0, 0, 0} + }, + { + {12, 13, 14, 14}, {6, 6, 0, 0}, {9, 10, 0, 0}, {6, 0, 0,0}, {8, 9, 0, 0}, {8, 0, 0, 0}, {10, 0, 0, 0} + }, + { + {13, 14, 15, 15}, {7, 7, 0, 0}, {10, 11, 0, 0}, {7, 0, 0, 0}, {9, 10, 0, 0}, {10, 0, 0, 0}, {11, 0, 0, 0} + }, + { + {14, 15, 15, 15}, {7, 7, 0, 0}, {10, 11, 0, 0}, {8, 0, 0, 0}, {9, 10, 0, 0}, {10, 0, 0, 0}, {11, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {8, 8, 0, 0}, {11, 12, 0, 0}, {9, 0, 0, 0}, {10, 11, 0, 0}, {10, 0, 0, 0}, {12, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {8, 8, 0, 0}, {11, 12, 0, 0}, {10, 0, 0, 0}, {10, 11, 0, 0}, {10, 0, 0, 0}, {12, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {9, 9, 0, 0}, {12, 13, 0, 0}, {11, 0, 0, 0}, {11, 12, 0, 0}, {12, 0, 0, 0}, {13, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {9, 9, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {11, 12, 0, 0}, {12, 0, 0, 0}, {13, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {10, 10, 0, 0}, {13, 14, 0, 0}, {13, 0, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {14, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {10, 10, 0, 0}, {13, 14, 0, 0}, {14, 0, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {14, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {11, 11, 0, 0}, {14, 15, 0, 0}, {15, 0, 0, 0}, {13, 14, 0, 0}, {12, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {11, 11, 0, 0}, {14, 15, 0, 0}, {15, 0, 0, 0}, {13, 14, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {12, 12, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {14, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {12, 12, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {14, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {13, 13, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {13, 13, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {14, 14, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {14, 14, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {15, 15, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {15, 15, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} + }, +}; + +static const u16 gUnknown_08611BFC[][2] = +{ + [FRONTIER_FACILITY_TOWER] = {0x0001, 0x0002}, + [FRONTIER_FACILITY_DOME] = {0x0004, 0x0008}, + [FRONTIER_FACILITY_PALACE] = {0x0010, 0x0020}, + [FRONTIER_FACILITY_ARENA] = {0x0040, 0x0080}, + [FRONTIER_FACILITY_FACTORY] = {0x0100, 0x0200}, + [FRONTIER_FACILITY_PIKE] = {0x0400, 0x0800}, + [FRONTIER_FACILITY_PYRAMID] = {0x1000, 0x2000}, +}; + +static void (* const sFrontierUtilFuncs[])(void) = +{ + sub_81A17A0, + sub_81A1830, + sub_81A1968, + sub_81A1AD4, + DoSoftReset_, + sub_81A1B28, + sub_81A1B38, + ShowFacilityResultsWindow, + sub_81A31FC, + sub_81A35EC, + sub_81A3B00, + sub_81A3B64, + sub_81A3D30, + sub_81A3D58, + sub_81A3DA0, + sub_81A3FD4, + sub_81A4224, + sub_81A4230, + sub_81A43A8, + sub_81A4410, + sub_81A443C, + sub_81A447C, + sub_81A457C, +}; + +static const struct WindowTemplate gUnknown_08611C74 = +{ + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 0x1c, + .height = 0x12, + .paletteNum = 15, + .baseBlock = 1 +}; + +static const struct WindowTemplate gUnknown_08611C7C = +{ + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 2, + .width = 0x1a, + .height = 15, + .paletteNum = 15, + .baseBlock = 1 +}; + +static const struct WindowTemplate gUnknown_08611C84 = +{ + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 1, + .width = 0x1a, + .height = 17, + .paletteNum = 15, + .baseBlock = 1 +}; + +// Second field - whether the character is female. +static const u8 sFacilityToBrainEventObjGfx[][2] = +{ + [FRONTIER_FACILITY_TOWER] = {EVENT_OBJ_GFX_ANABEL, TRUE}, + [FRONTIER_FACILITY_DOME] = {EVENT_OBJ_GFX_TUCKER, FALSE}, + [FRONTIER_FACILITY_PALACE] = {EVENT_OBJ_GFX_SPENSER, FALSE}, + [FRONTIER_FACILITY_ARENA] = {EVENT_OBJ_GFX_GRETA, TRUE}, + [FRONTIER_FACILITY_FACTORY] = {EVENT_OBJ_GFX_NOLAND, FALSE}, + [FRONTIER_FACILITY_PIKE] = {EVENT_OBJ_GFX_LUCY, TRUE}, + [FRONTIER_FACILITY_PYRAMID] = {EVENT_OBJ_GFX_BRANDON, FALSE}, +}; + +const u16 gFrontierBannedSpecies[] = +{ + SPECIES_MEW, SPECIES_MEWTWO, SPECIES_HO_OH, SPECIES_LUGIA, SPECIES_CELEBI, + SPECIES_KYOGRE, SPECIES_GROUDON, SPECIES_RAYQUAZA, SPECIES_JIRACHI, SPECIES_DEOXYS, 0xFFFF +}; + // code -void sub_81A1780(void) +void CallFrontierUtilFunc(void) { - gUnknown_08611C18[gSpecialVar_0x8004](); + sFrontierUtilFuncs[gSpecialVar_0x8004](); } -void sub_81A17A0(void) +static void sub_81A17A0(void) { VarSet(VAR_TEMP_0, 0xFF); switch (gSaveBlock2Ptr->frontier.field_CA8) @@ -107,10 +721,10 @@ void sub_81A17A0(void) } } -void sub_81A1830(void) +static void sub_81A1830(void) { u8 facility = VarGet(VAR_FRONTIER_FACILITY); - u8 currSymbol = sub_81A3B30(facility); + u8 currSymbol = GetPlayerSymbolCountForFacility(facility); if (currSymbol == 2) currSymbol = 1; @@ -141,11 +755,11 @@ void sub_81A1830(void) } } -void sub_81A1968(void) +static void sub_81A1968(void) { s32 i; u8 facility = VarGet(VAR_FRONTIER_FACILITY); - u8 currSymbol = sub_81A3B30(facility); + u8 currSymbol = GetPlayerSymbolCountForFacility(facility); if (currSymbol == 2) currSymbol = 1; @@ -176,7 +790,7 @@ void sub_81A1968(void) } } -void sub_81A1AD4(void) +static void sub_81A1AD4(void) { s32 i; @@ -186,17 +800,17 @@ void sub_81A1AD4(void) ReducePlayerPartyToThree(); } -void sub_81A1B1C(void) +static void DoSoftReset_(void) { DoSoftReset(); } -void sub_81A1B28(void) +static void sub_81A1B28(void) { gFacilityTrainers = gBattleFrontierTrainers; } -void sub_81A1B38(void) +static void sub_81A1B38(void) { u8 i; @@ -208,7 +822,7 @@ void sub_81A1B38(void) } } -void sub_81A1B98(void) +static void ShowFacilityResultsWindow(void) { if (gSpecialVar_0x8006 > 3) gSpecialVar_0x8006 = 0; @@ -249,7 +863,7 @@ static bool8 sub_81A1C24(u32 flags) return FALSE; } -static void sub_81A1C4C(const u8 *str, s32 y) +static void PrintAligned(const u8 *str, s32 y) { s32 x = GetStringCenterAlignXOffset(1, str, 0xE0); y = (y * 8) + 1; @@ -348,7 +962,7 @@ static void ShowTowerResultsWindow(u8 battleMode) else StringExpandPlaceholders(gStringVar4, gText_LinkMultiBattleRoomResults); - sub_81A1C4C(gStringVar4, 2); + PrintAligned(gStringVar4, 2); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); PrintHyphens(10); @@ -415,7 +1029,7 @@ static void ShowDomeResultsWindow(u8 battleMode) else StringExpandPlaceholders(gStringVar4, gText_DoubleBattleTourneyResults); - sub_81A1C4C(gStringVar4, 0); + PrintAligned(gStringVar4, 0); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); PrintHyphens(10); @@ -491,7 +1105,7 @@ static void ShowPalaceResultsWindow(u8 battleMode) else StringExpandPlaceholders(gStringVar4, gText_DoubleBattleHallResults); - sub_81A1C4C(gStringVar4, 2); + PrintAligned(gStringVar4, 2); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); PrintHyphens(10); @@ -543,7 +1157,7 @@ static void ShowPikeResultsWindow(void) NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); FillWindowPixelBuffer(gRecordsWindowId, 0x11); StringExpandPlaceholders(gStringVar4, gText_BattleChoiceResults); - sub_81A1C4C(gStringVar4, 0); + PrintAligned(gStringVar4, 0); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); PrintHyphens(10); @@ -606,7 +1220,7 @@ static void ShowArenaResultsWindow(void) FillWindowPixelBuffer(gRecordsWindowId, 0x11); PrintHyphens(10); StringExpandPlaceholders(gStringVar4, gText_SetKOTourneyResults); - sub_81A1C4C(gStringVar4, 2); + PrintAligned(gStringVar4, 2); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); ArenaPrintPrevOrCurrentStreak(FRONTIER_LVL_50, 72, 126, 49); @@ -695,7 +1309,7 @@ static void ShowFactoryResultsWindow(u8 battleMode) else StringExpandPlaceholders(gStringVar4, gText_BattleSwapDoubleResults); - sub_81A1C4C(gStringVar4, 0); + PrintAligned(gStringVar4, 0); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_RentalSwap, 152, 33, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); @@ -756,7 +1370,7 @@ static void ShowPyramidResultsWindow(void) NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); FillWindowPixelBuffer(gRecordsWindowId, 0x11); StringExpandPlaceholders(gStringVar4, gText_BattleQuestResults); - sub_81A1C4C(gStringVar4, 2); + PrintAligned(gStringVar4, 2); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 49, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); PrintHyphens(10); @@ -819,7 +1433,7 @@ static void ShowLinkContestResultsWindow(void) CopyWindowToVram(gRecordsWindowId, 3); } -void sub_81A31FC(void) +static void sub_81A31FC(void) { u8 text[32]; s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; @@ -837,7 +1451,7 @@ void sub_81A31FC(void) StringCopy(text, gLinkPlayers[gBattleScripting.multiplayerId ^ 1].name); StripExtCtrlCodes(text); StringCopy(gSaveBlock2Ptr->frontier.field_EE1[lvlMode], text); - WriteUnalignedWord(gLinkPlayers[gBattleScripting.multiplayerId ^ 1].trainerId, gSaveBlock2Ptr->frontier.field_EF1[lvlMode]); + SetTrainerId(gLinkPlayers[gBattleScripting.multiplayerId ^ 1].trainerId, gSaveBlock2Ptr->frontier.field_EF1[lvlMode]); } if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] > 1 && sub_80EE818()) @@ -939,7 +1553,7 @@ void sub_81A31FC(void) } } -void sub_81A35EC(void) +static void sub_81A35EC(void) { VarGet(VAR_FRONTIER_FACILITY); // Unused return value. gSpecialVar_Result = sub_81A3610(); @@ -957,7 +1571,7 @@ u8 sub_81A3610(void) if (battleMode != FRONTIER_MODE_SINGLES) return 0; - symbolsCount = sub_81A3B30(facility); + symbolsCount = GetPlayerSymbolCountForFacility(facility); switch (symbolsCount) { case 0: @@ -1123,7 +1737,7 @@ void sub_81A3ACC(void) gSaveBlock2Ptr->frontier.field_CB4[i] |= 0xFFFF; } -void sub_81A3B00(void) +static void sub_81A3B00(void) { if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) gSpecialVar_Result = TRUE; @@ -1131,13 +1745,13 @@ void sub_81A3B00(void) gSpecialVar_Result = FALSE; } -u8 sub_81A3B30(u8 facility) +u8 GetPlayerSymbolCountForFacility(u8 facility) { return FlagGet(FLAG_SYS_TOWER_SILVER + facility * 2) + FlagGet(FLAG_SYS_TOWER_GOLD + facility * 2); } -void sub_81A3B64(void) +static void sub_81A3B64(void) { s32 challengeNum = 0; s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; @@ -1172,8 +1786,8 @@ void sub_81A3B64(void) if (challengeNum != 0) challengeNum--; - if (challengeNum > ARRAY_COUNT(gUnknown_086118B4)) - challengeNum = ARRAY_COUNT(gUnknown_086118B4); + if (challengeNum >= ARRAY_COUNT(gUnknown_086118B4)) + challengeNum = ARRAY_COUNT(gUnknown_086118B4) - 1; points = gUnknown_086118B4[challengeNum][facility][battleMode]; if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) @@ -1196,22 +1810,22 @@ void sub_81A3B64(void) gSaveBlock2Ptr->frontier.field_EBA = points; } -void sub_81A3D30(void) +static void sub_81A3D30(void) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); - gSpecialVar_Result = sub_81A3B30(facility); + gSpecialVar_Result = GetPlayerSymbolCountForFacility(facility); } -void sub_81A3D58(void) +static void sub_81A3D58(void) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); - if (sub_81A3B30(facility) == 0) + if (GetPlayerSymbolCountForFacility(facility) == 0) FlagSet(FLAG_SYS_TOWER_SILVER + facility * 2); else FlagSet(FLAG_SYS_TOWER_GOLD + facility * 2); } -void sub_81A3DA0(void) +static void sub_81A3DA0(void) { if (gBattleTypeFlags & gSpecialVar_0x8005) gSpecialVar_Result = TRUE; @@ -1265,10 +1879,10 @@ static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monL if (species == SPECIES_EGG || species == SPECIES_NONE) return; - for (i = 0; gUnknown_08611C9A[i] != 0xFFFF && gUnknown_08611C9A[i] != species; i++) + for (i = 0; gFrontierBannedSpecies[i] != 0xFFFF && gFrontierBannedSpecies[i] != species; i++) ; - if (gUnknown_08611C9A[i] != 0xFFFF) + if (gFrontierBannedSpecies[i] != 0xFFFF) return; if (lvlMode == FRONTIER_LVL_50 && monLevel > 50) return; @@ -1291,7 +1905,7 @@ static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monL (*count)++; } -void sub_81A3FD4(void) +static void sub_81A3FD4(void) { u16 speciesArray[6]; u16 itemArray[6]; @@ -1350,8 +1964,8 @@ void sub_81A3FD4(void) { s32 i; s32 caughtBannedMons = 0; - s32 species = gUnknown_08611C9A[0]; - for (i = 0; species != 0xFFFF; i++, species = gUnknown_08611C9A[i]) + s32 species = gFrontierBannedSpecies[0]; + for (i = 0; species != 0xFFFF; i++, species = gFrontierBannedSpecies[i]) { if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) caughtBannedMons++; @@ -1359,8 +1973,8 @@ void sub_81A3FD4(void) gStringVar1[0] = EOS; gSpecialVar_0x8004 = 1; count = 0; - for (i = 0; gUnknown_08611C9A[i] != 0xFFFF; i++) - count = sub_81A3DD0(gUnknown_08611C9A[i], count, caughtBannedMons); + for (i = 0; gFrontierBannedSpecies[i] != 0xFFFF; i++) + count = sub_81A3DD0(gFrontierBannedSpecies[i], count, caughtBannedMons); if (count == 0) { @@ -1383,12 +1997,12 @@ void sub_81A3FD4(void) } } -void sub_81A4224(void) +static void sub_81A4224(void) { ValidateEReaderTrainer(); } -void sub_81A4230(void) +static void sub_81A4230(void) { s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); @@ -1436,7 +2050,7 @@ void sub_81A4230(void) } } -void sub_81A43A8(void) +static void sub_81A43A8(void) { u8 i; @@ -1450,13 +2064,13 @@ void sub_81A43A8(void) } } -void sub_81A4410(void) +static void sub_81A4410(void) { gSpecialVar_Result = MoveRecordedBattleToSaveData(); gSaveBlock2Ptr->frontier.field_CA9_b = 1; } -void sub_81A443C(void) +static void sub_81A443C(void) { switch (gSpecialVar_0x8005) { @@ -1469,7 +2083,7 @@ void sub_81A443C(void) } } -void sub_81A447C(void) +static void sub_81A447C(void) { u8 i, j, k; @@ -1494,9 +2108,9 @@ void sub_81A447C(void) } } -void sub_81A457C(void) +static void sub_81A457C(void) { - sub_81A5030(VarGet(VAR_FRONTIER_FACILITY)); + SetFrontierBrainEventObjGfx(VarGet(VAR_FRONTIER_FACILITY)); } // Battle Frontier Ranking Hall records. @@ -1670,7 +2284,7 @@ void ClearnRankingHallRecords(void) { for (k = 0; k < 3; k++) { - CopyUnalignedWord(gSaveBlock2Ptr->hallRecords1P[i][j][k].id, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. + CopyTrainerId(gSaveBlock2Ptr->hallRecords1P[i][j][k].id, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. gSaveBlock2Ptr->hallRecords1P[i][j][k].name[0] = EOS; gSaveBlock2Ptr->hallRecords1P[i][j][k].winStreak = 0; } @@ -1681,8 +2295,8 @@ void ClearnRankingHallRecords(void) { for (k = 0; k < 3; k++) { - CopyUnalignedWord(gSaveBlock2Ptr->hallRecords2P[j][k].id1, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. - CopyUnalignedWord(gSaveBlock2Ptr->hallRecords2P[j][k].id2, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. + CopyTrainerId(gSaveBlock2Ptr->hallRecords2P[j][k].id1, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. + CopyTrainerId(gSaveBlock2Ptr->hallRecords2P[j][k].id2, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. gSaveBlock2Ptr->hallRecords2P[j][k].name1[0] = EOS; gSaveBlock2Ptr->hallRecords2P[j][k].name2[0] = EOS; gSaveBlock2Ptr->hallRecords2P[j][k].winStreak = 0; @@ -1711,9 +2325,7 @@ void sub_81A4C30(void) free(monsParty); } -extern const u16 gFacilityToBrainTrainerId[]; -extern const u8 gUnknown_08611C8C[][2]; - +// Frontier Brain functions. u8 GetFrontierBrainTrainerPicIndex(void) { s32 facility; @@ -1757,29 +2369,17 @@ void CopyFrontierBrainTrainerName(u8 *dst) bool8 IsFrontierBrainFemale(void) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); - return gUnknown_08611C8C[facility][1]; + return sFacilityToBrainEventObjGfx[facility][1]; } -void SetFrontierBrainTrainerGfxId(void) +void SetFrontierBrainEventObjGfx_2(void) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); - VarSet(VAR_OBJ_GFX_ID_0, gUnknown_08611C8C[facility][0]); + VarSet(VAR_OBJ_GFX_ID_0, sFacilityToBrainEventObjGfx[facility][0]); } #define FRONTIER_BRAIN_OTID 61226 -struct FrontierBrainMon -{ - u16 species; - u16 heldItem; - u8 fixedIV; - u8 nature; - u8 evs[6]; - u16 moves[4]; -}; - -extern const struct FrontierBrainMon sFrontierBrainsMons[][2][3]; - #ifdef NONMATCHING void CreateFrontierBrainPokemon(void) { @@ -1792,7 +2392,7 @@ void CreateFrontierBrainPokemon(void) s32 symbol = GetFronterBrainSymbol(); if (facility == FRONTIER_FACILITY_DOME) - monCountInBits = GetTrainerMonCountInBits(TrainerIdToDomeTournamentId(TRAINER_FRONTIER_BRAIN)); + monCountInBits = GetDomeTrainerMonCountInBits(TrainerIdToDomeTournamentId(TRAINER_FRONTIER_BRAIN)); else monCountInBits = 7; @@ -1854,7 +2454,7 @@ void CreateFrontierBrainPokemon(void) bl TrainerIdToDomeTournamentId\n\ lsls r0, 16\n\ lsrs r0, 16\n\ - bl GetTrainerMonCountInBits\n\ + bl GetDomeTrainerMonCountInBits\n\ adds r4, r0, 0\n\ b _081A4E46\n\ .pool\n\ @@ -1998,7 +2598,7 @@ _081A4F32:\n\ movs r2, 0x64\n\ adds r6, r1, 0\n\ muls r6, r2\n\ - ldr r3, =gUnknown_08611578\n\ + ldr r3, =sFrontierBrainsMons + 0xC\n\ mov r8, r3\n\ ldr r3, =gEnemyParty\n\ adds r5, r4, 0\n\ @@ -2067,21 +2667,21 @@ _081A4FD0:\n\ } #endif -u16 sub_81A4FF0(u8 monPartyId) +u16 GetFrontierBrainMonSpecies(u8 monId) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); s32 symbol = GetFronterBrainSymbol(); - return sFrontierBrainsMons[facility][symbol][monPartyId].species; + return sFrontierBrainsMons[facility][symbol][monId].species; } -void sub_81A5030(u8 facility) +void SetFrontierBrainEventObjGfx(u8 facility) { gTrainerBattleOpponent_A = TRAINER_FRONTIER_BRAIN; - VarSet(VAR_OBJ_GFX_ID_0, gUnknown_08611C8C[facility][0]); + VarSet(VAR_OBJ_GFX_ID_0, sFacilityToBrainEventObjGfx[facility][0]); } -u16 sub_81A5060(u8 monId, u8 moveSlotId) +u16 GetFrontierBrainMonMove(u8 monId, u8 moveSlotId) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); s32 symbol = GetFronterBrainSymbol(); @@ -2089,15 +2689,15 @@ u16 sub_81A5060(u8 monId, u8 moveSlotId) return sFrontierBrainsMons[facility][symbol][monId].moves[moveSlotId]; } -u8 sub_81A50B0(u8 monPartyId) +u8 GetFrontierBrainMonNature(u8 monId) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); s32 symbol = GetFronterBrainSymbol(); - return sFrontierBrainsMons[facility][symbol][monPartyId].nature; + return sFrontierBrainsMons[facility][symbol][monId].nature; } -u8 sub_81A50F0(u8 monId, u8 evStatId) +u8 GetFrontierBrainMonEvs(u8 monId, u8 evStatId) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); s32 symbol = GetFronterBrainSymbol(); @@ -2108,7 +2708,7 @@ u8 sub_81A50F0(u8 monId, u8 evStatId) s32 GetFronterBrainSymbol(void) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); - s32 symbol = sub_81A3B30(facility); + s32 symbol = GetPlayerSymbolCountForFacility(facility); if (symbol == 2) { @@ -2124,9 +2724,6 @@ s32 GetFronterBrainSymbol(void) return symbol; } -extern const u8 *const *const gUnknown_08611DB0[]; -extern const u8 *const *const gUnknown_08611DB8[]; - static void CopyFrontierBrainText(bool8 playerWonText) { s32 facility; diff --git a/src/item_menu.c b/src/item_menu.c index 37b1a961e..124fbccd2 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -48,6 +48,8 @@ #include "window.h" #include "apprentice.h" +extern bool8 InBattlePike(void); + void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)()); void CB2_Bag(void); bool8 setup_bag_menu(void); diff --git a/src/new_game.c b/src/new_game.c index e6bafa7a7..d3b8c9d7b 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -69,30 +69,30 @@ static const struct ContestWinner sContestWinnerPicDummy = }; // code -void WriteUnalignedWord(u32 var, u8 *dataPtr) +void SetTrainerId(u32 trainerId, u8 *dst) { - dataPtr[0] = var; - dataPtr[1] = var >> 8; - dataPtr[2] = var >> 16; - dataPtr[3] = var >> 24; + dst[0] = trainerId; + dst[1] = trainerId >> 8; + dst[2] = trainerId >> 16; + dst[3] = trainerId >> 24; } -u32 ReadUnalignedWord(u8* dataPtr) +u32 GetTrainerId(u8 *trainerId) { - return (dataPtr[3] << 24) | (dataPtr[2] << 16) | (dataPtr[1] << 8) | (dataPtr[0]); + return (trainerId[3] << 24) | (trainerId[2] << 16) | (trainerId[1] << 8) | (trainerId[0]); } -void CopyUnalignedWord(u8 *copyTo, u8 *copyFrom) +void CopyTrainerId(u8 *dst, u8 *src) { s32 i; for (i = 0; i < 4; i++) - copyTo[i] = copyFrom[i]; + dst[i] = src[i]; } static void InitPlayerTrainerId(void) { u32 trainerId = (Random() << 0x10) | GetGeneratedTrainerIdLower(); - WriteUnalignedWord(trainerId, gSaveBlock2Ptr->playerTrainerId); + SetTrainerId(trainerId, gSaveBlock2Ptr->playerTrainerId); } // L=A isnt set here for some reason. diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index df77e3cfb..11f46b475 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -45,6 +45,8 @@ #include "constants/songs.h" #include "constants/species.h" +extern bool8 sub_81A6BF4(void); + static EWRAM_DATA struct UnkSummaryStruct { /*0x00*/ union { diff --git a/src/record_mixing.c b/src/record_mixing.c index 6caea7239..337e353a1 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -1557,12 +1557,12 @@ static void sub_80E8110(struct Apprentice *dst, struct Apprentice *src) id = ((i + gSaveBlock2Ptr->playerApprentice.field_B2_1) % 3) + 1; if (src[id].playerName[0] != EOS) { - if (ReadUnalignedWord(src[id].playerId) != ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId)) + if (GetTrainerId(src[id].playerId) != GetTrainerId(gSaveBlock2Ptr->playerTrainerId)) { r8++; var_2C = id; } - if (ReadUnalignedWord(src[id].playerId) == ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId)) + if (GetTrainerId(src[id].playerId) == GetTrainerId(gSaveBlock2Ptr->playerTrainerId)) { var_24++; var_28 = id; @@ -1602,7 +1602,7 @@ void GetPlayerHallRecords(struct PlayerHallRecords *dst) { for (j = 0; j < 2; j++) { - CopyUnalignedWord(dst->onePlayer[i][j].id, gSaveBlock2Ptr->playerTrainerId); + CopyTrainerId(dst->onePlayer[i][j].id, gSaveBlock2Ptr->playerTrainerId); dst->onePlayer[i][j].language = GAME_LANGUAGE; StringCopy(dst->onePlayer[i][j].name, gSaveBlock2Ptr->playerName); } @@ -1611,8 +1611,8 @@ void GetPlayerHallRecords(struct PlayerHallRecords *dst) for (j = 0; j < 2; j++) { dst->twoPlayers[j].language = GAME_LANGUAGE; - CopyUnalignedWord(dst->twoPlayers[j].id1, gSaveBlock2Ptr->playerTrainerId); - CopyUnalignedWord(dst->twoPlayers[j].id2, gSaveBlock2Ptr->frontier.field_EF1[j]); + CopyTrainerId(dst->twoPlayers[j].id1, gSaveBlock2Ptr->playerTrainerId); + CopyTrainerId(dst->twoPlayers[j].id2, gSaveBlock2Ptr->frontier.field_EF1[j]); StringCopy(dst->twoPlayers[j].name1, gSaveBlock2Ptr->playerName); StringCopy(dst->twoPlayers[j].name2, gSaveBlock2Ptr->frontier.field_EE1[j]); } @@ -1639,7 +1639,7 @@ static bool32 sub_80E841C(struct Apprentice *arg0, struct Apprentice *arg1) for (i = 0; i < 4; i++) { - if (ReadUnalignedWord(arg0->playerId) == ReadUnalignedWord(arg1[i].playerId) + if (GetTrainerId(arg0->playerId) == GetTrainerId(arg1[i].playerId) && arg0->number == arg1[i].number) { return TRUE; @@ -1821,13 +1821,13 @@ _080E8666:\n\ ldr r6, [sp, 0x1C]\n\ adds r0, r6, r0\n\ str r3, [sp, 0x4C]\n\ - bl ReadUnalignedWord\n\ + bl GetTrainerId\n\ adds r4, r0, 0\n\ ldr r1, [sp, 0x50]\n\ ldr r0, [r1]\n\ add r0, r9\n\ adds r0, r7\n\ - bl ReadUnalignedWord\n\ + bl GetTrainerId\n\ ldr r3, [sp, 0x4C]\n\ cmp r4, r0\n\ bne _080E86A8\n\ @@ -1983,7 +1983,7 @@ _080E878E:\n\ adds r5, r0, r6\n\ adds r0, r5, 0\n\ str r3, [sp, 0x4C]\n\ - bl ReadUnalignedWord\n\ + bl GetTrainerId\n\ adds r4, r0, 0\n\ movs r6, 0x90\n\ lsls r6, 1\n\ @@ -1991,18 +1991,18 @@ _080E878E:\n\ mov r1, r9\n\ ldr r0, [r1]\n\ adds r0, r6\n\ - bl ReadUnalignedWord\n\ + bl GetTrainerId\n\ ldr r3, [sp, 0x4C]\n\ cmp r4, r0\n\ bne _080E8808\n\ adds r0, r5, 0x4\n\ - bl ReadUnalignedWord\n\ + bl GetTrainerId\n\ adds r4, r0, 0\n\ mov r2, r9\n\ ldr r0, [r2]\n\ adds r0, r6\n\ adds r0, 0x4\n\ - bl ReadUnalignedWord\n\ + bl GetTrainerId\n\ ldr r3, [sp, 0x4C]\n\ cmp r4, r0\n\ bne _080E8808\n\ diff --git a/src/recorded_battle.c b/src/recorded_battle.c index eba7039f5..50dd2efa8 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -19,14 +19,11 @@ #define BATTLER_RECORD_SIZE 664 #define ILLEGAL_BATTLE_TYPES ((BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_FIRST_BATTLE \ - | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_ROAMER | BATTLE_TYPE_EREADER_TRAINER \ - | BATTLE_TYPE_KYOGRE_GROUDON | BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI \ - | BATTLE_TYPE_RECORDED | BATTLE_TYPE_TRAINER_HILL | BATTLE_TYPE_SECRET_BASE \ + | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_ROAMER | BATTLE_TYPE_EREADER_TRAINER \ + | BATTLE_TYPE_KYOGRE_GROUDON | BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI \ + | BATTLE_TYPE_RECORDED | BATTLE_TYPE_TRAINER_HILL | BATTLE_TYPE_SECRET_BASE \ | BATTLE_TYPE_GROUDON | BATTLE_TYPE_KYOGRE | BATTLE_TYPE_RAYQUAZA)) -extern u8 gUnknown_03001278; -extern u8 gUnknown_03001279; - struct PlayerInfo { u32 trainerId; @@ -101,6 +98,9 @@ EWRAM_DATA static u8 sApprenticeId = 0; EWRAM_DATA static u16 sEasyChatSpeech[6] = {0}; EWRAM_DATA static u8 sBattleOutcome = 0; +IWRAM_DATA static u8 sRecordMixFriendLanguage; +IWRAM_DATA static u8 sApprenticeLanguage; + // this file's functions static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2); static bool32 CopyRecordedBattleFromSave(struct RecordedBattleSave *dst); @@ -586,8 +586,8 @@ static void SetVariablesForRecordedBattle(struct RecordedBattleSave *src) sRecordMixFriendClass = src->recordMixFriendClass; sApprenticeId = src->apprenticeId; - gUnknown_03001278 = src->recordMixFriendLanguage; - gUnknown_03001279 = src->apprenticeLanguage; + sRecordMixFriendLanguage = src->recordMixFriendLanguage; + sApprenticeLanguage = src->apprenticeLanguage; for (i = 0; i < 6; i++) { @@ -852,7 +852,7 @@ void sub_8186468(u8 *dst) dst[i] = sRecordMixFriendName[i]; dst[7] = EOS; - ConvertInternationalString(dst, gUnknown_03001278); + ConvertInternationalString(dst, sRecordMixFriendLanguage); } u8 GetRecordedBattleRecordMixFriendClass(void) @@ -867,12 +867,12 @@ u8 GetRecordedBattleApprenticeId(void) u8 GetRecordedBattleRecordMixFriendLanguage(void) { - return gUnknown_03001278; + return sRecordMixFriendLanguage; } u8 GetRecordedBattleApprenticeLanguage(void) { - return gUnknown_03001279; + return sApprenticeLanguage; } void RecordedBattle_SaveBattleOutcome(void) diff --git a/src/scrcmd.c b/src/scrcmd.c index d3189bec7..5a5867a96 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -49,6 +49,11 @@ #include "tv.h" #include "window.h" +extern u16 sub_81A89A0(u8); +extern void sub_81A8AF8(void); +extern void sub_81A895C(void); +extern void sub_81A8934(u8); + typedef u16 (*SpecialFunc)(void); typedef void (*NativeFunc)(void); diff --git a/src/start_menu.c b/src/start_menu.c index c587d3820..81c4213e7 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -35,6 +35,8 @@ #include "field_player_avatar.h" #include "battle_pyramid_bag.h" +extern bool8 InBattlePike(void); + // Menu actions enum { diff --git a/src/walda_phrase.c b/src/walda_phrase.c index 4a82be14f..ff2ee7399 100644 --- a/src/walda_phrase.c +++ b/src/walda_phrase.c @@ -95,7 +95,7 @@ u16 TryGetWallpaperWithWaldaPhrase(void) { u16 backgroundClr, foregroundClr; u8 patternId, iconId; - u16 trainerId = ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId); + u16 trainerId = GetTrainerId(gSaveBlock2Ptr->playerTrainerId); gSpecialVar_Result = TryCalculateWallpaper(&backgroundClr, &foregroundClr, &iconId, &patternId, trainerId, GetWaldaPhrasePtr()); if (gSpecialVar_Result) |