Complete.Org: Mailing Lists: Archives: freeciv-dev: April 2005:
[Freeciv-Dev] (PR#12906) RFC: rethinking "celebration" city growth
Home

[Freeciv-Dev] (PR#12906) RFC: rethinking "celebration" city growth

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
Subject: [Freeciv-Dev] (PR#12906) RFC: rethinking "celebration" city growth
From: "(Eddie Anderson)" <saywhat@xxxxxxxxxxxx>
Date: Tue, 26 Apr 2005 20:27:52 -0700
Reply-to: bugs@xxxxxxxxxxx

<URL: http://bugs.freeciv.org/Ticket/Display.html?id=12906 >

    Since there has recently been some discussion about celebration
growth (in relation to effects code), it might be a good time to
present this idea for consideration.  Here goes:

    For a long time, celebration city growth has seemed problematic
to me.  So, in this ticket, I want to present some ideas of how to
address those problems by making celebration growth work
differently.

    IMO, the problems with celebration growth are:

1) It is too powerful (i.e. it makes empire-wide city growth too
   easy).

2) Because of 1), it makes granaries almost worthless.

3) Because of the number of years per game turn, it is unrealistic
   after 1000AD (where are these additional people coming from when
   game turns are only 10 years long (or less)?).

    Point 3) may require some explanation.  As it is now,
celebration growth allows you to grow every city in your empire by
one population point on every turn while the celebration continues
(until a city's food production can no longer keep up).

    The main problem is realism.  When *every* city in an empire
grows at once, where are those new (adult) citizens coming from?

a) Reproduction?  It takes ~20 years or more to make a new adult
   citizen that way.

b) Immigration?  From where?  Are there corresponding cities
   somewhere else on the map that are losing city size through
   emigration (as your cities grow through immigration)?


    To address these problems, the idea that I've been toying with
is changing the "celebration growth" mechanism.  The idea is this:
Make celebration growth a zero sum operation within each empire.
I.e. if one of your cities grows by one size point (e.g. from 3 to
4), then another of cities will lose one size point (e.g. from 3 to
2).

    You're probably thinking, "Then why bother celebrating?".
Because some cities benefit more from growth than others.  And if
all cities can't grow equally (and magically) then you might want to
concentrate the growth in cities where it will do the most good.

    Consider that, in big pox games, production in large cities
benefits from economies of scale.  E.g. other things being equal,
universities, banks, etc. provide more additional science or gold
points in a large city than they do in a small city.  In fact, in a
small city, it is frequently not cost effective to build bank or
university at all.

    But what if a small city did not grow bigger for its own
benefit?  What if a small city grew so that it could supply new
citizens to a big city?  In effect, small cities could serve as
population supplier to a big cities (just like real life in the
industrial age).

    The celebration mechanism could allow a size 3 city to transfer
one of its population points per turn to a size 6 city (e.g. like a
citizen moving from Boise to Seattle).  After the transfer, Boise
would be size 2 and Seattle would be size 7.

    To help make this work in game terms, I've come up with some
other rules to go with the new model.  But there may well be some
hole in the logic that needs to be corrected; hence this RFC.  What
follows is a description of the rules followed by an example of how
they could be applied in a game.

    In the following descriptions I refer to cities as either
"suppliers" (e.g. Boise, Helena, Cheyenne) or "receivers" (e.g.
Seattle, Chicago).  Here are some of my ideas for the rules:

1) As under current rules, only happy cities are eligible to grow
   through celebration.

2) The supplier city must be at least half the size of the receiver
   city in order for a transfer to be possible.  E.g. a size 3 city
   cannot transfer a population point to a size 7 city.

3) On each turn of celebration, only one population point within the
   empire moves.  I.e. just one supplier city can transfer just
   one of its population points to a receiver city.  I.e. on
   any given turn only *one* city grows and only *one* city shrinks.

4) Which city "supplys" and which city "receives" on a given turn
   will be chosen either (I'm not sure which is best):

   a) at random (from among qualifying supplier city candidates to
      qualifying receiver cities)

   b) based on the supplier city's unhappiness level

   c) based on the receiver city's happiness level

   d) ?  (any suggestions?)


    Here's how I imagine it working.  Assume your empire has five
cities:

City name     size
---------     ----
Boise           4
Cheyenne        2
Helena          3
Seattle         6
Chicago        10

    Assume you want to grow Chicago and Seattle.  Both cities
already have universities.  In addition, Chicago has a bank and King
Richard's Crusade.

    Under these conditions it is likely that a extra citizen in
