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 "23a:Known bugs and issues"

From Dwarf Fortress Wiki
Jump to navigation Jump to search
m (→‎Milking Issue: the "eating live vermin" bug was present in 40d, but not in 23a)
 
(15 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
{{Quality|Fine|20:30, 30 April 2013 (UTC)}}
 
{{Quality|Fine|20:30, 30 April 2013 (UTC)}}
 
{{av}}
 
{{av}}
This is a list of '''known bugs and issues'''.
+
Dwarf Fortress is a constant work in progress, and is thus full of '''bugs'''. Some of them are minor and completely harmless, some are small and annoying, and some are major and even game-changing. This page is a historical list of some of the best-known bugs in 23a; an official compilation of all bugs, and their development status, can be found on the [http://www.bay12games.com/dwarves/mantisbt/my_view_page.php Mantis Bug Tracker]. Please do '''not''' report new bugs for this version; if the problem still exists in the current development version it should be reported on the [http://www.bay12games.com/dwarves/mantisbt/my_view_page.php bug tracker] for that version instead. If you have issues signing up for the bug tracker, see the [http://www.bay12forums.com/smf/index.php?board=6.0 forum bug tracker board] for instructions (but don't report bugs on the forum either).
  
Do '''NOT''' post theories, observed problems or unverified hiccups here.
 
  
 
== Known bugs ==
 
== Known bugs ==
 
A number of significant bugs exist in this version of Dwarf Fortress, and while Toady has fixed some of them in later versions, he will obviously never fix them in this version. To address this, a number of '''binary patches''' have been written which will fix some of the most significant bugs in this version of the game.
 
A number of significant bugs exist in this version of Dwarf Fortress, and while Toady has fixed some of them in later versions, he will obviously never fix them in this version. To address this, a number of '''binary patches''' have been written which will fix some of the most significant bugs in this version of the game.
  
To apply a binary patch, open "dwarfort.exe" in a hex editor (such as [http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm XVI32]), jump to the address listed, verify that the sequence of bytes on the left are correct, then overwrite them with the sequence of bytes on the right. If only one set of bytes is listed (and the address is followed by "=" instead of ":"), then the source bytes should all be zeroes.
+
As of April 24 2016, all of the patches listed below (and a few more which are ''not'' listed below) can be found in the [https://github.com/quietust/dfhack-23a/tree/master/patches DFHack-23a GitHub repository] (primarily in the "bugs" subdirectory), in a format which can be easily applied using the "binpatch" utility included with all versions of DFHack for Dwarf Fortress 0.31 thru 0.42.
 +
 
 +
To apply any other binary patch, open "dwarfort.exe" in a hex editor (such as [http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm XVI32]), jump to the address listed, verify that the sequence of bytes on the left is correct, then overwrite it with the sequence of bytes on the right. If only one set of bytes is listed (and the address is followed by "=" instead of ":"), then the source bytes should all be zeroes.
  
 
=== Artifact holders ===
 
=== Artifact holders ===
Line 15: Line 16:
 
The underlying problem is that when the game compares the dwarf carrying the artifact to the dwarf who created it (to prevent a hauler from hiding or obsessing over an artifact it did not create), it truncates the creator's 32-bit ID to an 8-bit value; since more than 256 units are created during world generation, this prevents the numbers from ever matching.
 
The underlying problem is that when the game compares the dwarf carrying the artifact to the dwarf who created it (to prevent a hauler from hiding or obsessing over an artifact it did not create), it truncates the creator's 32-bit ID to an 8-bit value; since more than 256 units are created during world generation, this prevents the numbers from ever matching.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "artifact-bugs.dif"|
 
* 0x14079B : 8A -> 8B
 
* 0x14079B : 8A -> 8B
 
* 0x1407A1 : B0 FE C2 04 00 90 90 90 -> B8 FE FF FF FF C2 04 00
 
* 0x1407A1 : B0 FE C2 04 00 90 90 90 -> B8 FE FF FF FF C2 04 00
 
* 0x0B5430 : B0 FE C2 04 00 90 90 90 -> B8 FE FF FF FF C2 04 00
 
* 0x0B5430 : B0 FE C2 04 00 90 90 90 -> B8 FE FF FF FF C2 04 00
* 0x1E8015 : 0F BE C0 -> 90 90 90
+
* 0x1E8015 : 0F BE C0 -> 90 90 90}}
  
 
=== Missing Thoughts ===
 
=== Missing Thoughts ===
The [[Sheriff]], [[Mayor]], and [[Baron]] are supposed to receive unhappy thoughts if you do not have enough [[jail]]s, [[fortress guard]]s, and/or [[royal guard]]s. Special logic exists to prevent these thoughts from happening within 3 months of their arrival at your fortress (so you get a grace period to comply with their new demands). Due to a bug, the condition is backwards, so they only receive these thoughts during their first 3 months at your fortress.
+
The [[Sheriff]], [[Mayor]], and [[Baron]] are supposed to receive unhappy thoughts if you do not have enough [[jail]]s, [[fortress guard]]s, and/or [[royal guard]]s. Special logic exists to prevent these thoughts from happening within 3 months of their arrival at your fortress (so you get a grace period to comply with their new demands). Due to a bug, the condition is backwards, so they only receive these thoughts during their first 3 months at your fortress. This bug (#5844) was officially fixed in version 0.40.05.
  
Patches:
+
{{collapsible|hidden=yes|Patched with "thought-bugs.dif"|
 
* 0x2344E2 : 74 -> 75 (insufficient jails for Sheriff)
 
* 0x2344E2 : 74 -> 75 (insufficient jails for Sheriff)
 
* 0x23448B : 74 -> 75 (insufficient fortress guards for Sheriff and Mayor)
 
* 0x23448B : 74 -> 75 (insufficient fortress guards for Sheriff and Mayor)
* 0x234425 : 84 -> 85 (insufficient royal guards for Baron)
+
* 0x234425 : 84 -> 85 (insufficient royal guards for Baron)}}
  
Additionally, nobles which require a [[tomb]] do not receive any thoughts based on its quality, whether it is above or below the quality level they require. They will still receive unhappy thought about '''other''' dwarves having better tombs than them (unless said dwarf actually deserves a tomb that good), though. This happens because the noble compares its current tomb quality to '''itself''' rather than to its desired tomb quality.
+
Additionally, nobles which require a [[tomb]] do not receive any thoughts based on its quality, whether it is above or below the quality level they require. They will still receive unhappy thought about '''other''' dwarves having better tombs than them (unless said dwarf actually deserves a tomb that good), though. This happens because the noble compares its current tomb quality to '''itself''' rather than to its desired tomb quality. This bug (#5843) still exists in the current version of Dwarf Fortress.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "thought-bugs.dif"|
 
* 0x2BCEF3 : 8B 54 24 3C 8B F0 -> 90 E9 61 17 09 00
 
* 0x2BCEF3 : 8B 54 24 3C 8B F0 -> 90 E9 61 17 09 00
* 0x34E65A = 8B 94 24 70 01 00 00 89 C6 E9 91 E8 F6 FF
+
* 0x34E65A = 8B 94 24 70 01 00 00 89 C6 E9 91 E8 F6 FF}}
  
 
=== Stuck Dwarves ===
 
=== Stuck Dwarves ===
If a dwarf wanders near a [[magma smelter]], [[magma glass furnace]], or [[magma kiln]], it can stop on a tile that has magma beneath it, leaving it unable to move away and causing it to repeatedly spam Drink job cancellations due to "cannot find path". This bug is well known for its appearance in [http://lparchive.org/Dwarf-Fortress-Boatmurdered/Update%202-11/ Update 2-11] of the saga of [[Main:Boatmurdered|Boatmurdered]], in which "Sankis has suddenly decided to try and drink out of the lava river".
+
If a dwarf wanders near a [[magma smelter]], [[magma glass furnace]], or [[magma kiln]], it can stop on a tile that has magma beneath it, leaving it unable to move away and causing it to repeatedly spam Drink job cancellations due to "cannot find path" once it becomes thirsty. This bug is well known for its appearance in [http://lparchive.org/Dwarf-Fortress-Boatmurdered/Update%202-11/ Update 2-11] of the saga of [[Main:Boatmurdered|Boatmurdered]], in which "Sankis has suddenly decided to try and drink out of the lava river".
  
 
The problem is that these workshops use the same tile accessibility logic as their non-magma counterparts, which allows dwarves to walk onto the magma tiles.
 
The problem is that these workshops use the same tile accessibility logic as their non-magma counterparts, which allows dwarves to walk onto the magma tiles.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "path-bugs.dif"|
 
* 0x016EF0 : A5 6E 41 -> 68 E6 74
 
* 0x016EF0 : A5 6E 41 -> 68 E6 74
* 0x34E668 = 83 7C 24 18 01 0F 85 A0 85 CC FF 8B 44 24 1C 85 C0 0F 85 94 85 CC FF E9 30 88 CC FF
+
* 0x34E668 = 83 7C 24 18 01 0F 85 A0 85 CC FF 8B 44 24 1C 85 C0 0F 85 94 85 CC FF E9 30 88 CC FF}}
  
 
Another bug causes dwarves to get stuck ''inside'' buildings when constructing statues, windows, and wells, since the jobs cause them to stand on top of the building itself during construction instead of next to the building.
 
Another bug causes dwarves to get stuck ''inside'' buildings when constructing statues, windows, and wells, since the jobs cause them to stand on top of the building itself during construction instead of next to the building.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "path-bugs.dif"|
 
* 0x0F64D7 : 12 0F 84 52 01 -> 0F 0F 8C 12 00
 
* 0x0F64D7 : 12 0F 84 52 01 -> 0F 0F 8C 12 00
 
* 0x0F64EB : 84 -> 8E
 
* 0x0F64EB : 84 -> 8E
 
* 0x0F7E9F : 12 0F 84 41 01 -> 0F 0F 8C 12 00
 
* 0x0F7E9F : 12 0F 84 41 01 -> 0F 0F 8C 12 00
* 0x0F7EB3 : 84 -> 8E
+
* 0x0F7EB3 : 84 -> 8E}}
  
 
=== Z Coordinate Bugs ===
 
