2017-09-03 22:50:17 +02:00
|
|
|
#include "global.h"
|
|
|
|
#include "new_game.h"
|
2017-12-05 19:27:33 +01:00
|
|
|
#include "random.h"
|
2017-09-07 19:45:32 +02:00
|
|
|
#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"
|
2019-02-08 18:48:51 +01:00
|
|
|
#include "match_call.h"
|
2017-09-07 19:45:32 +02:00
|
|
|
#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"
|
2019-01-13 20:50:08 +01:00
|
|
|
#include "trainer_hill.h"
|
2017-10-13 17:09:36 +02:00
|
|
|
#include "tv.h"
|
2017-09-07 19:45:32 +02:00
|
|
|
#include "coins.h"
|
2017-09-25 21:27:54 +02:00
|
|
|
#include "text.h"
|
2018-05-01 15:54:31 +02:00
|
|
|
#include "overworld.h"
|
|
|
|
#include "mail.h"
|
|
|
|
#include "battle_records.h"
|
2018-08-19 01:06:10 +02:00
|
|
|
#include "item.h"
|
|
|
|
#include "pokedex.h"
|
2018-10-14 17:00:41 +02:00
|
|
|
#include "apprentice.h"
|
2018-10-30 21:45:26 +01:00
|
|
|
#include "frontier_util.h"
|
2019-02-15 09:40:57 +01:00
|
|
|
#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"
|
2019-07-29 16:22:50 +02:00
|
|
|
#include "pokemon_jump.h"
|
2019-02-15 09:40:57 +01:00
|
|
|
#include "decoration_inventory.h"
|
|
|
|
#include "secret_base.h"
|
|
|
|
#include "player_pc.h"
|
|
|
|
#include "field_specials.h"
|
2019-03-24 20:45:09 +01:00
|
|
|
#include "berry_powder.h"
|
2021-10-17 09:00:48 +02:00
|
|
|
#include "mystery_gift.h"
|
2019-03-28 01:09:12 +01:00
|
|
|
#include "union_room_chat.h"
|
2021-06-25 21:37:59 +02:00
|
|
|
#include "constants/items.h"
|
2019-02-15 09:40:57 +01:00
|
|
|
|
|
|
|
extern const u8 EventScript_ResetAllMapFlags[];
|
2017-09-03 22:50:17 +02:00
|
|
|
|
2018-06-17 12:30:09 +02:00
|
|
|
static void ClearFrontierRecord(void);
|
2023-11-09 16:27:10 +01:00
|
|
|
static void WarpToBoatCabin(void);
|
2021-02-25 10:37:25 +01:00
|
|
|
static void ResetMiniGamesRecords(void);
|
2018-06-17 12:30:09 +02:00
|
|
|
|
2018-11-19 01:03:14 +01:00
|
|
|
EWRAM_DATA bool8 gDifferentSaveFile = FALSE;
|
2019-04-03 03:51:21 +02:00
|
|
|
EWRAM_DATA bool8 gEnableContestDebugging = FALSE;
|
2018-11-19 01:03:14 +01:00
|
|
|
|
2018-06-17 12:30:09 +02:00
|
|
|
static const struct ContestWinner sContestWinnerPicDummy =
|
|
|
|
{
|
|
|
|
.monName = _(""),
|
|
|
|
.trainerName = _("")
|
|
|
|
};
|
|
|
|
|
2018-11-01 21:31:10 +01:00
|
|
|
void SetTrainerId(u32 trainerId, u8 *dst)
|
2017-09-03 22:50:17 +02:00
|
|
|
{
|
2018-11-01 21:31:10 +01:00
|
|
|
dst[0] = trainerId;
|
|
|
|
dst[1] = trainerId >> 8;
|
|
|
|
dst[2] = trainerId >> 16;
|
|
|
|
dst[3] = trainerId >> 24;
|
2017-09-03 22:50:17 +02:00
|
|
|
}
|
|
|
|
|
2018-11-01 21:31:10 +01:00
|
|
|
u32 GetTrainerId(u8 *trainerId)
|
2017-09-03 22:50:17 +02:00
|
|
|
{
|
2018-11-01 21:31:10 +01:00
|
|
|
return (trainerId[3] << 24) | (trainerId[2] << 16) | (trainerId[1] << 8) | (trainerId[0]);
|
2017-09-03 22:50:17 +02:00
|
|
|
}
|
|
|
|
|
2018-11-01 21:31:10 +01:00
|
|
|
void CopyTrainerId(u8 *dst, u8 *src)
|
2017-09-03 22:50:17 +02:00
|
|
|
{
|
|
|
|
s32 i;
|
2019-09-08 18:21:24 +02:00
|
|
|
for (i = 0; i < TRAINER_ID_LENGTH; i++)
|
2018-11-01 21:31:10 +01:00
|
|
|
dst[i] = src[i];
|
2017-09-03 22:50:17 +02:00
|
|
|
}
|
|
|
|
|
2018-06-17 12:30:09 +02:00
|
|
|
static void InitPlayerTrainerId(void)
|
2017-09-03 22:50:17 +02:00
|
|
|
{
|
2021-03-30 23:38:09 +02:00
|
|
|
u32 trainerId = (Random() << 16) | GetGeneratedTrainerIdLower();
|
2018-11-01 21:31:10 +01:00
|
|
|
SetTrainerId(trainerId, gSaveBlock2Ptr->playerTrainerId);
|
2017-09-03 22:50:17 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// L=A isnt set here for some reason.
|
2018-06-17 12:30:09 +02:00
|
|
|
static void SetDefaultOptions(void)
|
2017-09-03 22:50:17 +02:00
|
|
|
{
|
2023-11-11 00:45:23 +01:00
|
|
|
gSaveBlock2Ptr->optionsTextSpeed = OPTIONS_TEXT_SPEED_FAST;
|
2017-09-03 22:50:17 +02:00
|
|
|
gSaveBlock2Ptr->optionsWindowFrameType = 0;
|
|
|
|
gSaveBlock2Ptr->optionsSound = OPTIONS_SOUND_MONO;
|
2023-11-11 00:45:23 +01:00
|
|
|
gSaveBlock2Ptr->optionsBattleStyle = OPTIONS_BATTLE_STYLE_SET;
|
2017-09-03 22:50:17 +02:00
|
|
|
gSaveBlock2Ptr->optionsBattleSceneOff = FALSE;
|
|
|
|
gSaveBlock2Ptr->regionMapZoom = FALSE;
|
|
|
|
}
|
|
|
|
|
2018-06-17 12:30:09 +02:00
|
|
|
static void ClearPokedexFlags(void)
|
2017-09-03 22:50:17 +02:00
|
|
|
{
|
2019-02-18 07:33:41 +01:00
|
|
|
gUnusedPokedexU8 = 0;
|
2019-05-14 11:54:58 +02:00
|
|
|
memset(&gSaveBlock1Ptr->dexCaught, 0, sizeof(gSaveBlock1Ptr->dexCaught));
|
|
|
|
memset(&gSaveBlock1Ptr->dexSeen, 0, sizeof(gSaveBlock1Ptr->dexSeen));
|
2017-09-03 22:50:17 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void ClearAllContestWinnerPics(void)
|
|
|
|
{
|
|
|
|
s32 i;
|
|
|
|
|
|
|
|
ClearContestWinnerPicsInContestHall();
|
2021-04-22 20:30:45 +02:00
|
|
|
|
|
|
|
// Clear Museum paintings
|
|
|
|
for (i = MUSEUM_CONTEST_WINNERS_START; i < NUM_CONTEST_WINNERS; i++)
|
2018-06-17 12:30:09 +02:00
|
|
|
gSaveBlock1Ptr->contestWinners[i] = sContestWinnerPicDummy;
|
2017-09-03 22:50:17 +02:00
|
|
|
}
|
|
|
|
|
2018-06-17 12:30:09 +02:00
|
|
|
static void ClearFrontierRecord(void)
|
2017-09-03 22:50:17 +02:00
|
|
|
{
|
2018-06-17 12:30:09 +02:00
|
|
|
CpuFill32(0, &gSaveBlock2Ptr->frontier, sizeof(gSaveBlock2Ptr->frontier));
|
2017-09-03 22:50:17 +02:00
|
|
|
|
2019-11-24 22:58:40 +01:00
|
|
|
gSaveBlock2Ptr->frontier.opponentNames[0][0] = EOS;
|
|
|
|
gSaveBlock2Ptr->frontier.opponentNames[1][0] = EOS;
|
2017-09-03 22:50:17 +02:00
|
|
|
}
|
|
|
|
|
2023-11-09 16:27:10 +01:00
|
|
|
static void WarpToBoatCabin(void)
|
2017-09-03 22:50:17 +02:00
|
|
|
{
|
2023-11-09 16:27:10 +01:00
|
|
|
SetWarpDestination(MAP_GROUP(INSIDE_OF_START_BOAT_CABINS), MAP_NUM(INSIDE_OF_START_BOAT_CABINS), WARP_ID_NONE, 2, 15);
|
2018-09-05 00:31:37 +02:00
|
|
|
WarpIntoMap();
|
2017-09-03 22:50:17 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Sav2_ClearSetDefault(void)
|
|
|
|
{
|
|
|
|
ClearSav2();
|
|
|
|
SetDefaultOptions();
|
|
|
|
}
|
|
|
|
|
2019-02-10 03:07:07 +01:00
|
|
|
void ResetMenuAndMonGlobals(void)
|
2017-09-03 22:50:17 +02:00
|
|
|
{
|
2021-02-22 01:27:59 +01:00
|
|
|
gDifferentSaveFile = FALSE;
|
2019-02-15 09:40:57 +01:00
|
|
|
ResetPokedexScrollPositions();
|
2017-09-03 22:50:17 +02:00
|
|
|
ZeroPlayerPartyMons();
|
|
|
|
ZeroEnemyPartyMons();
|
|
|
|
ResetBagScrollPositions();
|
2017-12-16 00:08:23 +01:00
|
|
|
ResetPokeblockScrollPositions();
|
2017-09-03 22:50:17 +02:00
|
|
|
}
|
2017-09-07 19:45:32 +02:00
|
|
|
|
2017-09-03 22:50:17 +02:00
|
|
|
void NewGameInitData(void)
|
|
|
|
{
|
2020-01-12 21:27:37 +01:00
|
|
|
if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_CORRUPT)
|
2017-09-07 19:45:32 +02:00
|
|
|
RtcReset();
|
|
|
|
|
2021-02-22 01:27:59 +01:00
|
|
|
gDifferentSaveFile = TRUE;
|
2017-09-07 19:45:32 +02:00
|
|
|
gSaveBlock2Ptr->encryptionKey = 0;
|
|
|
|
ZeroPlayerPartyMons();
|
|
|
|
ZeroEnemyPartyMons();
|
|
|
|
ResetPokedex();
|
2018-06-17 12:30:09 +02:00
|
|
|
ClearFrontierRecord();
|
2017-09-07 19:45:32 +02:00
|
|
|
ClearSav1();
|
2021-10-23 16:55:46 +02:00
|
|
|
ClearAllMail();
|
2018-12-27 23:30:47 +01:00
|
|
|
gSaveBlock2Ptr->specialSaveWarpFlags = 0;
|
2020-04-13 14:42:31 +02:00
|
|
|
gSaveBlock2Ptr->gcnLinkFlags = 0;
|
2017-09-07 19:45:32 +02:00
|
|
|
InitPlayerTrainerId();
|
|
|
|
PlayTimeCounter_Reset();
|
|
|
|
ClearPokedexFlags();
|
|
|
|
InitEventData();
|
|
|
|
ClearTVShowData();
|
|
|
|
ResetGabbyAndTy();
|
2019-04-05 23:11:24 +02:00
|
|
|
ClearSecretBases();
|
2017-09-07 19:45:32 +02:00
|
|
|
ClearBerryTrees();
|
|
|
|
SetMoney(&gSaveBlock1Ptr->money, 3000);
|
|
|
|
SetCoins(0);
|
|
|
|
ResetLinkContestBoolean();
|
|
|
|
ResetGameStats();
|
|
|
|
ClearAllContestWinnerPics();
|
2018-05-01 14:01:54 +02:00
|
|
|
ClearPlayerLinkBattleRecords();
|
2017-09-07 19:45:32 +02:00
|
|
|
InitSeedotSizeRecord();
|
|
|
|
InitLotadSizeRecord();
|
|
|
|
gPlayerPartyCount = 0;
|
|
|
|
ZeroPlayerPartyMons();
|
|
|
|
ResetPokemonStorageSystem();
|
|
|
|
ClearRoamerData();
|
|
|
|
ClearRoamerLocationData();
|
2022-12-18 22:05:37 +01:00
|
|
|
gSaveBlock1Ptr->registeredItem = ITEM_NONE;
|
2017-09-07 19:45:32 +02:00
|
|
|
ClearBag();
|
|
|
|
NewGameInitPCItems();
|
|
|
|
ClearPokeblocks();
|
|
|
|
ClearDecorationInventories();
|
|
|
|
InitEasyChatPhrases();
|
|
|
|
SetMauvilleOldMan();
|
|
|
|
InitDewfordTrend();
|
|
|
|
ResetFanClub();
|
|
|
|
ResetLotteryCorner();
|
2023-11-09 16:27:10 +01:00
|
|
|
WarpToBoatCabin();
|
2022-08-15 21:18:12 +02:00
|
|
|
RunScriptImmediately(EventScript_ResetAllMapFlags);
|
2021-02-25 10:37:25 +01:00
|
|
|
ResetMiniGamesRecords();
|
2020-06-01 20:05:29 +02:00
|
|
|
InitUnionRoomChatRegisteredTexts();
|
2019-08-05 05:12:49 +02:00
|
|
|
InitLilycoveLady();
|
2018-12-05 15:31:01 +01:00
|
|
|
ResetAllApprenticeData();
|
|
|
|
ClearRankingHallRecords();
|
2019-01-03 02:07:47 +01:00
|
|
|
InitMatchCallCounters();
|
2021-10-15 18:56:14 +02:00
|
|
|
ClearMysteryGift();
|
2019-02-15 09:40:57 +01:00
|
|
|
WipeTrainerNameRecords();
|
2019-01-13 20:50:08 +01:00
|
|
|
ResetTrainerHillResults();
|
2018-12-05 15:31:01 +01:00
|
|
|
ResetContestLinkResults();
|
2017-09-07 19:45:32 +02:00
|
|
|
}
|
2017-09-08 16:46:37 +02:00
|
|
|
|
2021-02-25 10:37:25 +01:00
|
|
|
static void ResetMiniGamesRecords(void)
|
2017-09-08 16:46:37 +02:00
|
|
|
{
|
|
|
|
CpuFill16(0, &gSaveBlock2Ptr->berryCrush, sizeof(struct BerryCrush));
|
|
|
|
SetBerryPowder(&gSaveBlock2Ptr->berryCrush.berryPowderAmount, 0);
|
2021-02-25 10:37:25 +01:00
|
|
|
ResetPokemonJumpRecords();
|
2017-09-08 16:46:37 +02:00
|
|
|
CpuFill16(0, &gSaveBlock2Ptr->berryPick, sizeof(struct BerryPickingResults));
|
|
|
|
}
|