Add very and extremely slow options to town growth rate setting
This commit is contained in:
@@ -1727,6 +1727,8 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_64X :64x
|
|||||||
STR_CONFIG_SETTING_ZOOM_LVL_OUT_128X :128x
|
STR_CONFIG_SETTING_ZOOM_LVL_OUT_128X :128x
|
||||||
STR_CONFIG_SETTING_TOWN_GROWTH :Town growth speed: {STRING2}
|
STR_CONFIG_SETTING_TOWN_GROWTH :Town growth speed: {STRING2}
|
||||||
STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Speed of town growth
|
STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Speed of town growth
|
||||||
|
STR_CONFIG_SETTING_TOWN_GROWTH_EXTREME_SLOW :Extremely slow
|
||||||
|
STR_CONFIG_SETTING_TOWN_GROWTH_VERY_SLOW :Very slow
|
||||||
STR_CONFIG_SETTING_TOWN_GROWTH_NONE :None
|
STR_CONFIG_SETTING_TOWN_GROWTH_NONE :None
|
||||||
STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Slow
|
STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Slow
|
||||||
STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Normal
|
STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Normal
|
||||||
|
@@ -77,6 +77,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
|
|||||||
{ XSLFI_CUSTOM_BRIDGE_HEADS, XSCF_NULL, 1, 1, "custom_bridge_heads", NULL, NULL, NULL },
|
{ XSLFI_CUSTOM_BRIDGE_HEADS, XSCF_NULL, 1, 1, "custom_bridge_heads", NULL, NULL, NULL },
|
||||||
{ XSLFI_CHUNNEL, XSCF_NULL, 1, 1, "chunnel", NULL, NULL, "TUNN" },
|
{ XSLFI_CHUNNEL, XSCF_NULL, 1, 1, "chunnel", NULL, NULL, "TUNN" },
|
||||||
{ XSLFI_SCHEDULED_DISPATCH, XSCF_NULL, 1, 1, "scheduled_dispatch", NULL, NULL, NULL },
|
{ XSLFI_SCHEDULED_DISPATCH, XSCF_NULL, 1, 1, "scheduled_dispatch", NULL, NULL, NULL },
|
||||||
|
{ XSLFI_MORE_TOWN_GROWTH_RATES, XSCF_NULL, 1, 1, "more_town_growth_rates", NULL, NULL, NULL },
|
||||||
{ XSLFI_NULL, XSCF_NULL, 0, 0, NULL, NULL, NULL, NULL },// This is the end marker
|
{ XSLFI_NULL, XSCF_NULL, 0, 0, NULL, NULL, NULL, NULL },// This is the end marker
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -51,6 +51,7 @@ enum SlXvFeatureIndex {
|
|||||||
XSLFI_CUSTOM_BRIDGE_HEADS, ///< Custom bridge heads
|
XSLFI_CUSTOM_BRIDGE_HEADS, ///< Custom bridge heads
|
||||||
XSLFI_CHUNNEL, ///< Tunnels under water (channel tunnel)
|
XSLFI_CHUNNEL, ///< Tunnels under water (channel tunnel)
|
||||||
XSLFI_SCHEDULED_DISPATCH, ///< Scheduled vehicle dispatching
|
XSLFI_SCHEDULED_DISPATCH, ///< Scheduled vehicle dispatching
|
||||||
|
XSLFI_MORE_TOWN_GROWTH_RATES, ///< More town growth rates
|
||||||
|
|
||||||
XSLFI_RIFF_HEADER_60_BIT, ///< Size field in RIFF chunk header is 60 bit
|
XSLFI_RIFF_HEADER_60_BIT, ///< Size field in RIFF chunk header is 60 bit
|
||||||
XSLFI_HEIGHT_8_BIT, ///< Map tile height is 8 bit instead of 4 bit, but savegame version may be before this became true in trunk
|
XSLFI_HEIGHT_8_BIT, ///< Map tile height is 8 bit instead of 4 bit, but savegame version may be before this became true in trunk
|
||||||
|
@@ -1445,6 +1445,21 @@ static bool UpdateClientConfigValues(int32 p1)
|
|||||||
|
|
||||||
/* End - Callback Functions */
|
/* End - Callback Functions */
|
||||||
|
|
||||||
|
/* Begin - GUI order callbacks */
|
||||||
|
|
||||||
|
static int OrderTownGrowthRate(uint nth)
|
||||||
|
{
|
||||||
|
if (nth == 0) {
|
||||||
|
return 0;
|
||||||
|
} else if (nth <= 2) {
|
||||||
|
return nth - 3;
|
||||||
|
} else {
|
||||||
|
return nth - 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* End - GUI order callbacks */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepare for reading and old diff_custom by zero-ing the memory.
|
* Prepare for reading and old diff_custom by zero-ing the memory.
|
||||||
*/
|
*/
|
||||||
|
@@ -540,7 +540,7 @@ struct EconomySettings {
|
|||||||
bool give_money; ///< allow giving other companies money
|
bool give_money; ///< allow giving other companies money
|
||||||
bool mod_road_rebuild; ///< roadworks remove unnecessary RoadBits
|
bool mod_road_rebuild; ///< roadworks remove unnecessary RoadBits
|
||||||
bool multiple_industry_per_town; ///< allow many industries of the same type per town
|
bool multiple_industry_per_town; ///< allow many industries of the same type per town
|
||||||
uint8 town_growth_rate; ///< town growth rate
|
int8 town_growth_rate; ///< town growth rate
|
||||||
uint8 larger_towns; ///< the number of cities to build. These start off larger and grow twice as fast
|
uint8 larger_towns; ///< the number of cities to build. These start off larger and grow twice as fast
|
||||||
uint8 initial_city_size; ///< multiplier for the initial size of the cities compared to towns
|
uint8 initial_city_size; ///< multiplier for the initial size of the cities compared to towns
|
||||||
TownLayoutByte town_layout; ///< select town layout, @see TownLayout
|
TownLayoutByte town_layout; ///< select town layout, @see TownLayout
|
||||||
|
@@ -61,6 +61,8 @@ static bool CheckSharingAir(int32 p1);
|
|||||||
|
|
||||||
/* Begin - GUI order callbacks */
|
/* Begin - GUI order callbacks */
|
||||||
|
|
||||||
|
static int OrderTownGrowthRate(uint nth);
|
||||||
|
|
||||||
/* End - GUI order callbacks */
|
/* End - GUI order callbacks */
|
||||||
|
|
||||||
/* Some settings do not need to be synchronised when playing in multiplayer.
|
/* Some settings do not need to be synchronised when playing in multiplayer.
|
||||||
@@ -1738,15 +1740,16 @@ extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
|
|||||||
[SDT_VAR]
|
[SDT_VAR]
|
||||||
base = GameSettings
|
base = GameSettings
|
||||||
var = economy.town_growth_rate
|
var = economy.town_growth_rate
|
||||||
type = SLE_UINT8
|
type = SLE_INT8
|
||||||
from = 54
|
from = 54
|
||||||
guiflags = SGF_MULTISTRING
|
guiflags = SGF_MULTISTRING
|
||||||
def = 2
|
def = 2
|
||||||
min = 0
|
min = -2
|
||||||
max = 4
|
max = 4
|
||||||
str = STR_CONFIG_SETTING_TOWN_GROWTH
|
str = STR_CONFIG_SETTING_TOWN_GROWTH
|
||||||
strhelp = STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT
|
strhelp = STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT
|
||||||
strval = STR_CONFIG_SETTING_TOWN_GROWTH_NONE
|
strval = STR_CONFIG_SETTING_TOWN_GROWTH_EXTREME_SLOW
|
||||||
|
orderproc = OrderTownGrowthRate
|
||||||
|
|
||||||
[SDT_VAR]
|
[SDT_VAR]
|
||||||
base = GameSettings
|
base = GameSettings
|
||||||
|
@@ -3389,9 +3389,20 @@ static void UpdateTownGrowRate(Town *t)
|
|||||||
|
|
||||||
/* Use the normal growth rate values if new buildings have been funded in
|
/* Use the normal growth rate values if new buildings have been funded in
|
||||||
* this town and the growth rate is set to none. */
|
* this town and the growth rate is set to none. */
|
||||||
uint growth_multiplier = _settings_game.economy.town_growth_rate != 0 ? _settings_game.economy.town_growth_rate - 1 : 1;
|
int growth_multiplier;
|
||||||
|
if (_settings_game.economy.town_growth_rate == 0) {
|
||||||
|
growth_multiplier = 1;
|
||||||
|
} else if (_settings_game.economy.town_growth_rate > 0) {
|
||||||
|
growth_multiplier = _settings_game.economy.town_growth_rate - 1;
|
||||||
|
} else {
|
||||||
|
growth_multiplier = _settings_game.economy.town_growth_rate;
|
||||||
|
}
|
||||||
|
|
||||||
m >>= growth_multiplier;
|
if (growth_multiplier < 0) {
|
||||||
|
m <<= (-growth_multiplier);
|
||||||
|
} else {
|
||||||
|
m >>= growth_multiplier;
|
||||||
|
}
|
||||||
if (t->larger_town) m /= 2;
|
if (t->larger_town) m /= 2;
|
||||||
|
|
||||||
t->growth_rate = m / (t->cache.num_houses / 50 + 1);
|
t->growth_rate = m / (t->cache.num_houses / 50 + 1);
|
||||||
|
Reference in New Issue
Block a user