New Immigration

Kailric

Jack of All Trades
Joined
Mar 25, 2008
Messages
3,100
Location
Marooned, Y'isrumgone
I have this idea brewing in the back of my head and I wanted to write a bit to see if it can come out more. Immigration is such a cool part of Colonization and I feel like we can expand on it in cool ways.

We are still using the basic system from vanilla, but...

At the moment players start out from land and until you discover a village immigrants come from "a far". I am thinking that we cut the initial immigrants that come from unknown distant lands and make it so they can only come from native villages. This would encourage exploration and also making friends with your neighbors.

Then when players build a certain level of Dock they can start to get Immigrants from around the 7 seas. The types of immigrants will be determined by the types of Trade Routes you have discovered. Like some immigrants would be unlocked when you discover the Spice Route.

This would give two options for receiving immigrants. And you would have new Civics/Buildings/etc that increase the frequency/types/costs of immigrants.

This would add more things for the player to unlock and could be fun doing it. This is just some initial ideas, but they seem to be promising, any thoughts?
 
First of all, this sounds like long time planning and not something for the next release.

I see some potential in this, but it has to be done right. I'm not sure blocking off immigration is the way to go. If you happen to start on a small island with no native villages, then you would be screwed. The game needs to be somewhat balanced for whatever the random map generator can through at us.

We could make it so that native villages unlocks experts or something like that. Like in order to get expert farmers, you need to get in touch with a farming native. Perhaps each village adds some "expert points" for one or more experts and the random unit selector then uses the sum of those points to figure out what the next unit will be. Perhaps the village should supply more points if it's in the same plotgroup as your capital (connected by road).

It needs to be fully configurable by xml. That way it can be tweaked and only test balance and not both balance and new code.
 
Aren't converted native immigrants already generated from there by missions? If you want to beef that up, could let a Civeffect unlock a new mission immigrant unitclass , such as the specialist unitclass trained by that village.
 
I thought a bit about this and I think it could be interesting to add a cross discount, meaning the better contact you have with the outside world, the easier it is to attract people.

To avoid making this overpowered, it should have diminishing benefits from adding more and more villages. Say we cap at 40% and each village provides 10% of the remaining bonus. That way it will work like this:

# villages|discount
1|4%
2|7.6%
3|10.8%
4|13.8%
5|16.4%
10|26%
20|35.1%
30|38.3%
I'm not saying this should be the numbers (the numbers should be in xml anyway and easily changeable). Perhaps we could do something similar regarding chance of getting an expert or something. Also villages in the same plotgroup as your capital could count as 2 or 3 villages to encourage spreading your road network.

Alternatively the native players count as an immigration screen of their own. We could debate how to add crosses in such a case, but trade could speed it up. Same plotgroup as well. Multiplier for difference in tech level (people move to the place where they have all the new gadgets, which makes life easier). Rather than creating a new unit, this approach could steal a unit from the other player, which means they will have less units if war breaks out.

Aren't converted native immigrants already generated from there by missions? If you want to beef that up, could let a Civeffect unlock a new mission immigrant unitclass , such as the specialist unitclass trained by that village.
We are talking about two different features. Kailric is talking about units gained from crosses.
 
I'm not sure blocking off immigration is the way to go. If you happen to start on a small island with no native villages, then you would be screwed. The game needs to be somewhat balanced for whatever the random map generator can through at us.

Being on a small island you would have easier access to building docks, therefore you can gain immigrants that way. We could say the ocean is its own plot group so that if you build a docks and start exploring any villages you discover on the coast would be connected to your docks and therefore will be able to attract immigrants.

Also, since initial immigrants may be cut off, we could give more emphasis on growing your own population at the start of the game. As you mentioned "diminishing returns", growth this would could start out fast, but then get slower as your city grows... that way players will be inclined to put efforts into gaining immigrants as well.

Hmm, diminishing returns this way would have to be based on something other than a city's population as you could just eject the unit and start growing at the fast rate once again. It could be based on your total population or each city keeps track of how many units it has grown and automatically starts to diminish returns after each one no matter where the unit goes. This would eventually reach the point where it is now, so like 200 units of food for growth is the max ever.
 
The other side of growth being less effective than immigration is the quality of the unit you get, so you only get the most basic minimally effective unit from growth (barring civic choices) so the diminishing return is the need to spend a long time teaching and training these units rather than getting a potentially fully trained immigrant.

I think starting on an isolated tiny isalnd is already kind of 'unfair' anyway, I don't think changing the immigration situation would massively change that fact. If you are unlucky to start in that rare case, then you either accept the challenge to rise to greatness against all odds, or restart on a new map.
 
