summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/gpu_regs.h15
-rw-r--r--include/load_save.h1
-rw-r--r--include/malloc.h3
-rw-r--r--include/new_game.h2
-rw-r--r--include/rom4.h15
-rw-r--r--include/save.h4
-rw-r--r--ld_script.txt2
-rw-r--r--src/berry.c6
-rw-r--r--src/load_save.c4
-rw-r--r--src/reset_save_heap.c32
10 files changed, 76 insertions, 8 deletions
diff --git a/include/gpu_regs.h b/include/gpu_regs.h
new file mode 100644
index 000000000..28b97fb6e
--- /dev/null
+++ b/include/gpu_regs.h
@@ -0,0 +1,15 @@
+//
+// Created by scott on 9/15/2017.
+//
+
+#ifndef GUARD_GPU_REGS_H
+#define GUARD_GPU_REGS_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+void ClearGpuRegBits(u8 regOffset, u16 mask);
+
+#endif //GUARD_GPU_REGS_H
diff --git a/include/load_save.h b/include/load_save.h
index 0fedd720b..20848e1a7 100644
--- a/include/load_save.h
+++ b/include/load_save.h
@@ -18,5 +18,6 @@ void SaveSerializedGame(void);
void LoadSerializedGame(void);
void LoadPlayerBag(void);
void SavePlayerBag(void);
+void SetSaveBlocksPointers(u16);
#endif // GUARD_LOAD_SAVE_H
diff --git a/include/malloc.h b/include/malloc.h
index bd870ede3..d26d19242 100644
--- a/include/malloc.h
+++ b/include/malloc.h
@@ -1,8 +1,11 @@
#ifndef GUARD_MALLOC_H
#define GUARD_MALLOC_H
+extern u8 gHeap[];
+
void *Alloc(u32 size);
void *AllocZeroed(u32 size);
void Free(void *pointer);
+void InitHeap(void *pointer, u32 size);
#endif // GUARD_MALLOC_H
diff --git a/include/new_game.h b/include/new_game.h
index f9ad7fcb8..060279c25 100644
--- a/include/new_game.h
+++ b/include/new_game.h
@@ -9,5 +9,7 @@ void ClearPokedexFlags(void);
void WarpToTruck(void);
void NewGameInitData(void);
void ResetMiniGamesResults(void);
+void sub_808447C(void);
+void Sav2_ClearSetDefault(void);
#endif // GUARD_NEW_GAME_H
diff --git a/include/rom4.h b/include/rom4.h
new file mode 100644
index 000000000..3164c81ea
--- /dev/null
+++ b/include/rom4.h
@@ -0,0 +1,15 @@
+//
+// Created by scott on 9/15/2017.
+//
+
+#ifndef GUARD_ROM4_H
+#define GUARD_ROM4_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+void sub_8086230(void);
+
+#endif //GUARD_ROM4_H
diff --git a/include/save.h b/include/save.h
index 1d7fdd6e3..e98233c67 100644
--- a/include/save.h
+++ b/include/save.h
@@ -1,6 +1,8 @@
#ifndef GUARD_SAVE_H
#define GUARD_SAVE_H
+extern u16 gSaveFileStatus;
+
struct SaveSectionLocation
{
void *data;
@@ -88,5 +90,7 @@ u16 CalculateChecksum(void *, u16);
//u8 unref_sub_8125FF0(u8 *data, u16 size);
//u8 unref_sub_8126068(u8 sector, u8 *data, u32 size);
//u8 unref_sub_8126080(u8 sector, u8 *data);
+u16 sub_815355C(void);
+u8 sub_81534D0(u8);
#endif // GUARD_SAVE_H
diff --git a/ld_script.txt b/ld_script.txt
index d6b3953fe..4db833953 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -217,7 +217,7 @@ SECTIONS {
asm/battle_controller_wally.o(.text);
asm/player_pc.o(.text);
asm/intro.o(.text);
- asm/reset_save_heap.o(.text);
+ src/reset_save_heap.o(.text);
asm/field_region_map.o(.text);
asm/battle_anim_8170478.o(.text);
asm/hall_of_fame.o(.text);
diff --git a/src/berry.c b/src/berry.c
index b6eaa14a0..46b93d6ff 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -807,7 +807,7 @@ const struct Berry gBerries[] =
// unused
void ClearEnigmaBerries(void)
{
- CpuFill16(0, &gSaveBlock1Ptr->enigmaBerry, sizeof(gSaveBlock1Ptr->enigmaBerry));
+ CpuFill16(0, &gSaveBlock1Ptr->enigmaBerry, 52 /*FIXME: sizeof(gSaveBlock1Ptr->enigmaBerry)*/);
}
void SetEnigmaBerry(u8 *src)
@@ -815,7 +815,7 @@ void SetEnigmaBerry(u8 *src)
u32 i;
u8 *dest = (u8*)&gSaveBlock1Ptr->enigmaBerry;
- for (i = 0; i < sizeof(gSaveBlock1Ptr->enigmaBerry); i++)
+ for (i = 0; i < 52 /*FIXME: sizeof(gSaveBlock1Ptr->enigmaBerry)*/; i++)
dest[i] = src[i];
}
@@ -827,7 +827,7 @@ u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry)
dest = (u8*)enigmaBerry;
checksum = 0;
- for (i = 0; i < sizeof(gSaveBlock1Ptr->enigmaBerry) - sizeof(gSaveBlock1Ptr->enigmaBerry.checksum); i++)
+ for (i = 0; i < 52 /*FIXME: sizeof(gSaveBlock1Ptr->enigmaBerry)*/ - sizeof(gSaveBlock1Ptr->enigmaBerry.checksum); i++)
{
checksum += dest[i];
}
diff --git a/src/load_save.c b/src/load_save.c
index 588387186..68d978e3d 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -6,15 +6,11 @@
#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);
diff --git a/src/reset_save_heap.c b/src/reset_save_heap.c
new file mode 100644
index 000000000..b786ff9f8
--- /dev/null
+++ b/src/reset_save_heap.c
@@ -0,0 +1,32 @@
+#include "global.h"
+#include "main.h"
+#include "gpu_regs.h"
+#include "m4a.h"
+#include "load_save.h"
+#include "save.h"
+#include "new_game.h"
+#include "rom4.h"
+#include "malloc.h"
+
+void sub_81700F8(void)
+{
+ u16 imeBackup;
+
+ imeBackup = REG_IME;
+ REG_IME = 0;
+ RegisterRamReset(0x00000001);
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, 0x80);
+ REG_IME = imeBackup;
+ gMain.inBattle = FALSE;
+ SetSaveBlocksPointers(sub_815355C());
+ sub_808447C();
+ ResetSaveCounters();
+ sub_81534D0(0);
+ if (gSaveFileStatus == 0 || gSaveFileStatus == 2)
+ {
+ Sav2_ClearSetDefault();
+ }
+ SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound);
+ InitHeap(gHeap, 0x1c000);
+ SetMainCallback2(sub_8086230);
+}