diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-06-28 05:55:49 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-06-28 05:56:28 +0800 |
commit | 8e8fe3bf443cec46c0b7cc2072748c90bedc964d (patch) | |
tree | 5e3c933e14615e7daf0ac74d77545663dd05a8d4 /src | |
parent | be2010e0db8ca527693d40a6f1410000033f7e7f (diff) |
finished save_location
Diffstat (limited to 'src')
-rw-r--r-- | src/load_save.c | 10 | ||||
-rw-r--r-- | src/reset_save_heap.c | 5 | ||||
-rw-r--r-- | src/save_location.c | 109 |
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; +} |