A cool way to have diminishing returns to growth would be to bring back a system similar to city Healthiness/Unhealthiness :)health:/:yuck:) in base Civ4, where higher local population (and some industrial buildings/Professions) add to the Unhealthiness score :yuck:, which acts as a brake on Food growth unless offset by Health points :health: produced by other civic buildings (Aqueduct etc). In M:C this could be done with a single abstract (non-stored) Yield in each city, which could be called Squalor in medieval mods similar to the Total War games, or Pollution in more modern mods, and let health-producing buildings produce negative Squalor points for their city. The easiest way to apply it would be to let Squalor apply a penalty to local Food growth as it does in Civ4, but you could also let it have moddable effects using Civeffects, and it could be used as an EventTrigger to make Events pertaining to the Black Death or other plagues, etc :science::king::science:
 
I think starting on an isolated tiny isalnd is already kind of 'unfair' anyway, I don't think changing the immigration situation would massively change that fact.
That's like saying "it's ok to run over that guy, because he has already been hit by another car". The fact that there could be an issue already doesn't mean it's ok to make it worse. Instead it would be ok to figure out something to even out the issue.

A cool way to have diminishing returns to growth would be to bring back a system similar to city Healthiness/Unhealthiness :)health:/:yuck:) in base Civ4, where higher local population (and some industrial buildings/Professions) add to the Unhealthiness score :yuck:, which acts as a brake on Food growth unless offset by Health points :health: produced by other civic buildings (Aqueduct etc). In M:C this could be done with a single abstract (non-stored) Yield in each city, which could be called Squalor in medieval mods similar to the Total War games, or Pollution in more modern mods, and let health-producing buildings produce negative Squalor points for their city. The easiest way to apply it would be to let Squalor apply a penalty to local Food growth as it does in Civ4, but you could also let it have moddable effects using Civeffects, and it could be used as an EventTrigger to make Events pertaining to the Black Death or other plagues, etc :science::king::science:
RaR tried to add health issues for growing cities. Personally I think it hurts the gameplay rather than to add to it, though it might be a question of implementation. It's hit hard by int divisions meaning 1 cross/turn - 1% from health = 0. If we are to do this, we first needs to store fractional yields like we talked about earlier.

This is getting off topic. This thread is about native villages and immigration, not yield production modifiers.
 
