diff --git a/src/kernel/region.c b/src/kernel/region.c index 6fade14fc..abe75fba3 100644 --- a/src/kernel/region.c +++ b/src/kernel/region.c @@ -1102,6 +1102,31 @@ void init_region(region *r) } } +static void reset_herbs(region *r) { + const item_type *itype = NULL; + if (r->terrain->herbs) { + int len = 0; + while (r->terrain->herbs[len]) + ++len; + if (len) + itype = r->terrain->herbs[rng_int() % len]; + } + if (itype != NULL) { + rsetherbtype(r, itype); + rsetherbs(r, 50 + rng_int() % 31); + } + else { + rsetherbtype(r, NULL); + } + + if (rng_int() % 100 < 3) { + fset(r, RF_MALLORN); + } + else { + freset(r, RF_MALLORN); + } +} + /* Resourcen loeschen, die im aktuellen terrain nicht (mehr) vorkommen koennen */ static void reset_rawmaterials(region *r) { const terrain_type * terrain = r->terrain; @@ -1208,28 +1233,7 @@ static void create_land(region *r) { nb = NULL; } - const item_type *itype = NULL; - if (r->terrain->herbs) { - int len = 0; - while (r->terrain->herbs[len]) - ++len; - if (len) - itype = r->terrain->herbs[rng_int() % len]; - } - if (itype != NULL) { - rsetherbtype(r, itype); - rsetherbs(r, 50 + rng_int() % 31); - } - else { - rsetherbtype(r, NULL); - } - - if (rng_int() % 100 < 3) { - fset(r, RF_MALLORN); - } - else { - freset(r, RF_MALLORN); - } + reset_herbs(r); } void terraform_region(region * r, const terrain_type * terrain) @@ -1238,6 +1242,7 @@ void terraform_region(region * r, const terrain_type * terrain) assert(terrain); r->terrain = terrain; + reset_herbs(r); reset_rawmaterials(r); terraform_resources(r); diff --git a/src/kernel/region.h b/src/kernel/region.h index 9a7563712..30cee9029 100644 --- a/src/kernel/region.h +++ b/src/kernel/region.h @@ -188,7 +188,7 @@ extern "C" { #define rbuildings(r) ((r)->buildings) -#define rherbtype(r) ((r)->land?(r)->land->herbtype:0) +#define rherbtype(r) ((r)->land?(r)->land->herbtype:NULL) bool r_isforest(const struct region *r);