void Game_Map::SetupCommon(int _id) { // Execute remaining events (e.g. ones listed after a teleport) Update(); Dispose(); location.map_id = _id; // Try loading EasyRPG map files first, then fallback to normal RPG Maker std::stringstream ss; ss << "Map" << std::setfill('0') << std::setw(4) << location.map_id << ".emu"; std::string map_file = FileFinder::FindDefault(ss.str()); if (map_file.empty()) { ss.str(""); ss << "Map" << std::setfill('0') << std::setw(4) << location.map_id << ".lmu"; map = LMU_Reader::Load(FileFinder::FindDefault(ss.str()), Player::encoding); if (map.get() == NULL) { Output::ErrorStr(LcfReader::GetError()); } } else { map = LMU_Reader::LoadXml(map_file); if (map.get() == NULL) { Output::ErrorStr(LcfReader::GetError()); } } if (map->parallax_flag) { SetParallaxName(map->parallax_name); SetParallaxScroll(map->parallax_loop_x, map->parallax_loop_y, map->parallax_auto_loop_x, map->parallax_auto_loop_y, map->parallax_sx, map->parallax_sy); } else { SetParallaxName(""); } SetChipset(map->chipset_id); need_refresh = true; scroll_direction = 2; scroll_rest = 0; scroll_speed = 4; map_info.encounter_rate = Data::treemap.maps[GetMapIndex(location.map_id)].encounter_steps; for (int i = 0; i < 3; i++) vehicles[i]->Refresh(); pan_locked = false; pan_wait = false; pan_speed = 0; // Make RPG_RT happy // Otherwise current event not resumed after loading location.map_save_count = map->save_count; ResetEncounterSteps(); }
void Game_Map::UpdateEncounterSteps() { if (Player::debug_flag && Input::IsPressed(Input::DEBUG_THROUGH)) { return; } int x = Main_Data::game_player->GetX(); int y = Main_Data::game_player->GetY(); int terrain_id = GetTerrainTag(x, y); const RPG::Terrain& terrain = Data::terrains[terrain_id - 1]; location.encounter_steps -= terrain.encounter_rate; if (location.encounter_steps <= 0) { ResetEncounterSteps(); PrepareEncounter(); } }