pokeemerald/src/new_game.c

216 lines
5.5 KiB
C

#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));
}