v50 Steam/Premium information for editors
  • v50 information can now be added to pages in the main namespace. v0.47 information can still be found in the DF2014 namespace. See here for more details on the new versioning policy.
  • Use this page to report any issues related to the migration.
This notice may be cached—the current version can be found here.

Temperature

From Dwarf Fortress Wiki
Revision as of 22:46, 21 December 2024 by DPhKraken (talk | contribs) (→‎Temperature transfer: Token linkage)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
This article is about the current version of DF.
Note that some content may still need to be updated.

For temperature as it relates to choosing an embarkation site, see Climate.
Temp preview.png

Temperature - by definition - is a measurable quantity that represents how hot or cold a given area or object is. Temperature is also a very large element in the climate of an area, or more specifically, a biome. In both Dwarf Fortress and real life, there are two units to measure temperature, although the game uses a made-up, unique additional unit. The real life units are Celsius (°C), and Kelvin (K); other units, such as Réaumur (°r, °Re, or °Ré), Fahrenheit (°F) or Rankine (°R or °Ra) have been proposed and occasionally used. While the unique unit used by the game has no definite name, the designation "Urist" (°U) is used throughout this wiki and the community to reduce confusion.

Adventure mode

In adventure mode, the temperature of the player character's surroundings is always displayed in the top-right corner. Being near elements and creatures that affect temperature (for example, being near a fire man) will also alter the temperature reading:
Temperatures preview.png

Temperature scale

Temperatures in Dwarf Fortress are measured in the game's own, unnamed temperature scale, since termed "degrees Urist" by the community. Temperatures in Dwarf Fortress are stored as sixteen-bit unsigned integers, which translates into a minimum value of 0 °U and a technical maximum of 65535 °U (216-1), although this is internally limited to 60000 °U, as 60001 °U is used for temperatures which have been set to NONE. Floating point values are not considered, and when they appear, any decimals are either sheared off or rounded away by the game. For example, the number 2999.999, would be rounded to 3000. Urists are scaled logically against the Fahrenheit scale, so conversions are non-intuitive:

[URIST] = [CELSIUS] * 9/5 + 10000
   [KELVIN] * 9/5 + 9508.33
   [FAHRENHEIT] + 9968
   [RANKINE] + 9508.33

According to Toady One in a Future of the Fortress post, the temperature scale used in the advanced worldgen settings is related to regular degrees Urist by the equation "local temp = world temp * 0.75 + 10000". This scale doesn't seem to be used anywhere else in the game.

Some reference numbers:

Significance DF Scale worldgen Celsius (°C) Kelvin Fahrenheit (°F) Rankine (°Ra)
Boiling point of water 10180 240 100°C 373.15K 212°F 671.67°Ra
Human body temperature 10067* 89.3 37°C 310.15K 98.6°F 558.27°Ra
Freezing point of water 10000 0 0°C 273.15K 32°F 491.67°Ra
Freezing point of ≈89% ABV 9850 -200 −83.3°C 189.816K −118°F 341.67°Ra
Absolute zero 9508* -656 −273.15°C 0K −459.67°F 0°Ra
Zero degrees Urist 0 -13333.3 −5555.5°C −5282.405K −9968°F −9508.33°Ra
Highest possible temperature 60000 66666.6 27777.7°C 28050.927K 50032°F 50491.67°Ra

Values designated with round have been rounded internally to avoid decimals: for instance, the human body temperature is technically 10066.6, but has been rounded up to 10067 °U in the raws. Also interesting is the fact that temperatures in Dwarf Fortress can go far, far below absolute zero, which is physically impossible; considering Dwarf Fortress also allows perpetual motion, sometimes it's best not to ask questions.

Values with an overline are truncated values with ending numbers that go on indefinitely, so a value of 45.738 is technically 45.738888888888- with the 8's going on indefinitely.

Urist asks... I'm a modder who needs to work with temperature conversions all the time. Is there any tool I can use to lessen the amount of work involved?

Temperature conversions are usually only useful when modding, and can be annoying to do manually; luckily a simple temperature conversion utility has been created for those who find themselves having to convert a lot of temperatures to and/or from degrees Urist often.

An online temperature conversion utility can be found at https://jose96xd.github.io/DF_Tools/Modules/TemperatureConverter.html

