From dfca22804469bb22400631ff2d2b870c63d77ede Mon Sep 17 00:00:00 2001 From: Marko Lindqvist Date: Tue, 11 Jul 2023 04:00:52 +0300 Subject: [PATCH 23/23] Add effect type "Upkeep_Waste_Pct" See osdn #48294 Signed-off-by: Marko Lindqvist --- ai/default/daieffects.c | 1 + common/city.c | 21 ++++++++++++--------- common/effects.h | 22 ++++++++++++---------- doc/README.effects | 3 +++ 4 files changed, 28 insertions(+), 19 deletions(-) diff --git a/ai/default/daieffects.c b/ai/default/daieffects.c index 09336d5ff1..10b747d076 100644 --- a/ai/default/daieffects.c +++ b/ai/default/daieffects.c @@ -190,6 +190,7 @@ adv_want dai_effect_value(struct player *pplayer, case EFT_OUTPUT_WASTE_BY_DISTANCE: case EFT_OUTPUT_WASTE_BY_REL_DISTANCE: case EFT_OUTPUT_WASTE_PCT: + case EFT_SURPLUS_WASTE_PCT: case EFT_SURPLUS_WASTE_PCT_BY_REL_DISTANCE: case EFT_SPECIALIST_OUTPUT: case EFT_ENEMY_CITIZEN_UNHAPPY_PCT: diff --git a/common/city.c b/common/city.c index 2365c54ee2..9706a34ed7 100644 --- a/common/city.c +++ b/common/city.c @@ -2407,9 +2407,10 @@ static void set_surpluses(struct city *pcity) /* Add 'surplus' waste to 'usage'. */ if (surplus > 0) { + struct output_type *output = get_output_type(o); + int waste_level = get_city_output_bonus(pcity, output, EFT_SURPLUS_WASTE_PCT); int waste_by_rel_dist - = get_city_output_bonus(pcity, get_output_type(o), - EFT_SURPLUS_WASTE_PCT_BY_REL_DISTANCE); + = get_city_output_bonus(pcity, output, EFT_SURPLUS_WASTE_PCT_BY_REL_DISTANCE); if (waste_by_rel_dist > 0) { int min_dist; @@ -2417,16 +2418,18 @@ static void set_surpluses(struct city *pcity) if (gov_center == NULL) { /* No gov center - no income */ - pcity->usage[o] = pcity->prod[o]; + waste_level = 100; } else { - int waste_level = waste_by_rel_dist * 50 * min_dist / 100 + waste_level += waste_by_rel_dist * 50 * min_dist / 100 / MAX(NATIVE_WIDTH, NATIVE_HEIGHT); + } + } - if (waste_level < 100) { - pcity->usage[o] += (surplus * waste_level / 100); - } else { - pcity->usage[o] = pcity->prod[o]; - } + if (waste_level > 0) { + if (waste_level < 100) { + pcity->usage[o] += (surplus * waste_level / 100); + } else { + pcity->usage[o] = pcity->prod[o]; } } } diff --git a/common/effects.h b/common/effects.h index 686140ce4f..8075de0ec3 100644 --- a/common/effects.h +++ b/common/effects.h @@ -336,17 +336,19 @@ struct multiplier; #define SPECENUM_VALUE135NAME "Health_Pct" #define SPECENUM_VALUE136 EFT_ACTIVITY_TIME #define SPECENUM_VALUE136NAME "Activity_Time" -#define SPECENUM_VALUE137 EFT_SURPLUS_WASTE_PCT_BY_REL_DISTANCE -#define SPECENUM_VALUE137NAME "Surplus_Waste_Pct_By_Rel_Distance" +#define SPECENUM_VALUE137 EFT_SURPLUS_WASTE_PCT +#define SPECENUM_VALUE137NAME "Surplus_Waste_Pct" +#define SPECENUM_VALUE138 EFT_SURPLUS_WASTE_PCT_BY_REL_DISTANCE +#define SPECENUM_VALUE138NAME "Surplus_Waste_Pct_By_Rel_Distance" /* Ruleset specific effects for use from Lua scripts */ -#define SPECENUM_VALUE138 EFT_USER_EFFECT_1 -#define SPECENUM_VALUE138NAME "User_Effect_1" -#define SPECENUM_VALUE139 EFT_USER_EFFECT_2 -#define SPECENUM_VALUE139NAME "User_Effect_2" -#define SPECENUM_VALUE140 EFT_USER_EFFECT_3 -#define SPECENUM_VALUE140NAME "User_Effect_3" -#define SPECENUM_VALUE141 EFT_USER_EFFECT_4 -#define SPECENUM_VALUE141NAME "User_Effect_4" +#define SPECENUM_VALUE139 EFT_USER_EFFECT_1 +#define SPECENUM_VALUE139NAME "User_Effect_1" +#define SPECENUM_VALUE140 EFT_USER_EFFECT_2 +#define SPECENUM_VALUE140NAME "User_Effect_2" +#define SPECENUM_VALUE141 EFT_USER_EFFECT_3 +#define SPECENUM_VALUE141NAME "User_Effect_3" +#define SPECENUM_VALUE142 EFT_USER_EFFECT_4 +#define SPECENUM_VALUE142NAME "User_Effect_4" /* Keep this last */ #define SPECENUM_COUNT EFT_COUNT #include "specenum_gen.h" diff --git a/doc/README.effects b/doc/README.effects index 5792e53925..dcfe8184e9 100644 --- a/doc/README.effects +++ b/doc/README.effects @@ -646,6 +646,9 @@ Stealings_Ignore diplomats to steal tech multiple times from the same city, or make it easier for spies. +Surplus_Waste_Pct + Base waste from what otherwise would be the surplus. + Surplus_Waste_Pct_By_Rel_Distance City gets extra waste based on distance to nearest Government Center, relative to world size. This is a percentage calculated from what otherwise would -- 2.40.1