Skip to content

Commit 4c589a4

Browse files
authored
Merge pull request #1470 from fmatthew5876/lsd_defaults
SaveGame Fixes
2 parents 7d43de4 + eee93f1 commit 4c589a4

File tree

7 files changed

+38
-27
lines changed

7 files changed

+38
-27
lines changed

src/game_actor.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -315,22 +315,18 @@ std::vector<int16_t>& Game_Actor::GetStates() {
315315

316316
void Game_Actor::AddState(int state_id) {
317317
Game_Battler::AddState(state_id);
318-
GetData().status_size = GetData().status.size();
319318
}
320319

321320
void Game_Actor::RemoveState(int state_id) {
322321
Game_Battler::RemoveState(state_id);
323-
GetData().status_size = GetData().status.size();
324322
}
325323

326324
void Game_Actor::RemoveBattleStates() {
327325
Game_Battler::RemoveBattleStates();
328-
GetData().status_size = GetData().status.size();
329326
}
330327

331328
void Game_Actor::RemoveAllStates() {
332329
Game_Battler::RemoveAllStates();
333-
GetData().status_size = GetData().status.size();
334330
}
335331

336332
int Game_Actor::GetHp() const {

src/game_interpreter.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2535,10 +2535,9 @@ bool Game_Interpreter::CommandTeleportTargets(RPG::EventCommand const& com) { //
25352535

25362536
int x = com.parameters[2];
25372537
int y = com.parameters[3];
2538-
int switch_id = (com.parameters[4] != 0)
2539-
? com.parameters[5]
2540-
: -1;
2541-
Game_Targets::AddTeleportTarget(map_id, x, y, switch_id);
2538+
bool switch_on = static_cast<bool>(com.parameters[4]);
2539+
int switch_id = com.parameters[5];
2540+
Game_Targets::AddTeleportTarget(map_id, x, y, switch_on, switch_id);
25422541
return true;
25432542
}
25442543

@@ -2551,10 +2550,9 @@ bool Game_Interpreter::CommandEscapeTarget(RPG::EventCommand const& com) { // co
25512550
int map_id = com.parameters[0];
25522551
int x = com.parameters[1];
25532552
int y = com.parameters[2];
2554-
int switch_id = (com.parameters[3] != 0)
2555-
? com.parameters[4]
2556-
: -1;
2557-
Game_Targets::SetEscapeTarget(map_id, x, y, switch_id);
2553+
bool switch_on = static_cast<bool>(com.parameters[3]);
2554+
int switch_id = com.parameters[4];
2555+
Game_Targets::SetEscapeTarget(map_id, x, y, switch_on, switch_id);
25582556
return true;
25592557
}
25602558

src/game_map.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ void Game_Map::Quit() {
133133

134134
void Game_Map::Setup(int _id) {
135135
SetupCommon(_id, false);
136+
map_info.encounter_rate = GetMapInfo().encounter_steps;
137+
ResetEncounterSteps();
136138

137139
Parallax::ClearChangedBG();
138140

@@ -197,9 +199,12 @@ void Game_Map::SetupFromSave() {
197199
if (vehicles[i]->IsMoveRouteOverwritten())
198200
pending.push_back(vehicles[i].get());
199201

200-
map_info.Fixup(*map.get());
202+
map_info.Fixup(GetMap());
203+
map_info.Fixup(GetMapInfo());
201204
SetChipset(map_info.chipset_id);
202205

206+
ResetEncounterSteps();
207+
203208
// FIXME: Handle Pan correctly
204209
location.pan_current_x = 0;
205210
location.pan_current_y = 0;
@@ -236,7 +241,6 @@ void Game_Map::SetupCommon(int _id, bool is_load_savegame) {
236241
refresh_type = Refresh_All;
237242

238243
int current_index = GetMapIndex(location.map_id);
239-
map_info.encounter_rate = Data::treemap.maps[current_index].encounter_steps;
240244

241245
ss.str("");
242246
for (int cur = current_index;
@@ -278,8 +282,6 @@ void Game_Map::SetupCommon(int _id, bool is_load_savegame) {
278282
// events will properly resume upon loading.
279283
location.map_save_count = map_save_count;
280284
location.database_save_count = Data::system.save_count;
281-
282-
ResetEncounterSteps();
283285
}
284286

285287
void Game_Map::PrepareSave() {
@@ -867,6 +869,11 @@ void Game_Map::Update(bool only_parallel) {
867869
free_interpreters.clear();
868870
}
869871

872+
RPG::MapInfo const& Game_Map::GetMapInfo() {
873+
auto idx = GetMapIndex(location.map_id);
874+
return Data::treemap.maps[idx];
875+
}
876+
870877
RPG::Map const& Game_Map::GetMap() {
871878
return *map;
872879
}

src/game_map.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "game_vehicle.h"
2828
#include "rpg_encounter.h"
2929
#include "rpg_map.h"
30+
#include "rpg_mapinfo.h"
3031

3132
class FileRequestAsync;
3233

@@ -229,6 +230,13 @@ namespace Game_Map {
229230
*/
230231
void Update(bool only_parallel = false);
231232

233+
/**
234+
* Gets current map_info.
235+
*
236+
* @return current map_info.
237+
*/
238+
RPG::MapInfo const& GetMapInfo();
239+
232240
/**
233241
* Gets current map.
234242
*

src/game_targets.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ std::vector<RPG::SaveTarget>::iterator Game_Targets::FindTarget(int id, bool cre
3838
return data.end() - 1;
3939
}
4040

41-
void Game_Targets::AddTeleportTarget(int map_id, int x, int y, int switch_id) {
41+
void Game_Targets::AddTeleportTarget(int map_id, int x, int y, bool switch_on, int switch_id) {
4242
std::vector<RPG::SaveTarget>::iterator target = FindTarget(map_id, true);
4343

4444
target->map_id = map_id;
4545
target->map_x = x;
4646
target->map_y = y;
47-
target->switch_on = switch_id > 0;
47+
target->switch_on = switch_on;
4848
target->switch_id = switch_id;
4949
}
5050

@@ -86,22 +86,21 @@ std::vector<RPG::SaveTarget*> Game_Targets::GetTeleportTargets() {
8686
return targets;
8787
}
8888

89-
void Game_Targets::SetEscapeTarget(int map_id, int x, int y, int switch_id) {
90-
std::vector<RPG::SaveTarget>::iterator target = FindTarget(0, true);
89+
void Game_Targets::SetEscapeTarget(int map_id, int x, int y, bool switch_on, int switch_id) {
90+
auto* target = &data[0];
9191

9292
target->map_id = map_id;
9393
target->map_x = x;
9494
target->map_y = y;
95-
target->switch_on = switch_id > 0;
95+
target->switch_on = switch_on;
9696
target->switch_id = switch_id;
9797
}
9898

9999
bool Game_Targets::HasEscapeTarget() {
100-
return GetEscapeTarget() != nullptr;
100+
return data[0].map_id != 0;
101101
}
102102

103103
RPG::SaveTarget* Game_Targets::GetEscapeTarget() {
104-
std::vector<RPG::SaveTarget>::iterator target = FindTarget(0, false);
105-
return target == data.end() ? NULL : &*target;
104+
return HasEscapeTarget() ? &data[0] : nullptr;
106105
}
107106

src/game_targets.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ namespace RPG {
2323
}
2424

2525
namespace Game_Targets {
26-
void AddTeleportTarget(int map_id, int x, int y, int switch_id);
26+
void AddTeleportTarget(int map_id, int x, int y, bool switch_on, int switch_id);
2727
void RemoveTeleportTarget(int map_id);
2828
bool HasTeleportTarget();
2929
RPG::SaveTarget* GetTeleportTarget(int map_id);
3030
std::vector<RPG::SaveTarget*> GetTeleportTargets();
31-
void SetEscapeTarget(int map_id, int x, int y, int switch_id);
31+
void SetEscapeTarget(int map_id, int x, int y, bool switch_on, int switch_id);
3232
bool HasEscapeTarget();
3333
RPG::SaveTarget* GetEscapeTarget();
3434
}

src/scene_save.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,10 @@ void Scene_Save::Action(int index) {
9898
}
9999

100100
LSD_Reader::PrepareSave(Main_Data::game_data);
101-
LSD_Reader::Save(filename, Main_Data::game_data, Player::encoding);
101+
auto data_copy = LSD_Reader::ClearDefaults(Main_Data::game_data, Game_Map::GetMapInfo(), Game_Map::GetMap());
102+
// RPG_RT saves always have the scene set to this.
103+
data_copy.system.scene = RPG::SaveSystem::Scene_file;
104+
LSD_Reader::Save(filename, data_copy, Player::encoding);
102105

103106
#ifdef EMSCRIPTEN
104107
// Save changed file system

0 commit comments

Comments
 (0)