=== Z Coordinate Bugs ===
Line 57: Line 58:
 
The first place where this problem appears is that waterfalls in the [[cave river]] sometimes fail to generate [[mist]]. The fix for this bug only applies to newly created fortresses; for existing fortresses, a 3rd-party utility is necessary to fix the problem.
 
The first place where this problem appears is that waterfalls in the [[cave river]] sometimes fail to generate [[mist]]. The fix for this bug only applies to newly created fortresses; for existing fortresses, a 3rd-party utility is necessary to fix the problem.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "zcoord-bugs.dif"|
* 0x28A90E : 66 -> 90
+
* 0x28A90E : 66 -> 90}}
  
 
The second instance of this bug affects the hidden webs woven by [[giant cave spider]]s over the [[chasm]], preventing dwarves from ever stumbling upon them. As above, this fix only affects newly created spider webs.
 
The second instance of this bug affects the hidden webs woven by [[giant cave spider]]s over the [[chasm]], preventing dwarves from ever stumbling upon them. As above, this fix only affects newly created spider webs.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "zcoord-bugs.dif"|
 
* 0x249EDD : BB 10 00 00 00 -> 66 89 6B 20 90
 
* 0x249EDD : BB 10 00 00 00 -> 66 89 6B 20 90
 
* 0x249EE5 : 94 01 00 -> AC 47 10
 
