From 92892d140a2ed704a1cfa2748ea015c9007da14c Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 4 Sep 2017 18:26:39 +0200 Subject: begin load_save.c --- src/load_save.c | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 src/load_save.c (limited to 'src/load_save.c') diff --git a/src/load_save.c b/src/load_save.c new file mode 100644 index 000000000..43b2475f3 --- /dev/null +++ b/src/load_save.c @@ -0,0 +1,104 @@ +#include "global.h" +#include "gba/flash_internal.h" +#include "load_save.h" +#include "main.h" +#include "pokemon.h" +#include "rng.h" +#include "malloc.h" + +extern u8 gPlayerPartyCount; +extern struct PokemonStorage* gPokemonStoragePtr; +extern void* gUnknown_0203CF5C; +extern u8 gHeap[0x1C000]; + +extern bool16 IdentifyFlash(void); +extern void SetBagItemsPointers(void); +extern void SetDecorationInventoriesPointers(void); +extern void InitHeap(void *heapStart, u32 heapSize); + +void ApplyNewEncyprtionKeyToAllEncryptedData(u32 encryptionKey); + +#define SAVEBLOCK_MOVE_RANGE 128 + +EWRAM_DATA struct SaveBlock2 gSaveblock2 = {0}; +EWRAM_DATA u8 gSaveblock2_DMA[SAVEBLOCK_MOVE_RANGE] = {0}; + +EWRAM_DATA struct SaveBlock1 gSaveblock1 = {0}; +EWRAM_DATA u8 gSaveblock1_DMA[SAVEBLOCK_MOVE_RANGE] = {0}; + +EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; +EWRAM_DATA u8 gSaveblock3_DMA[SAVEBLOCK_MOVE_RANGE] = {0}; + +void CheckForFlashMemory(void) +{ + if (!IdentifyFlash()) + { + gFlashMemoryPresent = TRUE; + InitFlashTimer(); + } + else + gFlashMemoryPresent = FALSE; +} + +void ClearSav2(void) +{ + CpuFill16(0, &gSaveblock2, sizeof(struct SaveBlock2) + sizeof(gSaveblock2_DMA)); +} + +void ClearSav1(void) +{ + CpuFill16(0, &gSaveblock1, sizeof(struct SaveBlock1) + sizeof(gSaveblock1_DMA)); +} + +void SetSaveBlocksPointers(u16 offset) +{ + struct SaveBlock1** sav1_LocalVar = &gSaveBlock1Ptr; + + offset = (offset + Random()) & (SAVEBLOCK_MOVE_RANGE - 4); + + gSaveBlock2Ptr = (void*)(&gSaveblock2) + offset; + *sav1_LocalVar = (void*)(&gSaveblock1) + offset; + gPokemonStoragePtr = (void*)(&gPokemonStorage) + offset; + + SetBagItemsPointers(); + SetDecorationInventoriesPointers(); +} +/* +void MoveSaveBlocks_ResetHeap(void) +{ + void *vblankCB, *hblankCB; + u32 encryptionKey; + + // save interrupt functions and turn them off + vblankCB = gMain.vblankCallback; + hblankCB = gMain.hblankCallback; + gMain.vblankCallback = NULL; + gMain.hblankCallback = NULL; + gUnknown_0203CF5C = NULL; + + // copy saveblocks' content + memcpy(gHeap, gSaveBlock2Ptr, sizeof(struct SaveBlock2)); + memcpy(gHeap + sizeof(struct SaveBlock2), gSaveBlock1Ptr, sizeof(struct SaveBlock1)); + memcpy(gHeap + sizeof(struct SaveBlock2) + sizeof(struct SaveBlock1), gPokemonStoragePtr, sizeof(struct PokemonStorage)); + + // change saveblocks' pointers + // argument is a sum of the individual trainerId bytes + SetSaveBlocksPointers(gHeap[10] + gHeap[11] + gHeap[12] + gHeap[13]); + + // restore saveblock data since the pointers changed + memcpy(gSaveBlock2Ptr, gHeap, sizeof(struct SaveBlock2)); + memcpy(gSaveBlock1Ptr, gHeap + sizeof(struct SaveBlock2), sizeof(struct SaveBlock1)); + memcpy(gPokemonStoragePtr, gHeap + sizeof(struct SaveBlock2) + sizeof(struct SaveBlock1), sizeof(struct PokemonStorage)); + + // heap was destroyed in the copying process, so reset it + InitHeap(gHeap, sizeof(gHeap)); + + // restore interrupt functions + gMain.hblankCallback = hblankCB; + gMain.vblankCallback = vblankCB; + + // create a new encryption key + encryptionKey = (Random() << 0x10) + (Random()); + ApplyNewEncyprtionKeyToAllEncryptedData(encryptionKey); + gSaveBlock2Ptr->encryptionKey = encryptionKey; +}*/ -- cgit v1.2.3 From 2702b0ec9b4b2ae25d847ccd3b5b8ec1ad8cf1ff Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 4 Sep 2017 21:43:13 +0200 Subject: decomp calc dmg and clean up battle ai --- src/load_save.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'src/load_save.c') diff --git a/src/load_save.c b/src/load_save.c index 43b2475f3..bc3839346 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -63,11 +63,20 @@ void SetSaveBlocksPointers(u16 offset) SetBagItemsPointers(); SetDecorationInventoriesPointers(); } + +struct SaveBlocksInOne +{ + struct SaveBlock2 sav2; + struct SaveBlock1 sav1; + struct PokemonStorage sav3; +}; + /* void MoveSaveBlocks_ResetHeap(void) { void *vblankCB, *hblankCB; u32 encryptionKey; + struct SaveBlocksInOne* copiedSavs; // save interrupt functions and turn them off vblankCB = gMain.vblankCallback; @@ -76,19 +85,21 @@ void MoveSaveBlocks_ResetHeap(void) gMain.hblankCallback = NULL; gUnknown_0203CF5C = NULL; + copiedSavs = (void*)(gHeap); + // copy saveblocks' content - memcpy(gHeap, gSaveBlock2Ptr, sizeof(struct SaveBlock2)); - memcpy(gHeap + sizeof(struct SaveBlock2), gSaveBlock1Ptr, sizeof(struct SaveBlock1)); - memcpy(gHeap + sizeof(struct SaveBlock2) + sizeof(struct SaveBlock1), gPokemonStoragePtr, sizeof(struct PokemonStorage)); + copiedSavs->sav2 = *gSaveBlock2Ptr; + copiedSavs->sav1 = *gSaveBlock1Ptr; + copiedSavs->sav3 = *gPokemonStoragePtr; // change saveblocks' pointers // argument is a sum of the individual trainerId bytes - SetSaveBlocksPointers(gHeap[10] + gHeap[11] + gHeap[12] + gHeap[13]); + SetSaveBlocksPointers(copiedSavs->sav2.playerTrainerId[0] + copiedSavs->sav2.playerTrainerId[1] + copiedSavs->sav2.playerTrainerId[2] + copiedSavs->sav2.playerTrainerId[3]); // restore saveblock data since the pointers changed - memcpy(gSaveBlock2Ptr, gHeap, sizeof(struct SaveBlock2)); - memcpy(gSaveBlock1Ptr, gHeap + sizeof(struct SaveBlock2), sizeof(struct SaveBlock1)); - memcpy(gPokemonStoragePtr, gHeap + sizeof(struct SaveBlock2) + sizeof(struct SaveBlock1), sizeof(struct PokemonStorage)); + *gSaveBlock2Ptr = copiedSavs->sav2; + *gSaveBlock1Ptr = copiedSavs->sav1; + *gPokemonStoragePtr = copiedSavs->sav3; // heap was destroyed in the copying process, so reset it InitHeap(gHeap, sizeof(gHeap)); -- cgit v1.2.3 From 1680fc0b81675b0e1cc988ece1c79075a56dbcf0 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 5 Sep 2017 13:01:24 +0200 Subject: start start menu decomp --- src/load_save.c | 1 - 1 file changed, 1 deletion(-) (limited to 'src/load_save.c') diff --git a/src/load_save.c b/src/load_save.c index bc3839346..588387186 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -70,7 +70,6 @@ struct SaveBlocksInOne struct SaveBlock1 sav1; struct PokemonStorage sav3; }; - /* void MoveSaveBlocks_ResetHeap(void) { -- cgit v1.2.3