diff --git a/src/laws.c b/src/laws.c index e42015151..69f2e90fe 100755 --- a/src/laws.c +++ b/src/laws.c @@ -676,6 +676,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", 1); + 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 < 50) && 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; @@ -743,34 +776,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)); - } - /* 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 (r->land && (peasants < 50) && 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); - } - } - } + 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,