* 0x249EE5 : 94 01 00 -> AC 47 10
* 0x34E695 = BB 10 00 00 00 E9 DE B9 EF FF
+
* 0x34E695 = BB 10 00 00 00 E9 DE B9 EF FF}}
  
 
=== Vermin Problems ===
 
=== Vermin Problems ===
If a vermin marked as being capable of escaping from traps is placed inside a container (e.g. a [[cage]], [[animal trap]], or an Adventurer's [[backpack]]), it will remain inside indefinitely, but if the container happens to be an [[artifact]], the vermin will escape immediately. Not surprisingly, this bug is caused by a backwards condition.
+
If a vermin marked as being capable of escaping from traps is placed inside a container (e.g. a [[cage]], [[animal trap]], or an Adventurer's [[backpack]]), it will remain inside indefinitely, but if the container happens to be an [[artifact]], the vermin will escape immediately. Not surprisingly, this bug is caused by a backwards condition. This bug (#6117) was officially fixed in version 0.40.05.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "vermin-bugs.dif"|
* 0x169B1B : 84 -> 85
+
* 0x169B1B : 84 -> 85}}
  
Additionally, if a live [[fish]] is successfully caught and placed inside an aquarium filled with water, all subsequently captured live vermin will fail to be processed by the game - fish out of water will not suffocate, and purring maggots will never allow themselves to be milked subsequent times. This bug results from the incorrect usage of a C++ "break;" statement instead of "continue;", causing it to exit out of its loop early instead of continuing on the next entry.
+
Additionally, if a live [[fish]] is successfully caught and placed inside an aquarium filled with water, all subsequently captured live vermin will fail to be processed by the game - fish out of water will not suffocate, and purring maggots will never allow themselves to be milked subsequent times. This bug results from the incorrect usage of a C++ "break;" statement instead of "continue;", causing it to exit out of its loop early instead of continuing on the next entry. This bug (#6116) was officially fixed in version 0.40.05.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "vermin-bugs.dif"|
 
* 0x169D12 : DD -> D6
 
* 0x169D12 : DD -> D6
* 0x169D29 : C6 -> BF
+
* 0x169D28 : 85 C6 -> 84 BF}}
  
 
=== Item Improvements ===
 
=== Item Improvements ===
 
For reasons unknown, items which have been improved in any way are ineligible for most jobs. This restriction was removed in later versions of Dwarf Fortress, and this patch does the same thing.
 
For reasons unknown, items which have been improved in any way are ineligible for most jobs. This restriction was removed in later versions of Dwarf Fortress, and this patch does the same thing.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "job-bugs.dif"|
 
* 0x0F6C04 : D7 05 -> 00 00
 
* 0x0F6C04 : D7 05 -> 00 00
 
* 0x0F74DC : AB 03 -> 00 00
 
* 0x0F74DC : AB 03 -> 00 00
Line 88: Line 89:
 
* 0x108231 : D0 02 -> 00 00
 
* 0x108231 : D0 02 -> 00 00
 
* 0x1087B7 : 17 04 -> 00 00
 
* 0x1087B7 : 17 04 -> 00 00
* 0x108EA3 : FD 03 -> 00 00
+
* 0x108EA3 : FD 03 -> 00 00}}
  
 
=== Item Production ===
 
=== Item Production ===
 
In the raws for [[trap component]]s, the MATERIAL_SIZE [[trap component token|token]] allows specifying how many bars are needed to make it, but this value is never actually used. Curiously, logic '''does''' exist to look up the trap component's material size, but the logic is never reached because it is inside a case which does not handle trap components.
 
In the raws for [[trap component]]s, the MATERIAL_SIZE [[trap component token|token]] allows specifying how many bars are needed to make it, but this value is never actually used. Curiously, logic '''does''' exist to look up the trap component's material size, but the logic is never reached because it is inside a case which does not handle trap components.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "job-bugs.dif"|
 
* 0x0F82C0 : 22 23 -> 05 05
 
* 0x0F82C0 : 22 23 -> 05 05
 
