diff --git a/index.html b/index.html
index ea684864..279bc44a 100644
--- a/index.html
+++ b/index.html
@@ -4524,6 +4524,7 @@
+
diff --git a/modules/burgs-and-states.js b/modules/burgs-and-states.js
index bd340dd6..8efbdb71 100644
--- a/modules/burgs-and-states.js
+++ b/modules/burgs-and-states.js
@@ -5,28 +5,22 @@ window.BurgsAndStates = (function () {
const {cells, cultures} = pack;
const n = cells.i.length;
- cells.burg = new Uint16Array(n); // cell burg
- cells.road = new Uint16Array(n); // cell road power
- cells.crossroad = new Uint16Array(n); // cell crossroad power
+ cells.burg = new Uint16Array(n);
+ pack.burgs = placeCapitals();
+ const {burgs} = pack;
- const burgs = (pack.burgs = placeCapitals());
pack.states = createStates();
- const capitalRoutes = Routes.getRoads();
placeTowns();
expandStates();
normalizeStates();
- const townRoutes = Routes.getTrails();
specifyBurgs();
- const oceanRoutes = Routes.getSearoutes();
-
collectStatistics();
assignColors();
generateCampaigns();
generateDiplomacy();
- Routes.draw(capitalRoutes, townRoutes, oceanRoutes);
drawBurgs();
function placeCapitals() {
@@ -72,7 +66,7 @@ window.BurgsAndStates = (function () {
return burgs;
}
- // For each capital create a state
+ // for each capital create a state
function createStates() {
TIME && console.time('createStates');
const states = [{i: 0, name: 'Neutrals'}];
@@ -121,9 +115,10 @@ window.BurgsAndStates = (function () {
while (burgsAdded < burgsNumber && spacing > 1) {
for (let i = 0; burgsAdded < burgsNumber && i < sorted.length; i++) {
if (cells.burg[sorted[i]]) continue;
- const cell = sorted[i],
- x = cells.p[cell][0],
- y = cells.p[cell][1];
+
+ const cell = sorted[i];
+ const [x, y] = cells.p[cell];
+
const s = spacing * gauss(1, 0.3, 0.2, 2, 2); // randomize to make placement not uniform
if (burgsTree.find(x, y, s) !== undefined) continue; // to close to existing burg
const burg = burgs.length;
@@ -149,10 +144,9 @@ window.BurgsAndStates = (function () {
// define burg coordinates, coa, port status and define details
const specifyBurgs = function () {
TIME && console.time('specifyBurgs');
- const cells = pack.cells,
- vertices = pack.vertices,
- features = pack.features,
- temp = grid.cells.temp;
+ const {cells, features} = pack;
+ const temp = grid.cells.temp;
+ const POPULATION_MULTIPLIER = 0.15; // to keep urbanization at about 10% rate
for (const b of pack.burgs) {
if (!b.i || b.lock) continue;
@@ -167,8 +161,10 @@ window.BurgsAndStates = (function () {
b.port = port ? f : 0; // port is defined by water body id it lays on
} else b.port = 0;
- // define burg population (keep urbanization at about 10% rate)
- b.population = rn(Math.max((cells.s[i] + cells.road[i] / 2) / 8 + b.i / 1000 + (i % 100) / 1000, 0.1), 3);
+ // define burg population
+ const primaryPopulation = cells.s[i] * POPULATION_MULTIPLIER;
+ const secondaryPopulation = b.i / 1000 + (i % 100) / 1000;
+ b.population = rn(Math.max(primaryPopulation + secondaryPopulation, 0.1), 3);
if (b.capital) b.population = rn(b.population * 1.3, 3); // increase capital population
if (b.port) {
@@ -230,19 +226,21 @@ window.BurgsAndStates = (function () {
};
const defineBurgFeatures = function (newburg) {
- const cells = pack.cells;
- pack.burgs
- .filter((b) => (newburg ? b.i == newburg.i : b.i && !b.removed))
- .forEach((b) => {
- const pop = b.population;
- b.citadel = b.capital || (pop > 50 && P(0.75)) || P(0.5) ? 1 : 0;
- b.plaza = pop > 50 || (pop > 30 && P(0.75)) || (pop > 10 && P(0.5)) || P(0.25) ? 1 : 0;
- b.walls = b.capital || pop > 30 || (pop > 20 && P(0.75)) || (pop > 10 && P(0.5)) || P(0.2) ? 1 : 0;
- b.shanty = pop > 30 || (pop > 20 && P(0.75)) || (b.walls && P(0.75)) ? 1 : 0;
- const religion = cells.religion[b.cell];
- const theocracy = pack.states[b.state].form === 'Theocracy';
- b.temple = (religion && theocracy) || pop > 50 || (pop > 35 && P(0.75)) || (pop > 20 && P(0.5)) ? 1 : 0;
- });
+ const {cells, burgs} = pack;
+
+ for (const burg of burgs) {
+ if (!burg.i || burg.removed) continue;
+ if (newburg && newburg.i !== burg.i) continue;
+ const {cell, state, pop, capital} = burg;
+
+ burg.citadel = capital || (pop > 50 && P(0.75)) || P(0.5) ? 1 : 0;
+ burg.plaza = pop > 50 || (pop > 30 && P(0.75)) || (pop > 10 && P(0.5)) || P(0.25) ? 1 : 0;
+ burg.walls = capital || pop > 30 || (pop > 20 && P(0.75)) || (pop > 10 && P(0.5)) || P(0.2) ? 1 : 0;
+ burg.shanty = pop > 30 || (pop > 20 && P(0.75)) || (burg.walls && P(0.75)) ? 1 : 0;
+ const religion = cells.religion[cell];
+ const theocracy = pack.states[state].form === 'Theocracy';
+ burg.temple = (religion && theocracy) || pop > 50 || (pop > 35 && P(0.75)) || (pop > 20 && P(0.5)) ? 1 : 0;
+ }
};
const drawBurgs = function () {
diff --git a/modules/production-generator.js b/modules/production-generator.js
index 3fcc3dad..b5bc3a89 100644
--- a/modules/production-generator.js
+++ b/modules/production-generator.js
@@ -111,9 +111,7 @@ window.Production = (function () {
};
const defineExport = () => {
- const {cells, burgs} = pack;
-
- for (const burg of burgs) {
+ for (const burg of pack.burgs) {
if (!burg.i || burg.removed) continue;
const {population, production: resourcePool} = burg;
const localUsage = Math.ceil(population);
diff --git a/modules/trade-generator.js b/modules/trade-generator.js
new file mode 100644
index 00000000..ea54706d
--- /dev/null
+++ b/modules/trade-generator.js
@@ -0,0 +1,8 @@
+'use strict';
+
+window.Trade = (function () {
+ const defineTradeCenters = () => {
+ const {cells} = pack;
+ };
+ return {defineTradeCenters};
+})();