From bb3fbd621b692cee07f978850507b0bf39cc65dc Mon Sep 17 00:00:00 2001 From: Philippe Symons Date: Wed, 7 Jan 2026 22:33:56 +0100 Subject: [PATCH] =?UTF-8?q?Add=20a=20function=20to=20unlock=20the=20Egg=20?= =?UTF-8?q?Ticket=20for=20Japanese=20Pok=C3=A9mon=20Crystal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/gen2/Gen2Common.h | 2 ++ include/gen2/Gen2GameReader.h | 5 +++++ src/gen2/Gen2GameReader.cpp | 14 ++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/include/gen2/Gen2Common.h b/include/gen2/Gen2Common.h index bf898dd..39bd24b 100644 --- a/include/gen2/Gen2Common.h +++ b/include/gen2/Gen2Common.h @@ -12,6 +12,7 @@ typedef struct Gen2DistributionPokemon Gen2DistributionPokemon; // source: https://bulbapedia.bulbagarden.net/wiki/List_of_items_by_index_number_(Generation_II) #define CRYSTAL_ITEM_ID_GS_BALL 0x73 +#define CRYSTAL_ITEM_ID_EGG_TICKET 0x81 // Based on https://github.com/kwsch/PKHeX/blob/master/PKHeX.Core/Resources/text/script/gen2/flags_c_en.txt // Look at this file to see more events @@ -19,6 +20,7 @@ typedef struct Gen2DistributionPokemon Gen2DistributionPokemon; #define CRYSTAL_EVENTFLAG_KURT_READY_TO_RETURN_GSBALL 191 #define CRYSTAL_EVENTFLAG_GSBALL_USABLE_IN_ILEX_FOREST_SHRINE 192 #define CRYSTAL_EVENTFLAG_RECEIVED_GSBALL 832 +#define CRYSTAL_EVENTFLAG_EGG_TICKET 830 #define CRYSTAL_GS_BALL_ENABLE_VALUE 0xB enum class Gen2GameType diff --git a/include/gen2/Gen2GameReader.h b/include/gen2/Gen2GameReader.h index 6f7b813..1d132a1 100644 --- a/include/gen2/Gen2GameReader.h +++ b/include/gen2/Gen2GameReader.h @@ -215,6 +215,11 @@ public: */ void unlockGsBallEvent(); + /** + * @brief This function unlocks the Egg Ticket in Japanese Pokémon Crystal saves. + */ + void unlockEggTicketEvent(); + /** * @brief Retrieves the value of the given event flag * Hint: You can find the number and meaning of various event flags here: diff --git a/src/gen2/Gen2GameReader.cpp b/src/gen2/Gen2GameReader.cpp index 6de4e57..c6b4289 100644 --- a/src/gen2/Gen2GameReader.cpp +++ b/src/gen2/Gen2GameReader.cpp @@ -876,6 +876,20 @@ void Gen2GameReader::unlockGsBallEvent() saveManager_.writeByte(CRYSTAL_GS_BALL_ENABLE_VALUE); } +void Gen2GameReader::unlockEggTicketEvent() +{ + if(!isGameCrystal() || getGameLanguage() != Gen2LocalizationLanguage::JAPANESE) + { + return; + } + + // let's remove the Egg Ticket from the players' inventory first (if it exists) + Gen2ItemList itemList = getItemList(Gen2ItemListType::GEN2_ITEMLISTTYPE_KEYITEMPOCKET); + itemList.remove(CRYSTAL_ITEM_ID_EGG_TICKET); + + setEventFlag(CRYSTAL_EVENTFLAG_EGG_TICKET, true); +} + bool Gen2GameReader::getEventFlag(uint16_t flagNumber) { const uint32_t saveOffset = gen2_getSRAMOffsets(gameType_, localization_).eventFlags;