* 0x0F835B : 09 -> 00
 
* 0x0F835B : 09 -> 00
* 0x0F8423 : 0D -> 0A
+
* 0x0F8423 : 0D -> 0A}}
  
 
Whenever a [[strange mood]] produces a gauntlet, it always makes it right-handed. What actually happens is that it has a 50% chance to make the gauntlet right-handed, but the opposing case '''also''' makes it right-handed - the fix makes it left-handed instead.
 
Whenever a [[strange mood]] produces a gauntlet, it always makes it right-handed. What actually happens is that it has a 50% chance to make the gauntlet right-handed, but the opposing case '''also''' makes it right-handed - the fix makes it left-handed instead.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "artifact-bugs.dif"|
* 0x12DD09 : 01 -> 00
+
* 0x12DD09 : 01 -> 00}}
  
 
If an armorsmith in a [[strange mood]] decides to make a helmet, it instead creates the item using the SHOES item type. This bug was officially fixed in version 0.34.06.
 
If an armorsmith in a [[strange mood]] decides to make a helmet, it instead creates the item using the SHOES item type. This bug was officially fixed in version 0.34.06.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "artifact-bugs.dif"|
* 0x171ED7 : 0F 95 C0 84 C0 -> BD 1D 00 00 00  
+
* 0x171ED7 : 0F 95 C0 84 C0 -> BD 1D 00 00 00}}
 
 
  
 
=== Miscarriages ===
 
=== Miscarriages ===
 
If a pregnant dwarf gets too hungry or thirsty (Starving or Dehydrated), she will have a miscarriage and receive an unhappy thought. Due a bug, though, the check for dehydration accidentally checks the dwarf's current Hunger instead of her Thirst, resulting in a miscarriage if the dwarf merely becomes Hungry.
 
If a pregnant dwarf gets too hungry or thirsty (Starving or Dehydrated), she will have a miscarriage and receive an unhappy thought. Due a bug, though, the check for dehydration accidentally checks the dwarf's current Hunger instead of her Thirst, resulting in a miscarriage if the dwarf merely becomes Hungry.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "misc-bugs.dif"|
 
* 0x2BD3CF : 81 F9 50 C3 00 -> 90 E9 AF 12 09
 
* 0x2BD3CF : 81 F9 50 C3 00 -> 90 E9 AF 12 09
* 0x34E684 = 8B 8D 8C 03 00 00 81 F9 50 C3 00 00 E9 40 ED F6 FF
+
* 0x34E684 = 8B 8D 8C 03 00 00 81 F9 50 C3 00 00 E9 40 ED F6 FF}}
  
 
=== Art Facets ===
 
=== Art Facets ===
Different civilizations are supposed to assign higher (or lower) values to art images portraying certain types of creatures; later versions control this using the ART_FACET_MODIFIER token in the raws, but in this version it is hardcoded. Due to a bug, these modifiers are not applied correctly due to a type cast being applied to the wrong pointer.
+
Different civilizations are supposed to assign higher (or lower) values to art images portraying certain types of creatures; later versions control this using the ART_FACET_MODIFIER token in the raws, but in this version it is hardcoded. Due to a bug, these modifiers are not applied correctly due to a type cast being applied to the wrong pointer. This bug (#6440) was officially fixed in version 0.40.05.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "trade-bugs.dif"|
* 0x1F3FBA : 43 -> 41
+
* 0x1F3FBA : 43 -> 41}}
  
 
=== Guild Request Crash ===
 
=== Guild Request Crash ===
 
If more than 6 guild leaders make requests to the [[Mayor]] in a single season, the game will crash at the start of the next season once the Mayor attempts to dismiss the 7th request. This is caused by the wrong array being checked for a particular value.
 
If more than 6 guild leaders make requests to the [[Mayor]] in a single season, the game will crash at the start of the next season once the Mayor attempts to dismiss the 7th request. This is caused by the wrong array being checked for a particular value.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "noble-bugs.dif"|
* 0x2CB95A : 82 -> 81
+
* 0x2CB95A : 82 -> 81}}
  
 
=== Short-lived Demands ===
 
=== Short-lived Demands ===
 
When a [[noble]] issues a [[demand]], the demand's duration is never initialized, so it is possible that it will expire immediately after it is made.
 
When a [[noble]] issues a [[demand]], the demand's duration is never initialized, so it is possible that it will expire immediately after it is made.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "noble-bugs.dif"|
 
* 0x2B45A1 : 8B 4C 24 34 66 8B 54 -> 31 C0 89 42 0C 8B 4C
 
* 0x2B45A1 : 8B 4C 24 34 66 8B 54 -> 31 C0 89 42 0C 8B 4C
* 0x2B45AC : 51 -> 4A
+
* 0x2B45AC : 51 -> 4A}}
  
 
=== Unmeltable Chests ===
 
