diff --git a/index.html b/index.html
index ec30a12b..54591a88 100644
--- a/index.html
+++ b/index.html
@@ -3214,6 +3214,12 @@
+
+
diff --git a/main.js b/main.js
index a32b3aa0..539dea04 100644
--- a/main.js
+++ b/main.js
@@ -155,6 +155,7 @@ let options = {
let mapCoordinates = {}; // map coordinates on globe
let populationRate = +document.getElementById("populationRateInput").value;
let urbanization = +document.getElementById("urbanizationInput").value;
+let urbanDensity = +document.getElementById("urbanDensityInput").value;
applyStoredOptions();
diff --git a/modules/load.js b/modules/load.js
index a44b4d36..fc58fa55 100644
--- a/modules/load.js
+++ b/modules/load.js
@@ -231,6 +231,7 @@ function parseLoadedData(data) {
if (settings[21]) hideLabels.checked = +settings[21];
if (settings[22]) stylePreset.value = settings[22];
if (settings[23]) rescaleLabels.checked = +settings[23];
+ if (settings[24]) urbanDensity = urbanDensity.value = urbanDensityOutput.value = +settings[24];
})();
void (function parseConfiguration() {
diff --git a/modules/save.js b/modules/save.js
index 6ebda083..04f3e665 100644
--- a/modules/save.js
+++ b/modules/save.js
@@ -33,7 +33,8 @@ function getMapData() {
mapName.value,
+hideLabels.checked,
stylePreset.value,
- +rescaleLabels.checked
+ +rescaleLabels.checked,
+ urbanDensity
].join("|");
const coords = JSON.stringify(mapCoordinates);
const biomes = [biomesData.color, biomesData.habitability, biomesData.name].join("|");
diff --git a/modules/ui/burg-editor.js b/modules/ui/burg-editor.js
index c61b6ed9..1fcdf434 100644
--- a/modules/ui/burg-editor.js
+++ b/modules/ui/burg-editor.js
@@ -408,7 +408,6 @@ function editBurg(id) {
document.getElementById("mfcgPreview").setAttribute("src", mfcgURL);
document.getElementById("mfcgLink").setAttribute("href", mfcgURL);
}
-
function getBurgSeed(burg) {
return burg.MFCG || Number(`${seed}${String(burg.i).padStart(4, 0)}`);
}
@@ -417,7 +416,8 @@ function editBurg(id) {
const {cells} = pack;
const {name, population, cell} = burg;
const burgSeed = getBurgSeed(burg);
- const size = minmax(rn(population), 6, 100);
+ const sizeRaw = 2.13 * Math.pow((population * populationRate) / urbanDensity, 0.385);
+ const size = minmax(Math.ceil(sizeRaw), 6, 100);
const people = rn(population * populationRate * urbanization);
const hub = +cells.road[cell] > 50;
diff --git a/modules/ui/units-editor.js b/modules/ui/units-editor.js
index 54571191..aa3e4e63 100644
--- a/modules/ui/units-editor.js
+++ b/modules/ui/units-editor.js
@@ -31,6 +31,8 @@ function editUnits() {
document.getElementById("populationRateInput").addEventListener("change", changePopulationRate);
document.getElementById("urbanizationOutput").addEventListener("input", changeUrbanizationRate);
document.getElementById("urbanizationInput").addEventListener("change", changeUrbanizationRate);
+ document.getElementById("urbanDensityOutput").addEventListener("input", changeUrbanDensity);
+ document.getElementById("urbanDensityInput").addEventListener("change", changeUrbanDensity);
document.getElementById("addLinearRuler").addEventListener("click", addRuler);
document.getElementById("addOpisometer").addEventListener("click", toggleOpisometerMode);
@@ -93,6 +95,10 @@ function editUnits() {
urbanization = +this.value;
}
+ function changeUrbanDensity() {
+ urbanDensity = +this.value;
+ }
+
function restoreDefaultUnits() {
// distanceScale
document.getElementById("distanceScaleOutput").value = 3;
@@ -135,8 +141,10 @@ function editUnits() {
// population
populationRate = populationRateOutput.value = populationRateInput.value = 1000;
urbanization = urbanizationOutput.value = urbanizationInput.value = 1;
+ urbanDensity = urbanDensityOutput.value = urbanDensityInput.value = 10;
localStorage.removeItem("populationRate");
localStorage.removeItem("urbanization");
+ localStorage.removeItem("urbanDensity");
}
function addRuler() {