TTDTownGrowth

From TTWiki
Revision as of 19:11, 12 June 2011 by Orudge (talk | contribs) (2 revisions)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

How towns grow in regular TTD

TTD Town Growth

How towns grow in regular TTD

This is very technical, and only required if you want to fine-tune your town growth. Otherwise, you can skip over this and the next section.

The basic time unit in TTD is a "tick".  In the following, it will be used to describe how often something happens.  A tick of  the simulation engine takes ca. 27 ms, if your computer is fast enough, otherwise it takes as long as necessary.  One TTD day is ca. 74 ticks, which is about 2 seconds  of real time on fast enough computers.

The "expansion state" of a town is determined by two fields in town  structure: bit 0 in the word at the offset 0x12 (I'll call it the  -+growth_flag+-) and the byte at 0x0A (-+idle_countdown+-):

||-+growth_flag+-   |-+idle_countdown+-   |state

0 |any |blocked

1 |0 |expanding

1 |nonzero |idle||

Town status update (including expansion) is performed on every tick in a  round-robin fashion; since the town array can hold 70 entries, the main  town status update procedure is called every 70 ticks for each town.  If  the town is blocked, nothing happens.  If it's idle, -+idle_countdown+- is  decremented.  If it's expanding, an attempt to place a new building or a  piece of road (or a bridge) is taken; if it succeeds, the expansion  state is changed to idle by setting -+idle_countdown+- to the byte at 0x39,  from now on referred to as -+growth_delay+- (extension of an existing road usually  doesn't change the state to idle). Therefore, -+growth_delay+-  determines how often the town will be in the expanding state, and thus  is the inverse growth rate of the town.  Smaller values of -+growth_delay+-  mean faster growth.

-+growth_delay+- is reset each month, and depends on the number of "active" stations within town's transport zone as follows:

||number of |-+growth_delay+-

"active" stations   |normal |funded<nowiki>[1]</nowiki> |funded<nowiki>[2]</nowiki>

  0         |   160 <nowiki>[3]</nowiki> |  60      |   60

  1         |   210     |  60      |   60

  2         |   150     |  60      |   60

  3         |   110     |  60      |   50

  4         |   80      |  60      |   40

  5 or more |   11 <nowiki>[4]</nowiki>  |  60      |   30||

Footnotes:

||<nowiki>[1]</nowiki> |When a town building fund is active (i.e., up to 3 months after using the "Fund new buildings" option).

<nowiki>[2]</nowiki> |When a town building fund is active and "towngrowthratemode" is set to 1.

<nowiki>[3]</nowiki> |In this case the town is blocked with a 11/12 probability, so the effective mean -+growth_delay+- is 1920.

<nowiki>[4]</nowiki> |This is a bug in TTD (array overrun).  TTDPatch now fixes this if any of "generalfixes", "towngrowthratemode"  or "towngrowthlimit" is active. If "towngrowthratemode" is 0 or off, -+growth_delay+- is set to 80 (which seems to be the original programmer's intention); if "towngrowthratemode" is 1, it's set to 55.||

Apart from the random blocking in the case <nowiki>[3]</nowiki>, town growth is also blocked:

  • in the sub-arctic climate, if the central tile of the town is above  the snow line, and no food has been delivered to the town in the last month;
  • in the sub-tropical climate, if the central tile of the town is in  desert, and no food or no water has been delivered to the town in the last  month.

The switches townminpopulationsnow and townminpopulationdesert  may be used to prevent blocking of towns with population less than some threshold, so they get a chance to grow enough to accept food.

If "largertowns" is active, -+growth_delay+- is halved for selected towns, making them grow twice as fast  (except in the case <nowiki>[3]</nowiki> above, so transport is still necessary to  make towns grow; this is different if "towngrowthratemode" is 2,  as explained in the next section).

A station is "active" if any cargo has been picked up or accepted there  within the last 50 days.  The type of cargo is irrelevant, so if there's  a coal mine in the middle of a town and you're picking up coal there, it  will contribute to the growth of the town.  This also means that many  single-facility stations make a town grow faster than one multi-facility station, as long as  they're serviced regularly.

The town's transport zone is a circular area around the town's central  tile.  Its radius (in tiles) is a function of the number of town  buildings as follows:

||number of town buildings    | radius of transport zone

 0--3                |2

4--7                |4

 8--11               |5

12--15              |6

 16--19              |7

 20--35              |8

 36--71              |9

72 or more          |0||

Notice the last row.  If there are more than 71 town buildings, the  transport zone vanishes and stations no longer contribute to the growth.  However, if "towngrowthlimit" is enabled, TTDPatch changes this by extrapolating the  function for larger values.

Also note that the internal number of buildings may be incorrect  in games save under old versions of TTDPatch or without TTDPatch, due to the bugs  mentioned in General Fixes.  However, this is not a big problem since TTDPatch  recalculates these numbers (and populations) if the extended town data are enabled  (see More Town Statistics) and the game without those data is loaded,  and all the new town growth switches do enable the extended town data.

The function called if a town is in the expanding state starts by  searching for a piece of road in the vicinity  of town's centre.  If no road is found, an attempt is made to create it.  If a road piece is found, the function randomly `walks' along the roads trying  to find a place to create a new house, or possibly branch out a new street  or extend an existing one.   Normally, this walk is limited  to 20 steps (where a tunnel counts as one step), which limits the maximum  possible extents of a town.  The "towngrowthlimit" switch modifies this value.

Regardless of all the town growth processing mentioned above, each town  building's status is updated periodically (every 256 ticks).  This includes construction progress and "production" of passengers and  mail.  If the town the building belongs to is not blocked, this also  includes destroying the building (and, with 61/64 probability,  immediately building a new one in its place) at random intervals.  This process  is not controlled by -+growth_delay+- or any of the new town growth switches,  althought is does indirectly affect the growth of a town.