=== Unmeltable Chests ===
If you mark a metal [[chest]] for melting, a dwarf will haul to a [[smelter]] (or [[magma smelter]]), sit there for a while, and then not actually melt the item, potentially leading to an infinite loop if the job was added on Repeat. This is due to the way the game handles glassmaking jobs - it removes the sand bag item (BOX made of cloth/leather and containing SAND) from the job and replaces it with a piece of raw glass, but it removes the "sand bag" item before confirming that it's actually a bag and that it actually contains sand. Since "melt" jobs take place afterwards, the chest is no longer part of the job and nothing actually happens (aside from the unit gaining some skill and possibly using up fuel).
+
If you mark a metal [[chest]] for melting, a dwarf will haul to a [[smelter]] (or [[magma smelter]]), sit there for a while, and then not actually melt the item, potentially leading to an infinite loop if the job was added on Repeat. This is due to the way the game handles glassmaking jobs - it removes the sand bag item (BOX made of cloth/leather and containing SAND) from the job and replaces it with a piece of raw glass, but it removes the "sand bag" item before confirming that it's actually a bag and that it actually contains sand. Since "melt" jobs take place afterwards, the chest is no longer part of the job and nothing actually happens (aside from the unit gaining some skill and possibly using up fuel). This bug (#2493) was officially fixed in version 0.40.05.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "job-bugs.dif"|
 
* 0x226817 : E8 44 FD FD FF -> 89 74 24 18 5E
 
* 0x226817 : E8 44 FD FD FF -> 89 74 24 18 5E
 
* 0x226894 : E8 87 6F FC FF -> E9 06 7E 12 00
 
* 0x226894 : E8 87 6F FC FF -> E9 06 7E 12 00
* 0x34E69F = 8B 4C 24 18 51 89 D9 E8 B5 7E EB FF E8 70 F1 E9 FF E9 E4 81 ED FF
+
* 0x34E69F = 8B 4C 24 18 51 89 D9 E8 B5 7E EB FF E8 70 F1 E9 FF E9 E4 81 ED FF}}
  
 
=== Noise Memory ===
 
=== Noise Memory ===
 
If dwarves are exposed to loud [[noise]]s while they are sleeping, they will get unhappy [[thought]]s once they wake up depending on the noise's loudness and proximity. However, the dwarf only remembers the last noise it heard, so if it is exposed to a very loud noise followed by a moderately quiet (but still audible) noise, it will only be mildly annoyed. In later versions of Dwarf Fortress, this works correctly.
 
If dwarves are exposed to loud [[noise]]s while they are sleeping, they will get unhappy [[thought]]s once they wake up depending on the noise's loudness and proximity. However, the dwarf only remembers the last noise it heard, so if it is exposed to a very loud noise followed by a moderately quiet (but still audible) noise, it will only be mildly annoyed. In later versions of Dwarf Fortress, this works correctly.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "thought-bugs.dif"|
 
* 0x220839 : 81 -> 89
 
* 0x220839 : 81 -> 89
 
* 0x22083F : 09 78 20 8B 15 EC B3 AC 00 8B 04 B2 8B 80 98 02 00 -> 8B 51 20 66 81 E2 80 01 66 81 FA 80 01 74 0E 8D 40
 
* 0x22083F : 09 78 20 8B 15 EC B3 AC 00 8B 04 B2 8B 80 98 02 00 -> 8B 51 20 66 81 E2 80 01 66 81 FA 80 01 74 0E 8D 40
 
* 0x220853 : 60 -> 61
 
* 0x220853 : 60 -> 61
 
* 0x220857 : A1 EC B3 AC 00 -> 66 09 79 20 90
 
* 0x220857 : A1 EC B3 AC 00 -> 66 09 79 20 90
* 0x220876 : 09 68 20 A1 EC B3 AC 00 8B 0C B0 8B 81 -> F7 40 20 80 01 75 10 66 09 68 20 8B 82
+
* 0x220876 : 09 68 20 A1 EC B3 AC 00 8B 0C B0 8B 81 -> F7 40 20 80 01 75 10 66 09 68 20 8B 82}}
 +
 
 +
=== Clothing Damage ===
 +
Dwarves receive one unhappy [[thought]] ("old clothing") when their clothes reach the first [[wear]] level and are supposed to receive a different one ("tattered clothing") when they reach the second wear level; due to a bug, they instead receive '''both''' thoughts at wear level 2 and suffer a much greater happiness penalty, often enough to induce immediate [[tantrum]]s.
 +
 
 +
{{collapsible|hidden=yes|Patched with "thought-bugs.dif"|
 +
* 0x2BCC76 : 05 -> 12
 +
* 0x2BCC78 : 74 0F EB 1A -> 75 1C 6A 00
 +
* 0x2BCC7D : 00 -> FF
 +
* 0x2BCC7F : FF 6A 68 8B CD E8 87 32 FF FF -> 69 89 E9 E8 89 32 FF FF EB 0D
 +
* 0x2BCC8E : 69 -> 68}}
  
 
=== Caravan Oddities ===
 
=== Caravan Oddities ===
 
When caravans bring bags of [[mill]] powders (flour, sugar, or dye) or barrels of [[extract]]s (e.g. milk), they only put one single unit inside the container. In later versions of Dwarf Fortress, they bring 10 units.
 
When caravans bring bags of [[mill]] powders (flour, sugar, or dye) or barrels of [[extract]]s (e.g. milk), they only put one single unit inside the container. In later versions of Dwarf Fortress, they bring 10 units.
  
