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.

Difference between revisions of "v0.31:Maximizing framerate"

From Dwarf Fortress Wiki
Jump to navigation Jump to search
(Added info about PRINT_MODE, and about the semi-popular "singlethreaded" misconception.)
 
(32 intermediate revisions by 24 users not shown)
Line 1: Line 1:
{{quality|Fine|08:00, 22 May 2010 (UTC)}}
+
{{quality|Fine|01:51, 19 January 2011 (UTC)}}
 
{{av}}
 
{{av}}
 
[[File:Frames_Per_Second_Meter.png|300px|thumb|bottom|A picture of Dwarf Fortress with Frames Per Second displayed.]]
 
[[File:Frames_Per_Second_Meter.png|300px|thumb|bottom|A picture of Dwarf Fortress with Frames Per Second displayed.]]
  
{{L|Frames per second|Framerate}} is used in Dwarf Fortress to measure the speed at which the game is running. To check your FPS (frames per second) in Dwarf Fortress, simply change [FPS:NO] to [FPS:YES] in {{l|init.txt}}, and your FPS will be displayed on the top row of the screen.  The first number is the current frame rate, while the number in parenthesis is the current graphical frame refresh rate.
+
[[Frames per second|Framerate]] is used in Dwarf Fortress to measure the speed at which the game is running. It is measured in "frames per second", or FPS for short. To check your FPS in Dwarf Fortress, simply change [FPS:NO] to [FPS:YES] in [[init.txt]], and your FPS will be displayed on the top row of the screen.  The first number is the current frame rate, while the number in parentheses is the current graphical frame refresh rate.
  
The graphical FPS is also used to control how often input is received; you may find 5-15 graphical rate too clumsy for fluid text and mouse input.
+
==Increasing your Framerate==
 +
In general, the more stuff the game has to keep track of, the slower the game will run.  So, reducing the amount of stuff active keeps your game running fast.  Some possible reasons for slowdown, and ways to reduce and/or eliminate them:
  
==Ways to increase your framerate==
+
* Fewer items inside a fort means fewer items to be [[stockpile]]d, checked for [[wear]], and so on and so forth.
* Limiting the number of dwarves and other moving units (cage or butcher animals!) greatly helps keep speed up.
+
** Use a [[Dwarven atom smasher]] to remove items, or donate them to [[Trading|passing caravans]] to be taken away.
 +
** Don't dig out so much of the ground, don't build such large [[Farming|farm plot]]s, just don't generate so many items in the first place.
 +
* Flowing [[water]] slows the game down.
 +
** Don't build [[mist]] generators, [[Screw pump|pump stacks]], or other major water-moving projects.  If you do build them, build a [[Lever|way to switch them off]]. 
 +
** Don't embark on a [[river]] or [[ocean]].  Rivers aren't too bad in their natural state, because the game only needs to calculate at where the water enters and where the water leaves, more-or-less skipping the water in between.  Then you start damming them and pumping water out, and it gets worse.
 +
** [[Aquifer]]s don't impose load until you start digging around in them.
 +
