diff -Nur -Xfreecivdiff.ignore freeciv-cvs/common/city.c freeciv-patched/common/city.c --- freeciv-cvs/common/city.c 2003-07-24 17:00:39.000000000 +0100 +++ freeciv-patched/common/city.c 2003-07-24 17:00:57.000000000 +0100 @@ -1776,6 +1776,7 @@ forcecontent = 0, forcehappy = 0; int makecontentpct = 100, forcecontentpct = 100; int makecontentmil = 0, makecontentmilper = 0; + int corruptadj = 0, corruptpct = 100; enum tile_special_type spec = map_get_special(pcity->x, pcity->y); enum tile_terrain_type terr = map_get_terrain(pcity->x, pcity->y); @@ -1869,6 +1870,10 @@ forcecontentpct = forcecontentpct * amount / 100; break; case EFT_FORCE_HAPPY: forcehappy += amount; break; + case EFT_CORRUPT_ADJ: + corruptadj += amount; break; + case EFT_CORRUPT_PCT: + corruptpct = corruptpct * amount / 100; break; case EFT_AIRLIFT: pcity->airlift = TRUE; break; default: @@ -1877,6 +1882,9 @@ } } city_effects_iterate_end; + pcity->corruptadj = corruptadj; + pcity->corruptpct = corruptpct; + /* Apply the multipliers to the bonuses (such that the bonuses are all summed first, and only then are the multipliers applied) */ tax_bonus = tax_bonus * tax_pct / 100; @@ -2363,7 +2371,7 @@ struct government *g = get_gov_pcity(pcity); struct city *capital; int dist; - int val, trade_penalty; + int val, trade_penalty, corruptadj; assert(game.notradesize < game.fulltradesize); if (pcity->size <= game.notradesize) { @@ -2393,8 +2401,10 @@ dist * g->corruption_distance_factor + g->extra_corruption_distance; val = trade * dist / g->corruption_modifier; - if (city_got_building(pcity, B_COURTHOUSE) || - city_got_building(pcity, B_PALACE)) val /= 2; + /* Add modifiers from generalised improvements */ + corruptadj = pcity->corruptadj * pcity->corruptpct / 100; + val = val * corruptadj / 100; + val *= g->corruption_level; val /= 100; val = CLIP(trade_penalty, val, trade); diff -Nur -Xfreecivdiff.ignore freeciv-cvs/common/city.h freeciv-patched/common/city.h --- freeciv-cvs/common/city.h 2003-07-24 17:00:25.000000000 +0100 +++ freeciv-patched/common/city.h 2003-07-24 17:00:57.000000000 +0100 @@ -244,6 +244,9 @@ struct tile_mod tile_add[CITY_MAP_SIZE][CITY_MAP_SIZE]; struct tile_mod tile_pct[CITY_MAP_SIZE][CITY_MAP_SIZE]; + /* corruption modifiers from city improvements */ + int corruptadj, corruptpct; + /* happiness modifiers from city improvements */ int makecontent, makehappy, forcecontent, forcehappy; int makecontentmil, makecontentmilper;