Split quest_log.c

This commit is contained in:
PikalaxALT
2020-04-06 17:58:24 -04:00
parent a622448029
commit c78101535b
53 changed files with 3027 additions and 2933 deletions
+2 -2
View File
@@ -794,13 +794,13 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
SetMapVarsToTrainer();
return EventScript_TryDoDoubleTrainerBattle;
case TRAINER_BATTLE_REMATCH_DOUBLE:
sub_811231C();
FinishRecordingQuestLogScene();
TrainerBattleLoadArgs(sDoubleBattleParams, data);
SetMapVarsToTrainer();
gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A);
return EventScript_TryDoDoubleRematchBattle;
case TRAINER_BATTLE_REMATCH:
sub_811231C();
FinishRecordingQuestLogScene();
TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
SetMapVarsToTrainer();
gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A);
+1 -1
View File
@@ -193,7 +193,7 @@ static void Task_DiplomaReturnToOverworld(u8 taskId)
DestroyTask(taskId);
FreeAllWindowBuffers();
FREE_AND_SET_NULL(gDiploma);
SetMainCallback2(sub_80568FC);
SetMainCallback2(CB2_ReturnToFieldFromDiploma);
}
static void DiplomaBgInit(void)
+1 -1
View File
@@ -1085,7 +1085,7 @@ void HandleBoulderActivateVictoryRoadSwitch(u16 x, u16 y)
{
if (events[i].x + 7 == x && events[i].y + 7 == y)
{
QuestLog_OnInteractionWithSpecialNpc();
QuestLog_CutRecording();
ScriptContext1_SetupScript(events[i].script);
ScriptContext2_Enable();
}
+5 -5
View File
@@ -1105,7 +1105,7 @@ void FieldCB_FallWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
sub_8111CF0();
QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
ScriptContext2_Enable();
FreezeObjectEvents();
CreateTask(Task_FallWarpFieldEffect, 0);
@@ -1409,7 +1409,7 @@ static void FieldCB_EscalatorWarpIn(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
sub_8111CF0();
QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
ScriptContext2_Enable();
FreezeObjectEvents();
CreateTask(Task_EscalatorWarpInFieldEffect, 0);
@@ -1819,7 +1819,7 @@ static void FieldCB_LavaridgeGymB1FWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
sub_8111CF0();
QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
ScriptContext2_Enable();
gFieldCallback = NULL;
CreateTask(Task_LavaridgeGymB1FWarpExit, 0);
@@ -2186,7 +2186,7 @@ static void FieldCallback_EscapeRopeExit(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
sub_8111CF0();
QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
ScriptContext2_Enable();
FreezeObjectEvents();
gFieldCallback = NULL;
@@ -2350,7 +2350,7 @@ static void FieldCallback_TeleportIn(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
sub_8111CF0();
QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
ScriptContext2_Enable();
FreezeObjectEvents();
gFieldCallback = NULL;
+3 -3
View File
@@ -288,7 +288,7 @@ static void sub_807DF4C(bool8 a0)
void FieldCB_DefaultWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
sub_8111CF0();
QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
sub_807DE78(FALSE);
ScriptContext2_Enable();
}
@@ -296,7 +296,7 @@ void FieldCB_DefaultWarpExit(void)
void FieldCB_WarpExitFadeFromBlack(void)
{
Overworld_PlaySpecialMapMusic();
sub_8111CF0();
QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
sub_807DE78(TRUE);
ScriptContext2_Enable();
}
@@ -305,7 +305,7 @@ static void FieldCB_TeleportWarpIn(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
sub_8111CF0();
QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
PlaySE(SE_TK_WARPOUT);
CreateTask(Task_TeleportWarpIn, 10);
ScriptContext2_Enable();
+72 -72
View File
@@ -95,7 +95,7 @@ static u8 *const sStringVarPtrs[] = {
void ShowDiploma(void)
{
QuestLog_OnInteractionWithSpecialNpc();
QuestLog_CutRecording();
SetMainCallback2(CB2_ShowDiploma);
ScriptContext2_Enable();
}
@@ -187,7 +187,7 @@ u8 GetLeadMonFriendship(void)
void ShowTownMap(void)
{
QuestLog_OnInteractionWithSpecialNpc();
QuestLog_CutRecording();
sub_80BFF50(1, CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
@@ -1775,18 +1775,18 @@ bool8 DoesPlayerPartyContainSpecies(void)
}
static const u8 sMartMaps[][3] = {
{MAP_GROUP(VIRIDIAN_CITY_MART), MAP_NUM(VIRIDIAN_CITY_MART), 1},
{MAP_GROUP(PEWTER_CITY_MART), MAP_NUM(PEWTER_CITY_MART), 3},
{MAP_GROUP(CERULEAN_CITY_MART), MAP_NUM(CERULEAN_CITY_MART), 1},
{MAP_GROUP(LAVENDER_TOWN_MART), MAP_NUM(LAVENDER_TOWN_MART), 1},
{MAP_GROUP(VERMILION_CITY_MART), MAP_NUM(VERMILION_CITY_MART), 1},
{MAP_GROUP(FUCHSIA_CITY_MART), MAP_NUM(FUCHSIA_CITY_MART), 1},
{MAP_GROUP(CINNABAR_ISLAND_MART), MAP_NUM(CINNABAR_ISLAND_MART), 1},
{MAP_GROUP(SAFFRON_CITY_MART), MAP_NUM(SAFFRON_CITY_MART), 1},
{MAP_GROUP(THREE_ISLAND_MART), MAP_NUM(THREE_ISLAND_MART), 1},
{MAP_GROUP(FOUR_ISLAND_MART), MAP_NUM(FOUR_ISLAND_MART), 1},
{MAP_GROUP(SEVEN_ISLAND_MART), MAP_NUM(SEVEN_ISLAND_MART), 1},
{MAP_GROUP(SIX_ISLAND_MART), MAP_NUM(SIX_ISLAND_MART), 1}
{MAP(VIRIDIAN_CITY_MART), 1},
{MAP(PEWTER_CITY_MART), 3},
{MAP(CERULEAN_CITY_MART), 1},
{MAP(LAVENDER_TOWN_MART), 1},
{MAP(VERMILION_CITY_MART), 1},
{MAP(FUCHSIA_CITY_MART), 1},
{MAP(CINNABAR_ISLAND_MART), 1},
{MAP(SAFFRON_CITY_MART), 1},
{MAP(THREE_ISLAND_MART), 1},
{MAP(FOUR_ISLAND_MART), 1},
{MAP(SEVEN_ISLAND_MART), 1},
{MAP(SIX_ISLAND_MART), 1}
};
u8 GetMartClerkObjectId(void)
@@ -1811,57 +1811,57 @@ static const struct {
u16 grp2;
u16 num2;
} sInsideOutsidePairs[51] = {
{MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN)},
{MAP_GROUP(PALLET_TOWN_PROFESSOR_OAKS_LAB), MAP_NUM(PALLET_TOWN_PROFESSOR_OAKS_LAB), MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN)},
{MAP_GROUP(VIRIDIAN_CITY_GYM), MAP_NUM(VIRIDIAN_CITY_GYM), MAP_GROUP(VIRIDIAN_CITY), MAP_NUM(VIRIDIAN_CITY)},
{MAP_GROUP(ROUTE22_NORTH_ENTRANCE), MAP_NUM(ROUTE22_NORTH_ENTRANCE), MAP_GROUP(ROUTE22), MAP_NUM(ROUTE22)},
{MAP_GROUP(ROUTE22_NORTH_ENTRANCE), MAP_NUM(ROUTE22_NORTH_ENTRANCE), MAP_GROUP(ROUTE23), MAP_NUM(ROUTE23)},
{MAP_GROUP(VIRIDIAN_FOREST), MAP_NUM(VIRIDIAN_FOREST), MAP_GROUP(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE), MAP_NUM(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE)},
{MAP_GROUP(VIRIDIAN_FOREST), MAP_NUM(VIRIDIAN_FOREST), MAP_GROUP(ROUTE2_VIRIDIAN_FOREST_NORTH_ENTRANCE), MAP_NUM(ROUTE2_VIRIDIAN_FOREST_NORTH_ENTRANCE)},
{MAP_GROUP(PEWTER_CITY_MUSEUM_1F), MAP_NUM(PEWTER_CITY_MUSEUM_1F), MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY)},
{MAP_GROUP(PEWTER_CITY_GYM), MAP_NUM(PEWTER_CITY_GYM), MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY)},
{MAP_GROUP(MT_MOON_1F), MAP_NUM(MT_MOON_1F), MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4)},
{MAP_GROUP(MT_MOON_B1F), MAP_NUM(MT_MOON_B1F), MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4)},
{MAP_GROUP(CERULEAN_CITY_GYM), MAP_NUM(CERULEAN_CITY_GYM), MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY)},
{MAP_GROUP(CERULEAN_CITY_BIKE_SHOP), MAP_NUM(CERULEAN_CITY_BIKE_SHOP), MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY)},
{MAP_GROUP(ROUTE25_SEA_COTTAGE), MAP_NUM(ROUTE25_SEA_COTTAGE), MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25)},
{MAP_GROUP(ROUTE5_POKEMON_DAY_CARE), MAP_NUM(ROUTE5_POKEMON_DAY_CARE), MAP_GROUP(ROUTE5), MAP_NUM(ROUTE5)},
{MAP_GROUP(UNDERGROUND_PATH_NORTH_ENTRANCE), MAP_NUM(UNDERGROUND_PATH_NORTH_ENTRANCE), MAP_GROUP(ROUTE5), MAP_NUM(ROUTE5)},
{MAP_GROUP(UNDERGROUND_PATH_SOUTH_ENTRANCE), MAP_NUM(UNDERGROUND_PATH_SOUTH_ENTRANCE), MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6)},
{MAP_GROUP(VERMILION_CITY_POKEMON_FAN_CLUB), MAP_NUM(VERMILION_CITY_POKEMON_FAN_CLUB), MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY)},
{MAP_GROUP(VERMILION_CITY_GYM), MAP_NUM(VERMILION_CITY_GYM), MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY)},
{MAP_GROUP(SSANNE_1F_CORRIDOR), MAP_NUM(SSANNE_1F_CORRIDOR), MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY)},
{MAP_GROUP(DIGLETTS_CAVE_NORTH_ENTRANCE), MAP_NUM(DIGLETTS_CAVE_NORTH_ENTRANCE), MAP_GROUP(ROUTE2), MAP_NUM(ROUTE2)},
{MAP_GROUP(DIGLETTS_CAVE_SOUTH_ENTRANCE), MAP_NUM(DIGLETTS_CAVE_SOUTH_ENTRANCE), MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11)},
{MAP_GROUP(ROCK_TUNNEL_1F), MAP_NUM(ROCK_TUNNEL_1F), MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10)},
{MAP_GROUP(ROCK_TUNNEL_1F), MAP_NUM(ROCK_TUNNEL_1F), MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10)},
{MAP_GROUP(POWER_PLANT), MAP_NUM(POWER_PLANT), MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10)},
{MAP_GROUP(POKEMON_TOWER_1F), MAP_NUM(POKEMON_TOWER_1F), MAP_GROUP(LAVENDER_TOWN), MAP_NUM(LAVENDER_TOWN)},
{MAP_GROUP(LAVENDER_TOWN_VOLUNTEER_POKEMON_HOUSE), MAP_NUM(LAVENDER_TOWN_VOLUNTEER_POKEMON_HOUSE), MAP_GROUP(LAVENDER_TOWN), MAP_NUM(LAVENDER_TOWN)},
{MAP_GROUP(LAVENDER_TOWN_HOUSE2), MAP_NUM(LAVENDER_TOWN_HOUSE2), MAP_GROUP(LAVENDER_TOWN), MAP_NUM(LAVENDER_TOWN)},
{MAP_GROUP(UNDERGROUND_PATH_EAST_ENTRANCE), MAP_NUM(UNDERGROUND_PATH_EAST_ENTRANCE), MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8)},
{MAP_GROUP(UNDERGROUND_PATH_WEST_ENTRANCE), MAP_NUM(UNDERGROUND_PATH_WEST_ENTRANCE), MAP_GROUP(ROUTE7), MAP_NUM(ROUTE7)},
{MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_1F), MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_1F), MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY)},
{MAP_GROUP(CELADON_CITY_CONDOMINIUMS_1F), MAP_NUM(CELADON_CITY_CONDOMINIUMS_1F), MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY)},
{MAP_GROUP(CELADON_CITY_GAME_CORNER), MAP_NUM(CELADON_CITY_GAME_CORNER), MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY)},
{MAP_GROUP(CELADON_CITY_GYM), MAP_NUM(CELADON_CITY_GYM), MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY)},
{MAP_GROUP(CELADON_CITY_RESTAURANT), MAP_NUM(CELADON_CITY_RESTAURANT), MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY)},
{MAP_GROUP(ROCKET_HIDEOUT_B1F), MAP_NUM(ROCKET_HIDEOUT_B1F), MAP_GROUP(CELADON_CITY_GAME_CORNER), MAP_NUM(CELADON_CITY_GAME_CORNER)},
{MAP_GROUP(SAFARI_ZONE_CENTER), MAP_NUM(SAFARI_ZONE_CENTER), MAP_GROUP(FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE), MAP_NUM(FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE)},
{MAP_GROUP(FUCHSIA_CITY_GYM), MAP_NUM(FUCHSIA_CITY_GYM), MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY)},
{MAP_GROUP(FUCHSIA_CITY_WARDENS_HOUSE), MAP_NUM(FUCHSIA_CITY_WARDENS_HOUSE), MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY)},
{MAP_GROUP(SAFFRON_CITY_DOJO), MAP_NUM(SAFFRON_CITY_DOJO), MAP_GROUP(SAFFRON_CITY), MAP_NUM(SAFFRON_CITY)},
{MAP_GROUP(SAFFRON_CITY_GYM), MAP_NUM(SAFFRON_CITY_GYM), MAP_GROUP(SAFFRON_CITY), MAP_NUM(SAFFRON_CITY)},
{MAP_GROUP(SILPH_CO_1F), MAP_NUM(SILPH_CO_1F), MAP_GROUP(SAFFRON_CITY), MAP_NUM(SAFFRON_CITY)},
{MAP_GROUP(SEAFOAM_ISLANDS_1F), MAP_NUM(SEAFOAM_ISLANDS_1F), MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20)},
{MAP_GROUP(SEAFOAM_ISLANDS_1F), MAP_NUM(SEAFOAM_ISLANDS_1F), MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20)},
{MAP_GROUP(POKEMON_MANSION_1F), MAP_NUM(POKEMON_MANSION_1F), MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND)},
{MAP_GROUP(CINNABAR_ISLAND_GYM), MAP_NUM(CINNABAR_ISLAND_GYM), MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND)},
{MAP_GROUP(CINNABAR_ISLAND_POKEMON_LAB_ENTRANCE), MAP_NUM(CINNABAR_ISLAND_POKEMON_LAB_ENTRANCE), MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND)},
{MAP_GROUP(VICTORY_ROAD_1F), MAP_NUM(VICTORY_ROAD_1F), MAP_GROUP(ROUTE23), MAP_NUM(ROUTE23)},
{MAP_GROUP(VICTORY_ROAD_2F), MAP_NUM(VICTORY_ROAD_2F), MAP_GROUP(ROUTE23), MAP_NUM(ROUTE23)},
{MAP_GROUP(INDIGO_PLATEAU_POKEMON_CENTER_1F), MAP_NUM(INDIGO_PLATEAU_POKEMON_CENTER_1F), MAP_GROUP(INDIGO_PLATEAU_EXTERIOR), MAP_NUM(INDIGO_PLATEAU_EXTERIOR)},
{MAP_GROUP(CERULEAN_CAVE_1F), MAP_NUM(CERULEAN_CAVE_1F), MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY)}
[QL_LOCATION_HOME] = {MAP(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP(PALLET_TOWN)},
[QL_LOCATION_OAKS_LAB] = {MAP(PALLET_TOWN_PROFESSOR_OAKS_LAB), MAP(PALLET_TOWN)},
[QL_LOCATION_VIRIDIAN_GYM] = {MAP(VIRIDIAN_CITY_GYM), MAP(VIRIDIAN_CITY)},
[QL_LOCATION_LEAGUE_GATE_1] = {MAP(ROUTE22_NORTH_ENTRANCE), MAP(ROUTE22)},
[QL_LOCATION_LEAGUE_GATE_2] = {MAP(ROUTE22_NORTH_ENTRANCE), MAP(ROUTE23)},
[QL_LOCATION_VIRIDIAN_FOREST_1] = {MAP(VIRIDIAN_FOREST), MAP(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE)},
[QL_LOCATION_VIRIDIAN_FOREST_2] = {MAP(VIRIDIAN_FOREST), MAP(ROUTE2_VIRIDIAN_FOREST_NORTH_ENTRANCE)},
[QL_LOCATION_PEWTER_MUSEUM] = {MAP(PEWTER_CITY_MUSEUM_1F), MAP(PEWTER_CITY)},
[QL_LOCATION_PEWTER_GYM] = {MAP(PEWTER_CITY_GYM), MAP(PEWTER_CITY)},
[QL_LOCATION_MT_MOON_1] = {MAP(MT_MOON_1F), MAP(ROUTE4)},
[QL_LOCATION_MT_MOON_2] = {MAP(MT_MOON_B1F), MAP(ROUTE4)},
[QL_LOCATION_CERULEAN_GYM] = {MAP(CERULEAN_CITY_GYM), MAP(CERULEAN_CITY)},
[QL_LOCATION_BIKE_SHOP] = {MAP(CERULEAN_CITY_BIKE_SHOP), MAP(CERULEAN_CITY)},
[QL_LOCATION_BILLS_HOUSE] = {MAP(ROUTE25_SEA_COTTAGE), MAP(ROUTE25)},
[QL_LOCATION_DAY_CARE] = {MAP(ROUTE5_POKEMON_DAY_CARE), MAP(ROUTE5)},
[QL_LOCATION_UNDERGROUND_PATH_1] = {MAP(UNDERGROUND_PATH_NORTH_ENTRANCE), MAP(ROUTE5)},
[QL_LOCATION_UNDERGROUND_PATH_2] = {MAP(UNDERGROUND_PATH_SOUTH_ENTRANCE), MAP(ROUTE6)},
[QL_LOCATION_PKMN_FAN_CLUB] = {MAP(VERMILION_CITY_POKEMON_FAN_CLUB), MAP(VERMILION_CITY)},
[QL_LOCATION_VERMILION_GYM] = {MAP(VERMILION_CITY_GYM), MAP(VERMILION_CITY)},
[QL_LOCATION_SS_ANNE] = {MAP(SSANNE_1F_CORRIDOR), MAP(VERMILION_CITY)},
[QL_LOCATION_DIGLETTS_CAVE_1] = {MAP(DIGLETTS_CAVE_NORTH_ENTRANCE), MAP(ROUTE2)},
[QL_LOCATION_DIGLETTS_CAVE_2] = {MAP(DIGLETTS_CAVE_SOUTH_ENTRANCE), MAP(ROUTE11)},
[QL_LOCATION_ROCK_TUNNEL_1] = {MAP(ROCK_TUNNEL_1F), MAP(ROUTE10)},
[QL_LOCATION_ROCK_TUNNEL_2] = {MAP(ROCK_TUNNEL_1F), MAP(ROUTE10)},
[QL_LOCATION_POWER_PLANT] = {MAP(POWER_PLANT), MAP(ROUTE10)},
[QL_LOCATION_PKMN_TOWER] = {MAP(POKEMON_TOWER_1F), MAP(LAVENDER_TOWN)},
[QL_LOCATION_VOLUNTEER_HOUSE] = {MAP(LAVENDER_TOWN_VOLUNTEER_POKEMON_HOUSE), MAP(LAVENDER_TOWN)},
[QL_LOCATION_NAME_RATERS_HOUSE] = {MAP(LAVENDER_TOWN_HOUSE2), MAP(LAVENDER_TOWN)},
[QL_LOCATION_UNDERGROUND_PATH_3] = {MAP(UNDERGROUND_PATH_EAST_ENTRANCE), MAP(ROUTE8)},
[QL_LOCATION_UNDERGROUND_PATH_4] = {MAP(UNDERGROUND_PATH_WEST_ENTRANCE), MAP(ROUTE7)},
[QL_LOCATION_CELADON_DEPT_STORE] = {MAP(CELADON_CITY_DEPARTMENT_STORE_1F), MAP(CELADON_CITY)},
[QL_LOCATION_CELADON_MANSION] = {MAP(CELADON_CITY_CONDOMINIUMS_1F), MAP(CELADON_CITY)},
[QL_LOCATION_GAME_CORNER] = {MAP(CELADON_CITY_GAME_CORNER), MAP(CELADON_CITY)},
[QL_LOCATION_CELADON_GYM] = {MAP(CELADON_CITY_GYM), MAP(CELADON_CITY)},
[QL_LOCATION_CELADON_RESTAURANT] = {MAP(CELADON_CITY_RESTAURANT), MAP(CELADON_CITY)},
[QL_LOCATION_ROCKET_HIDEOUT] = {MAP(ROCKET_HIDEOUT_B1F), MAP(CELADON_CITY_GAME_CORNER)},
[QL_LOCATION_SAFARI_ZONE] = {MAP(SAFARI_ZONE_CENTER), MAP(FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE)},
[QL_LOCATION_FUCHSIA_GYM] = {MAP(FUCHSIA_CITY_GYM), MAP(FUCHSIA_CITY)},
[QL_LOCATION_WARDENS_HOME] = {MAP(FUCHSIA_CITY_WARDENS_HOUSE), MAP(FUCHSIA_CITY)},
[QL_LOCATION_FIGHTING_DOJO] = {MAP(SAFFRON_CITY_DOJO), MAP(SAFFRON_CITY)},
[QL_LOCATION_SAFFRON_GYM] = {MAP(SAFFRON_CITY_GYM), MAP(SAFFRON_CITY)},
[QL_LOCATION_SILPH_CO] = {MAP(SILPH_CO_1F), MAP(SAFFRON_CITY)},
[QL_LOCATION_SEAFOAM_ISLANDS_1] = {MAP(SEAFOAM_ISLANDS_1F), MAP(ROUTE20)},
[QL_LOCATION_SEAFOAM_ISLANDS_2] = {MAP(SEAFOAM_ISLANDS_1F), MAP(ROUTE20)},
[QL_LOCATION_PKMN_MANSION] = {MAP(POKEMON_MANSION_1F), MAP(CINNABAR_ISLAND)},
[QL_LOCATION_CINNABAR_GYM] = {MAP(CINNABAR_ISLAND_GYM), MAP(CINNABAR_ISLAND)},
[QL_LOCATION_CINNABAR_LAB] = {MAP(CINNABAR_ISLAND_POKEMON_LAB_ENTRANCE), MAP(CINNABAR_ISLAND)},
[QL_LOCATION_VICTORY_ROAD_1] = {MAP(VICTORY_ROAD_1F), MAP(ROUTE23)},
[QL_LOCATION_VICTORY_ROAD_2] = {MAP(VICTORY_ROAD_2F), MAP(ROUTE23)},
[QL_LOCATION_PKMN_LEAGUE] = {MAP(INDIGO_PLATEAU_POKEMON_CENTER_1F), MAP(INDIGO_PLATEAU_EXTERIOR)},
[QL_LOCATION_CERULEAN_CAVE] = {MAP(CERULEAN_CAVE_1F), MAP(CERULEAN_CITY)}
};
void sub_80CC534(void)
@@ -1871,7 +1871,7 @@ void sub_80CC534(void)
{
if (gSaveBlock1Ptr->location.mapGroup == sInsideOutsidePairs[i].grp && gSaveBlock1Ptr->location.mapNum == sInsideOutsidePairs[i].num)
{
if (VarGet(VAR_0x404D) != 35 || i != 32)
if (VarGet(VAR_0x404D) != QL_LOCATION_ROCKET_HIDEOUT || i != QL_LOCATION_GAME_CORNER)
{
VarSet(VAR_0x404D, i);
FlagSet(FLAG_0x808);
@@ -1893,7 +1893,7 @@ void sub_80CC59C(void)
sp0.unk1 = 0;
if (FlagGet(FLAG_0x808))
{
if (r5 == 5)
if (r5 == QL_LOCATION_VIRIDIAN_FOREST_1)
{
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE) && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE) || gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE2_VIRIDIAN_FOREST_NORTH_ENTRANCE)))
{
@@ -1907,7 +1907,7 @@ void sub_80CC59C(void)
return;
}
}
else if (r5 == 3)
else if (r5 == QL_LOCATION_LEAGUE_GATE_1)
{
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE22) && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE22) || gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE23)))
{
@@ -1925,13 +1925,13 @@ void sub_80CC59C(void)
{
sp0.unk0 = Overworld_GetMapHeaderByGroupAndId(sInsideOutsidePairs[r5].grp, sInsideOutsidePairs[r5].num)->regionMapSectionId;
sp0.unk1 = r5;
if (r5 == 22)
if (r5 == QL_LOCATION_ROCK_TUNNEL_1)
{
PlayerGetDestCoords(&x, &y);
if (x != 15 || y != 26)
sp0.unk1++;
}
else if (r5 == 42)
else if (r5 == QL_LOCATION_SEAFOAM_ISLANDS_1)
{
PlayerGetDestCoords(&x, &y);
if (x != 67 || y != 15)
@@ -1939,9 +1939,9 @@ void sub_80CC59C(void)
}
SetQuestLogEvent(QL_EVENT_DEPARTED, (void *)&sp0);
FlagClear(FLAG_0x808);
if (r5 == 35)
if (r5 == QL_LOCATION_ROCKET_HIDEOUT)
{
VarSet(VAR_0x404D, 32);
VarSet(VAR_0x404D, QL_LOCATION_GAME_CORNER);
FlagSet(FLAG_0x808);
}
}
+197
View File
@@ -0,0 +1,197 @@
#include "global.h"
#include "gflib.h"
#include "menu.h"
static EWRAM_DATA u8 sHelpMessageWindowId = 0;
const u16 gUnknown_84566A8[] = INCBIN_U16("data/graphics/unknown_84566a8.bin");
static const struct WindowTemplate sHelpMessageWindowTemplate = {
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 15,
.width = 30,
.height = 5,
.paletteNum = 15,
.baseBlock = 0x08F
};
void MapNamePopupWindowIdSetDummy(void)
{
sHelpMessageWindowId = 0xFF;
}
u8 CreateHelpMessageWindow(void)
{
if (sHelpMessageWindowId == 0xFF)
{
sHelpMessageWindowId = AddWindow(&sHelpMessageWindowTemplate);
PutWindowTilemap(sHelpMessageWindowId);
}
return sHelpMessageWindowId;
}
void DestroyHelpMessageWindow(u8 a0)
{
if (sHelpMessageWindowId != 0xFF)
{
FillWindowPixelBuffer(sHelpMessageWindowId, PIXEL_FILL(0));
ClearWindowTilemap(sHelpMessageWindowId);
if (a0)
CopyWindowToVram(sHelpMessageWindowId, a0);
RemoveWindow(sHelpMessageWindowId);
sHelpMessageWindowId = 0xFF;
}
}
#ifdef NONMATCHING
void sub_8112F18(u8 windowId)
{
u8 width = GetWindowAttribute(windowId, WINDOW_WIDTH);
u8 height = GetWindowAttribute(windowId, WINDOW_HEIGHT);
u8 *buffer = Alloc(32 * width * height);
u8 i, j;
u8 k;
if (buffer != NULL)
{
for (i = 0; i < height; i++)
{
for (j = 0; j < width; j++)
{
if (i == 0)
k = 0;
else if (i == height - 1)
k = 14;
else
k = 5;
CpuCopy32(
(void *)gUnknown_84566A8 + 32 * k, // operand swap on "add" instruction
buffer + 32 * (i * width + j),
32
);
}
}
CopyToWindowPixelBuffer(windowId, buffer, width * height * 32, 0);
Free(buffer);
}
}
#else
NAKED
void sub_8112F18(u8 windowId)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r10\n"
"\tmov r6, r9\n"
"\tmov r5, r8\n"
"\tpush {r5-r7}\n"
"\tsub sp, 0x8\n"
"\tlsls r0, 24\n"
"\tlsrs r0, 24\n"
"\tmov r10, r0\n"
"\tmovs r1, 0x3\n"
"\tbl GetWindowAttribute\n"
"\tlsls r0, 24\n"
"\tlsrs r6, r0, 24\n"
"\tmov r0, r10\n"
"\tmovs r1, 0x4\n"
"\tbl GetWindowAttribute\n"
"\tlsls r0, 24\n"
"\tlsrs r7, r0, 24\n"
"\tlsls r0, r7, 5\n"
"\tmuls r0, r6\n"
"\tbl Alloc\n"
"\tmov r8, r0\n"
"\tcmp r0, 0\n"
"\tbeq _08112FB8\n"
"\tmovs r5, 0\n"
"\tadds r0, r6, 0\n"
"\tmuls r0, r7\n"
"\tstr r0, [sp]\n"
"\tcmp r5, r7\n"
"\tbcs _08112FA2\n"
"_08112F5A:\n"
"\tmovs r4, 0\n"
"\tadds r1, r5, 0x1\n"
"\tmov r9, r1\n"
"\tcmp r4, r6\n"
"\tbcs _08112F98\n"
"\tsubs r3, r7, 0x1\n"
"_08112F66:\n"
"\tmovs r0, 0\n"
"\tcmp r5, 0\n"
"\tbeq _08112F74\n"
"\tmovs r0, 0x5\n"
"\tcmp r5, r3\n"
"\tbne _08112F74\n"
"\tmovs r0, 0xE\n"
"_08112F74:\n"
"\tlsls r0, 5\n"
"\tldr r1, _08112FC8 @ =gUnknown_84566A8\n"
"\tadds r0, r1, r0\n"
"\tadds r1, r5, 0\n"
"\tmuls r1, r6\n"
"\tadds r1, r4\n"
"\tlsls r1, 5\n"
"\tadd r1, r8\n"
"\tldr r2, _08112FCC @ =0x04000008\n"
"\tstr r3, [sp, 0x4]\n"
"\tbl CpuSet\n"
"\tadds r0, r4, 0x1\n"
"\tlsls r0, 24\n"
"\tlsrs r4, r0, 24\n"
"\tldr r3, [sp, 0x4]\n"
"\tcmp r4, r6\n"
"\tbcc _08112F66\n"
"_08112F98:\n"
"\tmov r1, r9\n"
"\tlsls r0, r1, 24\n"
"\tlsrs r5, r0, 24\n"
"\tcmp r5, r7\n"
"\tbcc _08112F5A\n"
"_08112FA2:\n"
"\tldr r0, [sp]\n"
"\tlsls r2, r0, 21\n"
"\tlsrs r2, 16\n"
"\tmov r0, r10\n"
"\tmov r1, r8\n"
"\tmovs r3, 0\n"
"\tbl CopyToWindowPixelBuffer\n"
"\tmov r0, r8\n"
"\tbl Free\n"
"_08112FB8:\n"
"\tadd sp, 0x8\n"
"\tpop {r3-r5}\n"
"\tmov r8, r3\n"
"\tmov r9, r4\n"
"\tmov r10, r5\n"
"\tpop {r4-r7}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_08112FC8: .4byte gUnknown_84566A8\n"
"_08112FCC: .4byte 0x04000008");
}
#endif
static void sub_8112FD0(void)
{
sub_8112F18(sHelpMessageWindowId);
}
static const u8 sHelpMessageTextColors[3] = {TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_1, TEXT_COLOR_DARK_GREY};
static void PrintHelpMessageText(const u8 *text)
{
AddTextPrinterParameterized4(sHelpMessageWindowId, 2, 2, 5, 1, 1, sHelpMessageTextColors, -1, text);
}
void PrintTextOnHelpMessageWindow(const u8 *text, u8 mode)
{
sub_8112FD0();
PrintHelpMessageText(text);
if (mode)
CopyWindowToVram(sHelpMessageWindowId, mode);
}
+1 -1
View File
@@ -78,7 +78,7 @@ void SetSaveBlocksPointers(void)
gPokemonStoragePtr = (void*)(&gPokemonStorage) + offset;
SetBagPocketsPointers();
sub_8110840(oldSave);
SetQuestLogRecordAndPlaybackPointers(oldSave);
}
void MoveSaveBlocks_ResetHeap(void)
+2 -7
View File
@@ -1,18 +1,13 @@
#include "global.h"
#include "malloc.h"
#include "dma3.h"
#include "task.h"
#include "bg.h"
#include "window.h"
#include "gflib.h"
#include "help_message.h"
#include "menu.h"
#include "menu_helpers.h"
#include "new_menu_helpers.h"
#include "quest_log.h"
#include "text.h"
#include "field_specials.h"
#include "text_window.h"
#include "script.h"
#include "palette.h"
#define DLG_WINDOW_PALETTE_NUM 15
#define DLG_WINDOW_BASE_TILE_NUM 0x200
+25 -25
View File
@@ -160,9 +160,9 @@ static void SetCameraToTrackGuestPlayer_2(void);
static void sub_8057178(void);
static void sub_80571A8(void);
static void CreateLinkPlayerSprites(void);
static void sub_80572D8(void);
static void sub_8057300(u8 *state);
static bool32 sub_8057314(u8 *state);
static void CB2_LoadMapForQLPlayback(void);
static void DoLoadMap_QLPlayback(u8 *state);
static bool32 LoadMap_QLPlayback(u8 *state);
static bool32 SetUpScrollSceneForCredits(u8 *state, u8 unused);
static bool8 MapLdr_Credits(void);
static void CameraCB_CreditsPan(struct CameraObject * camera);
@@ -340,7 +340,7 @@ static void Overworld_ResetStateAfterWhitingOut(void)
VarSet(VAR_0x404D, 0);
}
static void sub_8054E40(void)
static void Overworld_ResetStateOnContinue(void)
{
FlagClear(FLAG_SYS_SAFARI_MODE);
VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
@@ -979,7 +979,7 @@ void SetCurrentMapLayout(u16 mapLayoutId)
gMapHeader.mapLayout = GetMapLayout();
}
void sub_8055D5C(struct WarpData * warp)
void Overworld_SetWarpDestinationFromWarp(struct WarpData * warp)
{
sWarpDestination = *warp;
}
@@ -1441,7 +1441,7 @@ static void DoCB1_Overworld_QuestLogPlayback(void)
RunQuestLogCB();
}
}
else if (sub_8111CD0() == TRUE)
else if (QuestLogScenePlaybackIsEnding() == TRUE)
{
RunQuestLogCB();
}
@@ -1555,7 +1555,7 @@ void CB2_WhiteOut(void)
gFieldCallback = FieldCB_RushInjuredPokemonToCenter;
val = 0;
do_load_map_stuff_loop(&val);
QuestLog_OnInteractionWithSpecialNpc();
QuestLog_CutRecording();
SetFieldVBlankCallback();
SetMainCallback1(CB1_Overworld);
SetMainCallback2(CB2_Overworld);
@@ -1575,9 +1575,9 @@ void CB2_LoadMap(void)
static void CB2_LoadMap2(void)
{
do_load_map_stuff_loop(&gMain.state);
if (sub_8113748() == TRUE)
if (QuestLog_ShouldEndSceneOnMapChange() == TRUE)
{
sub_81119C8();
QuestLog_AdvancePlayhead_();
}
else
{
@@ -1671,14 +1671,14 @@ void CB2_ReturnToFieldContinueScriptPlayMapMusic(void)
CB2_ReturnToField();
}
void sub_80568FC(void)
void CB2_ReturnToFieldFromDiploma(void)
{
FieldClearVBlankHBlankCallbacks();
gFieldCallback = FieldCB_WarpExitFadeFromBlack;
CB2_ReturnToField();
}
static void sub_8056918(void)
static void FieldCB_ShowMapNameOnContinue(void)
{
if (SHOW_MAP_NAME_ENABLED)
ShowMapNamePopup(FALSE);
@@ -1693,7 +1693,7 @@ void CB2_ContinueSavedGame(void)
LoadSaveblockMapHeader();
LoadSaveblockObjEventScripts();
UnfreezeObjectEvents();
sub_8054E40();
Overworld_ResetStateOnContinue();
InitMapFromSavedGame();
PlayTimeCounter_Start();
ScriptContext1_Init();
@@ -1709,7 +1709,7 @@ void CB2_ContinueSavedGame(void)
}
else
{
gFieldCallback = sub_8056918;
gFieldCallback = FieldCB_ShowMapNameOnContinue;
SetMainCallback1(CB1_Overworld);
CB2_ReturnToField();
}
@@ -1861,7 +1861,7 @@ static bool32 load_map_stuff(u8 *state, bool32 a1)
(*state)++;
break;
case 3:
if (sub_8113748() == TRUE)
if (QuestLog_ShouldEndSceneOnMapChange() == TRUE)
return TRUE;
(*state)++;
break;
@@ -2205,7 +2205,7 @@ static void CreateLinkPlayerSprites(void)
// Quest Log
void sub_805726C(void)
void CB2_SetUpOverworldForQLPlaybackWithWarpExit(void)
{
FieldClearVBlankHBlankCallbacks();
gUnknown_2036E28 = 1;
@@ -2213,10 +2213,10 @@ void sub_805726C(void)
ScriptContext2_Disable();
SetMainCallback1(NULL);
SetMainCallback2(CB2_DoChangeMap);
gMain.savedCallback = sub_80572D8;
gMain.savedCallback = CB2_LoadMapForQLPlayback;
}
void sub_80572A8(void)
void CB2_SetUpOverworldForQLPlayback(void)
{
FieldClearVBlankHBlankCallbacks();
gUnknown_2036E28 = 1;
@@ -2224,24 +2224,24 @@ void sub_80572A8(void)
ScriptContext1_Init();
ScriptContext2_Disable();
SetMainCallback1(NULL);
SetMainCallback2(sub_80572D8);
SetMainCallback2(CB2_LoadMapForQLPlayback);
}
static void sub_80572D8(void)
static void CB2_LoadMapForQLPlayback(void)
{
sub_8057300(&gMain.state);
DoLoadMap_QLPlayback(&gMain.state);
SetFieldVBlankCallback();
SetMainCallback1(CB1_Overworld);
SetMainCallback2(CB2_Overworld);
}
static void sub_8057300(u8 *state)
static void DoLoadMap_QLPlayback(u8 *state)
{
while (!sub_8057314(state))
while (!LoadMap_QLPlayback(state))
;
}
static bool32 sub_8057314(u8 *state)
static bool32 LoadMap_QLPlayback(u8 *state)
{
switch (*state)
{
@@ -2317,7 +2317,7 @@ static bool32 sub_8057314(u8 *state)
return FALSE;
}
void sub_8057430(void)
void CB2_EnterFieldFromQuestLog(void)
{
FieldClearVBlankHBlankCallbacks();
StopMapMusic();
@@ -2326,7 +2326,7 @@ void sub_8057430(void)
LoadSaveblockMapHeader();
LoadSaveblockObjEventScripts();
UnfreezeObjectEvents();
sub_8054E40();
Overworld_ResetStateOnContinue();
InitMapFromSavedGame();
PlayTimeCounter_Start();
ScriptContext1_Init();
+1
View File
@@ -19,6 +19,7 @@
#include "fieldmap.h"
#include "fldeff.h"
#include "graphics.h"
#include "help_message.h"
#include "help_system.h"
#include "item.h"
#include "item_menu.h"
+96 -2758
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1
View File
@@ -8,6 +8,7 @@
#include "party_menu.h"
#include "save.h"
#include "link_rfu.h"
#include "help_message.h"
#include "event_data.h"
#include "fieldmap.h"
#include "safari_zone.h"
+359
View File
@@ -0,0 +1,359 @@
#include "global.h"
#include "gflib.h"
#include "battle.h"
#include "event_data.h"
#include "event_scripts.h"
#include "random.h"
#include "constants/vars.h"
#include "constants/flags.h"
struct TrainerFanClub
{
u8 timer:7;
u8 gotInitialFans:1;
u8 fanFlags;
};
#define TRAINER_FAN_CLUB ((struct TrainerFanClub *)GetVarPointer(VAR_FANCLUB_FAN_COUNTER))
#define GET_TRAINER_FAN_CLUB_FLAG(flag) (fanClub->fanFlags >> (flag) & 1)
#define SET_TRAINER_FAN_CLUB_FLAG(flag) (fanClub->fanFlags |= 1 << (flag))
#define FLIP_TRAINER_FAN_CLUB_FLAG(flag)(fanClub->fanFlags ^= 1 << (flag))
#define FANCLUB_MEMBER1 0
#define FANCLUB_MEMBER2 1
#define FANCLUB_MEMBER3 2
#define FANCLUB_MEMBER4 3
#define FANCLUB_MEMBER5 4
#define FANCLUB_MEMBER6 5
#define FANCLUB_MEMBER7 6
#define FANCLUB_MEMBER8 7
#define NUM_TRAINER_FAN_CLUB_MEMBERS 8
static void TryLoseFansFromPlayTimeAfterLinkBattle(struct TrainerFanClub *);
static void UpdateTrainerFanClubGameClear(struct TrainerFanClub *);
static u8 PlayerGainRandomTrainerFan(struct TrainerFanClub *);
static u16 GetNumFansOfPlayerInTrainerFanClub(struct TrainerFanClub *);
static void TryLoseFansFromPlayTime(struct TrainerFanClub *);
static bool16 IsFanClubMemberFanOfPlayer(struct TrainerFanClub *);
static void SetInitialFansOfPlayer(struct TrainerFanClub *);
static void BufferFanClubTrainerName(struct LinkBattleRecords *, u8, u8);
static void UpdateTrainerFansAfterLinkBattle(struct TrainerFanClub *);
static bool8 DidPlayerGetFirstFans(struct TrainerFanClub * );
static void SetPlayerGotFirstFans(struct TrainerFanClub *);
void ResetTrainerFanClub(void)
{
VarSet(VAR_FANCLUB_FAN_COUNTER, 0);
VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, 0);
}
void Script_TryLoseFansFromPlayTimeAfterLinkBattle(void)
{
TryLoseFansFromPlayTimeAfterLinkBattle(TRAINER_FAN_CLUB);
}
static void TryLoseFansFromPlayTimeAfterLinkBattle(struct TrainerFanClub *fanClub)
{
if (DidPlayerGetFirstFans(fanClub))
{
TryLoseFansFromPlayTime(fanClub);
VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, gSaveBlock2Ptr->playTimeHours);
}
}
void Script_UpdateTrainerFanClubGameClear(void)
{
UpdateTrainerFanClubGameClear(TRAINER_FAN_CLUB);
}
static void UpdateTrainerFanClubGameClear(struct TrainerFanClub *fanClub)
{
if (!fanClub->gotInitialFans)
{
SetPlayerGotFirstFans(fanClub);
SetInitialFansOfPlayer(fanClub);
VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, gSaveBlock2Ptr->playTimeHours);
FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_BLACKBELT);
FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_ROCKER);
FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_WOMAN);
FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_BEAUTY);
VarSet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB, 1);
}
}
ALIGNED(4) const u8 sCounterIncrements[] = {2, 1, 2, 1};
static u8 TryGainNewFanFromCounter(struct TrainerFanClub *fanClub, u8 a1)
{
if (VarGet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) == 2)
{
if (fanClub->timer + sCounterIncrements[a1] >= 20)
{
if (GetNumFansOfPlayerInTrainerFanClub(fanClub) < 3)
{
PlayerGainRandomTrainerFan(fanClub);
fanClub->timer = 0;
}
else
fanClub->timer = 20;
}
else
fanClub->timer += sCounterIncrements[a1];
}
return fanClub->timer;
}
static u8 PlayerGainRandomTrainerFan(struct TrainerFanClub *fanClub)
{
static const u8 sFanClubMemberIds[] = {
FANCLUB_MEMBER2,
FANCLUB_MEMBER4,
FANCLUB_MEMBER6,
FANCLUB_MEMBER1,
FANCLUB_MEMBER8,
FANCLUB_MEMBER7,
FANCLUB_MEMBER5,
FANCLUB_MEMBER3
};
u8 i;
u8 idx = 0;
for (i = 0; i < NUM_TRAINER_FAN_CLUB_MEMBERS; i++)
{
if (!(GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i])))
{
idx = i;
if (Random() % 2)
{
SET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]);
return sFanClubMemberIds[i];
}
}
}
SET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]);
return sFanClubMemberIds[idx];
}
static u8 PlayerLoseRandomTrainerFan(struct TrainerFanClub *fanClub)
{
static const u8 sFanClubMemberIds[] =
{
FANCLUB_MEMBER6,
FANCLUB_MEMBER7,
FANCLUB_MEMBER4,
FANCLUB_MEMBER8,
FANCLUB_MEMBER5,
FANCLUB_MEMBER2,
FANCLUB_MEMBER1,
FANCLUB_MEMBER3
};
u8 i;
u8 idx = 0;
if (GetNumFansOfPlayerInTrainerFanClub(fanClub) == 1)
return 0;
for (i = 0; i < NUM_TRAINER_FAN_CLUB_MEMBERS; i++)
{
if (GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]))
{
idx = i;
if (Random() % 2)
{
FLIP_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]);
return sFanClubMemberIds[i];
}
}
}
if (GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]))
FLIP_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]);
return sFanClubMemberIds[idx];
}
u16 Script_GetNumFansOfPlayerInTrainerFanClub(void)
{
return GetNumFansOfPlayerInTrainerFanClub(TRAINER_FAN_CLUB);
}
static u16 GetNumFansOfPlayerInTrainerFanClub(struct TrainerFanClub *fanClub)
{
u8 count = 0;
u8 i;
for (i = 0; i < NUM_TRAINER_FAN_CLUB_MEMBERS; i++)
{
if (GET_TRAINER_FAN_CLUB_FLAG(i))
count++;
}
return count;
}
void Script_TryLoseFansFromPlayTime(void)
{
TryLoseFansFromPlayTime(TRAINER_FAN_CLUB);
}
static void TryLoseFansFromPlayTime(struct TrainerFanClub *fanClub)
{
u8 i = 0;
u16 timer;
if (gSaveBlock2Ptr->playTimeHours < 999)
{
while (1)
{
if (GetNumFansOfPlayerInTrainerFanClub(fanClub) < 5)
{
VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, gSaveBlock2Ptr->playTimeHours);
break;
}
if (i == NUM_TRAINER_FAN_CLUB_MEMBERS)
break;
timer = VarGet(VAR_FANCLUB_LOSE_FAN_TIMER);
if (gSaveBlock2Ptr->playTimeHours - timer < 12)
break;
PlayerLoseRandomTrainerFan(fanClub);
timer = VarGet(VAR_FANCLUB_LOSE_FAN_TIMER);
VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, timer + 12);
i++;
}
}
}
bool16 Script_IsFanClubMemberFanOfPlayer(void)
{
return IsFanClubMemberFanOfPlayer(TRAINER_FAN_CLUB);
}
static bool16 IsFanClubMemberFanOfPlayer(struct TrainerFanClub *fanClub)
{
return GET_TRAINER_FAN_CLUB_FLAG(gSpecialVar_0x8004);
}
static void SetInitialFansOfPlayer(struct TrainerFanClub *fanClub)
{
SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER1);
SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER2);
SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER3);
}
void Script_BufferFanClubTrainerName(void)
{
u8 whichLinkTrainer = 0;
u8 whichNPCTrainer = 0;
switch (gSpecialVar_0x8004)
{
case FANCLUB_MEMBER1:
whichNPCTrainer = 0;
whichLinkTrainer = 0;
break;
case FANCLUB_MEMBER2:
case FANCLUB_MEMBER3:
case FANCLUB_MEMBER4:
case FANCLUB_MEMBER8:
break;
case FANCLUB_MEMBER5:
whichNPCTrainer = 1;
whichLinkTrainer = 0;
break;
case FANCLUB_MEMBER6:
whichNPCTrainer = 0;
whichLinkTrainer = 1;
break;
case FANCLUB_MEMBER7:
whichNPCTrainer = 2;
whichLinkTrainer = 1;
break;
}
BufferFanClubTrainerName(&gSaveBlock2Ptr->linkBattleRecords, whichLinkTrainer, whichNPCTrainer);
}
static void BufferFanClubTrainerName(struct LinkBattleRecords *linkRecords, u8 whichLinkTrainer, u8 whichNPCTrainer)
{
u8 *str;
const u8 *linkTrainerName = linkRecords->entries[whichLinkTrainer].name;
if (linkTrainerName[0] == EOS)
{
switch (whichNPCTrainer)
{
case 0:
StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName);
break;
case 1:
StringCopy(gStringVar1, gText_LtSurge);
break;
case 2:
StringCopy(gStringVar1, gText_Koga);
break;
default:
StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName);
break;
}
}
else
{
str = gStringVar1;
StringCopyN(str, linkTrainerName, PLAYER_NAME_LENGTH);
str[PLAYER_NAME_LENGTH] = EOS;
if ( str[0] == EXT_CTRL_CODE_BEGIN
&& str[1] == EXT_CTRL_CODE_JPN)
{
str += 2;
while (*str != EOS)
str++;
*str++ = EXT_CTRL_CODE_BEGIN;
*str++ = EXT_CTRL_CODE_ENG;
*str++ = EOS;
}
}
}
void Special_UpdateTrainerFansAfterLinkBattle(void)
{
UpdateTrainerFansAfterLinkBattle(TRAINER_FAN_CLUB);
}
static void UpdateTrainerFansAfterLinkBattle(struct TrainerFanClub *fanClub)
{
if (VarGet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) == 2)
{
TryLoseFansFromPlayTimeAfterLinkBattle(fanClub);
if (gBattleOutcome == B_OUTCOME_WON)
PlayerGainRandomTrainerFan(fanClub);
else
PlayerLoseRandomTrainerFan(fanClub);
}
}
static bool8 DidPlayerGetFirstFans(struct TrainerFanClub *fanClub)
{
return fanClub->gotInitialFans;
}
void Script_SetPlayerGotFirstFans(void)
{
SetPlayerGotFirstFans(TRAINER_FAN_CLUB);
}
static void SetPlayerGotFirstFans(struct TrainerFanClub *fanClub)
{
fanClub->gotInitialFans = TRUE;
}
u8 Script_TryGainNewFanFromCounter(void)
{
return TryGainNewFanFromCounter(TRAINER_FAN_CLUB, gSpecialVar_0x8004);
}