Examples of some temperatures encountered in Dwarf Fortress, the most important ones in bold:

Event / location Temperature
Alcohol freezes 9850 °U
Lowest survivable temperature 9900 °U
Outside, freezing climate (varies) 9960 °U
Underground, glacier ice 9990 °U
Water freezes 10000 °U
Nether-cap 10000 °U
Underground 10015 °U
Dwarf/human homeotherm 10067 °U
Tiles next to magma (warm stone) 10075 °U
Highest survivable temperature 10078 °U
Outside, scorching climate (varies) 10080 °U
Water boils 10180 °U
Ignition of organic materials 10508 °U
Wood fire (max) 10708 °U
Material is fire-safe 11000 °U
Common stone melts (varies) 11500 °U
Coal fire (max) 11640 °U
Magma 12000 °U
Material is magma-safe 12000 °U
Creatures made of flame/fire 14000 °U
Dragonfire 50000 °U

Material values

Temperature has important constraints on the materials in the game, and dictates a number of material properties related to states of matter and heat/cold damage. These are defined by material definition tokens in the material raw files, most of which use temperature as an input field:

  • [MELTING_POINT] — This is the temperature at which a liquid material will freeze, or a solid material will melt. In Dwarf Fortress the melting point and freezing point coincide exactly; this is contrary to many real-life materials, which can be supercooled.
  • [BOILING_POINT] — This is the temperature at which the material will boil or condense. Water boils at 10180 °U .
  • [IGNITE_POINT] — This is the temperature at which the material will catch fire.
  • [HEATDAM_POINT] — This is the temperature above which the material will begin to take heat damage. Burning items without a heat damage point (or with an exceptionally high one) will take damage very slowly, causing them to burn for a very long time (9 months and 16.8 days) before disappearing.
  • [COLDDAM_POINT] — This is the temperature below which the material will begin to take frost damage.
  • [SPEC_HEAT] — This determines how long it takes the material to heat up or cool down. A material with a high specific heat capacity will hold more heat and affect its surroundings more before cooling down or heating up to equilibrium. The input for this token is not temperature, but rather the specific heat capacity of the material.
  • [MAT_FIXED_TEMP] — A material's temperature can be forced to always be a certain value via the MAT_FIXED_TEMP material definition token. The only standard material which uses this is nether-cap wood, whose temperature is always at the melting point of water. If a material's temperature is fixed to between its cold damage point and its heat damage point, then items made from that material will never suffer cold/heat damage. This makes nether-caps fire-safe and magma-safe despite being a type of wood.

An important thing to remember when testing mods: Due to the way fixed temperature is handled, giving a material a fixed temperature will not cause its actual temperature to change accordingly — instead, its temperature will simply be permanently locked at whatever it was previously. Removing a material's fixed temperature, however, will cause all items made of it to heat or cool until reaching equilibrium with their surroundings. The fixed temperature of a container does affect its contents, but you can't freeze water by putting it into a bucket made from nether-cap because water will not freeze until it cools below 10000 °U . The fixed temperature of an inorganic material has no effect on unmined walls made from that material, though boulders will take on that temperature as they are produced via mining.

Temperature transfer

Temperature transfer in Dwarf Fortress is fairly simple - every tick, an item that is exposed to a hotter/colder environment (or another item) will adjust its temperature by the difference (in °U) divided by the item's specific heat. Fractions are retained, but not used in calculations. For example, a piece of lignite (which has [SPEC_HEAT:409]) at temperature 10015 (room temperature underground) exposed to magma (temperature 12000) will heat up by (12000-10015)/409 = 4.853 °U in the first tick, then gradually slower. In order to reach its ignition point of 11440, it would need to be in the magma for a total of 517 ticks, over 5 seconds at 100 FPS.

Bugs

  • Temperature calculations are a known cause of lag. If maximizing framerate is a concern, you can disable temperature calculations through an option in D init.txt. With temperature calculations disabled, effects such as water freezing, melting, or evaporating, or creatures and items taking temperature-related damage will not occur.
  • When temperature calculations are disabled, dwarves will refuse to set foot in a cast obsidian tile (or any other tiles previously occupied by magma).Bug:8391 Occasionally, this can also occur when temperature calculations are still enabled. Bug:1272