Well the solution to the problem would be including something that stops you being spawned on a tiny island, like a min land tiles or something. (If you don't like the idea of increased dificulty for tiny island starts, which are extremely rare anyway and the whole game concept is mostly geared against it being a good starting point as all you get is food.) (another solution may be incresing the food output of basic coastal tiles to make them generally more valuable.)

The fact is starting on a tiny island would be hard, it is hard, simply for all the reasons that starting on a tiny island is hard in real life/history. Like I said it is not fair, but it is a fact of starting on an island you are isolated with limited access to resources. As a player you either accept the unique challenge or restart. An Island would not have people wandering up as immigrants.

To put it as a black mark against a concept would be like saying you saved the guys life who got run over, but it is a complete failure of medical science because we didn't save his foot which was crushed beyond all recognition. (To use an over the top example in kind.) :p
 
Well the solution to the problem would be including something that stops you being spawned on a tiny island, like a min land tiles or something.
Easy solution: "plotgroups" for land. They spread like routes, except they check if the land is not mountain and not water. That way we can just ask it for the number of member plots and we know the size.

If we expand a bit further on this concept, it means each island will have a unique ID. Trying to move a unit from A to B would logically start with checks for "is land unit" and "is on same land ID". This is an instant check (relatively speaking in pathfinding CPU time) and if it detects a land unit, which is on a different island, then we know there is no point in trying to find a path, because we know there is none. This would speed up the game, particularly the AI. Naturally it wouldn't affect games on one big continent, but col2071 would have a bunch of equally sized planets, which in this context would be islands.

There are some issues, like what if it is two islands, which are connected by a mountain, which only certain land units can pass? There are some details to work out, but overall this could be a significant performance improvement. It's not something I will implement right away though. We need to finish what we are doing first.
 
Actually in vanilla there is also a concept called "Area" which defines separate islands / continents. I'm not sure what variable name this uses in DLL, but in CIV4BonusInfos.xml, the tag <bArea> makes a Bonus only appear on one continent per map; in old 2071 I used this to let some plant and animal Bonuses be endemic to one planet. :scan::science: (Although, with aquatic planets there would need to be a separate DOMAIN_SPACE for Deep Space between planets and have Areas separated by this instead of TERRAIN_WATER). I don't think it checks for Peaks but occurrence of landmasses linked only by a Peak tile would be pretty rare.

If you want to avoid island starts, the Mapscript generator could count the size of land area a player spawns on and attempt to respawn if it's smaller than a cutoff. However there can be issues with people trying to spawn large # of civs per map when the map simply doesn't have enough good places for them.

In base Civ4, there were Buildings that could use this to apply their effect to all cities on that continent (that's another thing that would be kinda cool to have back from Civ4).
 
Actually in vanilla there is also a concept called "Area" which defines separate islands / continents.
:wallbash:
Yeah that feature exist already. The question is if does what I would like it to do, but tweaking it and/or examining it to get complete picture of how precisely it can be exploited.

I don't think it checks for Peaks but occurrence of landmasses linked only by a Peak tile would be pretty rare.
I tried it a few times in RaR and civ4. It depends on the map generator and we should consider it. We could mod area spreading (I think) if we need to do so.

However there can be issues with people trying to spawn large # of civs per map when the map simply doesn't have enough good places for them.
We already have issues with that and when it happens, the game crashes while placing players. That's the reason for semi-random crashes when generating new maps. It's kind of tricky to do anything about, at least not without spending lots of time on the problem.

In base Civ4, there were Buildings that could use this to apply their effect to all cities on that continent (that's another thing that would be kinda cool to have back from Civ4).
What should it do and why wouldn't plotgroups be good enough to spread something like this?

We could add support for random events saying area X gets +10% production of yield Y for a few turns :think:
Or area X is hit by an earthquake and all cities risk losing buildings and units risk getting damage.
 
The building Continent system in question was used for things like Power Station Wonders, (Is it the Hoover Dam?) that provided power to every city on the same continent.

I think Plot groups is actually a refined version of this more basic/broad idea, or perhaps it is a tangent of it....

The only instance it would not work would be if ports connected plot groups across water/continents, so it might have to be an idea of plot group land and plot group sea, or some other kind of break/split, so that you could represent 'trade/people' style connections and 'planetary' style connections in the case of 2071, so that you can have a system that only affects 1 planet.

That <barea> system sounds interesting, that would be cool for the 'continent resources' idea I had for WHM that meant each continent had a couple of specialised resources to increase trade/conquest/exchange. Perhaps an advanced version that lets you set areas in the XML like <barea>
<iarea>AREA_A<iarea>

etc.

On the matter of crash for not enough space for players, would it not be possible to add some kind of a break in the mapscript initialising (or some such) that pops an error message saying 'not enough space for players' that then perhaps can tell the code to just proceed without the extra players. or at the very least lets the player know that the reason it crashed is just a rare math snaffu that shouldn't happen if they restart.
 
Yeah that sounds right, I think Plotgroups would work fine for triggering an effect to all cities in a local area.

One complication is that Plotgroup membership can change frequently whereas Area would not. So it would have to be a permanent effect applied once on initiation to all linked cities; or else make a system that frequently checks to apply an effect to all linked cities while removing it whenever a city becomes unlinked, which seems too complex to be worth it :p Perhaps the most straightforward thing would be to add a tag <bAllInPlotGroup> to EventInfos.xml , which could apply the Event to all cities in the same Plotgroup as the triggered <PickCity>.

If PlotGroups do start having more of a game effect, a useful viewing feature would be a Domestic Advisor tab that lists cities stratified by Plotgroup membership, with a line between different groups.
 
The only instance it would not work would be if ports connected plot groups across water/continents, so it might have to be an idea of plot group land and plot group sea, or some other kind of break/split, so that you could represent 'trade/people' style connections and 'planetary' style connections in the case of 2071, so that you can have a system that only affects 1 planet.
The easy answer is that currently the plotgroups only spread across routes, meaning they can only be on land, which makes them work on one area only. However assuming we can have multi area plotgroups, the answer is simple: check for same plotgroup and same area. It will be comparing two ints instead of one, but so be it.

Thinking about multi area plotgroups, one possible solution would be to place a route on water, like ferries. If we make them cost like 20 moves (for land units), the AI would view them as plots where it can move one plot/turn as moving once eats up all the moves. This means land transports can move freely using the automation and you can use the normal pathfinder to send people between the islands. Suddenly that 2 plot island off the coast with the 3 fish looks more attractive.

One addition is if we take water transports and place them on the route and give them a certain order (like fortify). That will jam the ship, in place, but it will add the cargo slots to the route. No more units can be on the route than available cargo slots in ships placed on the route. I was first thinking something like placing the route, then make ships sail between both ends and transports units, but that sounds somewhat tricky to code, at least together with the pathfinder. I still wouldn't rule out that could be done. The moving ship solution would be the most ideal though as it restricts the ferry line to jus the player with the ships on it, yet open borders can allow two players to have ships on the same line. Perhaps a new diplomatic agreement could be to open your ferries to another player.
 
that's probably a lot of work for something that is very rare in occurrence and probably minor in effect..

The first solution of being able to make a ferry improvement on coastal tiles is probably the better of the two as it can just be added as a route improvement without any extra work. Like the bridge mod, that was added to fttw.
 
Top Bottom