- 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.
v0.31:Modding guide
This article is about an older version of DF. |
This is intended to be a guide to inform those new to DF modding on what elements of the game can be modified, and how. After reading through this guide, a user should be capable of both 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 a guide originally created for version 0.27.176.39c (originally put to type by one Teldin; page found here) and has later been rewritten for 0.31.xx.xx by (a) different author(s).
See also: Category:DF2010:Modding
Modding Guide
Basics of DF modding
All the base data that can be edited by prospective modders can be found in the \raw\ folder. This folder contains 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 (randomly created creatures aside).
Within the \raw\objects folder are a large number of text files - these are the raw files, and editing them is quite easy - you can also create your own if you wish. For now, take a look at one of the existing files. 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 is comprised of 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 won't be parsed correctly by the game. You may have also noticed the file naming scheme - this is also important; files containing creatures have names starting with "creature_", entity file names must begin with "entity_", etc..
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 indentifier isn't unique, the game will mess up and you'll get some serious, and potentially very trippy, errors. 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 [CARNIVOUROUS] 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:
- Personally speaking, I don't recommend modifying the existing raw files, but if you want to edit an already-exiting creature, always back up the files you plan on editing to a different location. If you want to create backup files directly within the objects folder itself, take heed: the game doesn't distinguish between file extensions. It'll read a .bak file just as well as it'll read a .txt file, and (as mentioned previously) duplicate entries are a very bad thing.
- When a new world is generated, all the raw files get copied into a \raw\ folder within the applicable save folder. If you want to change something within a game that's already running, you'll have to edit those files, not the ones in ~DF\raw\objects.
- 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... which are coincidentally what we'll be talking about next.
Modding civilisations (entities)
Entities - the objects that determine how civilisations work - are stored in entity_default.txt. They follow the same format as any other raw file:
entity_default [OBJECT:ENTITY] [ENTITY:ENTITYNAME] [CREATURE:CREATURETYPE] [TRANSLATION:LANGUAGETYPE] [BIOME_SUPPORT:BIOMETOKEN:FREQENCY] ...[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 will therefore be 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 and 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: later on we'll be talking about creature castes, which will provide a much more viable alternative, so try to bear with me 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 spelt. 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 likelyhood 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 I was to type:
[BIOME_SUPPORT:ANY_FOREST:1] [BIOME_SUPPORT:SAVANNA:2]
This would have very much the same effect as:
[BIOME_SUPPORT:ANY_FOREST:10] [BIOME_SUPPORT:SAVANNA:5]
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 CIV_CONTROLLABLE token, which lets you control the civ in fortress mode, the INDIV_CONTROLLABLE token, which allows you to play the civ in adventure mode as an outsider, and the ADVENTURE_TIER 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 aformentioned list and add or remove what you want.
If you have more than one civ with the CIV_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 obfuscating at first, so I'll run through it. 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 sections that haven't already been dealt with (hence the "REMAINING") will have names from the ARTIFICE and EARTH symbol groups. After that the dwarf entity is told to cull all innapropriate 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 percieved 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. 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 explaination.
Modding the 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.
In the most basic sense, a creature is a series of bodyparts. These parts are defined in their own file. As a specific aspect of how creatures work which throws off a lot of prospective modders is the relationship between creatures, tissues, and materials, I'm going to show you part of the creature entry for a bronze colossus (bear with me):
... [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 bodyparts. 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 me 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 if it's to search by bodypart category (BY_CATEGORY), bodypart type (BY_PART), 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 every category, which is to say, every bodypart). This is followed by the tissue to be applied, BRONZE. So the TISSUE_LAYER token is telling the game to select all bodyparts 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 come in. Detail plans, of course, have their own file, and they are designed to help automate some of the more common processes in creature creation. 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 refernce 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 bodypart 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, 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's 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 I wanted my dwarves to be perpetually on fire (don't ask). We declare the body stuff 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 select the appropriate material:
... [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] [SELECT_MATERIAL:SKIN] [MAT_FIXED_TEMP:10600] ...
We don't want them burning to death, so we'll need to stop that from happening:
... [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] [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. I'm also referencing material tokens, which we haven't gone over yet - I'll talk about making your own materials later.
That's the most complex component 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 tokens don't seem to be especially well-documented (at least as not as well as the other object types), but you should be able to figure out most things by way of my explainations 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, and probably [HARD] instead of [SOFT]. 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:EDGE:50:4000:stab:stabs:NO_SUB:1000] [ATTACK:BLUNT:100000:8000:slap:slaps:flat:1250] [ATTACK:BLUNT:100:1000:strike:strikes:pommel:1000]
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 explaination. The first value determines the contact area of the weapon's attack; this should be high for slashing or bludgeoning weapons, and low for 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 adjectives 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.
Other, more miscellaneous items are generally simple and shouldn't require any further explaination.
Once you've made an item, you just add it to the civ entry so a civilization can actually craft it, and it's done.
Modding language files
Coming later
Modding body parts
Imagine you have this fantastic idea for a multi-tentacled winged spider-monster. Sounds great! But in order to make this a reality you may need to create a new set of body parts for it. That's no problem! Making body parts is easy, though it may look complicated at first.
All of the default body definitions are located in body_default.txt and then linked to a creature in the creature's entry. We've talked about how bodyparts make up creatures earlier, in the creature section. You can mix and match them in the creature entry and it makes no difference, as long as they're there: each bodypart will link itself to the appropriate connection automatically when the creature is first created.
Body parts work by sections: you can add as many sections as you want to a bodypart definition, but generally you should keep it fairly low for ease of use. Each body section entry is in the very simple format:
[BODY:BODYNAME] [BP:TOKENID:name][TOKENSGOHERE][DEFAULT_RELSIZE:][CATEGORY:WHATEVER]
The most important tokens are "CONTYPE" and "CON": CONTYPE means the bodypart in question is connected to a certain *type* of bodypart, while CON means it's connected to a *specific* one. TOKENID is yet another identifier, which should be unique, as it's referenced every time something uses CON or BY_TOKEN. DEFAULT_RELSIZE defines, of course, what the bodypart's size is in relation to the other parts. CATEGORY defines a category for the part, which can be unique or shared with other parts. This is referenced whenever BY_CATEGORY is used.
A list of bodypart tokens can be found here.
Let's take a simple example, a head:
[BODY:BASIC_HEAD] [BP:HD:head:STP][CONTYPE:UPPERBODY][HEAD][CATEGORY:HEAD] [DEFAULT_RELSIZE:300]
It connects directly to an upper body.
[BODY:2EYES] [BP:REYE:right eye:STP][CONTYPE:HEAD][SIGHT][EMBEDDED][SMALL][RIGHT][CATEGORY:EYE] [DEFAULT_RELSIZE:5] [BP:LEYE:left eye:STP][CONTYPE:HEAD][SIGHT][EMBEDDED][SMALL][LEFT][CATEGORY:EYE] [DEFAULT_RELSIZE:5]
These are a pair of eyes, connecting to the head.
[BODY:HUMANOID] [BP:UB:upper body:upper bodies][UPPERBODY][CATEGORY:BODY_UPPER] [DEFAULT_RELSIZE:1000] [BP:LB:lower body:lower bodies][CON:UB][LOWERBODY][CATEGORY:BODY_LOWER] [DEFAULT_RELSIZE:1000] [BP:HD:head:STP][CON:UB][HEAD][CATEGORY:HEAD] [DEFAULT_RELSIZE:300] [BP:RUA:right upper arm:STP][CON:UB][LIMB][RIGHT][CATEGORY:ARM_UPPER] [DEFAULT_RELSIZE:200] [BP:LUA:left upper arm:STP][CON:UB][LIMB][LEFT][CATEGORY:ARM_UPPER] [DEFAULT_RELSIZE:200] [BP:RLA:right lower arm:STP][CON:RUA][LIMB][RIGHT][CATEGORY:ARM_LOWER] [DEFAULT_RELSIZE:200] [BP:LLA:left lower arm:STP][CON:LUA][LIMB][LEFT][CATEGORY:ARM_LOWER] [DEFAULT_RELSIZE:200] [BP:RH:right hand:STP][CON:RLA][GRASP][RIGHT][CATEGORY:HAND] [DEFAULT_RELSIZE:80] [BP:LH:left hand:STP][CON:LLA][GRASP][LEFT][CATEGORY:HAND] [DEFAULT_RELSIZE:80] [BP:RUL:right upper leg:STP][CON:LB][LIMB][RIGHT][CATEGORY:LEG_UPPER] [DEFAULT_RELSIZE:500] [BP:LUL:left upper leg:STP][CON:LB][LIMB][LEFT][CATEGORY:LEG_UPPER] [DEFAULT_RELSIZE:500] [BP:RLL:right lower leg:STP][CON:RUL][LIMB][RIGHT][CATEGORY:LEG_LOWER] [DEFAULT_RELSIZE:400] [BP:LLL:left lower leg:STP][CON:LUL][LIMB][LEFT][CATEGORY:LEG_LOWER] [DEFAULT_RELSIZE:400] [BP:RF:right foot:right feet][CON:RLL][STANCE][RIGHT][CATEGORY:FOOT] [DEFAULT_RELSIZE:120] [BP:LF:left foot:left feet][CON:LLL][STANCE][LEFT][CATEGORY:FOOT] [DEFAULT_RELSIZE:120]
An entire humanoid body. The foot bone's connected to the ankle bone...
A 'BODYGLOSS', which you can sometimes find in the creature entries, are simply replacement words for certain defined words in a creature. For example, you'll find the bodygloss [BODYGLOSS:CLAW_HAND:hand:claw] in the body_default.txt, and then you can use this in a creature with '[BODYGLOSS:CLAW_HAND]' and it will replace all instances of "hand" with "claw" in that creature. For all intent and purpose the body part will still function as the proper part, though.
Plants
Coming later
Materials
As we've seen when talking about creatures, materials are vital. Materials show up in two forms: material templates, which generally show up in creatures, and specific materials (designated as "inorganic", which are (by default, at least) consigned purely to metal and stone types.
Let's take a look at METAL_TEMPLATE in material_template_default.txt. It's evident that most of the basic properties of metals are already defined in the template - it goes red and melts at a high enough temperature, it's heavy, and (as noted by the very bottom token) is a metal. We already know just how useful templates can be to creatures, and the same applies to other materials.
Now let's take a look at inorganic_metal.txt. You can see that the metals here refer to the templates, and, just like we did with creatures, then modify the properties of that template and expand upon it.
Finally, let's look at inorganic_stone_mineral.txt. Here we can see that in additon to the changes made to the template, there are also ENVIONMENT tokens - these tell the game where to place these minerals during worldgen.
Here's a list of material tokens. It should also help you out with any modifications you want to make regarding those creature modifications we were making a while back. See, it all ties together in the end. The beauty of the current materials system is that there's actually very little difference between, say, leather and iron - they're fundamentally the same thing, just with different properties, which is how things really should be.
Examples
Coming later
Modding utilities
Section needs updating