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 "Modding"

From Dwarf Fortress Wiki
Jump to navigation Jump to search
(→‎Selecting and Cutting: Added note that a CUT operation does not require a prior SELECT operation.)
(15 intermediate revisions by 10 users not shown)
Line 1: Line 1:
 
{{migrated article}}
 
{{migrated article}}
{{Quality|Unrated}}
+
{{Quality|Fine}}
 
{{av}}
 
{{av}}
 
{{For/see|a list of Dwarf Fortress mods|[[List of mods]]}}
 
{{For/see|a list of Dwarf Fortress mods|[[List of mods]]}}
Line 23: Line 23:
  
 
; Where to get help?
 
; Where to get help?
* This [http://www.bay12games.com/forum/index.php?board=13.0 forum] is the official DF subforum dedicated to discussions about modding.
+
* This [http://www.bay12forums.com/smf/index.php?board=13.0 forum] is the official DF subforum dedicated to discussions about modding.
 
* [https://discord.com/channels/329272032778780672/629902895138996264 Kitfox modding discord]  
 
* [https://discord.com/channels/329272032778780672/629902895138996264 Kitfox modding discord]  
 
* [https://docs.dfhack.org/en/stable/docs/Introduction.html#getting-help DFhack questions]  
 
* [https://docs.dfhack.org/en/stable/docs/Introduction.html#getting-help DFhack questions]  
Line 29: Line 29:
 
; Modding tools
 
; Modding tools
 
There are several [[Utilities#Modding_tools|utilities]] that assist in modding efforts. There is [http://www.bay12forums.com/smf/index.php?topic=28829.0 a list of them] on the [[Bay 12 Forums]].
 
There are several [[Utilities#Modding_tools|utilities]] that assist in modding efforts. There is [http://www.bay12forums.com/smf/index.php?topic=28829.0 a list of them] on the [[Bay 12 Forums]].
* Text Editors are used in all areas of modding. Use a good text editor to edit files and search into multiple files (like th/e free [https://notepad-plus-plus.org/ Notepad++] for example) or more advanced editors capable of highlighting and formatting the displayed text (like [[Utilities#DF_RAW_Language_server|DF RAW Language server]])
+
* Text Editors are used in all areas of modding. Use a good text editor to edit files and search into multiple files (like the free [https://notepad-plus-plus.org/ Notepad++] for example) or more advanced editors capable of highlighting and formatting the displayed text (like [[Utilities#DF_RAW_Language_server|DF RAW Language server]])
 
* Image Editor will be needed for doing custom graphics. [https://www.getpaint.net/ Paint.NET], Photoshop and GIMP are the most used, but whatever supports the .png format will work.
 
* Image Editor will be needed for doing custom graphics. [https://www.getpaint.net/ Paint.NET], Photoshop and GIMP are the most used, but whatever supports the .png format will work.
  
Line 52: Line 52:
  
 
=== Best practice ===
 
=== Best practice ===
The current best practice is to not modify the original raw files, since most modifications can be made via mods. Mods can add new objects, add tokens to existing objects, and cut objects entirely.
+
The current best practice is to not modify the original raw files, since most modifications can be made via mods. Mods can add new objects, add tokens to existing objects, and cut objects entirely. You should prefer SELECT over CUT, and prefer CUT over not loading vanilla raws.
  
 
== Guide ==
 
== Guide ==
Line 67: Line 67:
 
To make a mod, one must put a folder into the <code>/mods/</code> folder. The vast majority of modifications to the game can be done via this method. This folder should contain a file named "info.txt" and two subfolders: "graphics" (where you insert [[Graphics set repository|graphics sets]]), and "objects", which contains all the data for, generally, everything in the game that is not hardcoded.
 
To make a mod, one must put a folder into the <code>/mods/</code> folder. The vast majority of modifications to the game can be done via this method. This folder should contain a file named "info.txt" and two subfolders: "graphics" (where you insert [[Graphics set repository|graphics sets]]), and "objects", which contains all the data for, generally, everything in the game that is not hardcoded.
  
The info.txt is formatted like so:
+
The [[info.txt]] is formatted like so:
  
 
{{code|
 
{{code|
Line 120: Line 120:
 
=== Modifying the vanilla objects ===
 
=== Modifying the vanilla objects ===
  
You should not modify the vanilla raws where they originally are if you can help it. Instead, patch them using the patching functions now provided with ''Dwarf Fortress'' since v50.01.
+
You should not modify the vanilla raws where they originally are if you can help it. Instead, patch them using the patching functions provided with ''Dwarf Fortress'' since v50.01.
  
There are two patching functions: SELECT and CUT. When SELECT is used, it lets you make changes to an object without needing the entire entry to be present in your mod file. When CUT is used, it forces the game to not use that object, even though it is still found in the vanilla raws. Both of these functions take the form of tokens. These functions are not universally applicable to any token found in any entry, just the following list of objects:
+
There are two patching functions: SELECT and CUT. When SELECT is used, it lets you make changes to an object without needing the entire entry to be present in your mod file. When CUT is used, it forces the game to not use that object, even though it is still found in the vanilla raws (or in any other mods earlier in the load order). Both of these functions take the form of tokens. These functions are not universally applicable to any token found in any entry, just the following list of objects:
  
 
CREATURE, ENTITY, INTERACTION, ITEM, WORD, TRANSLATION, SYMBOL, INORGANIC, PLANT, MUSIC, REACTION, SOUND
 
CREATURE, ENTITY, INTERACTION, ITEM, WORD, TRANSLATION, SYMBOL, INORGANIC, PLANT, MUSIC, REACTION, SOUND
Line 243: Line 243:
 
An easy method of creating a civilization is just to copy-paste a similar one to the bottom of the entity_default.txt file and edit things to your liking. Remember to always change the civ's "ENTITY:" identifier! This can be anything, so long as it's not already existing.
 
An easy method of creating a civilization is just to copy-paste a similar one to the bottom of the entity_default.txt file and edit things to your liking. Remember to always change the civ's "ENTITY:" identifier! This can be anything, so long as it's not already existing.
  
At the end of some of the default entries you'll find a list of positions, both ones that'll directly affect you in fort mode (such as nobles) and ones that'll primarily affect worldgen and adventure mode. A list of the tokens applicable to positions can be found [[position token|here]]; they don't require a great deal of explanation.
+
At the end of some of the default entries you'll find a list of positions, both ones that'll directly affect you in fort mode (such as nobles) and ones that'll primarily affect worldgen and adventure mode. A list of the tokens applicable to positions can be found [[position token|here]]; they don't require a great deal of explanation, but that can be found in [[Advanced Entity Position Mechanics]]
  
 
==== Trade ====
 
==== Trade ====
Line 250: Line 250:
 
* [[Entity token#ACTIVE_SEASON|[ACTIVE_SEASON]]] - Defines the seasons when an entity may visit your fortress.
 
* [[Entity token#ACTIVE_SEASON|[ACTIVE_SEASON]]] - Defines the seasons when an entity may visit your fortress.
 
* [[Entity token#PROGRESS_TRIGGER_POPULATION|[PROGRESS_TRIGGER_*]]] - Defines the triggers which control when an entity will become interested in your fortress.
 
* [[Entity token#PROGRESS_TRIGGER_POPULATION|[PROGRESS_TRIGGER_*]]] - Defines the triggers which control when an entity will become interested in your fortress.
* [[Entity token#COMMON_DOMESTIC_PACK|[COMMON_DOMESTIC_PACK]]] - Allows the civilization to use domestic pack animals. If an entity lacks pack animals (or ability to pull wagons), it will be unable to send caravans (showing as {{DFtext|No Trade|6:1}} at the [[embark]] screen), unless it has domesticated any suitable animal species or is forced to use a non-suitable creature by the [ANIMAL] definition [ALWAYS_WAGON-PULLER] on creature, caste or class.
+
* [[Entity token#COMMON_DOMESTIC_PACK|[COMMON_DOMESTIC_PACK]]] - Allows the civilization to use domestic pack animals. If an entity lacks pack animals (or ability to pull wagons), it will be unable to send caravans (showing as {{DFtext|No Trade|6:1}} at the [[embark]] screen), unless it has domesticated any suitable animal species or is forced to use a non-suitable creature by the [ANIMAL] definition [ALWAYS_WAGON_PULLER] on creature, caste or class.
 
* [[Entity token#COMMON_DOMESTIC_PULL|[COMMON_DOMESTIC_PULL]]] - Allows the civilization to use domestic animals to pull [[wagon]]s, assuming their [[Ethic#KILL_PLANT|KILL_PLANT ethic]] permits them to use wagons in the first place.
 
* [[Entity token#COMMON_DOMESTIC_PULL|[COMMON_DOMESTIC_PULL]]] - Allows the civilization to use domestic animals to pull [[wagon]]s, assuming their [[Ethic#KILL_PLANT|KILL_PLANT ethic]] permits them to use wagons in the first place.
 
* [[Entity token#MERCHANT_BODYGUARDS|[MERCHANT_BODYGUARDS]]] - Caravan will be guarded by [[soldier]]s.
 
* [[Entity token#MERCHANT_BODYGUARDS|[MERCHANT_BODYGUARDS]]] - Caravan will be guarded by [[soldier]]s.
Line 510: Line 510:
 
  [MATERIAL_SIZE:5]
 
  [MATERIAL_SIZE:5]
 
  [ATTACK:EDGE:100000:8000:slash:slashes:NO_SUB:1250]
 
  [ATTACK:EDGE:100000:8000:slash:slashes:NO_SUB:1250]
 +
[ATTACK_PREPARE_AND_RECOVER:3:3]
 
  [ATTACK:EDGE:50:4000:stab:stabs:NO_SUB:1000]
 
  [ATTACK:EDGE:50:4000:stab:stabs:NO_SUB:1000]
 +
[ATTACK_PREPARE_AND_RECOVER:3:3]
 
  [ATTACK:BLUNT:100000:8000:slap:slaps:flat:1250]
 
  [ATTACK:BLUNT:100000:8000:slap:slaps:flat:1250]
 +
[ATTACK_PREPARE_AND_RECOVER:3:3]
 
  [ATTACK:BLUNT:100:1000:strike:strikes:pommel:1000]
 
  [ATTACK:BLUNT:100:1000:strike:strikes:pommel:1000]
 +
[ATTACK_PREPARE_AND_RECOVER:3:3]
 
}}
 
}}
  
Line 519: Line 523:
 
Attacks take a little more explanation. The first value determines the contact area of the weapon's attack; this should be high for slashing weapons and low for bludgeoning, piercing and poking ones. The second value determines how deep the weapon penetrates - for BLUNT attacks this value is ignored as they're not supposed to penetrate anyway, but in the case of EDGE attacks it should generally be lower for slashing attacks and higher for stabbing attacks.
 
Attacks take a little more explanation. The first value determines the contact area of the weapon's attack; this should be high for slashing weapons and low for bludgeoning, piercing and poking ones. The second value determines how deep the weapon penetrates - for BLUNT attacks this value is ignored as they're not supposed to penetrate anyway, but in the case of EDGE attacks it should generally be lower for slashing attacks and higher for stabbing attacks.
  
Following these are the nouns and verb used; they should be self-explanatory. Finally, we have the velocity modifier, which has a multiplying effect on the weapon's size for the purposes of determining how powerful it is in combat. But more accurate it describe distribution of momentum across length of weapon. So STAB perfomed with only muscular power and modifier is x1 (1000). SLASH performed with some rotating momentum of cutting edge, but sword is pretty balanced thru it's length and modifier is just x1.25 (1250). Axes, hammers and maces more have more unbalanced mass distribution and weapon mass concentrated far from grasp, so higher modifiers.
+
Following these are the nouns and verb used; they should be self-explanatory. Finally, we have the velocity modifier, which has a multiplying effect on the weapon's size for the purposes of determining how powerful it is in combat. But more accurate it describe distribution of momentum across length of weapon. So STAB perfomed with only muscular power and modifier is x1 (1000). SLASH performed with some rotating momentum of cutting edge, but sword is pretty balanced thru it's length and modifier is just x1.25 (1250). Axes, hammers and maces have more unbalanced mass distribution and weapon mass concentrated far from grasp, so higher modifiers.
  
 
ATTACK_PREPARE_AND_RECOVER determine number of game frames to perform these actions. In vanilla almost not varies for different weapons.
 
ATTACK_PREPARE_AND_RECOVER determine number of game frames to perform these actions. In vanilla almost not varies for different weapons.
Line 1,065: Line 1,069:
 
== Selecting and Cutting ==
 
== Selecting and Cutting ==
  
[[Modding#Modifying_the_vanilla_objects|As explained above]], existing raws can be altered with the use of SELECT, and can also be culled with CUT for more granular control,compared to simply unloading vanilla content in the mod loader. Token behavior when multiple tokens are added is dependent on the individual token. Removing tags from an object without cutting and recreating the object in question is typically impossible. Creatures can have tags removed without being removed and replaced by way of creature variations.
+
[[Modding#Modifying_the_vanilla_objects|As explained above]], existing raws can be altered with the use of SELECT, and can also be culled with CUT for more granular control, compared to simply unloading vanilla content in the mod loader. Token behavior when multiple tokens are added is dependent on the individual token. Removing tags from an object without cutting and recreating the object in question is typically impossible, except for creature object tags removed and/or replaced with the use of [[Creature_variation_token|creature variation tokens]].
  
 
The syntax for selecting and cutting objects is as follows:
 
The syntax for selecting and cutting objects is as follows:
  
 
{{code|code=
 
{{code|code=
Substitute X for the desired object.
+
Substitute X for the desired object. A CUT does not need a SELECT prior, this is simply a list of available options.
  
 
[SELECT_CREATURE:X]
 
[SELECT_CREATURE:X]
Line 1,111: Line 1,115:
  
 
== Examples ==
 
== Examples ==
:''Main articles: [[:Category:DF2014:Modding_Examples]]''
+
:''Main articles: [[:Category:Modding_Examples]]''
  
 
The Hydling below was made by Mysteryguye (and annotated, updated and separated into blocks by Putnam), to act as an example creature.
 
The Hydling below was made by Mysteryguye (and annotated, updated and separated into blocks by Putnam), to act as an example creature.
Line 1,248: Line 1,252:
 
* [[Raw file]]
 
* [[Raw file]]
 
* [[Token]]
 
* [[Token]]
 +
* [[Modding pitfalls]]
 
* [[Cheating]]
 
* [[Cheating]]
 +
* Bay 12 Guide: https://bay12games.com/dwarves/modding_guide.html
  
 
{{Category|Modding}}
 
{{Category|Modding}}
 
{{Category|Guides}}
 
{{Category|Guides}}
 
[[ru:Modding]]
 
[[ru:Modding]]

Revision as of 11:28, 19 March 2024

This article is about the current version of DF.
Note that some content may still need to be updated.

For a list of Dwarf Fortress mods, see List of mods.


Modding, or creating mods, refers to modifying the behavior of the base game (vanilla). Dwarf Fortress is remarkably moddable.

Resource Overview

Modding icon.png

This section serves as a portal to all modding-related pages on the wiki.

Using Mods
Guides and references
Where to get help?
Modding tools

There are several utilities that assist in modding efforts. There is a list of them on the Bay 12 Forums.

  • Text Editors are used in all areas of modding. Use a good text editor to edit files and search into multiple files (like the free Notepad++ for example) or more advanced editors capable of highlighting and formatting the displayed text (like DF RAW Language server)
  • Image Editor will be needed for doing custom graphics. Paint.NET, Photoshop and GIMP are the most used, but whatever supports the .png format will work.

Documentation

Raw files

These object files, stored in /data/vanilla/*/objects/, define various specifics of game items, materials, and creatures, and can be changed using mods to alter how the game behaves. These are text based and can be edited with any text editor, however, editing the vanilla raw files is now discouraged.

See Token reference - It's always good to refer to tokens on the wiki. Even experienced modders have to look up tokens! A list of articles about tokens can be found here.

Graphics Files

The `/data/art/` subfolder of Dwarf Fortress is used to store user-customizable graphics sets.

Reactions
Language and Speech file
Sound and Music files

All sound and music files used by Dwarf Fortress are stored in the .ogg format within the /data/sound/ subfolders. You can replace the existing ogg files with different ones. That has to be performed manually and isn't actually supported by the game. You can also change some of the definitions of when certain musical cues are played, using available music tokens and sound tokens in the raw files. However, you can't add new music or sounds other than replacing what's already there.

Best practice

The current best practice is to not modify the original raw files, since most modifications can be made via mods. Mods can add new objects, add tokens to existing objects, and cut objects entirely. You should prefer SELECT over CUT, and prefer CUT over not loading vanilla raws.

Guide

This is intended to be a guide to inform those new to Dwarf Fortress modding on what elements of the game can be modified, and how. After reading through this guide, a user should be capable of editing creatures, entities, materials et al, and creating their own.

Generally, breaking stuff is fine - nothing that can be changed will affect the DF executable, and new additions can be easily removed.

This guide is based on Teldin's guide, originally created for version 0.27.176.39c. Per wiki tradition, it has been updated through all the major releases since then; hopefully it reflects current knowledge.

Token reference

It's always good to refer to tokens on the wiki. Even experienced modders have to look up tokens! A list of articles about tokens can be found here.

Basics of DF modding

To make a mod, one must put a folder into the /mods/ folder. The vast majority of modifications to the game can be done via this method. This folder should contain a file named "info.txt" and two subfolders: "graphics" (where you insert graphics sets), and "objects", which contains all the data for, generally, everything in the game that is not hardcoded.

The info.txt is formatted like so:

[ID:my_first_mod]
[NUMERIC_VERSION:1]
[DISPLAYED_VERSION:1.0.0]
[EARLIEST_COMPATIBLE_NUMERIC_VERSION:1]
[EARLIEST_COMPATIBLE_DISPLAYED_VERSION:1.0.0]
[AUTHOR:Your Name Here]
[NAME:My First Mod]
[DESCRIPTION:A cool mod I made!]

A mod should have all of these. There are a few more tokens, but the above are the important ones.

Most of the game's vanilla content is in the same format as mods. Many text files can be found in the subfolders of the /data/vanilla folder - these are the raw files, and using them as a basis for modification is quite easy. For now, we will take a look at one of the existing files. For example, if you open /data/vanilla/vanilla_creatures/creature_standard.txt, it should look something like this:

 creature_standard
 
 [OBJECT:CREATURE]
 
 [CREATURE:DWARF]
     [DESCRIPTION:A short, sturdy creature fond of drink and industry.]
     [NAME:dwarf:dwarves:dwarven]
     [CASTE_NAME:dwarf:dwarves:dwarven]
     [CREATURE_TILE:1][COLOR:3:0:0]
     [CREATURE_SOLDIER_TILE:2]
 ...

As you can see, each file comprises a header string stating the file name, a second header stating the type of object data it contains, followed by the contents of the file itself. These are all necessary elements of the file, and without them, the file will be ignored by the game.

In other words, to be recognized by the game, a raw file must have all of the following:

  1. A filename that refers to the type of objects contained therein. Creature files must start with creature_, entity files must start with entity_, and so on.
  2. The filename on the first line of the file.
  3. [OBJECT:type], where "type" is replaced with the relevant object type.

Below the headers, there begins a list of entries. Each entry is made up of its own header (in this case, "[CREATURE:DWARF]"), again stating the type of object, and then the object's unique identifier - if an identifier isn't unique, the game will mess up and you'll get some serious, and potentially very trippy, errors. (For example...) Below that, we have the body of the entry, which determines the entry's specific properties.

The body of an entry is made up of a series of "tokens", which are essentially flags that can be added or removed to affect the entry's attributes. Most of these effects are hardcoded: for example, it's possible to make a creature only eat meat with the [CARNIVOROUS] token, but it's impossible to create your own token detailing a specific diet for the creature.

Before we continue, a few key things to remember when modding the raw files:

  • Try to avoid modifying the existing raw files when possible. You should make a mod instead!
  • When adding files, token identifiers are all you need to include to ensure proper references are maintained. The game searches through all loaded raw files by tokens. For example, you can add a new pair of leather boots and not even have to add it to a file named item_shoes.txt, but rather your own file, say item_shoes_new.txt and ensure you have the token listed, ex. [ITEM_SHOES:ITEM_SHOES_BOOTS_NEW].
  • When a new world is generated, the mods included are "baked in" and cannot be modified except to be updated--for this, the game checks that the mod used by the save is of a compatible NUMERIC_VERSION.
  • There's nothing stopping you from just copying an existing creature/entity/whatever, changing the identifier, and modifying it. This can save you a lot of time, especially when it comes to entities.

Modifying the vanilla objects

You should not modify the vanilla raws where they originally are if you can help it. Instead, patch them using the patching functions provided with Dwarf Fortress since v50.01.

There are two patching functions: SELECT and CUT. When SELECT is used, it lets you make changes to an object without needing the entire entry to be present in your mod file. When CUT is used, it forces the game to not use that object, even though it is still found in the vanilla raws (or in any other mods earlier in the load order). Both of these functions take the form of tokens. These functions are not universally applicable to any token found in any entry, just the following list of objects:

CREATURE, ENTITY, INTERACTION, ITEM, WORD, TRANSLATION, SYMBOL, INORGANIC, PLANT, MUSIC, REACTION, SOUND

The syntax required for these functions is: [<function>_<object>:<specific object being affected>]. For instance, [CUT_PLANT:MUSHROOM_HELMET_PLUMP] cuts the plump helmet object in the vanilla file plant_standard.txt, so the game will not use that object at all. However, [SELECT_ITEM_HELM:ITEM_HELM_HELM] does not select the helm object from the vanilla file item_helm.txt, even though that's how the object appears in that file, because there is no [SELECT_ITEM_HELM] token. Instead, the helm would be selected with [SELECT_ITEM:ITEM_HELM_HELM].

For example, if you wanted to mod beards onto dwarven women while also removing elephants from the game:

creature_mypatch

[OBJECT:CREATURE]

[SELECT_CREATURE:DWARF] starts editing DWARF from the end of the entry
    [SELECT_CASTE:FEMALE]
        [BODY_DETAIL_PLAN:FACIAL_HAIR_TISSUE_LAYERS]

[CUT_CREATURE:ELEPHANT] removes the ELEPHANT creature

Or, say, add your own reaction and building to dwarves:

entity_mypatch

[OBJECT:ENTITY]

[SELECT_ENTITY:MOUNTAIN]
    [PERMITTED_REACTION:MY_REACTION]
    [PERMITTED_BUILDING:MY_BUILDING]

And in any of these, one can add the token [LOG_CURRENT_ENTRY] somewhere under one of the objects of the file, which logs the full contents of the object in question to logs\current_entry.txt. This can be useful to make sure that the patch is doing what you think it is. For instance if [LOG_CURRENT_ENTRY] were added on the next line after [CREATURE:DWARF] in your mod file, then the dwarf object would be the object detailed in the log entry.

...Speaking of, let's move on to modifying and adding entities.

Modding civilizations (entities)

Entities - the objects that determine how civilizations work - are stored in vanilla_entities/entity_default.txt (though, like all other files, you may add more). They follow the same format as any other raw file:

 entity_default
 
 [OBJECT:ENTITY]
 
 [ENTITY:ENTITYNAME]
     [CREATURE:CREATURETYPE]
     [TRANSLATION:LANGUAGETYPE]
     [BIOME_SUPPORT:BIOMETOKEN:FREQUENCY]
     ...[OTHER TAGS]...

Most of the time, it doesn't matter which order these tokens are in or where they're placed so long as they're below the "ENTITY:" identifier, but there are some important exceptions in the case of other files, especially creatures, which can contain a lot of "nested" tokens.

"[CREATURE:]" links the civilization with a specific creature defined in a creature file. This is the creature that'll be making up the entity's population, and, therefore, the creature you'll be playing as in fortress or adventure mode if the entity is a playable one. For example, if you wanted to do something silly, you could switch the "CREATURE:DWARF" entry in entity_default.txt with "CREATURE:ELF" and you would be marching elves around in fortress mode, although they would still use dwarven technology, language and names and so forth. Oh, and before you get any funny ideas - it is possible to define more than one creature for a civ, but that won't work in quite the way you probably expect; it will pick only one of the defined creatures at random to use for the civ. Later on, in the creature section, you'll learn about castes, which will provide a much more viable alternative, so try to bear with us until then.

"[TRANSLATION:]" defines the language file that the entity will be using, which will determine what their untranslated words are for things. This doesn't determine which words they use for naming things, only the way those words are spelled. The default language files are HUMAN, DWARF, ELF, and GOBLIN.

"[BIOME_SUPPORT:]" defines the biomes that civs will attempt to settle in. The "FREQUENCY" value determines the likelihood of them building there, but also raises an important point: most of the values you'll be setting for things are relative to each other. If one were to type:

 [BIOME_SUPPORT:ANY_FOREST:1]
 [BIOME_SUPPORT:SAVANNA:2]

This would have very much the same effect as:

 [BIOME_SUPPORT:ANY_FOREST:5]
 [BIOME_SUPPORT:SAVANNA:10]

This holds true for a lot of values throughout the files, excluding when it simply doesn't make sense, such as in materials.

You can find many details about the rest of the civilization tokens here.

Besides those mentioned, some fundamental ones are the [SITE_CONTROLLABLE] token, which lets you control the civ in fortress mode, the [OUTSIDER_CONTROLLABLE] token, which allows you to play in adventure mode as an outsider, and the [ALL_MAIN_POPS_CONTROLLABLE] token, which allows you to play a civ native (non-outsider) in adventure mode. Other tokens that you should pay attention to are START_BIOME and the ones regarding sites, but in general, you can just run through the aforementioned list and add or remove what you want.

If you have more than one civ with the [SITE_CONTROLLABLE] token, all the available civs from those entities will appear in the group selection section on the embark screen. It may not be immediately obvious from which species each civ may be - while this can be determined from legends mode, the topmost species in the "neighbors" display in the embark screen is always the same as the currently selected species; if your group is dwarven, dwarves will be topmost, whilst (say) elves will be topmost if your chosen group is elven. By default, the game seems to choose a civ (and therefore a species if there is more than one) at random.

You can also attempt to discern the civ yourself by the names it uses - this is the realm of "symbols", collections of words centered around a specific concept. The civ will use the words comprising whatever symbols are applicable to it for various things. This association might be a little confusing at first, so, let's refer to the DWARF entity:

 [SELECT_SYMBOL:WAR:NAME_WAR]
 [SUBSELECT_SYMBOL:WAR:VIOLENT]
 [SELECT_SYMBOL:BATTLE:NAME_BATTLE]
 [SUBSELECT_SYMBOL:BATTLE:VIOLENT]
 [SELECT_SYMBOL:SIEGE:NAME_SIEGE]
 [SUBSELECT_SYMBOL:SIEGE:VIOLENT]

Here, we can see that dwarves will generally name their wars first after words in the "NAME_WAR" symbol group, and then, after words in the "VIOLENT" symbol group. This might, for example, result in a war being named "The War of Carnage". The symbols used for the other types of conflict are arrayed in a similar fashion. It would be trivial to replace the instances of VIOLENT with, say, PEACE and end up with a battle called "The Clash of Calm" or something.

 [SELECT_SYMBOL:ROAD:NAME_ROAD]
 [SELECT_SYMBOL:TUNNEL:NAME_TUNNEL]
 [SELECT_SYMBOL:BRIDGE:NAME_BRIDGE]
 [SELECT_SYMBOL:WALL:NAME_WALL]

The above applies here. Dwarves are fond of naming their roads and tunnels after... roads and tunnels.

 [SELECT_SYMBOL:REMAINING:ARTIFICE]
 [SELECT_SYMBOL:REMAINING:EARTH]
 [CULL_SYMBOL:ALL:DOMESTIC]
 [CULL_SYMBOL:ALL:SUBORDINATE]
 [CULL_SYMBOL:ALL:EVIL]
 [CULL_SYMBOL:ALL:UNTOWARD]
 [CULL_SYMBOL:ALL:FLOWERY]
 [CULL_SYMBOL:ALL:NEGATIVE]
 [CULL_SYMBOL:ALL:UGLY]
 [CULL_SYMBOL:ALL:NEGATOR]

This section deals with everything else. The things that haven't already been dealt with (hence the "REMAINING") - such as site names, kingdom names, the names of individuals, and such - will have names from the ARTIFICE and EARTH symbol groups. After that, the dwarf entity is told to cull all inappropriate symbols - this applies to everything (hence the "ALL") so if the game happens to choose a symbol associated with, say, EVIL for one of the battles, it'll scrap that name and try again. This sort of thing adds a lot of flavour to DF's entities and can account for a lot of a civ's perceived personality.

Another basic thing to note: any entity token that's dealing with weapons, armor, clothing, etc., will state the items that the civ can build natively, not necessarily the ones they can wear or use. For example, you could create a species with no clothes specified, but then rob a clothes shop in adventurer mode and wear everything you want, or give them weapons that are too large to wield and they could sell them, but not use them.

An easy method of creating a civilization is just to copy-paste a similar one to the bottom of the entity_default.txt file and edit things to your liking. Remember to always change the civ's "ENTITY:" identifier! This can be anything, so long as it's not already existing.

At the end of some of the default entries you'll find a list of positions, both ones that'll directly affect you in fort mode (such as nobles) and ones that'll primarily affect worldgen and adventure mode. A list of the tokens applicable to positions can be found here; they don't require a great deal of explanation, but that can be found in Advanced Entity Position Mechanics

Trade

The following entity tokens affect the appearance of trading caravans:

  • [ACTIVE_SEASON] - Defines the seasons when an entity may visit your fortress.
  • [PROGRESS_TRIGGER_*] - Defines the triggers which control when an entity will become interested in your fortress.
  • [COMMON_DOMESTIC_PACK] - Allows the civilization to use domestic pack animals. If an entity lacks pack animals (or ability to pull wagons), it will be unable to send caravans (showing as No Trade at the embark screen), unless it has domesticated any suitable animal species or is forced to use a non-suitable creature by the [ANIMAL] definition [ALWAYS_WAGON_PULLER] on creature, caste or class.
  • [COMMON_DOMESTIC_PULL] - Allows the civilization to use domestic animals to pull wagons, assuming their KILL_PLANT ethic permits them to use wagons in the first place.
  • [MERCHANT_BODYGUARDS] - Caravan will be guarded by soldiers.

Modding creatures

Creature modding is great fun – you can change nearly any aspect of a creature, or make your own completely from scratch.

Modding creatures is very similar to modding civs: it's just a matter of editing, adding, or removing tokens, enclosed in square brackets underneath the creature's [CREATURE:] header. The creature entries contain all of the information about each and every non-random creature in the game, from animals to dwarves to goblins to even caravan wagons. A lot of the creature tokens are fairly self-explanatory; you can find a list of such tokens here. But before you start creating your own creatures, you'll want to learn how the tissues system works.

Creature materials and tissues

In the most basic sense, a creature is a series of body parts. These parts are defined in their own file, and we'll talk about them later, as a specific aspect of how creatures work, which throws off a lot of prospective modders, is the relationship between body parts, tissues, and materials. We're going to show you part of the creature entry for a bronze colossus (bear with us):

 ...
 [BODY:HUMANOID:2EYES:2EARS:NOSE:HUMANOID_JOINTS:5FINGERS:5TOES]
 [NO_THOUGHT_CENTER_FOR_MOVEMENT]
 [TISSUE:BRONZE]
     [TISSUE_NAME:bronze:bronze]
     [TISSUE_MATERIAL:INORGANIC:BRONZE]
     [MUSCULAR]
     [FUNCTIONAL]
     [STRUCTURAL]
     [RELATIVE_THICKNESS:1]
     [CONNECTS]
     [TISSUE_SHAPE:LAYER]
 [TISSUE_LAYER:BY_CATEGORY:ALL:BRONZE]
 ...

At the top, we can see the "BODY:" token, followed by a list of body parts. As you've probably guessed, these parts make up the physical form of the colossus. But the colossus has to be made out of something - it has to have tissues, and those tissues also have to be made out of something - in this case, bronze.

Below the BODY token you'll see a TISSUE token, followed by an identifier, much like the others we've seen. The TISSUE block is determining how the tissue works, and which purposes it'll serve. As the colossus is just going to be made out of this one tissue, this tissue needs to act like bone, muscle, and everything else combined, hence the MUSCULAR, FUNCTIONAL and STRUCTURAL tokens. The tissue also references a material - INORGANIC:BRONZE - the properties of which are declared in the inorganic materials file, and the tissue is subsequently made out of this material. With us so far?

Below the tissue definition is the TISSUE_LAYER line. TISSUE_LAYER allows you to control where each tissue is applied. Its first argument defines if it's to search by body part category (BY_CATEGORY), body part type (BY_TYPE), or look for a specific part (BY_TOKEN). That's followed by the parts argument itself, which is in this case ALL (so the game's looking for parts in all categories, which is to say, every body part). This is followed by the tissue to be applied, BRONZE. So the TISSUE_LAYER token is telling the game to select all body parts in every category and make them out of the tissue "BRONZE". The colossus is now made of bronze.

By now you're probably thinking "Wow, if this was for a creature made out of however many tissues, this would be amazingly longwinded" and you're right. Luckily, there are two methods by which we can speed things up a lot.

Firstly, there are material and tissue templates. Let's say you were going to make a lot of creatures out of bronze, and you didn't want to have to copy and paste the bronze tissue all over the place. Instead, you create a tissue template. This goes, as you've probably guessed, in a tissue template file.

 [TISSUE_TEMPLATE:BRONZE_TEMPLATE]
     [TISSUE_NAME:bronze:bronze]
     [TISSUE_MATERIAL:INORGANIC:BRONZE]
     [MUSCULAR]
     [FUNCTIONAL]
     [STRUCTURAL]
     [RELATIVE_THICKNESS:1]
     [CONNECTS]
     [TISSUE_SHAPE:LAYER]

Now, instead of applying the tissue to each and every bronze creature you're making, you can just refer to the template:

 ...
 [BODY:HUMANOID:2EYES:2EARS:NOSE:HUMANOID_JOINTS:5FINGERS:5TOES]
 [NO_THOUGHT_CENTER_FOR_MOVEMENT]
 [USE_TISSUE_TEMPLATE:BRONZE:BRONZE_TEMPLATE]
 [TISSUE_LAYER:BY_CATEGORY:ALL:BRONZE]
 ...

Material templates work in the same way, but refer to materials instead of tissues.

However, if we're looking at something like a dwarf, even with the templates, editing can get very slow indeed:

     ...
     [USE_MATERIAL_TEMPLATE:SKIN:SKIN_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:FAT:FAT_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:MUSCLE:MUSCLE_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:BONE:BONE_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:CARTILAGE:CARTILAGE_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:HAIR:HAIR_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:TOOTH:TOOTH_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:EYE:EYE_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:NERVE:NERVE_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:BRAIN:BRAIN_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:LUNG:LUNG_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:HEART:HEART_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:LIVER:LIVER_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:GUT:GUT_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:STOMACH:STOMACH_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:PANCREAS:PANCREAS_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:SPLEEN:SPLEEN_TEMPLATE]
     [USE_MATERIAL_TEMPLATE:KIDNEY:KIDNEY_TEMPLATE]
     [USE_TISSUE_TEMPLATE:SKIN:SKIN_TEMPLATE]
     [USE_TISSUE_TEMPLATE:FAT:FAT_TEMPLATE]
     [USE_TISSUE_TEMPLATE:MUSCLE:MUSCLE_TEMPLATE]
     ...

This is where body detail plans, which have their own file, and are designed to help automate some of the more common processes in creature creation, come in. The first entry in b_detail_plan_default.txt does exactly what we've been trying to do above: it takes all the common materials and shoves them into one plan, which can be referenced with a single token.

     ...
     [BODY_DETAIL_PLAN:STANDARD_MATERIALS]
     ...

Much easier. But what about the TISSUE_LAYER tokens? Will we have to type out all of those manually?

Nope, detail plans have that covered as well. It's possible to place variable arguments into a detail plan. For example:

 [BODY_DETAIL_PLAN:VERTEBRATE_TISSUE_LAYERS]
     [BP_LAYERS:BY_CATEGORY:BODY:ARG3:50:ARG2:5:ARG1:1]
     [BP_LAYERS:BY_CATEGORY:BODY_UPPER:ARG3:50:ARG2:5:ARG1:1]
     [BP_LAYERS:BY_CATEGORY:BODY_LOWER:ARG3:50:ARG2:5:ARG1:1]
     [BP_LAYERS:BY_CATEGORY:ARM:ARG4:25:ARG3:25:ARG2:5:ARG1:1]
     [BP_LAYERS:BY_CATEGORY:ARM_UPPER:ARG4:25:ARG3:25:ARG2:5:ARG1:1]
     ...
     [BP_LAYERS:BY_CATEGORY:NOSE:ARG5:4:ARG1:1]
     ...

First an argument is placed in the plan (ARG1, ARG2 etc.), followed by the thickness of the tissue that will be inserted in place of the argument. So when we reference the VERTEBRATE_TISSUE_LAYERS plan, we'll be able to do something like this:

     [BODY_DETAIL_PLAN:VERTEBRATE_TISSUE_LAYERS:SKIN:FAT:MUSCLE:BONE:CARTILAGE]

ARG1 in the detail plan is replaced by SKIN, the first tissue we entered. ARG2 is replaced by FAT, ARG3 by MUSCLE, ARG4 by BONE, and ARG5 by CARTILAGE. Hence, our creature's body part designated as BODY is made up of SKIN with thickness 1, FAT with thickness 5, and MUSCLE with thickness 50. Its nose is made up of SKIN (thickness 1) and CARTILAGE (thickness 4).

Things left out of the body plans aside, our dwarf's entire body, material, tissue and tissue layer tokens have been boiled down to this:

     ...
     [BODY:HUMANOID:2EYES:2EARS:NOSE:2LUNGS:HEART:GUTS:ORGANS:HUMANOID_JOINTS:
     THROAT:NECK:SPINE:BRAIN:SKULL:5FINGERS:5TOES:MOUTH:FACIAL_FEATURES:TEETH:RIBCAGE]
     [BODY_DETAIL_PLAN:STANDARD_MATERIALS]
     [BODY_DETAIL_PLAN:STANDARD_TISSUES]
     [BODY_DETAIL_PLAN:VERTEBRATE_TISSUE_LAYERS:SKIN:FAT:MUSCLE:BONE:CARTILAGE]
     ...

This can save you a lot of time and space if you're making lots of changes common to many creatures. In general, if you're making a creature that's fleshy or chitinous, there are detail plans already included in the game to help you out. You should only have to resort to declaring tissues individually (like our bronze colossus) if you're doing something really out-of-the-ordinary.

Another great thing about templates (and so, detail plans) is that they can be modified after being declared. Let's say we wanted our dwarves to be perpetually on fire (don't ask). We leave the body stuff declared normally:

     ...
     [BODY:HUMANOID:2EYES:2EARS:NOSE:2LUNGS:HEART:GUTS:ORGANS:HUMANOID_JOINTS:
     THROAT:NECK:SPINE:BRAIN:SKULL:5FINGERS:5TOES:MOUTH:FACIAL_FEATURES:TEETH:RIBCAGE]
     [BODY_DETAIL_PLAN:STANDARD_MATERIALS]
     [BODY_DETAIL_PLAN:STANDARD_TISSUES]
     [BODY_DETAIL_PLAN:VERTEBRATE_TISSUE_LAYERS:SKIN:FAT:MUSCLE:BONE:CARTILAGE]
     ...

We then, in our own mod, select the appropriate material:

[SELECT_CREATURE:DWARF]
     [SELECT_MATERIAL:SKIN]
         [MAT_FIXED_TEMP:10600]
     ...

We don't want them burning to death, so we'll need to stop that from happening:

[SELECT_CREATURE:DWARF]
     [SELECT_MATERIAL:SKIN]
         [MAT_FIXED_TEMP:10600]
     [SELECT_MATERIAL:ALL]
         [HEATDAM_POINT:NONE]
     ...

Note that this makes use of DF's built-in temperature scale. You can read more about that on this page. We're also referencing material tokens, which we haven't gone over yet - we'll talk about making your own materials later.

Creature castes

Another potentially extremely powerful part of the creature raws is the caste system. The caste system handles both true biological castes and lesser variations, such as sexes.

To understand the true potential of the caste system, we only need to take a look at the raws for antmen, found in creature_subterrenean.txt:

     ...
     [CASTE:WORKER]
         [CASTE_NAME:worker ant woman:worker ant women:worker ant woman]
         Female, but non-breeding.
         [POP_RATIO:10000]
     [CASTE:SOLDIER]
         [CASTE_NAME:soldier ant woman:soldier ant women:soldier ant woman]
         Female, but non-breeding.
         [POP_RATIO:1000]
     [CASTE:DRONE]
         [MALE]
         [CASTE_NAME:drone ant man:drone ant men:drone ant man]
         [POP_RATIO:5]
     [CASTE:QUEEN]
         [FEMALE]
         [CASTE_NAME:queen ant woman:queen ant women:queen ant woman]
         [POP_RATIO:1]
     [SELECT_CASTE:WORKER]
      [SELECT_ADDITIONAL_CASTE:SOLDIER]
      [SELECT_ADDITIONAL_CASTE:QUEEN]
         [BODY:HUMANOID_4ARMS:2EYES:HEART:GUTS:BRAIN:MOUTH]
         [BODYGLOSS:INSECT_UPPERBODY:INSECT_LOWERBODY]
     [SELECT_CASTE:DRONE]
         [BODY:HUMANOID_4ARMS:2EYES:HEART:GUTS:BRAIN:MOUTH:2WINGS]
         [BODYGLOSS:INSECT_UPPERBODY:INSECT_LOWERBODY]
         [FLIER]
     [SELECT_CASTE:ALL]
         [BODY_DETAIL_PLAN:CHITIN_MATERIALS]
         [BODY_DETAIL_PLAN:CHITIN_TISSUES]
         [BODY_DETAIL_PLAN:EXOSKELETON_TISSUE_LAYERS:CHITIN:FAT:MUSCLE]
         [BODY_DETAIL_PLAN:STANDARD_HEAD_POSITIONS]
         [ATTACK:PUNCH:BODYPART:BY_TYPE:GRASP]
             [ATTACK_SKILL:GRASP_STRIKE]
             [ATTACK_VERB:punch:punches]
     ...

It's evident that the process of creating and editing castes is comparable to the modifications we were making to tissues and materials earlier: A caste is declared, and modifications to the base creature are made. Declared castes can be selected and subsequently modified, again, just like tissues and materials.

In this case, each caste is declared, given its own name, and a POP_RATIO, which determines how commonly a birth results in that caste - for every 10000 workers born, there'll be an average of 1000 soldiers, 5 drones and one queen. You've probably also noticed that the DRONE and QUEEN castes have the MALE and FEMALE tokens respectively - these tokens determine how breeding works. A creature without both a MALE caste and a FEMALE caste will be unable to breed (no asexually reproducing creatures yet, unfortunately). As they lack FEMALE, the workers and soldiers are unable to breed with the male drones.

After this, there are some modifications to bodyparts. In this case, the drones have wings and the FLIER token, which the other castes lack. It's entirely possible for creatures of different castes to have completely different body structures, even to the extent that they don't resemble each other at all. If you read the section of this guide that dealt with entities, you may remember a passing mention of multi-creature civilisations and how they don't quite work as you may think they would. The castes system is your workaround. You could create a caste that is, for all intents and purposes, a human, and another caste of the same creature that acts exactly like a giant cave spider, put the creature in a civ, and get a human-spider civ. The only flaw in this approach is that the castes will interbreed.

That's the most complex components of creature creation out of the way. You should find the rest trivial by comparison.

Modding items

Items are fairly simple to deal with. By default, each item type is contained in its own file; this may help make browsing for a specific item easier, but from a purely technical point of view, it's possible to throw all items into one file. Unfortunately, item definition tokens don't seem to be especially well-documented (at least not as well as the other object types), but you should be able to figure out most things by way of our explanations and your assumptions.

Let's look at the entry for, of course, the thong:

 [ITEM_PANTS:ITEM_PANTS_THONG]
 [NAME:thong:thongs]
 [LAYER:UNDER]
 [COVERAGE:25]
 [LAYER_SIZE:10]
 [LAYER_PERMIT:30]
 [MATERIAL_SIZE:1]
 [SOFT]
 [LEATHER]
 [STRUCTURAL_ELASTICITY_WOVEN_THREAD]

Most of these are pretty obvious if one compares them to the other entries in the file. There's a layer for the item, determining where it's worn; a coverage value to determine how well it protects you from cold and other things; a size token to determine how much it counts for when it's under something else; a layer permit token to determine how much can be worn under it; and a material size token to determine how much raw material it takes to make it.

Now, if you wanted to mod these to turn them into metal thongs (ouch!), you would simply have to add [METAL] to it somewhere. Simple! These tokens work by tying into material properties - some materials are designated as suitable for making hard items, some for soft, etc..

Weapons involve a little more detail:

 [ITEM_WEAPON:ITEM_WEAPON_SWORD_2H]
 [NAME:two-handed sword:two-handed swords]
 [SIZE:900]
 [SKILL:SWORD]
 [TWO_HANDED:67500]
 [MINIMUM_SIZE:62500]
 [MATERIAL_SIZE:5]
 [ATTACK:EDGE:100000:8000:slash:slashes:NO_SUB:1250]
 	[ATTACK_PREPARE_AND_RECOVER:3:3]
 [ATTACK:EDGE:50:4000:stab:stabs:NO_SUB:1000]
 	[ATTACK_PREPARE_AND_RECOVER:3:3]
 [ATTACK:BLUNT:100000:8000:slap:slaps:flat:1250]
 	[ATTACK_PREPARE_AND_RECOVER:3:3]
 [ATTACK:BLUNT:100:1000:strike:strikes:pommel:1000]
 	[ATTACK_PREPARE_AND_RECOVER:3:3]

SIZE determines how heavy the weapon is. This has a substantial effect on weapon effectiveness. SKILL determines which skill is used in using the weapon; a list of skills can be found on this page. MINIMUM_SIZE determines the minimum size a creature must be before the weapon can be wielded, while TWO_HANDED determines how large a creature must be in order to wield the weapon with one hand.

Attacks take a little more explanation. The first value determines the contact area of the weapon's attack; this should be high for slashing weapons and low for bludgeoning, piercing and poking ones. The second value determines how deep the weapon penetrates - for BLUNT attacks this value is ignored as they're not supposed to penetrate anyway, but in the case of EDGE attacks it should generally be lower for slashing attacks and higher for stabbing attacks.

Following these are the nouns and verb used; they should be self-explanatory. Finally, we have the velocity modifier, which has a multiplying effect on the weapon's size for the purposes of determining how powerful it is in combat. But more accurate it describe distribution of momentum across length of weapon. So STAB perfomed with only muscular power and modifier is x1 (1000). SLASH performed with some r