Chicago is likely to do the most good (i.e. additional shield
production, additional gold production, etc.).  But Seattle (because
it also has a university) would also likely generate more additional
science production with an extra citizen than any other city except
Chicago.

    You start by making Seattle happy (using Elvises, luxuries,
whatever).  Then, after rapturedelay+1 turns, Seattle gets one
population point from Helena.  Seattle is now size 7 and Helena is
now size 2.

    Next turn, Seattle gets one population point from Boise.
Seattle is now size 8 and Boise is now size 3.

    Now Seattle has grown as much as it can (because all the smaller
cities are less than half its size).  So set Seattle's happiness
level back to normal (force the Elvises to get real jobs :-)).

    Next, it is time to grow Chicago.  Only one city (Seattle) is
big enough to supply population to Chicago.  Make Chicago happy.
Over the next few turns, Seattle will feed population points to
Chicago as follows:

                          Chicago    Seattle
Before                      10          8
Celebration turn 1          11          7
Celebration turn 2          12          6
Celebration turn 3          13          5

    Now Seattle is no longer big enough to supply population to
Chicago.  So set Chicago's happiness level back to normal.

    Notice that Seattle (size 5) is now less than twice the size of
Boise (size 3).  That means that you can use use celebration growth
again in Seattle to move one of Boise's population points into
Seattle.

    In addition, while all this has been going on, Cheyenne may have
grown to size 3 - making it eligible to supply a population point to
Seattle.  Also, during these last 5 turns, Helena may have grown
back from size 2 to size 3 (if it has a granary and a food surplus
of +3 per turn).  That would make it eligible to contribute another
citizen to Seattle's population.


    I know all of this is complicated.  But it may be worth it
because of the problems it fixes:

1) It eliminates the "magic" growth that the current celebration
   growth model causes.

2) It mitigates the relatively high incremental cost of growing a
   large city through food accumulation.         

   (E.g. growing a size 16 city to size 17 takes a food surplus of
   170 bushels.  In contrast, growing a size 5 city to size 6 only
   takes 60.  But both cities only get one extra citizen's
   production as a result of that one point growth.)

3) It makes granaries useful again (e.g. as a way to speed up the
   replenishment of "supplier" cities).

4) It makes food production (and food caravans) more important (both
   as a way to build large cities and by creating the need to supply
   food for them (once they are too big to feed themselves)).

5) It paves the way for a MOO2-style specialists model.  By making
   it easier to grow very large cities, the benefits of extra
   specialists will multiply the effects of production bonuses (e.g.
   from universities, banks, research labs, stock markets, WoWs,
   etc.).  In particular, it will make it more practical to
   introduce new specialists and effects which are only available to
   very large cities (because more cities will be able to reach that
   size more easily).

6) It provides a cheaper way to reduce an unwanted city's
   population.  (I.e. its not necessary to build a Settler or starve
   the city until it gets down to size 1).


    As I said, this is just an idea that I've been kicking around in
my head.  I'm nowhere near the stage of trying to write code for it.
However, I'm already to the point where I disable celebration growth
in the games I play.  IIRC, the AI won't use celebration growth if
rapturedelay is set to ~3 or more.

    One thing that will be needed is a way to teach the AI the
difference between a supplier city and a receiver city.  Also it
would need to know how to prioritize the roles (e.g. in the above
example when Seattle switched temporarily from receiver to
supplier while supplying Chicago).

    A city's ultimate role (as either supplier or receiver)
should probably derive from the same info that we use when choosing
a city site (i.e. How much food can this (potential) city site
supply?  How much trade?  How many shields?).  At this point I have
no idea how the AI chooses its city sites.

    Another issue is how do we keep bigger cities from feeding
smaller ones (e.g. Chicago citizens moving to Seattle).  Or maybe
we should allow that?  E.g. if Chicago is unhappy and Seattle is
happy, then citizens in Chicago might be tempted to move from
Chicago to Seattle.

    If so, that would be one way of reducing the population of a
city that grew too large for its own good.  As it is now, you have
to starve the city or build a Settler in order to reduce its
population.  It seems to me that it would be less disruptive to able
to just let one citizen move out of the overgrown city.

    Please post comments, criticisms, etc. to the list.

-Eddie





[Prev in Thread] Current Thread [Next in Thread]
  • [Freeciv-Dev] (PR#12906) RFC: rethinking "celebration" city growth, (Eddie Anderson) <=