#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 "constants/maps.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 "decoration_inventory.h" #include "secret_base.h" #include "player_pc.h" #include "field_specials.h" #include "berry_powder.h" extern void copy_strings_to_sav1(void); extern void sub_801AFD8(void); extern void ResetPokeJumpResults(void); extern const u8 EventScript_ResetAllMapFlags[]; // this file's functions static void ClearFrontierRecord(void); static void WarpToTruck(void); static void ResetMiniGamesResults(void); // EWRAM vars EWRAM_DATA bool8 gDifferentSaveFile = FALSE; EWRAM_DATA bool8 gUnknown_020322D5 = FALSE; // const rom data static const struct ContestWinner sContestWinnerPicDummy = { .monName = _(""), .trainerName = _("") }; // code 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 < 4; i++) dst[i] = src[i]; } static void InitPlayerTrainerId(void) { u32 trainerId = (Random() << 0x10) | GetGeneratedTrainerIdLower(); SetTrainerId(trainerId, gSaveBlock2Ptr->playerTrainerId); } // L=A isnt set here for some reason. static void SetDefaultOptions(void) { gSaveBlock2Ptr->optionsTextSpeed = OPTIONS_TEXT_SPEED_MID; gSaveBlock2Ptr->optionsWindowFrameType = 0; gSaveBlock2Ptr->optionsSound = OPTIONS_SOUND_MONO; gSaveBlock2Ptr->optionsBattleStyle = OPTIONS_BATTLE_STYLE_SHIFT; gSaveBlock2Ptr->optionsBattleSceneOff = FALSE; gSaveBlock2Ptr->regionMapZoom = FALSE; } static void ClearPokedexFlags(void) { gUnusedPokedexU8 = 0; memset(&gSaveBlock2Ptr->pokedex.owned, 0, sizeof(gSaveBlock2Ptr->pokedex.owned)); memset(&gSaveBlock2Ptr->pokedex.seen, 0, sizeof(gSaveBlock2Ptr->pokedex.seen)); } void ClearAllContestWinnerPics(void) { s32 i; ClearContestWinnerPicsInContestHall(); for (i = 8; i < 13; i++) gSaveBlock1Ptr->contestWinners[i] = sContestWinnerPicDummy; } static void ClearFrontierRecord(void) { CpuFill32(0, &gSaveBlock2Ptr->frontier, sizeof(gSaveBlock2Ptr->frontier)); gSaveBlock2Ptr->frontier.opponentName[0][0] = EOS; gSaveBlock2Ptr->frontier.opponentName[1][0] = EOS; } static void WarpToTruck(void) { SetWarpDestination(MAP_GROUP(INSIDE_OF_TRUCK), MAP_NUM(INSIDE_OF_TRUCK), -1, -1, -1); WarpIntoMap(); } void Sav2_ClearSetDefault(void) { ClearSav2(); SetDefaultOptions(); } void ResetMenuAndMonGlobals(void) { gDifferentSaveFile = 0; ResetPokedexScrollPositions(); ZeroPlayerPartyMons(); ZeroEnemyPartyMons(); ResetBagScrollPositions(); ResetPokeblockScrollPositions(); } void NewGameInitData(void) { if (gSaveFileStatus == 0 || gSaveFileStatus == 2) RtcReset(); gDifferentSaveFile = 1; gSaveBlock2Ptr->encryptionKey = 0; ZeroPlayerPartyMons(); ZeroEnemyPartyMons(); ResetPokedex(); ClearFrontierRecord(); ClearSav1(); ClearMailData(); gSaveBlock2Ptr->specialSaveWarpFlags = 0; gSaveBlock2Ptr->field_A8 = 0; InitPlayerTrainerId(); PlayTimeCounter_Reset(); ClearPokedexFlags(); InitEventData(); ClearTVShowData(); ResetGabbyAndTy(); ResetSecretBases(); ClearBerryTrees(); SetMoney(&gSaveBlock1Ptr->money, 3000); SetCoins(0); ResetLinkContestBoolean(); ResetGameStats(); ClearAllContestWinnerPics(); ClearPlayerLinkBattleRecords(); InitSeedotSizeRecord(); InitLotadSizeRecord(); gPlayerPartyCount = 0; ZeroPlayerPartyMons(); ResetPokemonStorageSystem(); ClearRoamerData(); ClearRoamerLocationData(); gSaveBlock1Ptr->registeredItem = 0; ClearBag(); NewGameInitPCItems(); ClearPokeblocks(); ClearDecorationInventories(); InitEasyChatPhrases(); SetMauvilleOldMan(); InitDewfordTrend(); ResetFanClub(); ResetLotteryCorner(); WarpToTruck(); ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags); ResetMiniGamesResults(); copy_strings_to_sav1(); SetLilycoveLady(); ResetAllApprenticeData(); ClearRankingHallRecords(); InitMatchCallCounters(); sub_801AFD8(); WipeTrainerNameRecords(); ResetTrainerHillResults(); ResetContestLinkResults(); } static void ResetMiniGamesResults(void) { CpuFill16(0, &gSaveBlock2Ptr->berryCrush, sizeof(struct BerryCrush)); SetBerryPowder(&gSaveBlock2Ptr->berryCrush.berryPowderAmount, 0); ResetPokeJumpResults(); CpuFill16(0, &gSaveBlock2Ptr->berryPick, sizeof(struct BerryPickingResults)); }