summaryrefslogtreecommitdiff
path: root/src/town_cmd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/town_cmd.cpp')
-rw-r--r--src/town_cmd.cpp43
1 files changed, 25 insertions, 18 deletions
diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp
index ba2166fe8..13d32d24e 100644
--- a/src/town_cmd.cpp
+++ b/src/town_cmd.cpp
@@ -363,11 +363,11 @@ static void TileLoop_Town(TileIndex tile)
_current_player = OWNER_TOWN;
if (hs->building_flags & BUILDING_HAS_1_TILE && HASBIT(t->flags12, TOWN_IS_FUNDED) && CanDeleteHouse(tile) && --t->time_until_rebuild == 0) {
- t->time_until_rebuild = GB(r, 16, 6) + 130;
+ t->time_until_rebuild = GB(r, 16, 8) + 192;
ClearTownHouse(t, tile);
- /* rebuild with another house? */
+ /* Rebuild with another house? */
if (GB(r, 24, 8) >= 12) DoBuildTownHouse(t, tile);
}
@@ -1662,7 +1662,7 @@ static void UpdateTownGrowRate(Town *t)
{
int n;
Station *st;
- byte m;
+ uint16 m;
Player *p;
/* Reset player ratings if they're low */
@@ -1687,22 +1687,21 @@ static void UpdateTownGrowRate(Town *t)
}
CLRBIT(t->flags12, TOWN_IS_FUNDED);
+ if (_patches.town_growth_rate == 0) return;
+
+ /** Towns are processed every TOWN_GROWTH_FREQUENCY ticks, and this is the
+ * number of times towns are processed before a new building is built. */
+ static const uint16 _grow_count_values[2][6] = {
+ { 120, 120, 120, 100, 80, 60 }, ///< Fund new buildings has been activated
+ { 320, 420, 300, 220, 160, 100 } ///< Normal values
+ };
if (t->fund_buildings_months != 0) {
- static const byte _grow_count_values[6] = {
- 60, 60, 60, 50, 40, 30
- };
- m = _grow_count_values[min(n, 5)];
+ m = _grow_count_values[0][min(n, 5)];
t->fund_buildings_months--;
- } else if (n == 0) {
- m = 160;
- if (!CHANCE16(1, 12))
- return;
} else {
- static const byte _grow_count_values[5] = {
- 210, 150, 110, 80, 50
- };
- m = _grow_count_values[min(n, 5) - 1];
+ m = _grow_count_values[1][min(n, 5)];
+ if (n == 0 && !CHANCE16(1, 12)) return;
}
if (_opt.landscape == LT_ARCTIC) {
@@ -1713,6 +1712,9 @@ static void UpdateTownGrowRate(Town *t)
return;
}
+ m >>= (_patches.town_growth_rate - 1);
+ if (_patches.larger_towns != 0 && (t->index % _patches.larger_towns) == 0) m /= 2;
+
t->growth_rate = m / (t->num_houses / 50 + 1);
if (m <= t->grow_counter)
t->grow_counter = m;
@@ -1957,9 +1959,14 @@ static const SaveLoad _town_desc[] = {
SLE_VAR(Town, new_act_food, SLE_UINT16),
SLE_VAR(Town, new_act_water, SLE_UINT16),
- SLE_VAR(Town, time_until_rebuild, SLE_UINT8),
- SLE_VAR(Town, grow_counter, SLE_UINT8),
- SLE_VAR(Town, growth_rate, SLE_UINT8),
+ SLE_CONDVAR(Town, time_until_rebuild, SLE_UINT8, 0, 53),
+ SLE_CONDVAR(Town, grow_counter, SLE_UINT8, 0, 53),
+ SLE_CONDVAR(Town, growth_rate, SLE_UINT8, 0, 53),
+
+ SLE_CONDVAR(Town, time_until_rebuild, SLE_UINT16, 54, SL_MAX_VERSION),
+ SLE_CONDVAR(Town, grow_counter, SLE_UINT16, 54, SL_MAX_VERSION),
+ SLE_CONDVAR(Town, growth_rate, SLE_INT16, 54, SL_MAX_VERSION),
+
SLE_VAR(Town, fund_buildings_months, SLE_UINT8),
SLE_VAR(Town, road_build_months, SLE_UINT8),