#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 "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 "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" extern u8 gDifferentSaveFile; extern u16 gSaveFileStatus; extern u8 gUnknown_030060B0; // TODO: replace those declarations with file headers extern u16 GetGeneratedTrainerIdLower(void); extern void ClearContestWinnerPicsInContestHall(void); extern void sub_80BB358(void); extern void ResetBagScrollPositions(void); extern void ResetGabbyAndTy(void); extern void ResetSecretBases(void); extern void ResetLinkContestBoolean(void); extern void sub_8052DA8(void); extern void ResetPokemonStorageSystem(void); extern void NewGameInitPCItems(void); extern void ClearDecorationInventories(void); extern void ResetFanClub(void); extern void copy_strings_to_sav1(void); extern void sub_8195E10(void); extern void sub_801AFD8(void); extern void sub_800E5AC(void); extern void sub_81D54BC(void); extern void ResetContestLinkResults(void); extern void ResetPokeJumpResults(void); extern void SetBerryPowder(u32* powder, u32 newValue); extern const u8 EventScript_2715DE[]; // this file's functions static void ClearFrontierRecord(void); static void WarpToTruck(void); static void ResetMiniGamesResults(void); // 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) { gUnknown_030060B0 = 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.field_EE1[0][0] = EOS; gSaveBlock2Ptr->frontier.field_EE1[1][0] = EOS; } static void WarpToTruck(void) { Overworld_SetWarpDestination(25, 40, -1, -1, -1); // inside of truck WarpIntoMap(); } void Sav2_ClearSetDefault(void) { ClearSav2(); SetDefaultOptions(); } void sub_808447C(void) { gDifferentSaveFile = 0; sub_80BB358(); 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->specialSaveWarp = 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_2715DE); ResetMiniGamesResults(); copy_strings_to_sav1(); SetLilycoveLady(); ResetAllApprenticeData(); ClearnRankingHallRecords(); sub_8195E10(); sub_801AFD8(); sub_800E5AC(); sub_81D54BC(); 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)); }