summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-06-28 05:55:49 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-06-28 05:56:28 +0800
commit8e8fe3bf443cec46c0b7cc2072748c90bedc964d (patch)
tree5e3c933e14615e7daf0ac74d77545663dd05a8d4 /src
parentbe2010e0db8ca527693d40a6f1410000033f7e7f (diff)
finished save_location
Diffstat (limited to 'src')
-rw-r--r--src/load_save.c10
-rw-r--r--src/reset_save_heap.c5
-rw-r--r--src/save_location.c109
3 files changed, 116 insertions, 8 deletions
diff --git a/src/load_save.c b/src/load_save.c
index 8d09a86a8..00db946c0 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -132,28 +132,28 @@ void MoveSaveBlocks_ResetHeap(void)
u32 sav2_x1_query_bit1(void)
{
- return gSaveBlock2Ptr->specialSaveWarp & 1;
+ return gSaveBlock2Ptr->specialSaveWarpFlags & 1;
}
void sav2_x9_clear_bit1(void)
{
- gSaveBlock2Ptr->specialSaveWarp &= ~1;
+ gSaveBlock2Ptr->specialSaveWarpFlags &= ~1;
}
void sub_804C1AC(void)
{
- gSaveBlock2Ptr->specialSaveWarp |= 1;
+ gSaveBlock2Ptr->specialSaveWarpFlags |= 1;
}
void sub_804C1C0(void)
{
sub_8055778(0);
- gSaveBlock2Ptr->specialSaveWarp |= 1;
+ gSaveBlock2Ptr->specialSaveWarpFlags |= 1;
}
void sav2_gender2_inplace_and_xFE(void)
{
- gSaveBlock2Ptr->specialSaveWarp &= ~1;
+ gSaveBlock2Ptr->specialSaveWarpFlags &= ~1;
}
void SavePlayerParty(void)
diff --git a/src/reset_save_heap.c b/src/reset_save_heap.c
index 4347eb756..8d6e30cbf 100644
--- a/src/reset_save_heap.c
+++ b/src/reset_save_heap.c
@@ -10,9 +10,8 @@
void sub_8079B7C(void)
{
- u16 imeBackup;
-
- imeBackup = REG_IME;
+ u16 imeBackup = REG_IME;
+
REG_IME = 0;
RegisterRamReset(0x00000001);
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_FORCED_BLANK);
diff --git a/src/save_location.c b/src/save_location.c
new file mode 100644
index 000000000..71561c899
--- /dev/null
+++ b/src/save_location.c
@@ -0,0 +1,109 @@
+#include "global.h"
+#include "save_location.h"
+#include "constants/maps.h"
+
+static bool32 IsCurMapInLocationList(const u16 *list)
+{
+ s32 i;
+ u16 locSum = (gSaveBlock1Ptr->location.mapGroup << 8) + (gSaveBlock1Ptr->location.mapNum);
+
+ for (i = 0; list[i] != 0xFFFF; i++)
+ {
+ if (list[i] == locSum)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static const u16 sSaveLocationPokeCenterList[] =
+{
+ MAP_VIRIDIAN_CITY_POKEMON_CENTER_1F, MAP_VIRIDIAN_CITY_POKEMON_CENTER_2F,
+ MAP_PEWTER_CITY_POKEMON_CENTER_1F, MAP_PEWTER_CITY_POKEMON_CENTER_2F,
+ MAP_CERULEAN_CITY_POKEMON_CENTER_1F, MAP_CERULEAN_CITY_POKEMON_CENTER_2F,
+ MAP_LAVENDER_TOWN_POKEMON_CENTER_1F, MAP_LAVENDER_TOWN_POKEMON_CENTER_2F,
+ MAP_VERMILION_CITY_POKEMON_CENTER_1F, MAP_VERMILION_CITY_POKEMON_CENTER_2F,
+ MAP_CELADON_CITY_POKEMON_CENTER_1F, MAP_CELADON_CITY_POKEMON_CENTER_2F,
+ MAP_FUCHSIA_CITY_POKEMON_CENTER_1F, MAP_FUCHSIA_CITY_POKEMON_CENTER_2F,
+ MAP_CINNABAR_ISLAND_POKEMON_CENTER_1F, MAP_CINNABAR_ISLAND_POKEMON_CENTER_2F,
+ MAP_INDIGO_PLATEAU_POKEMON_CENTER_1F, MAP_INDIGO_PLATEAU_POKEMON_CENTER_2F,
+ MAP_SAFFRON_CITY_POKEMON_CENTER_1F, MAP_SAFFRON_CITY_POKEMON_CENTER_2F,
+ MAP_ROUTE4_POKEMON_CENTER_1F, MAP_ROUTE4_POKEMON_CENTER_2F,
+ MAP_ROUTE10_POKEMON_CENTER_1F, MAP_ROUTE10_POKEMON_CENTER_2F,
+ MAP_ONE_ISLAND_POKEMON_CENTER_1F, MAP_ONE_ISLAND_POKEMON_CENTER_2F,
+ MAP_TWO_ISLAND_POKEMON_CENTER_1F, MAP_TWO_ISLAND_POKEMON_CENTER_2F,
+ MAP_THREE_ISLAND_POKEMON_CENTER_1F, MAP_THREE_ISLAND_POKEMON_CENTER_2F,
+ MAP_FOUR_ISLAND_POKEMON_CENTER_1F, MAP_FOUR_ISLAND_POKEMON_CENTER_2F,
+ MAP_FIVE_ISLAND_POKEMON_CENTER_1F, MAP_FIVE_ISLAND_POKEMON_CENTER_2F,
+ MAP_SEVEN_ISLAND_POKEMON_CENTER_1F, MAP_SEVEN_ISLAND_POKEMON_CENTER_2F,
+ MAP_SIX_ISLAND_POKEMON_CENTER_1F, MAP_SIX_ISLAND_POKEMON_CENTER_2F,
+ MAP_UNKNOWN_MAP_00_00, MAP_UNKNOWN_MAP_00_01,
+ MAP_UNKNOWN_MAP_00_03, MAP_UNKNOWN_MAP_00_04,
+ 0xFFFF,
+};
+
+bool32 IsCurMapPokeCenter(void)
+{
+ return IsCurMapInLocationList(sSaveLocationPokeCenterList);
+}
+
+static const u16 sSaveLocationReloadLocList[] = { 0xFFFF };
+
+static bool32 IsCurMapReloadLocation(void)
+{
+ return IsCurMapInLocationList(sSaveLocationReloadLocList);
+}
+
+static const u16 sUnknown_8453094[] = { 0xFFFF };
+
+static bool32 sub_810B75C(void)
+{
+ return IsCurMapInLocationList(sUnknown_8453094);
+}
+
+static void TrySetPokeCenterWarpStatus(void)
+{
+ if (IsCurMapPokeCenter() == FALSE)
+ gSaveBlock2Ptr->specialSaveWarpFlags &= ~(POKECENTER_SAVEWARP);
+ else
+ gSaveBlock2Ptr->specialSaveWarpFlags |= POKECENTER_SAVEWARP;
+}
+
+static void TrySetReloadWarpStatus(void)
+{
+ if (!IsCurMapReloadLocation())
+ gSaveBlock2Ptr->specialSaveWarpFlags &= ~(LOBBY_SAVEWARP);
+ else
+ gSaveBlock2Ptr->specialSaveWarpFlags |= LOBBY_SAVEWARP;
+}
+
+static void sub_810B7CC(void)
+{
+ if (!sub_810B75C())
+ gSaveBlock2Ptr->specialSaveWarpFlags &= ~(UNK_SPECIAL_SAVE_WARP_FLAG_3);
+ else
+ gSaveBlock2Ptr->specialSaveWarpFlags |= UNK_SPECIAL_SAVE_WARP_FLAG_3;
+}
+
+void TrySetMapSaveWarpStatus(void)
+{
+ TrySetPokeCenterWarpStatus();
+ TrySetReloadWarpStatus();
+ sub_810B7CC();
+}
+
+void sub_810B810(void)
+{
+ gSaveBlock2Ptr->field_A8 |= 0x1;
+ gSaveBlock2Ptr->field_A8 |= 0x10;
+ gSaveBlock2Ptr->field_A8 |= 0x20;
+}
+
+void sub_810B82C(void)
+{
+ gSaveBlock2Ptr->specialSaveWarpFlags |= 0x80;
+ gSaveBlock2Ptr->field_A8 |= 0x2;
+ gSaveBlock2Ptr->field_A8 |= 0x4;
+ gSaveBlock2Ptr->field_A8 |= 0x8;
+ gSaveBlock2Ptr->field_A8 |= 0x8000;
+}