void GameMapRandomizer::RandomizeTerrain( GameMapSectionManagerInterface *manager, int width, int height, int section_width, int section_height) { manager_ = manager; width_ = width; height_ = height; section_width_ = section_width; section_height_ = section_height; // 1. Lay down grass foundation BuildFoundation(); // 2. Add a random amount of dirt everywhere GenerateDirt(); // 4. Add some objects AddObjects(); // 5. Add water GenerateWater(); // 6. Add spawnpoint AddSpawnpoint(); // 7. Add dirt roads GenerateRoads(); // 8. Add dirt around water AddWaterDirt(); // 9. Fix corners for water and dirt // DONE }
void CMapGen::GenerateMap() { if (!m_pLayers->MineTeeLayer()) return; dbg_msg("MapGen", "Generating '%s' map...", g_Config.m_SvMapGenerationSize); int MineTeeLayerSize = m_pLayers->MineTeeLayer()->m_Width*m_pLayers->MineTeeLayer()->m_Height; // clear map, but keep background, envelopes etc for(int i = 0; i < MineTeeLayerSize; i++) { int x = i%m_pLayers->MineTeeLayer()->m_Width; ivec2 TilePos(x, (i-x)/m_pLayers->MineTeeLayer()->m_Width); // clear the different layers m_pCollision->ModifTile(TilePos, m_pLayers->GetMineTeeGroupIndex(), m_pLayers->GetMineTeeLayerIndex(), 0, 0); m_pCollision->ModifTile(TilePos, m_pLayers->GetMineTeeGroupIndex(), m_pLayers->GetMineTeeFGLayerIndex(), 0, 0); m_pCollision->ModifTile(TilePos, m_pLayers->GetMineTeeGroupIndex(), m_pLayers->GetMineTeeBGLayerIndex(), 0, 0); } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* ~~~ Generate the world ~~~ */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~ */ // terrain GenerateBasicTerrain(); // ores GenerateOre(CBlockManager::COAL_ORE, 200.0f, COAL_LEVEL, 50, 4); GenerateOre(CBlockManager::IRON_ORE, 320.0f, IRON_LEVEL, 30, 2); GenerateOre(CBlockManager::GOLD_ORE, 350.0f, GOLD_LEVEL, 15, 2); GenerateOre(CBlockManager::DIAMOND_ORE, 680.0f, DIAMOND_LEVEL, 15, 1); // /ores1 GenerateCaves(); GenerateWater(); // vegetation GenerateFlowers(); GenerateMushrooms(); GenerateTrees(); // misc GenerateBorder(); // as long as there are no infinite (chunked) maps // Performance GenerateSkip(); }