#include "global.h" #include "new_game.h" #include "random.h" #include "pokemon.h" #include "roamer.h" #include "pokemon_size_record.h" #include "script.h" #include "lottery_corner.h" #include "play_time.h" #include "mauville_old_man.h" #include "match_call.h" #include "lilycove_lady.h" #include "load_save.h" #include "pokeblock.h" #include "dewford_trend.h" #include "berry.h" #include "rtc.h" #include "easy_chat.h" #include "event_data.h" #include "money.h" #include "trainer_hill.h" #include "tv.h" #include "coins.h" #include "text.h" #include "overworld.h" #include "mail.h" #include "battle_records.h" #include "item.h" #include "pokedex.h" #include "apprentice.h" #include "frontier_util.h" #include "pokedex.h" #include "save.h" #include "link_rfu.h" #include "main.h" #include "contest.h" #include "item_menu.h" #include "pokemon_storage_system.h" #include "pokemon_jump.h" #include "decoration_inventory.h" #include "secret_base.h" #include "player_pc.h" #include "field_specials.h" #include "berry_powder.h" #include "mystery_gift.h" #include "union_room_chat.h" #include "constants/items.h" extern const u8 EventScript_ResetAllMapFlags[]; static void ClearFrontierRecord(void); static void WarpToBoatCabin(void); static void ResetMiniGamesRecords(void); EWRAM_DATA bool8 gDifferentSaveFile = FALSE; EWRAM_DATA bool8 gEnableContestDebugging = FALSE; static const struct ContestWinner sContestWinnerPicDummy = { .monName = _(""), .trainerName = _("") }; void SetTrainerId(u32 trainerId, u8 *dst) { dst[0] = trainerId; dst[1] = trainerId >> 8; dst[2] = trainerId >> 16; dst[3] = trainerId >> 24; } u32 GetTrainerId(u8 *trainerId) { return (trainerId[3] << 24) | (trainerId[2] << 16) | (trainerId[1] << 8) | (trainerId[0]); } void CopyTrainerId(u8 *dst, u8 *src) { s32 i; for (i = 0; i < TRAINER_ID_LENGTH; i++) dst[i] = src[i]; } static void InitPlayerTrainerId(void) { u32 trainerId = (Random() << 16) | GetGeneratedTrainerIdLower(); SetTrainerId(trainerId, gSaveBlock2Ptr->playerTrainerId); } // L=A isnt set here for some reason. static void SetDefaultOptions(void) { gSaveBlock2Ptr->optionsTextSpeed = OPTIONS_TEXT_SPEED_FAST; gSaveBlock2Ptr->optionsWindowFrameType = 0; gSaveBlock2Ptr->optionsSound = OPTIONS_SOUND_MONO; gSaveBlock2Ptr->optionsBattleStyle = OPTIONS_BATTLE_STYLE_SET; gSaveBlock2Ptr->optionsBattleSceneOff = FALSE; gSaveBlock2Ptr->regionMapZoom = FALSE; } static void ClearPokedexFlags(void) { gUnusedPokedexU8 = 0; memset(&gSaveBlock1Ptr->dexCaught, 0, sizeof(gSaveBlock1Ptr->dexCaught)); memset(&gSaveBlock1Ptr->dexSeen, 0, sizeof(gSaveBlock1Ptr->dexSeen)); } void ClearAllContestWinnerPics(void) { s32 i; ClearContestWinnerPicsInContestHall(); // Clear Museum paintings for (i = MUSEUM_CONTEST_WINNERS_START; i < NUM_CONTEST_WINNERS; i++) gSaveBlock1Ptr->contestWinners[i] = sContestWinnerPicDummy; } static void ClearFrontierRecord(void) { CpuFill32(0, &gSaveBlock2Ptr->frontier, sizeof(gSaveBlock2Ptr->frontier)); gSaveBlock2Ptr->frontier.opponentNames[0][0] = EOS; gSaveBlock2Ptr->frontier.opponentNames[1][0] = EOS; } static void WarpToBoatCabin(void) { SetWarpDestination(MAP_GROUP(INSIDE_OF_START_BOAT_CABINS), MAP_NUM(INSIDE_OF_START_BOAT_CABINS), WARP_ID_NONE, 2, 15); WarpIntoMap(); } void Sav2_ClearSetDefault(void) { ClearSav2(); SetDefaultOptions(); } void ResetMenuAndMonGlobals(void) { gDifferentSaveFile = FALSE; ResetPokedexScrollPositions(); ZeroPlayerPartyMons(); ZeroEnemyPartyMons(); ResetBagScrollPositions(); ResetPokeblockScrollPositions(); } void NewGameInitData(void) { if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_CORRUPT) RtcReset(); gDifferentSaveFile = TRUE; gSaveBlock2Ptr->encryptionKey = 0; ZeroPlayerPartyMons(); ZeroEnemyPartyMons(); ResetPokedex(); ClearFrontierRecord(); ClearSav1(); ClearAllMail(); gSaveBlock2Ptr->specialSaveWarpFlags = 0; gSaveBlock2Ptr->gcnLinkFlags = 0; InitPlayerTrainerId(); PlayTimeCounter_Reset(); ClearPokedexFlags(); InitEventData(); ClearTVShowData(); ResetGabbyAndTy(); ClearSecretBases(); ClearBerryTrees(); SetMoney(&gSaveBlock1Ptr->money, 3000); SetCoins(0); ResetLinkContestBoolean(); ResetGameStats(); ClearAllContestWinnerPics(); ClearPlayerLinkBattleRecords(); InitSeedotSizeRecord(); InitLotadSizeRecord(); gPlayerPartyCount = 0; ZeroPlayerPartyMons(); ResetPokemonStorageSystem(); ClearRoamerData(); ClearRoamerLocationData(); gSaveBlock1Ptr->registeredItem = ITEM_NONE; ClearBag(); NewGameInitPCItems(); ClearPokeblocks(); ClearDecorationInventories(); InitEasyChatPhrases(); SetMauvilleOldMan(); InitDewfordTrend(); ResetFanClub(); ResetLotteryCorner(); WarpToBoatCabin(); RunScriptImmediately(EventScript_ResetAllMapFlags); ResetMiniGamesRecords(); InitUnionRoomChatRegisteredTexts(); InitLilycoveLady(); ResetAllApprenticeData(); ClearRankingHallRecords(); InitMatchCallCounters(); ClearMysteryGift(); WipeTrainerNameRecords(); ResetTrainerHillResults(); ResetContestLinkResults(); } static void ResetMiniGamesRecords(void) { CpuFill16(0, &gSaveBlock2Ptr->berryCrush, sizeof(struct BerryCrush)); SetBerryPowder(&gSaveBlock2Ptr->berryCrush.berryPowderAmount, 0); ResetPokemonJumpRecords(); CpuFill16(0, &gSaveBlock2Ptr->berryPick, sizeof(struct BerryPickingResults)); }