Patch (powders):
+
{{collapsible|hidden=yes|Patched with "trade-bugs.dif" (powders)|
 
* 0x25188B : 8B 6F 10 -> B0 0A 90
 
* 0x25188B : 8B 6F 10 -> B0 0A 90
 
* 0x25188F : 81 CD 00 C0 00 00 -> 66 81 4F 10 00 C0
 
* 0x25188F : 81 CD 00 C0 00 00 -> 66 81 4F 10 00 C0
* 0x251897 : 89 6F 10 -> 88 47 3C
+
* 0x251897 : 89 6F 10 -> 88 47 3C}}
  
Patch (extracts):
+
{{collapsible|hidden=yes|Patched with "trade-bugs.dif" (extracts)|
 
* 0x251A6F : 8B 5D 10 56 80 CF C0 -> 80 4D 11 C0 B0 0A 53
 
* 0x251A6F : 8B 5D 10 56 80 CF C0 -> 80 4D 11 C0 B0 0A 53
* 0x251A78 : 89 5D 10 -> 88 45 3C
+
* 0x251A78 : 89 5D 10 -> 88 45 3C}}
  
 
=== Meal Values ===
 
=== Meal Values ===
 
Prepared meals are supposed to derive their value from not only their preparation quality but also the individual ingredients used. Due to what is assumed to have been a typo, the ingredient values are ignored.
 
Prepared meals are supposed to derive their value from not only their preparation quality but also the individual ingredients used. Due to what is assumed to have been a typo, the ingredient values are ignored.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "trade-bugs.dif"|
* 0x35D44C : 90 66 5E -> E0 29 5F
+
* 0x35D44C : 90 66 5E -> E0 29 5F}}
  
 
=== Tree Biomes ===
 
=== Tree Biomes ===
 
Trees which include the token [BIOME_ANY_TROPICAL] are supposed to appear in all tropical biomes. Due to a bug, though, they do not appear in tropical marshes or swamps, instead appearing in ''temperate'' marshes and swamps (in addition to the other tropical biomes). This only occurs when using modded raws, as the stock raws do not use this token for trees.
 
Trees which include the token [BIOME_ANY_TROPICAL] are supposed to appear in all tropical biomes. Due to a bug, though, they do not appear in tropical marshes or swamps, instead appearing in ''temperate'' marshes and swamps (in addition to the other tropical biomes). This only occurs when using modded raws, as the stock raws do not use this token for trees.
  
Patch:
+
{{collapsible|hidden=yes|Patched with "biome-bugs.dif"|
 
* 0x218D26 : 06 -> 0A
 
* 0x218D26 : 06 -> 0A
 
* 0x218D64 : 07 -> 0B
 
* 0x218D64 : 07 -> 0B
 
* 0x218DDC : 08 -> 0D
 
* 0x218DDC : 08 -> 0D
* 0x218E19 : 09 -> 0E
+
* 0x218E19 : 09 -> 0E}}
 +
 
 +
=== Inaccurate Siege Engines ===
 +
