diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 2 | ||||
-rw-r--r-- | src/new_game.c | 111 | ||||
-rw-r--r-- | src/save.c | 6 |
3 files changed, 115 insertions, 4 deletions
diff --git a/src/main.c b/src/main.c index 3b4387dd0..7c8075a6f 100644 --- a/src/main.c +++ b/src/main.c @@ -217,7 +217,7 @@ void SeedRngAndSetTrainerId(void) gTrainerId = val; } -u16 GetTrainerId(void) +u16 GetGeneratedTrainerIdLower(void) { return gTrainerId; } diff --git a/src/new_game.c b/src/new_game.c new file mode 100644 index 000000000..649cf4e6d --- /dev/null +++ b/src/new_game.c @@ -0,0 +1,111 @@ +#include "global.h" +#include "new_game.h" +#include "rng.h" + +extern u8 gPlayerPartyCount; +extern u8 gDifferentSaveFile; +extern u16 gSaveFileStatus; +extern u8 gUnknown_030060B0; + +extern u16 GetGeneratedTrainerIdLower(void); +extern void ClearContestWinnerPicsInContestHall(void); +extern void warp1_set(s8 mapBank, s8 mapNo, s8 warpNo, s8 xPos, s8 yPos); +extern void warp_in(void); +extern void sub_80BB358(void); +extern void ZeroPlayerPartyMons(void); +extern void ZeroEnemyPartyMons(void); +extern void ResetBagScrollPositions(void); +extern void sub_813624C(void); // clears something pokeblock related +extern void ClearSav2(void); // clears something pokeblock related + +void WriteUnalignedWord(u32 var, u8 *dataPtr) +{ + dataPtr[0] = var; + dataPtr[1] = var >> 8; + dataPtr[2] = var >> 16; + dataPtr[3] = var >> 24; +} + +u32 ReadUnalignedWord(u8* dataPtr) +{ + return (dataPtr[3] << 24) | (dataPtr[2] << 16) | (dataPtr[1] << 8) | (dataPtr[0]); +} + +void CopyUnalignedWord(u8 *copyTo, u8 *copyFrom) +{ + s32 i; + for (i = 0; i < 4; i++) + copyTo[i] = copyFrom[i]; +} + +void InitPlayerTrainerId(void) +{ + u32 trainerId = (Random() << 0x10) | GetGeneratedTrainerIdLower(); + WriteUnalignedWord(trainerId, gSaveBlock2Ptr->playerTrainerId); +} + +// L=A isnt set here for some reason. +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; +} + +void ClearPokedexFlags(void) +{ + gUnknown_030060B0 = 0; + memset(&gSaveBlock2Ptr->pokedex.owned, 0, sizeof(gSaveBlock2Ptr->pokedex.owned)); + memset(&gSaveBlock2Ptr->pokedex.seen, 0, sizeof(gSaveBlock2Ptr->pokedex.seen)); +} + +extern const struct ContestWinner gContestWinnerPicDummy; + +void ClearAllContestWinnerPics(void) +{ + s32 i; + + ClearContestWinnerPicsInContestHall(); + for (i = 8; i < 13; i++) + gSaveBlock1Ptr->contestWinners[i] = gContestWinnerPicDummy; +} + +void sub_8084400(void) +{ + // probably clearing one struct for battle frontier + CpuFill32(0, gSaveBlock2Ptr->field_64C, 2272); + + // those look like strings + gSaveBlock2Ptr->field_EE1 = 0xFF; + gSaveBlock2Ptr->field_EE9 = 0xFF; +} + +void WarpToTruck(void) +{ + warp1_set(25, 40, -1, -1, -1); // inside of truck + warp_in(); +} + +void Sav2_ClearSetDefault(void) +{ + ClearSav2(); + SetDefaultOptions(); +} + +void sub_808447C(void) +{ + gDifferentSaveFile = 0; + sub_80BB358(); + ZeroPlayerPartyMons(); + ZeroEnemyPartyMons(); + ResetBagScrollPositions(); + sub_813624C(); +} +/* +void NewGameInitData(void) +{ + Finish when more header files are available +}*/ diff --git a/src/save.c b/src/save.c index 7eb7a84ee..ccb653f66 100644 --- a/src/save.c +++ b/src/save.c @@ -24,7 +24,7 @@ u32 gSaveCounter; struct SaveSection *gFastSaveSection; u16 gUnknown_03006208; u16 gSaveUnusedVar; -u16 gUnknown_03006210; +u16 gSaveFileStatus; void (*gGameContinueCallback)(void); EWRAM_DATA struct SaveSection gSaveDataBuffer = {0}; @@ -806,7 +806,7 @@ u8 sub_81534D0(u8 a1) if (gFlashMemoryPresent != TRUE) { - gUnknown_03006210 = 4; + gSaveFileStatus = 4; return 0xFF; } @@ -817,7 +817,7 @@ u8 sub_81534D0(u8 a1) default: result = sub_8152DD0(0xFFFF, gRamSaveSectionLocations); LoadSerializedGame(); - gUnknown_03006210 = result; + gSaveFileStatus = result; gGameContinueCallback = 0; break; case 3: |