Source: gamesettings/attributes/Population.js

/**
 * Combines the worldPopulation and regular population cap.
 * At the moment those are incompatible so this makes sense.
 * TODO: Should there be a dialog allowing per-player pop limits?
 */
GameSettings.prototype.Attributes.Population = class Population extends GameSetting
{
	init()
	{
		this.popDefault = this.getDefaultValue("PopulationCapacities", "Population") || 200;
		this.worldPopDefault = this.getDefaultValue("WorldPopulationCapacities", "Population") || 800;

		this.perPlayer = false;
		this.useWorldPop = false;
		this.cap = this.popDefault;
		this.settings.map.watch(() => this.onMapChange(), ["map"]);
	}

	toInitAttributes(attribs)
	{
		if (this.perPlayer)
		{
			if (!attribs.settings.PlayerData)
				attribs.settings.PlayerData = [];
			while (attribs.settings.PlayerData.length < this.perPlayer.length)
				attribs.settings.PlayerData.push({});
			for (let i in this.perPlayer)
				if (this.perPlayer[i])
					attribs.settings.PlayerData[i].PopulationLimit = this.perPlayer[i];
		}
		if (this.useWorldPop)
		{
			attribs.settings.WorldPopulation = true;
			attribs.settings.WorldPopulationCap = this.cap;
		}
		else
			attribs.settings.PopulationCap = this.cap;
	}

	fromInitAttributes(attribs)
	{
		if (!!this.getLegacySetting(attribs, "WorldPopulation"))
			this.setPopCap(true, this.getLegacySetting(attribs, "WorldPopulationCap"));
		else if (!!this.getLegacySetting(attribs, "PopulationCap"))
			this.setPopCap(false, this.getLegacySetting(attribs, "PopulationCap"));
	}

	onMapChange()
	{
		this.perPlayer = undefined;
		if (this.settings.map.type != "scenario")
			return;
		if (this.getMapSetting("PlayerData")?.some(data => data.PopulationLimit))
			this.perPlayer = this.getMapSetting("PlayerData").map(data => data.PopulationLimit || undefined);
		else if (this.getMapSetting("WorldPopulation"))
			this.setPopCap(true, +this.getMapSetting("WorldPopulationCap"));
		else
			this.setPopCap(false, +this.getMapSetting("PopulationCap"));
	}

	setPopCap(worldPop, cap = undefined)
	{
		if (worldPop != this.useWorldPop)
			this.cap = undefined;

		this.useWorldPop = worldPop;

		if (!!cap)
			this.cap = cap;
		else if (!this.cap && !this.useWorldPop)
			this.cap = this.popDefault;
		else if (!this.cap && this.useWorldPop)
			this.cap = this.worldPopDefault;
	}
};