Whenever Dwarves operate [[catapult]]s or [[ballista]]e, they attempt to fire their projectile perfectly straight, but low skill levels cause it to veer off to either side. Due to a bug, the result of the skill check is discarded and the projectile ''always'' fails to fly straight. This has an additional effect on catapult stones, since they used the "better" trajectory when limiting their flight distance (based on the presence of a target), making them even less accurate. This bug (#6483) was officially fixed in version 0.40.13.
 +
 
 +
{{collapsible|hidden=yes|Patched with "job-bugs.dif"|
 +
* 0x225E20 : 4E 20 8B 56 24 8B 7E 1C 89 4C 24 30 89 54 24 2C -> 4C 24 30 8B 54 24 2C 89 7E 1C 89 4E 20 89 56 24}}
  
 
== Minor issues ==
 
== Minor issues ==
Line 186: Line 202:
 
=== Milking Issue ===
 
=== Milking Issue ===
  
To milk something it has to be a [[vermin]]ous creature.  The only milkable thing you can carry is a purring maggot.  Larger creatures are not yet milkable because the AI is not yet implemented to bring the creatures to the [[farmer's workshop]]. It would be relatively simple to implement, but is not a priority at this time.
+
To milk something it has to be a [[vermin]]ous creature, so the only milkable thing you can milk yourself is a [[purring maggot]]. For unknown reasons, purring maggots which have been ''tamed'' are not eligible for milking, so you have to leave them untamed.
  
Note that while you cannot milk larger animals yourself, civilisations can still milk animals "off screen" for your benefit.
+
Larger creatures are not milkable because the logic to bring the creatures to the [[farmer's workshop]] was not added until version 0.31.01; fortunately, other civilizations can still milk such animals "off screen" for your benefit and bring their milk and cheese as trade goods.
  
 
=== Building a Wooden Weapon... Rack ===
 
=== Building a Wooden Weapon... Rack ===

Latest revision as of 21:32, 11 March 2022

This article is about an older version of DF.

Dwarf Fortress is a constant work in progress, and is thus full of bugs. Some of them are minor and completely harmless, some are small and annoying, and some are major and even game-changing. This page is a historical list of some of the best-known bugs in 23a; an official compilation of all bugs, and their development status, can be found on the Mantis Bug Tracker. Please do not report new bugs for this version; if the problem still exists in the current development version it should be reported on the bug tracker for that version instead. If you have issues signing up for the bug tracker, see the forum bug tracker board for instructions (but don't report bugs on the forum either).


Known bugs[edit]

A number of significant bugs exist in this version of Dwarf Fortress, and while Toady has fixed some of them in later versions, he will obviously never fix them in this version. To address this, a number of binary patches have been written which will fix some of the most significant bugs in this version of the game.

As of April 24 2016, all of the patches listed below (and a few more which are not listed below) can be found in the DFHack-23a GitHub repository (primarily in the "bugs" subdirectory), in a format which can be easily applied using the "binpatch" utility included with all versions of DFHack for Dwarf Fortress 0.31 thru 0.42.

To apply any other binary patch, open "dwarfort.exe" in a hex editor (such as XVI32), jump to the address listed, verify that the sequence of bytes on the left is correct, then overwrite it with the sequence of bytes on the right. If only one set of bytes is listed (and the address is followed by "=" instead of ":"), then the source bytes should all be zeroes.

Artifact holders[edit]

When a dwarf completes a strange mood, it will carry its artifact around with it. After several months, the dwarf is supposed to either drop the artifact (leaving it available for general use), hide it (making it disappear from the game), or become obsessed with it (and carry it until death, going insane if the artifact is ever lost). Due to a bug, this never happens - dwarves carry their artifacts forever.

The underlying problem is that when the game compares the dwarf carrying the artifact to the dwarf who created it (to prevent a hauler from hiding or obsessing over an artifact it did not create), it truncates the creator's 32-bit ID to an 8-bit value; since more than 256 units are created during world generation, this prevents the numbers from ever matching.

Missing Thoughts[edit]

The Sheriff, Mayor, and Baron are supposed to receive unhappy thoughts if you do not have enough jails, fortress guards, and/or royal guards. Special logic exists to prevent these thoughts from happening within 3 months of their arrival at your fortress (so you get a grace period to comply with their new demands). Due to a bug, the condition is backwards, so they only receive these thoughts during their first 3 months at your fortress. This bug (#5844) was officially fixed in version 0.40.05.

Additionally, nobles which require a tomb do not receive any thoughts based on its quality, whether it is above or below the quality level they require. They will still receive unhappy thought about other dwarves having better tombs than them (unless said dwarf actually deserves a tomb that good), though. This happens because the noble compares its current tomb quality to itself rather than to its desired tomb quality. This bug (#5843) still exists in the current version of Dwarf Fortress.

Stuck Dwarves[edit]

If a dwarf wanders near a magma smelter, magma glass furnace, or magma kiln, it can stop on a tile that has magma beneath it, leaving it unable to move away and causing it to repeatedly spam Drink job cancellations due to "cannot find path" once it becomes thirsty. This bug is well known for its appearance in Update 2-11 of the saga of Boatmurdered, in which "Sankis has suddenly decided to try and drink out of the lava river".

The problem is that these workshops use the same tile accessibility logic as their non-magma counterparts, which allows dwarves to walk onto the magma tiles.

Another bug causes dwarves to get stuck inside buildings when constructing statues, windows, and wells, since the jobs cause them to stand on top of the building itself during construction instead of next to the building.

Z Coordinate Bugs[edit]

While fortresses in this version only occupy a single Z-level, the game engine still tracks everything in 3 dimensions. However, there are several places where the game forgets to initialize the Z-coordinate of newly created objects, resulting in them not appearing correctly if you start a new fortress after having done something else (such as generate a new world).

The first place where this problem appears is that waterfalls in the cave river sometimes fail to generate mist. The fix for this bug only applies to newly created fortresses; for existing fortresses, a 3rd-party utility is necessary to fix the problem.

The second instance of this bug affects the hidden webs woven by giant cave spiders over the chasm, preventing dwarves from ever stumbling upon them. As above, this fix only affects newly created spider webs.

Vermin Problems[edit]

If a vermin marked as being capable of escaping from traps is placed inside a container (e.g. a cage, animal trap, or an Adventurer's backpack), it will remain inside indefinitely, but if the container happens to be an artifact, the vermin will escape immediately. Not surprisingly, this bug is caused by a backwards condition. This bug (#6117) was officially fixed in version 0.40.05.

Additionally, if a live fish is successfully caught and placed inside an aquarium filled with water, all subsequently captured live vermin will fail to be processed by the game - fish out of water will not suffocate, and purring maggots will never allow themselves to be milked subsequent times. This bug results from the incorrect usage of a C++ "break;" statement instead of "continue;", causing it to exit out of its loop early instead of continuing on the next entry. This bug (#6116) was officially fixed in version 0.40.05.

Item Improvements[edit]

For reasons unknown, items which have been improved in any way are ineligible for most jobs. This restriction was removed in later versions of Dwarf Fortress, and this patch does the same thing.

Item Production[edit]

In the raws for trap components, the MATERIAL_SIZE token allows specifying how many bars are needed to make it, but this value is never actually used. Curiously, logic does exist to look up the trap component's material size, but the logic is never reached because it is inside a case which does not handle trap components.

Whenever a strange mood produces a gauntlet, it always makes it right-handed. What actually happens is that it has a 50% chance to make the gauntlet right-handed, but the opposing case also makes it right-handed - the fix makes it left-handed instead.

If an armorsmith in a strange mood decides to make a helmet, it instead creates the item using the SHOES item type. This bug was officially fixed in version 0.34.06.

Miscarriages[edit]

If a pregnant dwarf gets too hungry or thirsty (Starving or Dehydrated), she will have a miscarriage and receive an unhappy thought. Due a bug, though, the check for dehydration accidentally checks the dwarf's current Hunger instead of her Thirst, resulting in a miscarriage if the dwarf merely becomes Hungry.

Art Facets[edit]

Different civilizations are supposed to assign higher (or lower) values to art images portraying certain types of creatures; later versions control this using the ART_FACET_MODIFIER token in the raws, but in this version it is hardcoded. Due to a bug, these modifiers are not applied correctly due to a type cast being applied to the wrong pointer. This bug (#6440) was officially fixed in version 0.40.05.

Guild Request Crash[edit]

If more than 6 guild leaders make requests to the Mayor in a single season, the game will crash at the start of the next season once the Mayor attempts to dismiss the 7th request. This is caused by the wrong array being checked for a particular value.

Short-lived Demands[edit]

When a noble issues a demand, the demand's duration is never initialized, so it is possible that it will expire immediately after it is made.

Unmeltable Chests[edit]

If you mark a metal chest for melting, a dwarf will haul to a smelter (or magma smelter), sit there for a while, and then not actually melt the item, potentially leading to an infinite loop if the job was added on Repeat. This is due to the way the game handles glassmaking jobs - it removes the sand bag item (BOX made of cloth/leather and containing SAND) from the job and replaces it with a piece of raw glass, but it removes the "sand bag" item before confirming that it's actually a bag and that it actually contains sand. Since "melt" jobs take place afterwards, the chest is no longer part of the job and nothing actually happens (aside from the unit gaining some skill and possibly using up fuel). This bug (#2493) was officially fixed in version 0.40.05.

Noise Memory[edit]

If dwarves are exposed to loud noises while they are sleeping, they will get unhappy thoughts once they wake up depending on the noise's loudness and proximity. However, the dwarf only remembers the last noise it heard, so if it is exposed to a very loud noise followed by a moderately quiet (but still audible) noise, it will only be mildly annoyed. In later versions of Dwarf Fortress, this works correctly.

Clothing Damage[edit]

Dwarves receive one unhappy thought ("old clothing") when their clothes reach the first wear level and are supposed to receive a different one ("tattered clothing") when they reach the second wear level; due to a bug, they instead receive both thoughts at wear level 2 and suffer a much greater happiness penalty, often enough to induce immediate tantrums.

Caravan Oddities[edit]

When caravans bring bags of mill powders (flour, sugar, or dye) or barrels of extracts (e.g. milk), they only put one single unit inside the container. In later versions of Dwarf Fortress, they bring 10 units.

Meal Values[edit]

Prepared meals are supposed to derive their value from not only their preparation quality but also the individual ingredients used. Due to what is assumed to have been a typo, the ingredient values are ignored.

Tree Biomes[edit]

Trees which include the token [BIOME_ANY_TROPICAL] are supposed to appear in all tropical biomes. Due to a bug, though, they do not appear in tropical marshes or swamps, instead appearing in temperate marshes and swamps (in addition to the other tropical biomes). This only occurs when using modded raws, as the stock raws do not use this token for trees.

Inaccurate Siege Engines[edit]

Whenever Dwarves operate catapults or ballistae, they attempt to fire their projectile perfectly straight, but low skill levels cause it to veer off to either side. Due to a bug, the result of the skill check is discarded and the projectile always fails to fly straight. This has an additional effect on catapult stones, since they used the "better" trajectory when limiting their flight distance (based on the presence of a target), making them even less accurate. This bug (#6483) was officially fixed in version 0.40.13.

Minor issues[edit]

The issues that follow aren't really bugs per se, but simply things that can confuse new players.

Milking Issue[edit]

To milk something it has to be a verminous creature, so the only milkable thing you can milk yourself is a purring maggot. For unknown reasons, purring maggots which have been tamed are not eligible for milking, so you have to leave them untamed.

Larger creatures are not milkable because the logic to bring the creatures to the farmer's workshop was not added until version 0.31.01; fortunately, other civilizations can still milk such animals "off screen" for your benefit and bring their milk and cheese as trade goods.

Building a Wooden Weapon... Rack[edit]

There is a minor problem with the carpenter's workshop. Inexperienced players might be confused because in the build menu it says "Construct wooden Weapon", but they will get a weapon rack out of the deal. This isn't a bug, merely a shortcoming of the interface. You cannot actually build wooden weapons at the carpenter's workshop; the full name, "Construct wooden Weapon rack", is cut off in the default view, and can be seen if Tab is used to expand the menu. Expanding the menu will reveal that the option does not specify constructing a wooden weapon, but rather a wooden weapon rack.

Creatures Don't Always Use Graphics[edit]

When a creature is caught in a cage and put in a stockpile, and graphic sets are used, the creature is displayed with the correct graphic tile. But should you install the goblin cage anywhere, the graphic is ignored and the traditional letter displayed instead. this also happens with dead creatures, even dwarves.