Template:Actual Age

From RimWorld Wiki
Revision as of 14:35, 30 September 2021 by Cheldra (talk | contribs) (→‎Explanation: added a graph to help illustrate how growth works)
Jump to navigation Jump to search

Returns the actual age at which an animal will reach a life stage age listed in its def files.

Parameters

  • adult_age - this has to be the adult_age listed in the animal's def xml, or seen in the in-game information window
  • juvenile_age - if a second parameter is given, the number returned will be the actual juvenile age. This number must be found from the defs files.

Formula used

actual_juvenile_age = (1-1/e^(juvenile_age/adult_age))×adult_age

actual_adult_age = (1-1/e)×adult_age

Explanation

If the values from the defs files were to be believed as-is, you would expect to see (0.3333-0.25)*60 = 5 days of juvenile stage for horses. However, the time they actually spend in game as a juvenile is only about 2 days. This method accurately predicts this.

The reason for this weirdness is because the amount the growth stat increases each tick is proportional to 1/ticks_to_adulthood, where ticks_to_adulthood is simply the difference between the ticks since birth and the def file's adult_age expressed in ticks. The consequence of growth updating this way is that initially, the growth stat will increase slowly, and then as the animal ages, it increases faster, with an infinite growth rate when it's at the def file's adult_age.

A baby animal becomes a juvenile as soon as its growth exceeds juvenile_age/adult_age. For example, horses have a reported juvenile age of 0.2, and a reported adult age of 0.3333, so they become a juvenile when their growth is 0.2/0.3333 = 0.75.

Maths

with 1 = {sum from t=1 to actual_ticks_to_adulthood: 1/(adult_age_expressed_in_ticks - t)},
actual_ticks_to_adulthood trends to (1-1/e)×adult_age_expressed_in_ticks as adult_age_expressed_in_ticks trends to infinity
with (juvenile_age/adult_age) = {sum from t=1 to actual_ticks_to_juvenile: 1/(adult_age_expressed_in_ticks - t)},
actual_ticks_to_juvenile trends to (1-1/e^(juvenile_age/adult_age))×adult_age_expressed_in_ticks as the adult_age_expressed_in_ticks trends to infinity

Example uses

  • Horse adult: {{Actual Age|0.3333}} -> 0.21068578097385
  • Horse juvenile: {{Actual Age|0.3333|0.25}} -> 0.17587203545609
  • Fox juvenile: {{Actual Age|0.3333|0.1}} -> 0.086392694342281