diff --git a/conf/e2/config.xml b/conf/e2/config.xml
index 51aaa133d..170621b48 100644
--- a/conf/e2/config.xml
+++ b/conf/e2/config.xml
@@ -103,6 +103,7 @@
+
diff --git a/src/laws.c b/src/laws.c
index 8caf22bca..6085f5f33 100755
--- a/src/laws.c
+++ b/src/laws.c
@@ -674,6 +674,39 @@ growing_herbs(region * r, const int current_season, const int last_weeks_season)
}
}
+void immigration(void)
+{
+ region *r;
+ log_info(" - Einwanderung...");
+ int repopulate=get_param_int(global.parameters, "rules.economy.repopulate_maximum", 90);
+ for (r = regions; r; r = r->next) {
+ if (r->land && r->land->newpeasants) {
+ int rp = rpeasants(r) + r->land->newpeasants;
+ rsetpeasants(r, _max(0, rp));
+ }
+ /* Genereate some (0-2 to 0-6 depending on the income) peasants out of nothing */
+ /*if less then 50 are in the region and there is space and no monster or deamon units in the region */
+ int peasants = rpeasants(r);
+ if (repopulate && r->land && (peasants < repopulate) && maxworkingpeasants(r) > (peasants+30)*2)
+ {
+ int badunit = 0;
+ unit *u;
+ for (u = r->units; u; u = u->next) {
+ if (!playerrace(u_race(u)) || u_race(u) == get_race(RC_DAEMON))
+ {
+ badunit = 1;
+ break;
+ }
+ }
+ if (badunit == 0)
+ {
+ peasants += (int)(rng_double()*(wage(r, NULL, NULL, turn) - 9));
+ rsetpeasants(r, peasants);
+ }
+ }
+ }
+}
+
void demographics(void)
{
region *r;
@@ -748,15 +781,7 @@ void demographics(void)
};
remove_empty_units();
-
- log_info(" - Einwanderung...");
- for (r = regions; r; r = r->next) {
- if (r->land && r->land->newpeasants) {
- int rp = rpeasants(r) + r->land->newpeasants;
- rsetpeasants(r, _max(0, rp));
- }
- }
-
+ immigration();
checkorders();
}
diff --git a/src/laws.h b/src/laws.h
index 5a7cd8024..f5209ac3f 100755
--- a/src/laws.h
+++ b/src/laws.h
@@ -34,6 +34,7 @@ extern "C" {
int writepasswd(void);
void demographics(void);
+ void immigration(void);
void update_guards(void);
void update_subscriptions(void);
void deliverMail(struct faction *f, struct region *r, struct unit *u,