the3dfxdude / 7kaa

Seven Kingdoms: Ancient Adversaries - Go to the main source repository at https://sourceforge.net/projects/skfans/ for source code and builds
https://7kfans.com
Other
253 stars 71 forks source link

Feature Request: Prevent migrating peasants from abandoning towns. #243

Closed tmr83 closed 1 year ago

tmr83 commented 2 years ago

Hello,

would it be easy to implement and acceptable to prevent one's own peasants from abandoning towns when migrating to another one of your towns?

I was playing a game in which I was mostly destroyed except for a surviving king and some inns. I started building up again at a natural resource that had things in the way, so I created a few towns to build around them in an organized way. My peasants decided that they all wanted to move to one town and abandoned the towns I wanted founded.

the3dfxdude commented 2 years ago

Are you asking about disabling this game design feature? Or want to know how to stop it in game? The way to stop the emigration is to give them a job. Your subjects can be picky if they have nothing to do or no goods to consume. I don't see this happen very often. But I guess it is more likely when you are creating a bunch of junk towns. But even then... I guess lets just treat it as a game play balancing feature.

tmr83 commented 2 years ago

I am asking about disabling it. I already know how to stop it: closing the links to the firms.

In the given example, I didn't have a bunch of "junk" towns. I had four peasants in four towns, all linked to a mine, factory, and market, so they had jobs and goods to buy. I created the three additional towns to allow easier expansion of my population while being linked to the market.

the3dfxdude commented 2 years ago

There is no in game option to disable emigration entirely.

Ok, this is firm migration of workers not peasants. You are saying that towns are emptying out completely because of this. I have not seen this. Migration is very rare in all the games I've played. I still am not sure if I agree that these towns are actually that useful if this is happening. I'd like to know how this is happening in more detail. But I guess that the issue is that you were practically destroyed and trying to create a wall of new towns with few people. The simulated people in the game aren't supposed to just accept that ;) But since you can restrict them already, why do we need to add another option?

Also, I always have had bad things happening spreading out my population so thin... so I don't think it makes much sense as a game play strategy anyway.

J-Moravec commented 2 years ago

Ok, this is firm migration of workers not peasants. You are saying that towns are emptying out completely because of this. I have not seen this. Migration is very rare in all the games I've played.

Migration is common in games I play, it tends to be quite often annoying and a lot of time needs to be spent on properly distributing people again and again. Even when they have theoretically the same access to services.

This is both migration of workers and migration of peasants inside a kingdom, not between kingdoms.

If all you build is a single-town bases, this might not happen often. But once you build multi-town bases, grow, and concentrate your population more, this will almost surely happen multiple times per game.

All in all, the migration between allied towns just doesn't take in account the population density in a negative way. More often than not, all my population from neighbouring towns migrate into 60-pop towns, which can't grow as a result of that. This is a serious gameplay issue.

the3dfxdude commented 2 years ago

If all you build is a single-town bases, this might not happen often. But once you build multi-town bases, grow, and concentrate your population more, this will almost surely happen multiple times per game.

I have certainly done plenty of multi-town bases. It is also clear to me the devs anticipated very dense layouts and migration is intended. I have rarely seen migration in medium sized multi-town bases.

All in all, the migration between allied towns just doesn't take in account the population density in a negative way. More often than not, all my population from neighbouring towns migrate into 60-pop towns, which can't grow as a result of that. This is a serious gameplay issue.

We might need to consider whether coalescing populations were intended as part of simulating civilian/town behavior or there was a flaw in implementing it. Flaws have been found in other features. It just needs to be proven that certain behavior was likely not intended. Your description is more of the opposite end of things. It always has been required micro to be splitting towns to achieve more growth. Even the AI does splitting. I'm not sure if I agree that we should promote even faster growth by making it easier. I don't see how migration that is intended would be a game play issue, but making growth easier to obtain could actually be a negative in terms of overall game play.

J-Moravec commented 2 years ago

It is also clear to me the devs anticipated very dense layouts and migration is intended. I have rarely seen migration in medium sized multi-town bases.

This almost never happened in the original game. So not sure about the intent. Also, please provide evidence that devs anticipated very dense base layouts. with a large number of densely packed towns. AI does not play like this at all. In fact, it plays in direct contrast to that, with a single central town and radially placed buildings.

It always has been required micro to be splitting towns to achieve growth.

That's a news to me. I thought that population growth is directly proportional to the size of the population, all else being equal. So a group of small towns would have the same population growth as a single larger town. Thus no micro is required other than removing pop from size 60 towns, given that 60 is the max size.

