1. We have added a Gift Upgrades feature that allows you to gift an account upgrade to another member, just in time for the holiday season. You can see the gift option when going to the Account Upgrades screen, or on any user profile screen.
    Dismiss Notice

City growth, Social Stratification, Population Migration

Discussion in 'Gedemon's Civilization, a total overhaul project' started by Gedemon, May 7, 2017.

  1. Knasp

    Knasp Warlord

    Sep 10, 2011
    I have an idea about population growth, city fortifications and spatial hierachy, that I think could work with the mod. I wonder if it is possible to do within the current modding limits? Or if it would drain performance too much?

    What if City walls didn't automatically scale up with growing population?

    Basically when you build a city wall, only the current population and buildings should be housed within the city walls. So if the city is attacked, the buildings outside the wall are burned down. Population living outside the wall would either need to be crammed inside the walls or they would become refugees (migrating to adjacent tiles), or be captured by the enemy (enslaved) and so on.

    In order to protect more of your population/buildings you'd have to build new walls (or expand the current ones) repeatedly, but walls are expensive and require materials. And the greater population the city has, more area will have to be walled in. So the cost of walls should increase with city size (although the old stone wall could potentially be dismantled and the stones reused).
    Instead of expanding/replacing old walls you could allow building additional walls, resulting in outer and inner rings, protecting different structures and demographics depending on when they were constructed. It would be interesting to have the siege mechanic where you have to break through several walls to claim the city, although allowing multiple walls per city would be more complicated in keeping track of.

    In conjunction with this system, you could introduce a spatial hierarchy, where the Upper classes always reside in the city center and will push out the lower classes to make room, if necessary even relocate them outside the wall.
    Additionally, maybe lower class houses should always be built outside the walls (think slums), since that is the cheapest land to acquire and you can use the cheapest materials. Then the player would have to choose whether to build housing within the walls (upper/middle classes) or outside where they are unprotected.
    Another way to alter housing would be to simply reduce the choice to either build "Housing" within the walls or outside. Building within the walls would be more expensive but would bring the benefit of cramming in more people in the same area (i.e. adding floors or erecting taller houses).

    In this hierarchy, important buildings would always be placed within the city walls (Monuments, temples, palaces, upper class housing etc) and if you build one of those then people would be evicted/relocated to make room. If performance drain or coding isn't a problem, you could even keep track of "unused" space within the walls, building walls would leave some room for expansion and deliberate razing of buildings could likewise leave some open space.
    Last edited: Feb 1, 2018
    Gedemon likes this.
  2. dunkleosteus

    dunkleosteus Roman Pleb

    Aug 17, 2015
    Toronto, Canada
    As far as I'm aware, civilians weren't normally taken prisoner during war. I don't really know about the Bronze age, but at least in the last thousand years or so in Europe, attacking civilians was viewed as against the rules of war. Civilians are not a danger to an opposing army and normally didn't resist them.

    One thing that still sort of bothers me is that we have to build "housing" in our cities. Firaxis decided to use the word "housing" but it was not a good choice for describing the mechanic they wanted to implement. Houses are not built by the thousands in advance, they're constructed on an as-needed basis as population grows. The physical houses that people live in are never the limiting factor in cities. City growth is limited by availability of food and water and most importantly by the spread of disease. Without proper sanitation, plagues and illnesses run rampant. Unfiltered or dirty water are also vectors of transmission. This is what Firaxis was trying to represent and what we should be focusing on if we're working to improve where Firaxis fell short.

    Things that might make more sense instead of building more housing: the existing facilities of the city may fall short as population increases. As was previously mentioned, buildings built after the city walls are completed might exist "outside" of them, leaving those buildings vulnerable. I think it might be fine if the number of houses for each class are still tracked, but I think they should be built automatically as population increases. They can consume resources or production in the city but it should not be a manual process. But to the point I was getting to before, I think it would make sense that certain buildings would only be serviceable for a number of people, and beyond that, they would decrease in effectiveness. Production or resources could be spent to build additional copies of or expand existing infrastructure. For example, a granary might be sufficient for storing food for a smaller city but a larger one might need many more granaries. After the city's walls are built, new housing infrastructure would be built outside of the existing walls, and based on the number of houses that are built outside (and any additional buildings) the cost of expanding the walls would increase. (The cost of building the walls should be based on the size of the city).

    To the point made earlier about cities automating production, I think this is paramount. These are things that are fundamentally not handled by the government (except in some forms of communism...). I expect the AI would have to be doing this automatically as well, so the code to make those decisions should exist anyway, right?
    Gedemon likes this.
  3. Gedemon

    Gedemon Modder Moderator

    Oct 4, 2004
    I agree on some kind of automation, using a governor building and AI coding, that's still planned. (but with some limits, too much automation may remove player's decisions)

    Currently the housing system has two purposes:
    - allow the player to control (a bit, see previous posts !) population growth (to prevent disease, revolutions, etc... when those will be implemented)
    - allow the player to control (even less...) social stratification

    For the first point, I may try to create a setting page in cities using fake buildings, one of those could be "stop city growth" (could be linked to inter-cities migrations mechanisms), it's in my list of things to test.

    For the later, replacement will require the "activity types" to be coded with the rural/urban separation.

    Wall's protection (or lack of) for building is a good concept, but may be a bit complex to code, I'll think about it.
    Knasp likes this.
  4. Knasp

    Knasp Warlord

    Sep 10, 2011
    Since writing that post I've been reading a book about slavery, so I'll share my thoughts on what I've gathered so far. My short answer would be that civilians captured would generally be enslaved, but that this would depend on which nationalities, cultures and religions involved. The usual exceptions to this would be if the conflict was a civil war or if the warring Civ's share a common religion (that has banned the enslavement of their followers).

    Longer answer
    It appears that slavery is first attested in advanced civilizations like Sumer and ancient Egypt, c.4000-3000 BC. While the most common source of slaves were impoverished/indebted people, the second most common source of slaves were foreigners who were enslaved by force, i.e. civilians taken in raids, as well as prisoners of war. Most slaves throughout history haven't been used as forced labour, in productive enterprises such as agriculture/plantations, mining etc. But rather most slaves were put to work in rich households, as servants to upper class families. In these first few millenia, slaves weren't generally used to construct infrastructure, wonders (like the pyramids), irrigation systems or row galleys. Those labours and public works were instead achieved through State-ordered forced labour of the free citizens (Corvée, Ilkum, etc). In order to have slave labour, the civilization in question needed to import a lot of slaves, either through warfare or by trading.

    In classical Greece, rich Athenians accumulated enough slaves to use them for mining, with examples of private slave-owners leasing their slaves, for this purpose.
    The Roman Republic (c. 500-30 BC) managed, through all their warring, to net a more or less constant influx of slaves, which in turn to reduced the costs enough to keep a lot of slaves and make large plantations profitable, for the emerging class of big land- and slave owners. But most slaves were still used by upper class people as household servants and tutors. In Athens, State-owned Scythian slaves were used as a police force (law enforcement) and later in Imperial Rome, the State-owned slaves were used to run the Empire's bureaucracy and Rome's water supply. Slaves were given similar tasks by Byzantine emperors and Islamic caliphs. The reason for this being that slaves were considered to be more loyal to the ruler, and less corruptible since they didn't have any family ties / relatives that they could benefit. Some islamic caliphates (among others) even started using foreign slaves as soldiers, the Mamluks being the prime example.

    In time, the religious leaders of Christianity and Islam condemned slavery of their own followers, for e.g. Pope John VIII's edict in 873. If we focus on Europe, in the following centuries, the enslavement of other Christian Europeans slowly declined until the late Medieval period. However, the enslavement of people with other religions and/or ethnicities remained for centuries, especially in southern Europe. Enslavement of Muslims and other non-combatants/non-europeans remained acceptable for a long time, even if it wasn't endorsed by the Church.

    An interesting example is Great Britain, where England more or less banned enslavement of Christians in the 1200s, yet it was only in the 1700s that they freed all their remaining slaves (blacks/non-christians) on the British isles. Slavery in the colonies however, remained an important part of the naval empires economy. It wasn't until 1833 that the Slavery Abolition Act was passed, banning slavery in the colonies.

    Then again, if we look at recent history, for e.g. WW2, we can take Germany as an example. The Germans used conquered nations' civilians and POW's as forced labour on a massive scale.

    Game-wise, considering the history, I'd say that captured civilians could be either enslaved, ransomed or freed, depending on the religion, social status of the captives, and other circumstances.
    Last edited: Feb 22, 2018
    Gedemon and dunkleosteus like this.
  5. Gedemon

    Gedemon Modder Moderator

    Oct 4, 2004
    What model should I use to represent Population Migration in game ?

    I was thinking of using something based on both Ravenstein (short distance or to a big city over long distance) and Lee's Model (push/pull/obstacle factors that are relatively easy to code in relation to gameplay), but do you have other suggestion ?

    Here is a selection of each model "rules" that could be used in relation to gameplay, I'd like feedback on the eras those rules could apply

    • every migration flow generates a return or counter migration.
    • the majority of migrants move a short distance
    • migrants who move longer distances tend to choose big-city destinations.
    • urban residents are often less migratory than inhabitants of rural areas
    • large towns grow by migration rather than natural increase.
    • migration stage by stage.
    • urban rural difference.
    • migration and technology.
    • economic condition.

    Lee's Push factors:
    • Not enough jobs
    • Inadequate conditions
    • Desertification
    • Famine or drought
    • Political fear or persecution
    • Slavery or forced labor
    • Poor medical care
    • Loss of wealth
    • Natural disasters
    • Death threats
    • Desire for more political or religious freedom
    • Pollution
    • Poor housing
    • Discrimination (plot ethnic groups relation)
    • War

    Lee's Pull factor:
    • Job opportunities
    • Better living conditions
    • The feeling of having more political or religious freedom
    • Enjoyment
    • Education
    • Better medical care
    • Attractive climates
    • Security
    • Industry

    Lee's Obstacles:
    • Distance
    • Transportation
    • Cost of Movement
    • Ethnic Barrier

    The first three are linked, and I'll add Liberty of Movement (based on government/policy) in the obstacles
    Knasp likes this.
  6. Knasp

    Knasp Warlord

    Sep 10, 2011
    To me it seems that Ravenstein only describes the migration patterns that he observed in his time (late 1800s). Lee has a different focus, in trying to identify the causes of migration(s). Lee's push/pull factors and obstacles could very well explain why we see the patterns observed.

    From a game/simulationist perspective, I believe Lee's model is useful, since it offers many possible connections to various mechanics. But maybe Ravensteins model is easier to code and implement, since it would require less inputs?

    In any case, we'd have to make sure that the migration mechanics don't cause high urbanisation, before the industrial era.
  7. Gedemon

    Gedemon Modder Moderator

    Oct 4, 2004
    I think I'll try to implement the global migration mechanism in 3 main functions.

    1/ From a City to its own plots or other cities (running at the start of each player's turn)

    • security
    • food rationing
    • employment
    • housing
    • other "needs" (like luxuries for upper class)
    • governement/policies
    • culture groups relations

    2/ From a plot to any surrounding plots or its City (when owned) (running at the beginning of each game's turn)

    • security: based on units on the current plots and units on the surrounding plots (moving to the safer plots), also based on features like fort and proximity of a (walled) city
    • food: each free plot will have a "food production" value allowing a max population size, but when a plot is owned by a city, it's the city food rationing value that is used (the city "control" food distribution on its territory, you can produce more than you need but still risk famine because your rations have been requisitioned)
    • employment: each plot has an "employment" value based on the plot's yields and its base number of resources (features may raise that base number)
    • governement/policies
    • culture groups relations

    3/ From units movements (running when each unit enter a plot, even mid-movement)

    • when an unit enter a plot from a direction (ex. from north-east), a part of the population that is hostile to (or afraid of) the unit's owner culture group will move to the tile(s) in the 3 opposite directions (ex. mainly to south-west, but also to south-east and to west)

    now using point 3/ I'd like to try to implement a framework for Barbarian Invasion in a way that will allow to simulate some massive migration movement, using the current modding capabilities.

    There is no direct control over AI units movement, but in one of the DLC scenarios, Firaxis added a method to designate a target city for barbarians.

    What I could try is to spawn on the map a small city (using a minor civ player representing a neutral culture group) where the invasion/migration should be directed to, then spawn barbarians units at the origin point of the invasion/migration and make them target that city (or an existing city if there is one of a player in the targeted area)

    The units movements to their target should then "push" populations in front of them.
    Knasp likes this.
  8. Knasp

    Knasp Warlord

    Sep 10, 2011
    This sounds promising! I'm currently working on compiling a list of historical groups to use for each Civ. I'll share it in the other thread, but so far I've only completed Egypt and I've just started on Sumer.

    In which order will the plots be resolved? I suppose each plot can use the values of surrounding plots from the previous turn when deciding upon the destination for the migrants.

    And also if the feature on the plot has been pillaged? Maybe pillaging could increase emigration pressure more than otherwise? If a unit pillaged a tile then that could add insecurity-points to the plot itself as well as surrounding plots? Then the player could choose not to pillage, in order to retain more population in the city after it's been conquered.

    What happens to food production when a plot is occupied by enemy unit? Will that food be consumed by the unit? Distributed to the enemy's Civ? Left to the civilian population? Decided by a military occupation policy?
    Personally I'd like the effect of pre-defined relations to be minimal compared to dynamic factors, and instead let the major Civs' actions decide how positive/negative relations become. For example, while British and French may grow to hate eachother during 100+ years of war, they should be able to overlook their past after being at peace, trading and facing a thteatining German neighbor. Entering an alliance should boost inter-cultural relations for example.

    So barbarians would no longer roam until they find a player's city/units to report/attack? They would always go towards a city? How would the destination plot/city for the barbarians be decided? The leading player's capital?

    And this neutral city would be spawned and removed for each barbarian unit? That seems like it could demand a lot of computation, during the barbarians turn.

    Also, can't the push-effect be applied at the start of the game turn or player's turn? If the unit's movement is saved from previous turn?
    Gedemon likes this.
  9. Gedemon

    Gedemon Modder Moderator

    Oct 4, 2004
    Good thing that I've made a preset for Middle-East on the Giant Earth map then :)

    2 pass for the function each turn, first one to cache each plot push/pull value in memory, second pass to test each plots with its surrounding and apply migration based on the cached value (to not recompute push/pull value every time a plot's population is changing from its adjacent plots migration, and keep it "fair" so that plot#53 migration to plot #54 is not stopped by plot#52 population having moved there first... of course it means that plot #54 may receive more population than it could host in the same turn, but that's perfectly normal and will produce a new migration movement from that plot the next turn...)

    A plot with a feature may have more population because the feature means more employment (and more food output on "free" plots), removing the feature would lower those, hence pushing more population out of the plot.

    to be defined, currently an occupied plot is not worked by a city, which reduce its production IIRC, it should be stopped at some point in development. Units already "feed" on the plot's food yield (and the surrounding plots) but does not "steal" food from the local population (well local plot population doesn't "eat" ATM) Pillaging a feature from a plot should already give the unit some resources in relation to the feature and the plot.

    relations will be dynamic, for example helping the attacked city (by killing barbarian units near it) should raise relation, in a similar way it does with current CS (but using a different code/framework)

    No they could still roam, I'd like to have camp spawning in area with higher population than average and spawning unit based on the local culture group and population value for example.

    But some of them would spawn with a purpose (attacking cities in a direction) at specific (or near specific) dates.

    The city would be spawned once (if the targeted area is empty of cities) or not at all if there is already cities in that area, and woul stay on the map during the barbarian invasion, and may stay a bit longer if it survived the invasion, maybe going back to a smaller settlement later or switching to another culture group (or influancing civilization), or even switching to a new major civilization that is programmed to spawn in the area.

    problem with saving unit's movement (as most of them could have 2 moves) is that it could push a culture group to move toward a plot that is now occupied by the unit they are supposed to be running from...

    calculation should be kept simple for this event anyway, there won't be consideration of other push/pull factor than running for your life, even if it means running into a desert. Normal migration would occur in the following turns based on the push/pull factor of functions 1 and 2.
    Knasp likes this.
  10. myclan

    myclan Prince

    Feb 26, 2008
    If a size-10 city with 10 worker slots, all Urban Population, the production ouput for the city should be 1 (each slot have 1 worker)
    If a size-6 city with 10 worker slots, all Urban Population, the production ouput for the city should be 0.6 (each slot have 0.6 worker)
    If 6 * 60% * 50% = 1.8, for a size-10 city will be 10 *100% * 50% = 5, nearly 3 times for 1.8
  11. Gedemon

    Gedemon Modder Moderator

    Oct 4, 2004
    The formula are implemented a bit differently than the design draft, but a size 10 city is >630,000 pop. (up to 823,946pop.) and a size 6 city is <232,481pop. (down to 150,947po.)
    myclan likes this.
  12. myclan

    myclan Prince

    Feb 26, 2008
    So I want to know how to grow a tile/city faster? It seems that surplus food is of no use, if not being rationed. The same with housing, enough is good. So do I have to assign my citizen to work a tile with high food resource/appeal? I try to assign my first citizen to a hill in order to get more stone for material. But rual poppulation just grow very slow.
    Do a tile with higher max worker(meaning more resource) grows faster? Or a tile with higher starting pop(meaning appeal+fresh water+food yield+food resource)?
    Last edited: Sep 30, 2018
  13. Gedemon

    Gedemon Modder Moderator

    Oct 4, 2004
    the whole population mechanism is linked together, I don't see how to split it into two mechanism at the same time for testing on a specific part of the game.

    but let's draft something...

    • still 5 population/social classes
      • Upper
      • Middle
      • Lower
      • Personnel
      • Slaves
    • X professions types linked to social classes, but not fixed (ie a profession could be linked to a different class depending on era, policies, government, etc...)
    • there could be an upgrade path in professions
      • Mason building recruits unskilled workforce as apprentice (lower class) then % converted to mason (middle classe) each turn, with an optional max ratio between apprentice/(skilled) mason
    • there could be an initial population "profession" based on classes, used for initial city spawning and population growth in each class
      • upper = educated workforce
      • middle = skilled workforce
      • lower = unskilled workforce
    • buildings could provide works for different "profession types", with recruiting/conversion/max ratios for each
    • we could use the "profession types" to define different types of "personnel"
      • Recruits
      • Sailors
      • Soldiers
      • Officers
    Knasp likes this.
  14. Knasp

    Knasp Warlord

    Sep 10, 2011
    I guess I was thinking about converting Personnel into Shipbuilders (resource) and Sailors, which would be stocked by City shipyard. And then experiment with mechanics regarding specialists and particularly naval research. But if it's the same amount of work, then it's a bad suggestion :)

    My point about replacing classes with professions was that you could go for a more open and dynamic wealth system. The wealth distribution in the population could depend on the common and uncommon professions, how much the groups produce and the demand for their products & services. Professions that require education, training and/or talent would be valued higher, which would mean a higher share of wealth. Especially since the majority of the population would have to stick with farming.

    My only objection would be to say that the Upper classes haven't historically been part of the workforce. The Aristocracy and other Elite groups have historically acted as Administrators, Soldiers, Priests, Landowners, Philosophers and so on, but that is to be seen as positions of power and priviledge, rather than paid "work". The size of the Upper class depends on the Civ's ability to produce surpluses and how these surpluses are distributed. The duties and priviledges of the Upper class are the results of culture, wealth and politics which have varied with time.

    So I'd say:
    Upper = special duties/activities
    Middle = educated and/or trained workforce
    Lower = uneducated workforce and farmers

    Regarding your military examples I'd suggest these classes:
    • Recruits (Lower-Middle class)
    • Sailors (Lower class)
    • Soldiers (Lower-Middle class, Slaves)
    • Officers (Upper class)
    • Slingers/Skirmishers (Lower class)
    • Hoplites - (Middle-Upper class)
    • Legionaries (Middle class)
    • Charioteers (Upper class)
    • Cavalry (Usually Upper class)
    • Mercenaries (Lower-Middle class)
    • Cadets (Upper class)
    • Pilots (Upper class)
    Last edited: Oct 9, 2018
    Gedemon likes this.
  15. Knasp

    Knasp Warlord

    Sep 10, 2011
    Spoiler Professions list :

    Here are some suggestions for professions:

    Wheat, Rice, Banana, Cotton, Cinnamon, Citrus, Cloves, Cocoa, Cocoa, Coffee, Dyes, Grapes (for Wine), Incense, Olives, Spices, Sugar, Tea, Tobacco - Farmers/Laborers
    Sheep, Cattle, Horses - Pastoralists
    Horses, Furs, Deer, Ivory, Truffles - Hunters
    Fish, Crabs, Turtles - Fishermen
    Whales - Whalers/Fishermen
    Pearls - Divers/Slaves
    Silk - Silk farmers?
    Salt - Laborers/Slaves (sea-salt)
    Copper, Diamonds, Gypsum, Iron, Jade, Marble, Mercury, Niter, Rock-salt, Silver, Stone, Uranium - Miners/Slaves
    Aluminum - Miners
    Coal - Miners
    Oil - Laborer / Oil worker

    Wheat, Rice - Millers/Bakers/Brewers?
    Cattle, Sheep, Horses - Leather workers?
    Cotton - Clothmakers/Weavers
    Dyes - Dyers/Clothmakers
    Grapes - Winemakers
    Sugar - Sugarmakers
    Sheep, Cattle, Horses - Butchers/Skinners
    Horses - Horse breeders, Grooms?
    Pearls - Jewelers?
    Silk - Clothmakers? Silk workers?
    Metals - Metal worker
    Jade - Jade carvers? Jewelers?
    Marble - Stoneworker
    Last edited: Oct 9, 2018
    Gedemon likes this.
  16. Gedemon

    Gedemon Modder Moderator

    Oct 4, 2004
    Actually it would be more work if we did that before re coding population as resource, as we'd have to re do the code to convert personnel and the code done with the mechanism in relation to research would have to be converted to handle the new population mechanism...

    What I could do first is to implement a list of work types then determine available jobs from building/resources and current production and output that in the logs or UI so we could have a first look at numbers before doing any coding on the population itself.

    At the same time we can think on how the player could affect those numbers using buildings, policies, government.

    I may need to implement something to allow some kind of per city policies or a way to remove/disable existing buildings (all that using fake buildings)

    It would then be a good time to work on an AI in relation to production selection in a city for human's optional automation and helping the AI players.
  17. Gedemon

    Gedemon Modder Moderator

    Oct 4, 2004
    I've put some thought on how to present the data for population and profession, and I'm afraid that we're trying to bite off more than we can chew (more specifically what our CPU will be able to chew during a game's turn)

    Here is a possible data formatting that I think I would need for the code/features I'd like to link to it:
             <Row PopulationClass="POPULATION_CLASS_UPPER" />
             <Row PopulationClass="POPULATION_CLASS_MIDDLE" />
             <Row PopulationClass="POPULATION_CLASS_LOWER" />
             <Row PopulationClass="POPULATION_CLASS_SLAVE" />
             <Row PopulationClass="POPULATION_CLASS_PERSONNEL" />
             <Row PopulationClass="POPULATION_CLASS_PRISONERS" />
             <Row PopulationType="POPULATION_UPPER"            />
             <Row PopulationType="POPULATION_MIDDLE"        />
             <Row PopulationType="POPULATION_LOWER"            />
             <Row PopulationType="POPULATION_SLAVE"            />
             <!-- The table can be filled automatically for all generic professions types as the ones below
             <Row PopulationType="POPULATION_FARMER"        />
             <Row PopulationType="POPULATION_MINER"            />
             <Row PopulationType="POPULATION_MILLER"        />
             <Row PopulationType="PROFESSION_METAL_WORKER"    />
             <!-- Except "Specialists" -->
             <Row PopulationType="POPULATION_BLACKSMITH"     />
             <Row PopulationType="POPULATION_LAND_OWNER"     />
             <Row ProfessionType="PROFESSION_FARMER"        />
             <Row ProfessionType="PROFESSION_MINER"            />
             <Row ProfessionType="PROFESSION_MILLER"        />
             <Row ProfessionType="PROFESSION_BAKER"            />
             <Row ProfessionType="PROFESSION_METAL_WORKER"    />
             <Row ProfessionType="PROFESSION_MASON"            />
             <Row ProfessionType="PROFESSION_BAKER"         TechnologyType="TECH_POTTERY"            />
             <Row ProfessionType="PROFESSION_MINER"         TechnologyType="TECH_MINING"            />
             <Row ProfessionType="PROFESSION_MASON"         TechnologyType="TECH_MINING"            />
             <Row ProfessionType="PROFESSION_METAL_WORKER"    TechnologyType="TECH_BRONZE_WORKING"    />
             <Row ProfessionType="PROFESSION_METAL_WORKER"    TechnologyType="TECH_IRON_WORKING"        />
             <Row ProfessionType="PROFESSION_FARMER"     PopulationType="POPULATION_LAND_OWNER"    Level="3"    Ratio="0.001" />
             <Row ProfessionType="PROFESSION_FARMER"     PopulationType="POPULATION_UPPER"        Level="3"    />
             <Row ProfessionType="PROFESSION_FARMER"     PopulationType="POPULATION_FARMER"        Level="1"    />
             <Row ProfessionType="PROFESSION_FARMER"     PopulationType="POPULATION_LOWER"        Level="1"    />
             <Row ProfessionType="PROFESSION_FARMER"     PopulationType="POPULATION_SLAVE"        Level="0"    />
             <Row ProfessionType="PROFESSION_MINER"     PopulationType="POPULATION_LAND_OWNER"    Level="3"    Ratio="0.001"    />
             <Row ProfessionType="PROFESSION_MINER"     PopulationType="POPULATION_UPPER"        Level="3"    />
             <Row ProfessionType="PROFESSION_MINER"     PopulationType="POPULATION_MINER"        Level="1"    />
             <Row ProfessionType="PROFESSION_MINER"     PopulationType="POPULATION_LOWER"        Level="1"    />
             <Row ProfessionType="PROFESSION_MINER"     PopulationType="POPULATION_SLAVE"        Level="0"    />
             <Row ProfessionType="PROFESSION_MILLER"    PopulationType="POPULATION_MILLER"        Level="1"    />
             <Row ProfessionType="PROFESSION_MILLER"     PopulationType="POPULATION_LOWER"        Level="1"    />
             <Row ProfessionType="PROFESSION_BAKER"     PopulationType="POPULATION_BAKER"        Level="1"    />
             <Row ProfessionType="PROFESSION_BAKER"     PopulationType="POPULATION_LOWER"        Level="1"    />
             <Row ProfessionType="PROFESSION_MASON"     PopulationType="PROFESSION_MASON"        Level="1"    />
             <Row ProfessionType="PROFESSION_MASON"     PopulationType="POPULATION_LOWER"        Level="1"    />
             <Row ProfessionType="PROFESSION_METAL_WORKER"    PopulationType="POPULATION_BLACKSMITH"        Level="3"    />
             <Row ProfessionType="PROFESSION_METAL_WORKER"     PopulationType="POPULATION_METAL_WORKER"    Level="2"    />
             <Row ProfessionType="PROFESSION_METAL_WORKER"     PopulationType="POPULATION_MIDDLE"            Level="2"    />
         Keep EmploymentSize in <Buildings> to represent TotalEmploymentSize
         To allow multiple professions in a building, with a max EmploymentSize per profession and a max total EmploymentSize for the building
             <Row BuildingType="BUILDING_CENTRAL_SQUARE"     ProfessionType="PROFESSION_MILLER"    EmploymentSize="0.10"/>
             <Row BuildingType="BUILDING_CENTRAL_SQUARE"     ProfessionType="PROFESSION_BAKER"    EmploymentSize="0.10"/>
         Add EmploymentSize in <Resources> to represent TotalEmploymentSize
         To allow multiple professions working a resource, with a max EmploymentSize per profession and a max total EmploymentSize for the resource extraction/collection
         EmploymentSize should be optionnal here and just link a profession to a resource refinement in a building (in that case the building determine the EmploymentSize)
             <Row ResourceType="RESOURCE_STONE"     ProfessionType="PROFESSION_MINER"    EmploymentSize="1.00"/>
             <Row ResourceType="RESOURCE_IRON"         ProfessionType="PROFESSION_MINER"    EmploymentSize="1.00"/>
             <Row ResourceType="RESOURCE_COPPER"     ProfessionType="PROFESSION_MINER"    EmploymentSize="1.00"/>
             <Row ResourceType="RESOURCE_STONE"     ProfessionType="PROFESSION_MASON"            />
             <Row ResourceType="RESOURCE_IRON"         ProfessionType="PROFESSION_METAL_WORKER"    />
             <Row ResourceType="RESOURCE_COPPER"     ProfessionType="PROFESSION_METAL_WORKER"    />
             <Row ResourceType="RESOURCE_WHEAT"     ProfessionType="PROFESSION_FARMER"    EmploymentSize="1.00"/>
             <Row ResourceType="RESOURCE_RICE"         ProfessionType="PROFESSION_FARMER"    EmploymentSize="1.00"/>
             <Row ResourceType="RESOURCE_WHEAT"     ProfessionType="PROFESSION_BAKER"            />
             <Row ResourceType="RESOURCE_WHEAT"     ProfessionType="PROFESSION_MILLER"            />
             <Row ResourceType="RESOURCE_RICE"         ProfessionType="PROFESSION_MILLER"            />
         Add EmploymentSize in <Improvements> to represent TotalEmploymentSize
         To allow multiple professions working in an improvement, with a max EmploymentSize per profession and a max total EmploymentSize for the improvement
             <Row ImprovementType="IMPROVEMENT_QUARRY" ProfessionType="PROFESSION_MINER"    EmploymentSize="2.00"/>
    And that's only partial data for 6 professions, 1 building and 5 resources, imagine the full thing. And there are a few links for functionality that I'm still unsure on how to represent in the tables (effects from policies/government come to mind)

    Still I like the idea of multiple professions, and I think that linking them to wealth based on each industry production/supply is possible, but I'm very suspicious about the possibility of splitting the population into types related to profession and manage pull/push factor for migration on that level.

    Maybe I could manage something lighter for getting specialists out of population for a research mechanism TBD, but really "out", not linked to "normal" migration after that, a bit like the way "personnel" are taken out of the current population, doesn't have "needs" (but still consume food), doesn't migrate based on push/pull (but can be transferred as a part of the resource mechanism) and are not represented on each of the map's plots.
  18. Knasp

    Knasp Warlord

    Sep 10, 2011
    I've been thinking a lot about how professions and research could work and I still don't have an easy, fully-formed proposal. When I start to think about population and professions, my mind keeps wandering to what I believe should be the foundations, which is related to food production and consumption. I'm replying in this thread since my suggestions below have more to do with this thread, than the Research thread. So here are some suggestions on how to lay the foundations for professions:

    1. Divide population into professions. The initial population will be assigned professions as to cover their need for food from all available sources. The food yield of each* plot will determine which particular food-profession that is assigned (and incidentally the max population that can be settled on that plot, unless distributed surplus food from elsewhere).

    2. Whenever there is a surplus of food, people can be converted to other Professions. Either direct conversion, alternatively a share of population growth (newborns) can be assigned other Professions than 'food-collectors'. The share of pop growth that ends up in the food-professions is limited by the current maximum landuse. Basically, a plot cannot have more Farmers than there is land suitable to farm, yet there's always space for other professions. In general there should be a maximum amount of food that can be extracted, though this upper limit could be modified by agricultural innovations (like Fertilizer).

    3. If there's a lack of food on a plot, people will be converted to food-producers if able, otherwise they will emigrate.
    If there's lack of food in a city (despite rationing and trade), starting with lower class urban pop, people will starve/emigrate until there's a food surplus again.
    Last edited: Oct 11, 2018

Share This Page