void CvMapGenerator::addRivers() { PROFILE_FUNC(); if (gDLL->getPythonIFace()->pythonAddRivers() && !gDLL->getPythonIFace()->pythonUsingDefaultImpl()) { return; // Python override } gDLL->NiTextOut("Adding Rivers..."); CvPlot* pLoopPlot; CvPlot* pStartPlot; int iPass; int iRiverSourceRange; int iSeaWaterRange; int iI; for (iPass = 0; iPass < 4; iPass++) { if (iPass <= 1) { iRiverSourceRange = GC.getXMLval(XML_RIVER_SOURCE_MIN_RIVER_RANGE); } else { iRiverSourceRange = (GC.getXMLval(XML_RIVER_SOURCE_MIN_RIVER_RANGE) / 2); } if (iPass <= 1) { iSeaWaterRange = GC.getXMLval(XML_RIVER_SOURCE_MIN_SEAWATER_RANGE); } else { iSeaWaterRange = (GC.getXMLval(XML_RIVER_SOURCE_MIN_SEAWATER_RANGE) / 2); } for (iI = 0; iI < GC.getMapINLINE().numPlotsINLINE(); iI++) { gDLL->callUpdater(); pLoopPlot = GC.getMapINLINE().plotByIndexINLINE(iI); FAssertMsg(pLoopPlot != NULL, "LoopPlot is not assigned a valid value"); if (!(pLoopPlot->isWater())) { if (((iPass == 0) && (pLoopPlot->isHills() || pLoopPlot->isPeak())) || ((iPass == 1) && !(pLoopPlot->isCoastalLand()) && (GC.getGameINLINE().getMapRandNum(8, "addRivers") == 0)) || ((iPass == 2) && (pLoopPlot->isHills() || pLoopPlot->isPeak()) && (pLoopPlot->area()->getNumRiverEdges() < ((pLoopPlot->area()->getNumTiles() / GC.getXMLval(XML_PLOTS_PER_RIVER_EDGE)) + 1))) || ((iPass == 3) && (pLoopPlot->area()->getNumRiverEdges() < ((pLoopPlot->area()->getNumTiles() / GC.getXMLval(XML_PLOTS_PER_RIVER_EDGE)) + 1)))) { if (!(GC.getMapINLINE().findWater(pLoopPlot, iRiverSourceRange, true))) { if (!(GC.getMapINLINE().findWater(pLoopPlot, iSeaWaterRange, false))) { pStartPlot = pLoopPlot->getInlandCorner(); if (pStartPlot != NULL) { doRiver(pStartPlot); } } } } } } } }