diff --git a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc index 4ebc03c8c..b9ce0c809 100644 --- a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc +++ b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc @@ -584,7 +584,7 @@ LittlerootTown_ProfessorBirchsLab_EventScript_ReceivePokedex:: @ 81FA3AC message LittlerootTown_ProfessorBirchsLab_Text_ReceivedPokedex waitfanfare setflag FLAG_SYS_POKEDEX_GET - special sub_81AFDA0 @ sets flags that are never read + special SetUnlockedPokedexFlags setflag FLAG_RECEIVED_POKEDEX_FROM_BIRCH setvar VAR_CABLE_CLUB_TUTORIAL_STATE, 1 return diff --git a/data/specials.inc b/data/specials.inc index fb2e8fe75..97cc3c782 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -504,7 +504,7 @@ gSpecials:: @ 81DBA64 def_special GetMartEmployeeObjectEventId def_special sub_80A08CC def_special Unused_SetWeatherSunny - def_special sub_81AFDA0 + def_special SetUnlockedPokedexFlags def_special IsTrainerRegistered def_special ShouldDoBrailleRegicePuzzle def_special EnableNationalPokedex diff --git a/include/global.h b/include/global.h index e3c8fee55..bcf3e6486 100644 --- a/include/global.h +++ b/include/global.h @@ -465,7 +465,7 @@ struct SaveBlock2 /*0x90*/ u8 filler_90[0x8]; /*0x98*/ struct Time localTimeOffset; /*0xA0*/ struct Time lastBerryTreeUpdate; - /*0xA8*/ u32 field_A8; // Written to, but never read. + /*0xA8*/ u32 gcnLinkFlags; // Read by Pokemon Colosseum/XD /*0xAC*/ u32 encryptionKey; /*0xB0*/ struct PlayersApprentice playerApprentice; /*0xDC*/ struct Apprentice apprentices[APPRENTICE_COUNT]; diff --git a/include/save_location.h b/include/save_location.h index 6c2ae0e6b..53f317c57 100644 --- a/include/save_location.h +++ b/include/save_location.h @@ -13,7 +13,6 @@ #define CHAMPION_SAVEWARP (1 << 7) void TrySetMapSaveWarpStatus(void); -void sub_81AFDA0(void); void SetChampionSaveWarp(void); #endif // GUARD_SAVE_LOCATION_H diff --git a/src/new_game.c b/src/new_game.c index 464da6414..290c0c2bb 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -162,7 +162,7 @@ void NewGameInitData(void) ClearSav1(); ClearMailData(); gSaveBlock2Ptr->specialSaveWarpFlags = 0; - gSaveBlock2Ptr->field_A8 = 0; + gSaveBlock2Ptr->gcnLinkFlags = 0; InitPlayerTrainerId(); PlayTimeCounter_Reset(); ClearPokedexFlags(); diff --git a/src/save_location.c b/src/save_location.c index 6bf5eceb0..aa56d7b16 100644 --- a/src/save_location.c +++ b/src/save_location.c @@ -118,17 +118,18 @@ void TrySetMapSaveWarpStatus(void) sub_81AFD5C(); } -// Called when receiving the Pokedex -// Only place field_A8 is written (aside from clearing on new game), never read -void sub_81AFDA0(void) +// In FRLG, only 0x1, 0x10, and 0x20 are set when the pokedex is received +// 0x2, 0x4, 0x8, and 0x8000 are instead set by SetPostgameFlags +// These flags are read by Pokemon Colosseum/XD for linking. XD Additionally requires FLAG_SYS_GAME_CLEAR +void SetUnlockedPokedexFlags(void) { - gSaveBlock2Ptr->field_A8 |= 0x8000; - gSaveBlock2Ptr->field_A8 |= 0x1; - gSaveBlock2Ptr->field_A8 |= 0x2; - gSaveBlock2Ptr->field_A8 |= 0x4; - gSaveBlock2Ptr->field_A8 |= 0x10; - gSaveBlock2Ptr->field_A8 |= 0x20; - gSaveBlock2Ptr->field_A8 |= 0x8; + gSaveBlock2Ptr->gcnLinkFlags |= 0x8000; + gSaveBlock2Ptr->gcnLinkFlags |= 0x1; + gSaveBlock2Ptr->gcnLinkFlags |= 0x2; + gSaveBlock2Ptr->gcnLinkFlags |= 0x4; + gSaveBlock2Ptr->gcnLinkFlags |= 0x10; + gSaveBlock2Ptr->gcnLinkFlags |= 0x20; + gSaveBlock2Ptr->gcnLinkFlags |= 0x8; } void SetChampionSaveWarp(void)