Dwarf Fortress File Depot Download links:Uristmod for Windows (Includes source)
Uristmod for x86 Linux (Includes source)
SLTilesetUristmod is a mod management program for Dwarf Fortress which provides additional capabilities for mod authors to allow them to write their mods to include changes files which are read and applied to the raws, insulating the mods against fixes and changes made to DF's raws as DF moves from version to version.
One idea behind Uristmod is that instead of having to check your modified raws against the DF raws every time DF updates, and try to find everything you may have changed, you instead can write out your changes and to what they apply, and Uristmod will apply them to DF's raws. They're likely to be applicable directly without being modified again. Another is that it can find things and change them en masse for you, such as setting impact fracture to make all stone unmineable, but not soil or sand, and you could even exclude specific individual stone types such as obsidian if you wanted to. (It can also install tilesets and graphics sets, if they're placed in a folder so it sees them as a mod, and can update saved games when you update raws)
Furthermore, it can update the raws inside your save game folders for you. It has a simple method for replacing characters in language files (for removing accents), can copy files without changing them if you desire (for new raw files, graphics files, fonts, the init file, etc), but its most sophisticated capabilities focus on finding existing blocks in raw files by matching [stuff] to regexes, removing [stuff] from them, adding [stuff] to them, or modifying [stuff] in them (you can also remove entire blocks).
Examples from .changes files:
=== Make all rock unmineable except obsidian - won't affect sand, soil, or gems ===
?[INORGANIC:.*?]
?[IS_STONE]
![STATE_NAME_ADJ:ALL_SOLID:obsidian]
[IMPACT_FRACTURE:5000000]
=== Make a bunch of changes to kobolds (from Kobold Camp) ===
?[CREATURE:KOBOLD]
= This will add CAN_SPEAK if it doesn't exist already
[CAN_SPEAK]
[INTELLIGENT]
= These - lines remove an existing line in the raws
-[BONECARN]
= Note that it probably isn't going to place the new body size line with the others, but will place it near the end of the creature:kobold block, along with other things that it is adding to it - like can_speak, intelligent, and the kobold_materials body detail plan.
-[BODY_SIZE:12:0:20000]
= This adds the line instead of replacing another BODY_SIZE line.
+[BODY_SIZE:4:0:20000]
[CHILD:4]
-[MULTIPLE_LITTER_RARE]
== Swap out the STANDARD_MATERIALS plan for our replacement one which has fur ==
-[BODY_DETAIL_PLAN:STANDARD_MATERIALS]
== We have to use a + here because there are other [BODY_DETAIL_PLAN:.*?] lines in the kobold definition ==
+[BODY_DETAIL_PLAN:KOBOLD_MATERIALS]
= Change all INORGANIC metal ore (EXCEPT iron!) to tile 154
?[INORGANIC:.*?]
?[METAL_ORE:.*?]
= This looks for iron, and makes this block not apply to it
![METAL_ORE:IRON:.*?]
[TILE:154]
= Change all magma-safe stone to tile 199. The melting point line is basically looking for any numbers between 12000 and 19999. If we wanted even higher temperatures (Raw adamantine is the only inorganic with a higher melting point) we could change the 1 to a range as well.
?[INORGANIC:.*?]
?[MELTING_POINT:1\[2-9\]\d\d\d]
[TILE:199]
?[INORGANIC:.*?]
?[IS_STONE]
== Look for ENVIRONMENT OR ENVIRONMENT_SPEC with CLUSTER_SMALL
?[ENVIRONMENT.*?:CLUSTER_SMALL:.*?]
[TILE:7]
= Feather trees (this changes or adds the tree_tag, sapling_tile, tree_color, and sapling_color tags, depending on whether they already exist or not)
?[PLANT:FEATHER]
[TREE_TILE:245]
[SAPLING_TILE:141]
[TREE_COLOR:2:6:1]
[SAPLING_COLOR:2:6:1]
= Quarry bushes. Should change the leaf art to 166, if it was still tile 6 before.
?[PLANT:BUSH_QUARRY]
[LEAVES:quarry bush leaf:quarry bush leaves:166:7:0:0:0:1:6:LOCAL_PLANT_MAT:LEAF]
= Cave wheat
?[PLANT:GRASS_WHEAT_CAVE]
[PICKED_TILE:159]
[PICKED_COLOR:7:0:1]
Your raws at the first time that Uristmod does anything to them are backed up to DF/originalRaws, and that folder is what Uristmod bases everything on when it installs mods. If you uninstall a mod, it'll reinstall all the others in case they overrode each other.
The manual explains the syntax of everything for modders, and how to make graphics sets into a mod (it's easy, you put the raw\graphics into a folder (ideally named SomethingG so it's clear it's a graphics set) and add an empty graphics_example.txt), how to install it, how to use it, and so on and so forth.
Uristmod is coded in Haskell, which made it easily portable to Linux. If I had a Mac with OS X, I'd make a Mac port too, but I don't. (I have a Mac with OS 6 or 7 or something with a broken keyboard sitting in a basement, but it's quite useless.)
It is open source, though, so if anyone with Mac OS X wants to use it, they can still compile it themselves if they want to.
Uristmod is actually also compatible with 40d, except you wouldn't want to use the "Update saved games' raws" feature. Of course, most mods for DF2010 won't be compatible with 40d and vice versa.
Features I am already considering adding include:
- The ability to have +[foobar] lines add the line after a specific other line instead of always at the end of a block
I'm open to other feature requests (or bug reports, if I missed any) as well.
Oh, and the menu that it shows when you run it? It's in text rather than a GUI, you just type in the number of your choice or the name of the mod to install (the name of its folder in the DF folder), as the case may be.
P.S. If it exits suddenly without pausing, then there was probably an unexpected error - It shouldn't do that unless there is an unexpected error, and by unexpected I do mean unexpected. It should not do that unless you find a crash bug in it. (I've been using and testing it with DF2010 since it came out, and tested it with 40d as well (but not as extensively), so hopefully I caught them all)
Edit: The init.txt included with the version of SLTileset which was in Uristmod 1.0 has TEXTURE_PARAM set to LINEAR (which is the default in DF's default init.txt), and it looks much better with NEAREST instead, which is what it is set to in the separate package linked to now.
Also, Uristmod 1.0 had several bugs which are fixed in 1.1 (none of which occured in really simple mods like SLTileset, but showed up in more complex ones - I did some more complicated things and found and fixed them for 1.1).