mirror of
https://github.com/pret/pokefirered.git
synced 2026-10-01 21:40:15 -05:00
add FREE_BATTLE_TOWER_E_READER functionality
This commit is contained in:
@@ -346,7 +346,9 @@ struct BattleTowerData // Leftover from R/S
|
||||
/*0x03DA, 0x048A*/ u16 defeatedBySpecies; // species of the pokemon that defated the player
|
||||
/*0x03DC, 0x048C*/ u8 defeatedByTrainerName[8];
|
||||
/*0x03E4, 0x0494*/ u8 firstMonNickname[VANILLA_POKEMON_NAME_LENGTH]; // nickname of the first pokemon in the player's battle tower party
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
/*0x03F0, 0x04A0*/ struct BattleTowerEReaderTrainer ereaderTrainer;
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
/*0x04AC, 0x055C*/ u8 battleTowerLevelType:1; // 0 = level 50; 1 = level 100
|
||||
/*0x04AC, 0x055C*/ u8 unk_554:1;
|
||||
/*0x04AD, 0x055D*/ u8 battleOutcome;
|
||||
|
||||
@@ -235,6 +235,7 @@ static void ResetBattleTowerStreak(u8 levelType)
|
||||
gSaveBlock2Ptr->battleTower.curStreakChallengesNum[levelType] = 1;
|
||||
}
|
||||
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
static bool8 ShouldBattleEReaderTrainer(u8 levelType, u16 winStreak)
|
||||
{
|
||||
u8 trainerTeamLevel;
|
||||
@@ -275,6 +276,7 @@ static bool8 ShouldBattleEReaderTrainer(u8 levelType, u16 winStreak)
|
||||
|
||||
return (numValid == 3);
|
||||
}
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
|
||||
static bool8 ChooseSpecialBattleTowerTrainer(void)
|
||||
{
|
||||
@@ -289,12 +291,15 @@ static bool8 ChooseSpecialBattleTowerTrainer(void)
|
||||
battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType;
|
||||
|
||||
winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType);
|
||||
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
if (ShouldBattleEReaderTrainer(battleTowerLevelType, winStreak))
|
||||
{
|
||||
gSaveBlock2Ptr->battleTower.battleTowerTrainerId = BATTLE_TOWER_EREADER_TRAINER_ID;
|
||||
retVal = TRUE;
|
||||
}
|
||||
else
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
{
|
||||
// Check if one of the battle tower trainers from record mixing should be the next trainer.
|
||||
for (recordIndex = 0; recordIndex < 5; recordIndex++)
|
||||
@@ -407,11 +412,15 @@ void SetEReaderTrainerGfxId(void)
|
||||
|
||||
u8 GetBattleTowerTrainerFrontSpriteId(u16 trainerId)
|
||||
{
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
if (trainerId == BATTLE_TOWER_EREADER_TRAINER_ID)
|
||||
{
|
||||
return gFacilityClassToPicIndex[gSaveBlock2Ptr->battleTower.ereaderTrainer.trainerClass];
|
||||
}
|
||||
else if (trainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID)
|
||||
#else
|
||||
if (trainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID)
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
{
|
||||
return gFacilityClassToPicIndex[sBattleTowerTrainers[trainerId].trainerClass];
|
||||
}
|
||||
@@ -423,11 +432,15 @@ u8 GetBattleTowerTrainerFrontSpriteId(u16 trainerId)
|
||||
|
||||
u8 GetBattleTowerTrainerClassNameId(void)
|
||||
{
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID)
|
||||
{
|
||||
return gFacilityClassToTrainerClass[gSaveBlock2Ptr->battleTower.ereaderTrainer.trainerClass];
|
||||
}
|
||||
else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID)
|
||||
#else
|
||||
if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID)
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
{
|
||||
return gFacilityClassToTrainerClass[gSaveBlock2Ptr->battleTower.records[gSaveBlock2Ptr->battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass];
|
||||
}
|
||||
@@ -440,12 +453,16 @@ u8 GetBattleTowerTrainerClassNameId(void)
|
||||
void GetBattleTowerTrainerName(u8 *dest)
|
||||
{
|
||||
s32 i;
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID)
|
||||
{
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
|
||||
dest[i] = gSaveBlock2Ptr->battleTower.ereaderTrainer.name[i];
|
||||
}
|
||||
else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID)
|
||||
#else
|
||||
if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID)
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
{
|
||||
for (i = 0; i < 3; i++)
|
||||
dest[i] = sBattleTowerTrainers[gSaveBlock2Ptr->battleTower.battleTowerTrainerId].name[i];
|
||||
@@ -520,6 +537,7 @@ static void FillBattleTowerTrainerParty(void)
|
||||
battleMonsOffset = 200;
|
||||
monPoolSize = 100;
|
||||
}
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID)
|
||||
{
|
||||
// Load E-Reader trainer's party.
|
||||
@@ -530,6 +548,7 @@ static void FillBattleTowerTrainerParty(void)
|
||||
return;
|
||||
} while (0);
|
||||
}
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
else
|
||||
{
|
||||
// Load a battle tower record's party. (From record mixing)
|
||||
@@ -768,9 +787,13 @@ static void BufferBattleTowerTrainerMessage(const u16 *greeting)
|
||||
|
||||
void PrintBattleTowerTrainerGreeting(void)
|
||||
{
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID)
|
||||
BufferBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.ereaderTrainer.greeting);
|
||||
else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID)
|
||||
#else
|
||||
if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID)
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
BufferBattleTowerTrainerMessage(sBattleTowerTrainers[gSaveBlock2Ptr->battleTower.battleTowerTrainerId].greeting);
|
||||
else
|
||||
BufferBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.records[gSaveBlock2Ptr->battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].greeting);
|
||||
@@ -845,6 +868,7 @@ void StartSpecialBattle(void)
|
||||
BattleTransition_StartOnField(transition);
|
||||
break;
|
||||
case 2: // e-reader trainer battle
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
ZeroEnemyPartyMons();
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
@@ -857,6 +881,7 @@ void StartSpecialBattle(void)
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
transition = BattleSetup_GetBattleTowerBattleTransition();
|
||||
BattleTransition_StartOnField(transition);
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -889,8 +914,10 @@ void SetBattleTowerProperty(void)
|
||||
gSaveBlock2Ptr->battleTower.selectedPartyMons[i] = gSelectedOrderFromParty[i];
|
||||
break;
|
||||
case 6:
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID)
|
||||
ClearEReaderTrainer(&gSaveBlock2Ptr->battleTower.ereaderTrainer);
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
if (gSaveBlock2Ptr->battleTower.totalBattleTowerWins < 9999)
|
||||
gSaveBlock2Ptr->battleTower.totalBattleTowerWins++;
|
||||
gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType]++;
|
||||
@@ -1211,27 +1238,40 @@ void AwardBattleTowerRibbons(void)
|
||||
|
||||
u8 GetEreaderTrainerFrontSpriteId(void)
|
||||
{
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
return gFacilityClassToPicIndex[gSaveBlock2Ptr->battleTower.ereaderTrainer.trainerClass];
|
||||
#else
|
||||
return 0;
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
}
|
||||
|
||||
u8 GetEreaderTrainerClassId(void)
|
||||
{
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
return gFacilityClassToTrainerClass[gSaveBlock2Ptr->battleTower.ereaderTrainer.trainerClass];
|
||||
#else
|
||||
return 0;
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
}
|
||||
|
||||
void CopyEReaderTrainerName5(u8 *trainerName)
|
||||
{
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 5; i++)
|
||||
trainerName[i] = gSaveBlock2Ptr->battleTower.ereaderTrainer.name[i];
|
||||
|
||||
trainerName[i] = EOS;
|
||||
#else
|
||||
trainerName[0] = EOS;
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
}
|
||||
|
||||
// Checks if the saved E-Reader trainer is valid.
|
||||
void ValidateEReaderTrainer(void)
|
||||
{
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
u32 i;
|
||||
u32 checksum;
|
||||
struct BattleTowerEReaderTrainer *ereaderTrainer;
|
||||
@@ -1258,6 +1298,9 @@ void ValidateEReaderTrainer(void)
|
||||
ClearEReaderTrainer(&gSaveBlock2Ptr->battleTower.ereaderTrainer);
|
||||
gSpecialVar_Result = 1;
|
||||
}
|
||||
#else
|
||||
gSpecialVar_Result = FALSE;
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
}
|
||||
|
||||
void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer)
|
||||
@@ -1270,17 +1313,21 @@ void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer)
|
||||
|
||||
void BufferEReaderTrainerGreeting(void)
|
||||
{
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
BufferBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.ereaderTrainer.greeting);
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
}
|
||||
|
||||
static void PrintEReaderTrainerFarewellMessage(void)
|
||||
{
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
if (gBattleOutcome == B_OUTCOME_DREW)
|
||||
gStringVar4[0] = EOS;
|
||||
else if (gBattleOutcome == B_OUTCOME_WON)
|
||||
BufferBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.ereaderTrainer.farewellPlayerWon);
|
||||
else
|
||||
BufferBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.ereaderTrainer.farewellPlayerLost);
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
}
|
||||
|
||||
void Dummy_TryEnableBravoTrainerBattleTower(void)
|
||||
|
||||
@@ -282,11 +282,13 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx)
|
||||
|
||||
bool8 MEScrCmd_addtrainer(struct ScriptContext *ctx)
|
||||
{
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0];
|
||||
memcpy(&gSaveBlock2Ptr->battleTower.ereaderTrainer, (void *)data, sizeof(struct BattleTowerEReaderTrainer));
|
||||
ValidateEReaderTrainer();
|
||||
StringExpandPlaceholders(gStringVar4, gText_MysteryGiftNewTrainer);
|
||||
ctx->data[2] = 2;
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -210,7 +210,9 @@ void ClearSavedWonderCardAndRelated(void)
|
||||
ClearMysteryGiftFlags();
|
||||
ClearMysteryGiftVars();
|
||||
#endif //FREE_MYSTERY_GIFT
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
ClearEReaderTrainer(&gSaveBlock2Ptr->battleTower.ereaderTrainer);
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
}
|
||||
|
||||
bool32 SaveWonderCard(const struct WonderCard * card)
|
||||
|
||||
@@ -231,8 +231,10 @@ static u32 Client_Run(struct MysteryGiftClient * client)
|
||||
InitRamScript_NoObjectEvent(client->recvBuffer, sizeof(struct RamScriptData));
|
||||
break;
|
||||
case CLI_RECV_EREADER_TRAINER:
|
||||
#if FREE_BATTLE_TOWER_E_READER == FALSE
|
||||
memcpy(&gSaveBlock2Ptr->battleTower.ereaderTrainer, client->recvBuffer, sizeof(gSaveBlock2Ptr->battleTower.ereaderTrainer));
|
||||
ValidateEReaderTrainer();
|
||||
#endif //FREE_BATTLE_TOWER_E_READER
|
||||
break;
|
||||
case CLI_RUN_BUFFER_SCRIPT:
|
||||
memcpy(gDecompressionBuffer, client->recvBuffer, MG_LINK_BUFFER_SIZE);
|
||||
|
||||
@@ -368,7 +368,9 @@ static void SpriteCB_MonHitShake(struct Sprite *sprite);
|
||||
static void SpriteCB_MonHitFlash(struct Sprite *sprite);
|
||||
static void SpriteCB_MonIntroBounce(struct Sprite *sprite);
|
||||
static void Task_ShowPokemonJumpRecords(u8 taskId);
|
||||
#if FREE_POKEMON_JUMP == FALSE
|
||||
static void TruncateToFirstWordOnly(u8 *str);
|
||||
#endif //FREE_POKEMON_JUMP
|
||||
static void PrintRecordsText(u16 windowId);
|
||||
static void UpdateVineSwing(int id);
|
||||
static void StartPokeJumpGfx(struct PokemonJumpGfx *);
|
||||
@@ -4396,6 +4398,7 @@ static void PrintRecordsText(u16 windowId)
|
||||
#endif //FREE_POKEMON_JUMP
|
||||
}
|
||||
|
||||
#if FREE_POKEMON_JUMP == FALSE
|
||||
static void TruncateToFirstWordOnly(u8 *str)
|
||||
{
|
||||
for (;*str != EOS; str++)
|
||||
@@ -4407,3 +4410,4 @@ static void TruncateToFirstWordOnly(u8 *str)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif //FREE_POKEMON_JUMP
|
||||
|
||||
@@ -386,14 +386,14 @@ static void BackUpTrainerRematches(void)
|
||||
{
|
||||
vars[i] = 0;
|
||||
|
||||
#if FREE_MATCH_CALL == FALSE
|
||||
// 16 bits per var
|
||||
for (j = 0; j < 16; j++)
|
||||
{
|
||||
#if FREE_MATCH_CALL == FALSE
|
||||
if (gSaveBlock1Ptr->trainerRematches[16 * i + j])
|
||||
vars[i] += (1 << j);
|
||||
}
|
||||
#endif //FREE_MATCH_CALL
|
||||
}
|
||||
VarSet(VAR_QLBAK_TRAINER_REMATCHES + i, vars[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -870,7 +870,11 @@ void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard)
|
||||
trainerCard->rse.caughtAllHoenn = HasAllKantoMons();
|
||||
trainerCard->hasAllMons = HasAllMons();
|
||||
trainerCard->berriesPicked = gSaveBlock2Ptr->berryPick.berriesPicked;
|
||||
#if FREE_POKEMON_JUMP == FALSE
|
||||
trainerCard->jumpsInRow = gSaveBlock2Ptr->pokeJump.jumpsInRow;
|
||||
#else
|
||||
trainerCard->jumpsInRow = 0;
|
||||
#endif //FREE_POKEMON_JUMP
|
||||
|
||||
trainerCard->berryCrushPoints = GetCappedGameStat(GAME_STAT_BERRY_CRUSH_POINTS, 0xFFFF);
|
||||
trainerCard->unionRoomNum = GetCappedGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES, 0xFFFF);
|
||||
|
||||
Reference in New Issue
Block a user