MCPcopy Create free account
hub / github.com/EasyRPG/Player / SetupFromSave

Method SetupFromSave

src/game_map.cpp:215–322  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

213}
214
215void Game_Map::SetupFromSave(
216 std::unique_ptr<lcf::rpg::Map> map_in,
217 lcf::rpg::SaveMapInfo save_map,
218 lcf::rpg::SaveVehicleLocation save_boat,
219 lcf::rpg::SaveVehicleLocation save_ship,
220 lcf::rpg::SaveVehicleLocation save_airship,
221 lcf::rpg::SaveEventExecState save_fg_exec,
222 lcf::rpg::SavePanorama save_pan,
223 std::vector<lcf::rpg::SaveCommonEvent> save_ce) {
224
225 map = std::move(map_in);
226 map_info = std::move(save_map);
227 panorama = std::move(save_pan);
228
229 SetupCommon();
230
231 const bool is_db_save_compat = Main_Data::game_player->IsDatabaseCompatibleWithSave(lcf::Data::system.save_count);
232 const bool is_map_save_compat = Main_Data::game_player->IsMapCompatibleWithSave(GetMapSaveCount());
233
234 InitCommonEvents();
235
236 if (is_db_save_compat && is_map_save_compat) {
237 for (size_t i = 0; i < std::min(save_ce.size(), common_events.size()); ++i) {
238 common_events[i].SetSaveData(save_ce[i].parallel_event_execstate);
239 }
240 }
241
242 if (is_map_save_compat) {
243 std::vector<int> destroyed_event_ids;
244
245 for (size_t i = 0, j = 0; i < events.size() && j < map_info.events.size(); ++i) {
246 auto& ev = events[i];
247 auto& save_ev = map_info.events[j];
248 if (ev.GetId() == save_ev.ID) {
249 ev.SetSaveData(save_ev);
250 ++j;
251 } else {
252 if (save_ev.ID > ev.GetId()) {
253 // assume that the event has been destroyed during gameplay via "DestroyMapEvent"
254 destroyed_event_ids.emplace_back(ev.GetId());
255 } else {
256 Output::Debug("SetupFromSave: Unexpected ID {}/{}", save_ev.ID, ev.GetId());
257 }
258 }
259 }
260 for (size_t i = 0; i < destroyed_event_ids.size(); ++i) {
261 DestroyMapEvent(destroyed_event_ids[i], true);
262 }
263 if (destroyed_event_ids.size() > 0) {
264 UpdateUnderlyingEventReferences();
265 }
266 }
267
268 // Handle cloned events in a separate loop, regardless of "is_map_save_compat"
269 if (Player::HasEasyRpgExtensions()) {
270 for (size_t i = 0; i < map_info.events.size(); ++i) {
271 auto& save_ev = map_info.events[i];
272 bool is_cloned_evt = save_ev.easyrpg_clone_map_id > 0 || save_ev.easyrpg_clone_event_id > 0;

Callers 2

LoadSavegameMethod · 0.45
DataInitMethod · 0.45

Calls 10

minFunction · 0.85
GetParallaxParamsFunction · 0.85
sizeMethod · 0.45
SetSaveDataMethod · 0.45
GetIdMethod · 0.45
clearMethod · 0.45
ClearMethod · 0.45
SetStateMethod · 0.45

Tested by

no test coverage detected