Complete.Org: Mailing Lists: Archives: freeciv-dev: September 2002:
[Freeciv-Dev] Re: city_incite_cost
Home

[Freeciv-Dev] Re: city_incite_cost

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
To: freeciv-dev@xxxxxxxxxxx
Subject: [Freeciv-Dev] Re: city_incite_cost
From: "Per I. Mathisen" <per@xxxxxxxxxxx>
Date: Wed, 25 Sep 2002 17:21:30 +0000 (GMT)

On Wed, 25 Sep 2002, Thomas Strub wrote:
> i think that the city_incite_cost for cities with units, buildings and
> wonders in it is to cheap.
>
> My approach for city_value is not final, so feel free to upgrade it.

I intend to change this function to

        int city_incite_cost(pplayer, pcity)

and remove pcity->incite_revolt_cost before adding the AI diplomats patch,
in order to get some code consistency. This means moving the
half-price-if-previously-your-city check into this function.

Anyway, back to your patch.

   if (city_got_building(pcity, B_PALACE)) {
     pcity->incite_revolt_cost = INCITE_IMPOSSIBLE_COST;

I think INCITE_IMPOSSIBLE_COST should be changed to -1, so that bugs
dealing with it don't get hidden but properly blow up in our faces.

Anyway, another digression.

   } else {
-    pcity->incite_revolt_cost = city_owner(pcity)->economic.gold + 1000;
+    goldfactor = city_owner(pcity)->economic.gold + 1000;
+    goldfactor *= pcity->size;

Instead of size, I would like to multiply by the number of happy people in
the city times two. So it gets harder to bribe happy cities, which makes
sense, I think. Also this multiplication should be moved down to right
before the distance division, so that it affects everything in the city.

     pcity->incite_revolt_cost /= (dist + 3);

This should be moved down, so that all costs are divided by dist. We
should retain the rule that incite costs go down dramatically as we
approach the empire's periphery. This is an important civ mechanic, and
one which makes a lot of sense.

IMHO, this and the size multiplication provide the balance that the other
factors should be adjusted by. No factor should be added to the cost
unadjusted.

+    unit_list_iterate(pcity->units_supported, punit) {
+      city_value += unit_type(punit)->build_cost/2;
+    } unit_list_iterate_end;
+
+    unit_list_iterate(map_get_tile(pcity->x,pcity->y)->units,punit){
+      city_value += unit_type(punit)->build_cost/2;
+    } unit_list_iterate_end;

I think we should choose here which one of these we want to use. Both is
overkill. I think I would go for units actually in the city, since they
make it harder to revolt, while units away from the city contribute
unhappiness, the very in-game reason behind revolt.

+    built_impr_iterate(pcity, i) {
+      if (!is_wonder(i)) {
+        city_value += improvement_value(i)/2;

For non-ICS games, ouch. Divide at least by 4.

+      } else {
+        city_value += improvement_value(i);

It will be almost impossible to bribe a wondercity then. Maybe that is a
good thing, though. Or halve this by two.

+    pcity->incite_revolt_cost += city_value*4;

???!!

Have you tried this patch? What kind of values do you get? Can you give
some examples of costs for various cities?

Yours
Per

"I don't see why people are so upset about cloning sheep. American
television networks have been doing that to their audiences for years."
-- Jello Biafra



[Prev in Thread] Current Thread [Next in Thread]