mirror of
https://github.com/vcmi/vcmi.git
synced 2025-06-15 00:05:02 +02:00
Rmg water support (#751)
* Roads added to shipyard * Load general rmg parameters from config * Fix issue with default zone guard * Move magic numbers related to balance to randomMap.json
This commit is contained in:
committed by
Andrii Danylchenko
parent
5c1a66ab69
commit
5054ee011a
@ -62,10 +62,89 @@ CMapGenerator::CMapGenerator(CMapGenOptions& mapGenOptions, int RandomSeed) :
|
||||
zonesTotal(0), tiles(nullptr), prisonsRemaining(0),
|
||||
monolithIndex(0)
|
||||
{
|
||||
loadConfig();
|
||||
rand.setSeed(this->randomSeed);
|
||||
mapGenOptions.finalize(rand);
|
||||
}
|
||||
|
||||
void CMapGenerator::loadConfig()
|
||||
{
|
||||
static std::map<std::string, ETerrainType> terrainMap
|
||||
{
|
||||
{"dirt", ETerrainType::DIRT},
|
||||
{"sand", ETerrainType::SAND},
|
||||
{"grass", ETerrainType::GRASS},
|
||||
{"snow", ETerrainType::SNOW},
|
||||
{"swamp", ETerrainType::SWAMP},
|
||||
{"subterranean", ETerrainType::SUBTERRANEAN},
|
||||
{"lava", ETerrainType::LAVA},
|
||||
{"rough", ETerrainType::ROUGH}
|
||||
};
|
||||
static const std::map<std::string, Res::ERes> resMap
|
||||
{
|
||||
{"wood", Res::ERes::WOOD},
|
||||
{"ore", Res::ERes::ORE},
|
||||
{"gems", Res::ERes::GEMS},
|
||||
{"crystal", Res::ERes::CRYSTAL},
|
||||
{"mercury", Res::ERes::MERCURY},
|
||||
{"sulfur", Res::ERes::SULFUR},
|
||||
{"gold", Res::ERes::GOLD},
|
||||
};
|
||||
static std::map<std::string, ERoadType::ERoadType> roadTypeMap
|
||||
{
|
||||
{"dirt_road", ERoadType::DIRT_ROAD},
|
||||
{"gravel_road", ERoadType::GRAVEL_ROAD},
|
||||
{"cobblestone_road", ERoadType::COBBLESTONE_ROAD}
|
||||
};
|
||||
static const ResourceID path("config/randomMap.json");
|
||||
JsonNode randomMapJson(path);
|
||||
for(auto& s : randomMapJson["terrain"]["undergroundAllow"].Vector())
|
||||
{
|
||||
if(!s.isNull())
|
||||
config.terrainUndergroundAllowed.push_back(terrainMap[s.String()]);
|
||||
}
|
||||
for(auto& s : randomMapJson["terrain"]["groundProhibit"].Vector())
|
||||
{
|
||||
if(!s.isNull())
|
||||
config.terrainGroundProhibit.push_back(terrainMap[s.String()]);
|
||||
}
|
||||
config.shipyardGuard = randomMapJson["waterZone"]["shipyard"]["value"].Integer();
|
||||
for(auto & treasure : randomMapJson["waterZone"]["treasure"].Vector())
|
||||
{
|
||||
config.waterTreasure.emplace_back(treasure["min"].Integer(), treasure["max"].Integer(), treasure["density"].Integer());
|
||||
}
|
||||
for(auto& s : resMap)
|
||||
{
|
||||
config.mineValues[s.second] = randomMapJson["mines"]["value"][s.first].Integer();
|
||||
}
|
||||
config.mineExtraResources = randomMapJson["mines"]["extraResourcesLimit"].Integer();
|
||||
config.minGuardStrength = randomMapJson["minGuardStrength"].Integer();
|
||||
config.defaultRoadType = roadTypeMap[randomMapJson["defaultRoadType"].String()];
|
||||
config.treasureValueLimit = randomMapJson["treasureValueLimit"].Integer();
|
||||
for(auto & i : randomMapJson["prisons"]["experience"].Vector())
|
||||
config.prisonExperience.push_back(i.Integer());
|
||||
for(auto & i : randomMapJson["prisons"]["value"].Vector())
|
||||
config.prisonValues.push_back(i.Integer());
|
||||
for(auto & i : randomMapJson["scrolls"]["value"].Vector())
|
||||
config.scrollValues.push_back(i.Integer());
|
||||
for(auto & i : randomMapJson["pandoras"]["creaturesValue"].Vector())
|
||||
config.pandoraCreatureValues.push_back(i.Integer());
|
||||
for(auto & i : randomMapJson["quests"]["value"].Vector())
|
||||
config.questValues.push_back(i.Integer());
|
||||
for(auto & i : randomMapJson["quests"]["rewardValue"].Vector())
|
||||
config.questRewardValues.push_back(i.Integer());
|
||||
config.pandoraMultiplierGold = randomMapJson["pandoras"]["valueMultiplierGold"].Integer();
|
||||
config.pandoraMultiplierExperience = randomMapJson["pandoras"]["valueMultiplierExperience"].Integer();
|
||||
config.pandoraMultiplierSpells = randomMapJson["pandoras"]["valueMultiplierSpells"].Integer();
|
||||
config.pandoraSpellSchool = randomMapJson["pandoras"]["valueSpellSchool"].Integer();
|
||||
config.pandoraSpell60 = randomMapJson["pandoras"]["valueSpell60"].Integer();
|
||||
}
|
||||
|
||||
const CMapGenerator::Config & CMapGenerator::getConfig() const
|
||||
{
|
||||
return config;
|
||||
}
|
||||
|
||||
void CMapGenerator::initTiles()
|
||||
{
|
||||
map->initTerrain();
|
||||
@ -309,8 +388,10 @@ void CMapGenerator::genZones()
|
||||
void CMapGenerator::createWaterTreasures()
|
||||
{
|
||||
//add treasures on water
|
||||
getZoneWater().second->addTreasureInfo(CTreasureInfo{100, 1000, 5});
|
||||
getZoneWater().second->addTreasureInfo(CTreasureInfo{2000, 6000, 1});
|
||||
for(auto & treasureInfo : getConfig().waterTreasure)
|
||||
{
|
||||
getZoneWater().second->addTreasureInfo(treasureInfo);
|
||||
}
|
||||
}
|
||||
|
||||
void CMapGenerator::prepareWaterTiles()
|
||||
|
Reference in New Issue
Block a user