I'm not sure if I agree that we should promote even faster growth by making it easier. I don't see how migration that is intended would be a game play issue, but making growth easier to obtain could actually be a negative in terms of overall game play.

Imagine if instead of soldiers being paid automatically, you have to rely on giving them tributes to keep their loyalty. This won't add anything to the game. Automigration is overeager and causes a useless micro. Tweaking the migration to a more sensible state would be beneficial. I am all for making city management more interesting, but moving people back after they moved because of a small difference in the quality of life due to one city having 2 more workers than the other city is not something I like to do in my games. It is not interesting, it is not fun, it is just useless micro.

I am all for making cities more permanent fixture, with abandoned towns being something more negative, with mixed villages being a more thing that player has to count with (possibly with an assimilation mechanics), with population transfer being more difficult (paradoxically, the sequel made transferring whole villages easy with caravans). But then we are getting into a different game, a user-made expansion perhaps (like with Augustus and Julius for C3).

the3dfxdude commented 2 years ago

I am not creating straw man arguments. Pop growth has natural counter balances in the game already, this is why they limited the towns to 60. They designed into the code dense linking for dense layouts. The AI does split towns and does not have to do it repeatedly. Migration is an implemented feature. Now prove with a test case or with analysis of the think_migrate() code what are the reasons for repeated migration if it is happening. No more theoretical talk. I have not had to keep resplitting people into towns so I question what is the actual reason here for what you say happens.

tmr83 commented 2 years ago

There is no in game option to disable emigration entirely.

Ok, this is firm migration of workers not peasants. You are saying that towns are emptying out completely because of this. I have not seen this. Migration is very rare in all the games I've played. I still am not sure if I agree that these towns are actually that useful if this is happening. I'd like to know how this is happening in more detail. But I guess that the issue is that you were practically destroyed and trying to create a wall of new towns with few people. The simulated people in the game aren't supposed to just accept that ;) But since you can restrict them already, why do we need to add another option?

Also, I always have had bad things happening spreading out my population so thin... so I don't think it makes much sense as a game play strategy anyway.

I apologize if I am interrupting something.

I'm not asking to completely disable emigration, but I see benefit in that as well. I just want to disallow abandoning towns I specifically wanted founded. I tried to recreate the situation in a new game because I no longer have the other save. This is basically how my base was setup:

image

As you can see, I did not build a wall of towns. Oddly, my workers chose not to emigrate in this early game as opposed the game in which I was almost destroyed. Why do we need to add another option? Because closing all the links is annoying / cumbersome.

the3dfxdude commented 2 years ago

Well the issue is not present there. I guess the trigger that caused it in the other game has not been reached.

lennyhans commented 2 years ago

About the original issue, I think that could be more accurate to announce if it is visible to the player, for example, if there is fog of war or is just unexplored it should not be announced because seems not desirable that other can know what happen on some place. Maybe add a delay if a caravan or spy pass over there so it can be spread like a rumor.

So instead of remove it, enhance it.

the3dfxdude commented 2 years ago

Yes, I like to enhance the game if a feature isn't working as one would expect. I will probably construct some scenarios like tmr83's example, and then change the parameters to trigger the action, since it was not obviously reproducible just based on close proximity. I'll try to get back to working on the game soon, cause there is still quite a wishlist of things to get into the game.

I don't think I've seen any issue with the News code though...

the3dfxdude commented 1 year ago

I studied the situation and know the code in question. This situation is very unusual in that these seem to be identical towns under the same nation. The only thing that would trigger a migration is if the loyalty is too low, then a penalty is applied on staying put in the same town but not the destination town. Because these are identical towns, this does not make sense, because loyalty should not matter in the long run. And after moving to the new town, the same thing could be applied in reverse, so the whole thing is pointless.

The reason why it wasn't immediately reproducible, was because tmr83's situation was based on a collapse happening just before this, which impacted loyalty of his people. Understanding this should prove what happened, and why it's not very likely except that this condition exists.

Worker migration should be based on attractiveness of the town, and loyalty shouldn't solely apply. Therefore I decided, that this as a feature should work better. I applied checks on the loyalty, primarily that the target town should be above "really want to migrate" loyalty, and making sure there seems to be more than a simple difference between the towns. This should reject this odd case and still largely leave the intent of the code in place. 032e94630b52d359b4bb8495a7ec8f1282e9baac

So I hope you understand this was not really what we would expect for migrating and that tossing it as a case is enough. That being said, I really think migrating is a gameplay feature not really explored that could be fun when done right. It really fits the theme of the game's design.