**[[Water wheel#Perpetual motion|Dwarven water reactors]] also slow down the game, often significantly.
 +
* Each dwarf needs to keep track of where he's going.
 +
** Limit the number of dwarves by setting the population cap.
 +
* Each animal needs to pathfind, too.
 +
** Tame animals can be put into [[cage]]s, keeping them from having anywhere to go.  Or you can butcher them.
 +
* Invaders also need to pathfind.
 +
** Turn off invasions using the option in [[D_init.txt]]. Or you can kill them all.
 +
* Contaminants, including [[blood]] spatters, accumulate on the ground and on dwarves and creatures.  When they walk over contaminants, these sometimes get smeared and spread.  There is a bug ({{bug|296}}) which makes contaminants continuously multiply and another bug ({{bug|3270}}) which prevents blood spatters from ever disappearing.
 +
** There is a setting in D_init.txt (as of {{version|0.31.16}}) that prevents them spreading from dwarf (or animal) to ground.  For [[v0.31:Fortress_mode|Fortress Mode]], this is [[v0.31:Technical_tricks#More_Game_Options|WALKING_SPREADS_SPATTER_DWF]] and is already turned off by default.
 +
** If the contaminants are outside, isolate the area and let [[v0.31:Weather|rain]] slowly wash it away. Pets can be kept out with a [[Activity_zone#Pen.2FPasture|pen/pasture]] or a [[v0.31:Activity_zone#Pit.2FPond|pit]]. Similarly, setting the [[traffic]] designation to restricted and/or assigning [[Activity_zone|Activity Zones]] strategically may keep dwarves away.
 +
** Add in some in-fortress means of cleaning dwarves and pets. The "Dwarven Bathtub" is one example. And make sure you have the [[cleaning]] labor enabled. Details of these and other suggestions can be found on the [[cleaning]] page.
 +
** Finding the above cleaning measures too tedious or lacking, some players opt to [[v0.31:Cheating|cheat]] by using the [[v0.31:Utilities#dfcleanmap|dfcleanmap]] tool from the [[v0.31:Utilities#DFHack|DFhack]] library.
 +
* G_FPS is a setting in the [[init.txt]] file.  It controls how often Dwarf Fortress redraws the screen.  It also controls how often the game checks for keyboard or mouse input.
 +
** Reducing G_FPS can speed up the rest of the game.  The default choice of 50 works well, but many people reduce it down to 20 with no ill effect.
 +
** Reducing G_FPS too far can make the game unresponsive and glitchy.  Some people can cope with 5;  most cannot.
 +
* PRINT_MODE is another init setting.  It controls the method Dwarf Fortress uses to draw the screen.
 +
** More advanced methods allow DF to make more use of OpenGL features and therefore your graphics card.  STANDARD and VBO are good starting points.
 +
** More advanced methods may still have bugs.  2D is more likely to be reliable.
 +
* [[Temperature]] and [[Weather]] are two more features which users may or may not notice.
 +
** Disabling them, using the settings in d_init.txt, can speed things up.
 +
** But then rain won't refill [[murky pool]]s, [[magma]] won't melt [[goblin]]s, etc.
 +
** One user [http://www.bay12forums.com/smf/index.php?topic=86761.msg2352509#msg2352509 reported] an FPS boost from 35 to 90 upon disabling temperature.
 +
* The size of your world and embark site both increase the amount of terrain which DF needs to keep track of.
 +
** If you don't mind going vertical, try reducing your embark site from the default 4x4 squares to 3x3 or even 2x2.
 +
** World size probably doesn't matter except for the size of the save files, but reducing the number of cavern layers (default of 3) will help.  You need at least 1 cavern layer to get underground [[crop|plants]], and 2 caverns to get all the underground [[tree]]s.
 +
* Proper use of [[traffic]] designations will help.
 +
** Setting corridors to "high" traffic, and dead-end workshop rooms next to them to "low" traffic, means the pathfinder algorithm will search more quickly along the corridor, and waste less time searching in the rooms.
 +
** Changing the normal traffic weight to 1 in d_init.txt will optimize the pathfinder at the cost of High traffic zones not making a difference ([http://www.bay12forums.com/smf/index.php?topic=97763.msg2841109#msg2841109 source])
 +
* Closing off unused areas with raised [[bridge]]s and locked [[door]]s can help.
 +
** Reducing the area which the pathfinder algorithm has to search lets it run faster.
 +
** In general the pathfinder algorithm is good about not searching irrelevant areas.  Caverns are probably the worst offender.
 +
* Disabling your Dwarven civ from wearing clothing as a mod (required regen of world) may help maintain higher fps later in the game{{bug|3942}}, if you don't mind naked dwarves running around. Alternatively, finding a way to dump excess/worn out clothing might help restore fps on existing fortresses. Requires research.
 +
* Encountering [[HFS]] will dramatically reduce FPS if you seal the breach ({{bug|1340}}). Either avoid doing so or use the work around posted in the bug report.
 +
* Use the default ASCII Graphics Tileset. Custom tilesets (such as Ironhand, Mayday, and Phoebus) can decrease your framerate.
 +
** Citation needed; if you don't use creature graphics, it handles it the exact same way as the normal ASCII tileset; they're both just images.
 +
*Mac OSX: Spotlight indexes files on your mac. Since DF constantly changes files, spotlight will keep indexing them using 60-70% of your CPU. Exclude DF in system preferences: spotlight's privacy settings and you can get a factor of two in FPS. This can easily provide benefits of over 30 FPS, even on multicore computers that do not need to worry about CPU.
  
* Due to bug (0000296), contaminants such as blood, snow, etc, count as items.  Since contaminants can spread and you cannot easily get rid of them, try to avoid things that spread contaminants: wells, killing things in high traffic spots, and soap. <br>If you have a beast that exudes slime, you might as well save your game and wait for an update. Or kill it and use dfcleanmap.
+
{{Category|Guides}}
 
 
* Get rid of blood and dirt splatters dwarves and pets are carrying around. Doing so increased FPS from 8 to 33 on my machine(6 embark tiles, 130 dwarves, 250 animals, 3 caverns). to achieve this, you can either build a moat/wading pool around a well-visited area, which keeps the water height on 1-2 by using a pump which will clean the water from the dirt. When the dwarves walk through the water, the contaminants will be washed away. A hacking-tools way is to place some 7/7 water splatters around important paths with dfliquids, and running dfcleanmap continuously to remove the blood that gets washed away from the dwarves.
 
 
 
* Decreasing the G_FPS in the init text file can improve your fortress' overall FPS. Be careful however, decreasing it too much can subject you to "incomprehensible graphic instabilities". G_FPS refers to the "maximum graphical frame refresh rate during play." In other words, the maximum number of times it repaints the graphics of your game per second. Remember, with a low G_FPS, it can be dangerous during battle or when arrows are flying over your Dwarves' heads, because the screen doesn't update as often. The default is 50 G_FPS, but it's been reported that 20 G_FPS is fine. Others report being able to play at even 5 G_FPS. There is no set number, just remember to test out a variety of numbers to see which one is right for you and your computer.
 
 
 
* While you're in the init file, play around with PRINT_MODE. DF has recently made it's first foray into SDL, and changing the print mode might let it take slightly better advantage of your graphics card.
 
 
 
*Disabling [[Temperature]] and [[Weather]] in the d_init file increases speed due to fewer calculations being required, but rain will clean the map from blood and broken arrows, so it may actually improve the framerate.
 
 
 
*World size and fortress site size increase RAM usage and decrease speed. Check if you are happier with an embark rectangle of 3x3 or 3x2 and a medium or small world.
 
::(DF .31.12) World size probably doesn't matter at all (except for save file size), but the embark size and how many cavern layers the world has (defaults to 3).
 
 
 
*Lowering the pathfinding cost for normal tiles to 1 can reduce lag created by open space, but then your high traffic zones are the same as normal zones. Alternatively, you can cover the entire map with high traffic tiles, and simply make everything you don't want your dwarves traveling through low or restricted.
 
 
 
*Closing the fort's entrance to the outside world with a raised bridge or forbidden door decreases the number of possible routes the pathfinder has to calculate, thus increases performance.
 
 
 
* Some people try to reduce the number of items in the fort by "atom-smashing" them under a bridge or donating them away to traders. Alternatively, less digging in the first place results in fewer stones and corridors in the world to consider.
 
 
 
* It will sometimes be mentioned is that since DF is single-threaded, followed by some-suggestion-or-other based on this assertion. This is no longer true. It is true that the vast majority of the work still takes place in a single thread, and Toady has no plans to ever multithread the game logic, but DF does have at least one other thread handling the SDL graphics. Be cautious of any FPS-increasing suggestions that don't take that into account.
 
 
 
== Success Stories ==
 
Losing is [[Fun]]! But there's nothing fun about abandoning your fortress because the framerate has dropped to 6. For many, more fortresses are lost to fps death than anything else, and improving framerate remains a something of a mystery. If you find something that works, please share it here.
 
 
 
===From 40fps to 140fps===
 
 
 
''pc: 2.2ghz 1.5gb ram. fortress: 2x2 embark, 40-50 dwarves, 130 animals. temp & weather off. 1 cavern''
 
 
 
This fort ran at 150fps for a while but gradually after 11 years slowed to 27.
 
At this point I've focused my efforts exclusively on maximizing framerate, trying the usual tricks:
 
* Atom-smashing: no help AT ALL.
 
* Animal slaughtering / caging: gained 10-15fps for killing about 50 animals.
 
* Then I notice that my dwarves are FILTHY! Some having over 10+ pages of various blood and pus spatterings in their inventories.
 
I dig a crude bath, which consists of a hallway which dips down into a brief channel and back up before hitting a dead end.
 
I designate a Pond zone over the channel and the dwarves waste no time in drawing a bath (1/7 deep).
 
After designating a burrow on the other side of the bath, I order the entire fortress to it via the Alerts screen (restricting them to that burrow).
 
Immediately upon crossing the channel my framerate went from ~40 to ~140 and it is decided the fortress will live on!
 
 
 
'''Conclusion''': The amount of items on the map and pathfinding were very minor causes of slowdown in my case. The increases gained from slaughtering animals may well have been from their contaminants being destroyed in the process rather than the pathing they were calculating. Above all, the contaminants were the cause of this fortresses near-demise. --[[User:Uninvited Guest|Uninvited Guest]] 07:27, 1 December 2010 (UTC)
 

Latest revision as of 20:20, 31 July 2012

This article is about an older version of DF.
A picture of Dwarf Fortress with Frames Per Second displayed.

Framerate is used in Dwarf Fortress to measure the speed at which the game is running. It is measured in "frames per second", or FPS for short. To check your FPS in Dwarf Fortress, simply change [FPS:NO] to [FPS:YES] in init.txt, and your FPS will be displayed on the top row of the screen. The first number is the current frame rate, while the number in parentheses is the current graphical frame refresh rate.

Increasing your Framerate[edit]

In general, the more stuff the game has to keep track of, the slower the game will run. So, reducing the amount of stuff active keeps your game running fast. Some possible reasons for slowdown, and ways to reduce and/or eliminate them:

  • Fewer items inside a fort means fewer items to be stockpiled, checked for wear, and so on and so forth.
  • Flowing water slows the game down.
    • Don't build mist generators, pump stacks, or other major water-moving projects. If you do build them, build a way to switch them off.
    • Don't embark on a river or ocean. Rivers aren't too bad in their natural state, because the game only needs to calculate at where the water enters and where the water leaves, more-or-less skipping the water in between. Then you start damming them and pumping water out, and it gets worse.
    • Aquifers don't impose load until you start digging around in them.
    • Dwarven water reactors also slow down the game, often significantly.
  • Each dwarf needs to keep track of where he's going.
    • Limit the number of dwarves by setting the population cap.
  • Each animal needs to pathfind, too.
    • Tame animals can be put into cages, keeping them from having anywhere to go. Or you can butcher them.
  • Invaders also need to pathfind.
    • Turn off invasions using the option in D_init.txt. Or you can kill them all.
  • Contaminants, including blood spatters, accumulate on the ground and on dwarves and creatures. When they walk over contaminants, these sometimes get smeared and spread. There is a bug (Bug:296) which makes contaminants continuously multiply and another bug (Bug:3270) which prevents blood spatters from ever disappearing.
    • There is a setting in D_init.txt (as of v0.31.16) that prevents them spreading from dwarf (or animal) to ground. For Fortress Mode, this is WALKING_SPREADS_SPATTER_DWF and is already turned off by default.
    • If the contaminants are outside, isolate the area and let rain slowly wash it away. Pets can be kept out with a pen/pasture or a pit. Similarly, setting the traffic designation to restricted and/or assigning Activity Zones strategically may keep dwarves away.
    • Add in some in-fortress means of cleaning dwarves and pets. The "Dwarven Bathtub" is one example. And make sure you have the cleaning labor enabled. Details of these and other suggestions can be found on the cleaning page.
    • Finding the above cleaning measures too tedious or lacking, some players opt to cheat by using the dfcleanmap tool from the DFhack library.
  • G_FPS is a setting in the init.txt file. It controls how often Dwarf Fortress redraws the screen. It also controls how often the game checks for keyboard or mouse input.
    • Reducing G_FPS can speed up the rest of the game. The default choice of 50 works well, but many people reduce it down to 20 with no ill effect.
    • Reducing G_FPS too far can make the game unresponsive and glitchy. Some people can cope with 5; most cannot.
  • PRINT_MODE is another init setting. It controls the method Dwarf Fortress uses to draw the screen.
    • More advanced methods allow DF to make more use of OpenGL features and therefore your graphics card. STANDARD and VBO are good starting points.
    • More advanced methods may still have bugs. 2D is more likely to be reliable.
  • Temperature and Weather are two more features which users may or may not notice.
    • Disabling them, using the settings in d_init.txt, can speed things up.
    • But then rain won't refill murky pools, magma won't melt goblins, etc.
    • One user reported an FPS boost from 35 to 90 upon disabling temperature.
  • The size of your world and embark site both increase the amount of terrain which DF needs to keep track of.
    • If you don't mind going vertical, try reducing your embark site from the default 4x4 squares to 3x3 or even 2x2.
    • World size probably doesn't matter except for the size of the save files, but reducing the number of cavern layers (default of 3) will help. You need at least 1 cavern layer to get underground plants, and 2 caverns to get all the underground trees.
  • Proper use of traffic designations will help.
    • Setting corridors to "high" traffic, and dead-end workshop rooms next to them to "low" traffic, means the pathfinder algorithm will search more quickly along the corridor, and waste less time searching in the rooms.
    • Changing the normal traffic weight to 1 in d_init.txt will optimize the pathfinder at the cost of High traffic zones not making a difference (source)
  • Closing off unused areas with raised bridges and locked doors can help.
    • Reducing the area which the pathfinder algorithm has to search lets it run faster.
    • In general the pathfinder algorithm is good about not searching irrelevant areas. Caverns are probably the worst offender.
  • Disabling your Dwarven civ from wearing clothing as a mod (required regen of world) may help maintain higher fps later in the gameBug:3942, if you don't mind naked dwarves running around. Alternatively, finding a way to dump excess/worn out clothing might help restore fps on existing fortresses. Requires research.
  • Encountering HFS will dramatically reduce FPS if you seal the breach (Bug:1340). Either avoid doing so or use the work around posted in the bug report.
  • Use the default ASCII Graphics Tileset. Custom tilesets (such as Ironhand, Mayday, and Phoebus) can decrease your framerate.
    • Citation needed; if you don't use creature graphics, it handles it the exact same way as the normal ASCII tileset; they're both just images.
  • Mac OSX: Spotlight indexes files on your mac. Since DF constantly changes files, spotlight will keep indexing them using 60-70% of your CPU. Exclude DF in system preferences: spotlight's privacy settings and you can get a factor of two in FPS. This can easily provide benefits of over 30 FPS, even on multicore computers that do not need to worry about CPU.