Bay 12 Games Forum

Please login or register.

Login with username, password and session length
Advanced search  

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - vettlingr

Pages: [1]
1
Hello.

I am a big fan of the combine-drinks and combine-plants scripts of dfhack but always found
it tedious how I needed to manually go over every stockpile to combine all drinks in my forts.
That the sqript requires you to select a stockpile or write a single stockpiles id in the editor
makes it so that the script was hard to automate.

This is why I have added an -food -all function to the combine scripts, as well as merging combine-drinks and combine-plants into a single script "combine"

Download:
https://dffd.bay12games.com/file.php?id=15735

Code: [Select]
-- Merge food stacks in the selected stockpile or every stockpile
--[====[

combine-food by Vettlingr
==============
Merge stacks of food in the selected stockpile or all stockpiles.

]====]
local utils = require 'utils'

local f = {
    validArgs = utils.invert({ 'help', 'drinks', 'plants', 'meat', 'fish', 'fat', 'food', 'roasts', 'max', 'all', 'stockpile' });
    args = utils.processArgs({...}, validArgs);
help = [====[
Combine
=============
Merge stacks of food in selected Stockpile or across all stockpiles on the map.
Valid commands:
:``-drinks``:
    Merges drinks
:``-plants``:
    Merges plants
:``-meat``:
    Merges meat and intestines
:``-fat``:
    Merges fat and tallow
:``-roasts``:
    Merges prepared food
:``-fish``:
    Merges fish
:``-food``:
    Merges all food categories
:``-all``:
    Selects all stockpiles
:``-max``:
    Selects a maximum stacksize, if unspecified it will be set to 500

Examples:
combine -drinks -fish -all
    Combines drinks and fish stacks in all stockpiles

combine -food -all
    Combines all food types across all stockpiles

combine -fat -roasts -max 50
    Combines fat and prepared food in the selected stockpile with a preferred stacksize of 50

]====]
}

local max = 30

local drinks={}
local plants={}
local meats={}
local fat={}
local roasts={}
local fish={}

--Stockpile Stack sizes:
drinks.max  =   30
plants.max  =   6
meats.max   =   20
fat.max     =   20
roasts.max  =   20
fish.max    =   10

--Not sure if these are needed.
drinks.Tot=0 drinks.xTot=0
plants.Tot=0 plants.xTot=0
meats.Tot=0 meats.xTot=0
fat.Tot=0 fat.xTot=0
roasts.Tot=0 roasts.xTot=0
fish.Tot=0 fish.xTot=0

if f.args.max then max = tonumber(f.args.max) end

local stockpile = nil
if f.args.stockpile then stockpile = df.building.find(tonumber(f.args.stockpile)) end

local function itemsCompatible(item0, item1)
    return item0:getType() == item1:getType()
        and item0.mat_type == item1.mat_type
        and item0.mat_index == item1.mat_index
end

local function FishitemsCompatible(item0, item1)
    return item0:getType() == item1:getType()
        and item0.race == item1.race
        and item0.caste == item1.caste
end

function getItems(items, item, index, bool)
    repeat
        local nextBatch = {}
        for _,v in pairs(items) do
            -- Skip items currently tasked
            if #v.specific_refs == 0 then
                    if bool==1 and ( v:getType() == df.item_type.DRINK )then
                        item[index] = v
                        index = index + 1
                    elseif bool==2 and ( v:getType() == df.item_type.PLANT or v:getType() == df.item_type.PLANT_GROWTH ) then
                            item[index] = v
                            index = index + 1
                    elseif bool==3 and (v:getType() == df.item_type.MEAT ) then
                            item[index] = v
                            index = index + 1
                    elseif bool==4 and (v:getType() == df.item_type.GLOB ) then
                            item[index] = v
                            index = index + 1
                    elseif bool==5 and (v:getType() == df.item_type.FOOD or v:getType() == df.item_type.CHEESE ) then
                            item[index] = v
                            index = index + 1
                    elseif bool==10 and (v:getType() == df.item_type.FISH or v:getType() == df.item_type.FISH_RAW or v:getType() == df.item_type.EGG ) then
                        item[index] = v
                        index = index + 1
                    else
                    local containedItems = dfhack.items.getContainedItems(v)
                        if (bool==1 and #containedItems == 1) or (bool>1 and #containedItems > 0) then
                            for _,w in pairs(containedItems) do
                                table.insert(nextBatch, w)
                            end
                        end
                    end
                end
            end
        items = nextBatch
    until #items == 0
    return index
end

function Combineitems(building, tabl, food, bool)
    local rootItems
    if building then
        rootItems = dfhack.buildings.getStockpileContents(building)
    else
        rootItems = dfhack.items.getContainedItems(item)
    end
    if #rootItems == 0 and not f.args.all then
        qerror("Select a non-empty container")
        return
    else
        local foodCount = getItems(rootItems, food, 0, bool)
        local removedFood = { } --as:bool[]
        food.max=max
        if f.args.max then max = tonumber(f.args.max)
            if tonumber(f.args.max)== 0 then max = 500
            end
        end
        for i=0,(foodCount-2) do
            local currentFood = food[i] --as:df.item_foodst
            local itemsNeeded = max - currentFood.stack_size

            if removedFood[currentFood.id] == nil and itemsNeeded > 0 then
                local j = i+1
                local last = foodCount
                repeat
                    local sourceFood = food[j]
                        if bool>=10 and removedFood[sourceFood.id] == nil and FishitemsCompatible(currentFood, sourceFood) then
                            local amountToMove = math.min(itemsNeeded, sourceFood.stack_size)
                            itemsNeeded = itemsNeeded - amountToMove
                            currentFood.stack_size = currentFood.stack_size + amountToMove

                            if sourceFood.stack_size == amountToMove then
                                removedFood[sourceFood.id] = true
                                sourceFood.stack_size = 1
                            else
                                sourceFood.stack_size = sourceFood.stack_size - amountToMove
                            end
                            --                    else print("failed")
                        elseif bool <10 and removedFood[sourceFood.id] == nil and itemsCompatible(currentFood, sourceFood) then
                            local amountToMove = math.min(itemsNeeded, sourceFood.stack_size)
                            itemsNeeded = itemsNeeded - amountToMove
                            currentFood.stack_size = currentFood.stack_size + amountToMove

                            if sourceFood.stack_size == amountToMove then
                                removedFood[sourceFood.id] = true
                                if bool>1 then sourceFood.stack_size = 1 end
                            else
                                sourceFood.stack_size = sourceFood.stack_size - amountToMove
                            end
                            --                    else print("failed")
                        end
                    j = j + 1
                until j == foodCount or itemsNeeded == 0
            end
        end
        local removedCount = 0
        for id,removed in pairs(removedFood) do
            if removed then
                removedCount = removedCount + 1
                local removedFood = df.item.find(id)
                dfhack.items.remove(removedFood)
            end
        end
        if food.Tot == nil then food.Tot = 0 end
        if food.xTot == nil then food.xTot = 0 end
        food.Tot = food.Tot + foodCount
        food.xTot = food.xTot + removedCount
    end
end

if f.args.help then
    print(f.help)
    return
end
if not f.args.all then
    local building = stockpile or dfhack.gui.getSelectedBuilding(true)
    if building ~= nil and building:getType() ~= 29 then building = nil
        end
    if building ~= nil then
        if f.args.drinks or f.args.food then
            Combineitems(building, f, drinks, 1)
            print("found " .. drinks.Tot .. " drinks")
            print("merged " .. drinks.xTot .. " drinks")
        end
        if f.args.plants or f.args.food then
            Combineitems(building, f, plants, 2)
            print("found " .. plants.Tot .. " plants")
            print("merged " .. plants.xTot .. " plants")
        end
        if f.args.meat or f.args.food then
            Combineitems(building, f, meats, 3)
            print("found " .. meats.Tot .. " meat")
            print("merged " .. meats.xTot .. " meat")
        end
        if f.args.fat or f.args.food then
            Combineitems(building, f, fat, 4)
            print("found " .. fat.Tot .. " fat")
            print("merged " .. fat.xTot .. " fat")
        end
        if f.args.roasts or f.args.food then
            Combineitems(building, f, roasts, 5)
            print("found " .. roasts.Tot .. " prepared food")
            print("merged " .. roasts.xTot .. " prepared food")
        end
        if f.args.fish or f.args.food then
            Combineitems(building, f, fish, 10)
            print("found " .. fish.Tot .. " fish")
            print("merged " .. fish.xTot .. " fish")
        end
    else
        print('select a stockpile')
    end
else
    if f.args.all then
        print('Combining all food...')
        for _, building in pairs(df.global.world.buildings.all) do
            if building:getType() == 29 and building ~= nil then
                if building ~= nil then
                    if f.args.drinks or f.args.food then
                        Combineitems(building, f, drinks, 1)
                    end
                    if f.args.plants or f.args.food then
                        Combineitems(building, f, plants, 2)
                    end
                    if f.args.meat or f.args.food then
                        Combineitems(building, f, meats, 3)
                    end
                    if f.args.fat or f.args.food then
                        Combineitems(building, f, fat, 4)
                    end
                    if f.args.roasts or f.args.food then
                        Combineitems(building, f, roasts, 5)
                    end
                    if f.args.fish or f.args.food then
                        Combineitems(building, f, fish, 10)
                    end
                else
                    print('invalid')
                end
            end
        end
        if f.args.drinks or f.args.food then
            print("found " .. drinks.Tot .. " drinks")
            print("merged " .. drinks.xTot .. " drinks")
        end
        if f.args.plants or f.args.food then
            print("found " .. plants.Tot .. " plants")
            print("merged " .. plants.xTot .. " plants")
        end
        if f.args.meat or f.args.food then
            print("found " .. meats.Tot .. " meat")
            print("merged " .. meats.xTot .. " meat")
        end
        if f.args.fat or f.args.food then
            print("found " .. fat.Tot .. " fat or tallow")
            print("merged " .. fat.xTot .. " fat or tallow")
        end
        if f.args.roasts or f.args.food then
            print("found " .. roasts.Tot .. " prepared food")
            print("merged " .. roasts.xTot .. " prepared food")
        end
        if f.args.fish or f.args.food then
            print("found " .. fish.Tot .. " fish")
            print("merged " .. fish.xTot .. " fish")
        end
    end
    return
end



2


Some of you may not know that I can code; but I can - and this is my second contribution to the Df community and Dfhack altogether.

This script Searches your save and indexes all creature raws of Angels and Experiments and generates a graphics file for them, giving them unique graphics in game.
The graphics art .pngs are derived from Mephs procedual creatures ultimately from Denzis Random Monsters.

Put the script into hack/scripts,
 the graphics files into your saves graphics folder,
  then and run the script in the dfhack terminal.

Also...
Back your stuff up!

Download on DFFD

Code: [Select]
--
--[====[

generate procedual graphics
==============
Generates graphics for necromancer experiments and divine creatures and puts it into your current save folder

]====]
local utils = require 'utils'

math.randomseed(os.time()) -- random initialize
math.random(); math.random(); math.random() -- warming up

function randomnumber( oneortwo )
        -- random generating
        if oneortwo == 1 then
            value1 = math.random(0,31)
            return value1
        end
        if oneortwo == 2 then
            value2 = math.random(0,29)
            return value2
    end
end
    local selection
    local key = 1
    local hfexpId = {}

    for id, raw in pairs(df.global.world.raws.creatures.all) do
        if raw.creature_id:startswith('HFEXP') then
            hfexpId[key] = raw.creature_id
            key = key + 1
        end
    end

    local key2 = 1
    local hfId = {}

    for id, raw in pairs(df.global.world.raws.creatures.all) do
        if raw.creature_id:startswith('HF') and not raw.creature_id:startswith('HFEXP') then
            hfId[key2] = raw.creature_id
            key2 = key2 + 1
        end
    end

function dfhack.getSavePath()
    if dfhack.isWorldLoaded() then
        return dfhack.getDFPath() .. '/data/save/' .. df.global.world.cur_savegame.save_dir .. '/raw/graphics/'
    end
end

os.execute('mkdir' .. dfhack.getSavePath()..'graphics_procedual_hfexp.txt')
file = io.open(dfhack.getSavePath()..'graphics_procedual_hfexp.txt', 'w')
file:write('graphics_procedual_hfexp\n')
file:write('[OBJECT:GRAPHICS] \n')
file:write('[TILE_PAGE:NECRO] \n')
file:write('[FILE:procedual_hfexp.png] \n')
file:write('[TILE_DIM:32:32] \n')
file:write('[PAGE_DIM:26:30] \n \n')

for i in ipairs(hfexpId) do
    file:write('[CREATURE_GRAPHICS:', hfexpId[i], '] \n')
    file:write('[DEFAULT:NECRO'..':'..randomnumber(1)..':'..randomnumber(2)..':AS_IS:DEFAULT] \n')
end

file:close()

os.execute('mkdir' .. dfhack.getSavePath()..'graphics_procedual_divine.txt')
file = io.open(dfhack.getSavePath()..'graphics_procedual_divine.txt', 'w')
file:write('graphics_procedual_divine\n')
file:write('[OBJECT:GRAPHICS] \n')
file:write('[TILE_PAGE:DIVINE] \n')
file:write('[FILE:procedual_divine.png] \n')
file:write('[TILE_DIM:32:32] \n')
file:write('[PAGE_DIM:26:30] \n \n')

for i in ipairs(hfId) do
    file:write('[CREATURE_GRAPHICS:', hfId[i], '] \n')
    file:write('[DEFAULT:DIVINE'..':'..randomnumber(1)..':'..randomnumber(2)..':AS_IS:DEFAULT] \n')
end

file:close()

print('Generated graphics for Divine and Experiments')
print('Found '..(key - 1)..' Experiments')
print('Found '..(key2 - 1)..' Angels')

return




Shameless Patreon Plug:

3
DF Modding / Vettlingr's Geology Overhaul Mod, WIP
« on: April 25, 2020, 06:09:38 pm »
Hi. I'm Vettlingr, you may know me from Vettlignr tileset or that other Domestic Dwarven creature mod.
I am also a geologist, and have a stark interest for rocks and other hard, rough, angular things.

Recently I have thought about how to add more authenticity and diversity to dwarf fortress portrayal of Geology.
If you haven't already, I suggest you try out the 3dveins plugin in DFhack, as it fixes the static geology as it is now.

With but editing the raws, I have set forth on representing aspects of geology not yet implemented in dwarf fortress.
It comes to no surprise that real geology is a lot more complicated than what DF is able to portray. In return, very few games really make an effort to portray geology in a realistic sense anyway, partly because only parts of geology is systematic, whereas minerals and ore get very complicated. The groundwork certainly is there, but DF geolgy miss a lot of features that makes it fall behind a lot.

Issues with DF geology:
- No geology cross z-planes, partly fixed with DFhack 3dveins
- No dikes <-- This one is huge t. Icelander
- No sills
- No differentiation between metamorphic layers
- Igneous intrusive are not intrusive, just the lowest king of rocks, which should be High-P High-T granulites/eclogites
- No metamorphic Iron
- Hydrothermal deposits, the main source of most ores, is totally absent.

Geology only goes through x-y dimensions, and large clusters appears as standarly sized globs in each unit on the map. A system like this does not allow for dikes of any kind. Dikes are very important, as most sulfide deposits, but also some iron ocide and secondary deposits depends on them, and sills, to form. Dikes are often mafic in nature, which means they oversaturate their surroundings with Magnesium, while absorbing a lot of silica, allowing for oxides to form. Contact metamorphism is also dependant on dikes.

Metamorphic layers, always have different grades. Greenschist- amphibolite - granulite is the most common series, which corresponding minerals if the original rock is a metapelite or mafic.

Metapelite - Metamorphic rock derived from sedimentary rocks (or sometimes felsic igneous intrusive rocks)
Metabasic - Metamorphic rock derived from mafic or ultramafic rocks

I've made a long mineral list of different ores, and where they are found:
Spoiler (click to show/hide)

With all this info, which took a lot of reading and looking up, I intend to finally compose and release a geology overhaul mod. Though for proper geology to work, we would need a very complicated DFhack command for generating geology, or a complete rework by toady if he is ever up for it. A university would pay big money though for a 3d simulator of geology that can generate and predict ore minerals though, so there is lot of incentive ;)

If you got any of that, I am guessing most of you ain't so interested in geology, but rather would like to see what I can come up with.
Most scientific names of geology makes it hard to know what type of rock is being refered to, that is why I have added some traditional names to the ores, to make them a little more clear, see spoilers.
Also, I never knew that learning german in school would have been so useful when looking up information and articles on ore and minerals until now. Auf wiedersehn!

4


WELCOME!

This is a Dwarf Fortress Graphical Tileset, All craftsdwarfship is of the highest quality. it is encircled with over 5000 creature sprites. This object menaces with spikes of 10000 furniture sprites for each material. On the item is an image of porcelain mine tracks, floors, walls and furniture. On the item is an Image of Vettlingr, Vettlingr is working furiously. The artwork relates to the update in the early winter of 2021 during Kok Ado "The Sleepless Nights". Vettlingr claims this Artifact as a personal heirloom.

If you, like me, like your dwarves big-nosed and stunty, with a hint of anglo saxon or nordic design. Perhaps you like gothic horror or a darker style for your dwarven dungeon paired with a beautiful consistent design. Fret not, thy tileset pack is here!

This tileset is a product of three things; the (almost) limitless of the TWBT extension. A strive to eclipse Mephs tileset, and a spark of pneumonia. I started this back in 2018 while being home sick with pneumonia, needing something to do. I started off drawing dwarves in a nordic folklore style and just extended beyond that. My main motivation was trying to produce a 32x32 tileset with limitless possibilities with a coherent feel and uniform style. The problem with Mephs tileset at the time was the vastly varying variations and styles throughout the tileset, which was a product of Meph using many different tiles from different authors and games. While the ethics of extensive burrowing of sprites can be discussed, Meph was a pioneer in TWBT editing, which is a craft I decided to master. A coherent tileset with a single author or artist will always prevail in the end due to the quality and uniformity of the set anyway.

NEWEST VERSION - 1.6-1
Code: [Select]
1.6-1 - Outlined Edition - FULL LIST OF FEATURES --<<<<<<<<<
<<<<<<<>>>>>>>>>---------- NEW in 1.6-1 -----------<<<<<<<>>>>>>>>>
Furnaces now show what material they are made of.
Fungus Wood items look less outrageous.
Gem items have their own sprites.
Rough gems now look like proper crystals.
Porcelain and Earthenware screw pumps.
Hedgehogman now show up properly.
Tweaked pots and pots2 graphics.
Metal and wooden barrels retouched.
Bone items have their own graphics.
Retouched gem walls.
Copper and bronze items look weathered.
Iron items are now rusty.
Glass items are less purple.
Figurines

<<<<<<<>>>>>>>>>---------- NEW in 1.6 -----------<<<<<<<>>>>>>>>>
<<Animation>>
- Animation and glow for furnaces, still and ashery
- New sprites for magma versions of Furnaces.

<<New Sprites and Tiles>>
- 256 Porcelain Statues
- 256 Metal Statues
- 256 Rock Statues
- 256 Glass Statues
- 256 Clay Statues
- Porcelain Mine Tracks
- Glass Mine Tracks
- Wood Mine Tracks
- Porcelain Workshop Benches
- Metal Workshop Benches
- Rock Workshop Benches
- Glass Workshop Benches
- Soap Workshop Benches
- Porcelain Walls
- Earthenware Walls
- Soap Walls
- Bone Walls
- Slade Walls
- Steel, Iron and Nickel Walls
- 1 Porcelain Paved Roads
- 1 Metal Paved Roads
- 1 Rock Paved Roads
- 1 Glass Paved Roads
- 256 Porcelain Furniture
- 256 Earthenware Furniture
- 256 Wood Furniture
- 256 Metal Furniture
- 7 Coins
- 10 Metal Cages
- 18 Metal Mechanisms
- 2 Metal Animal Traps
- 36 Farm Tiles
- 10 New Corpses
- 11 Cut gems and Large Gems
- 512 Huge cariance added to Rock pots
- 6 Meats
- 6 Flasks and Vials
- 8 refuse tiles
- Rock, Glass and Metal Jugs
- 6 Porcelain Hives
- 6 Metal Hives
- 6 Glass Hives
- 6 Wood Hives
- 1 Metal Stepladder and Die
- 256 Blocks, Rock, Metal, Glass, Porcelain etc.

<<Terrain and Other>>
- Tiles for pending constructions
- Walls, stairs, floors
- Mine tracks
- Ramps, fortifications
- 30 Tiles for creatures in Cages

<<Creature Graphics:>>
- 200 New Bird Sprites
- Procedual beast graphics remade
- added graphics for Divine and Necromancer Experiments (see Scripts)

<<Dfhack Scripts>>
Added generation of graphics file for Experiments and Angels as per script
Runs once per save and fixes graphics.

<<<<<<<>>>>>>>>>------- Tweaks and Bug Fixes -------<<<<<<<>>>>>>>>>
- Tree Catkins look better
- Green colors tweaked by preference
- Reduced opacity of all item black circle backgrounds
- Fixed glass and gem walls
- Fixed Wooden Stairs
- Retired _Walls.png for _Walls1.png
- Cleaned up folders and unused graphics

- Outline and filter added to following Creature Files:
- creature:4204_giant
- creature:4204_man
- creature:amphibians
- creature:annelids
- creature:birds
- creature:bug_slug_new
- creature:desert_new
- creature:large_ocean
- creature:large_riverlake
- creature:large_tropical
- creature:large_tundra
- creature:mountain_new
- creature:ocean_new
- creature:reptiles
- creature:riverlake_new
- creature:small_mammal_new
- creature:small_ocean
- creature:temperate_new
- creature:tropical_new(partially)
- creature:tundra_taiga_new


Features:
- Personalized and stylized unique handdrawn tiles for all terrain, items, workshops and more.
- Personalized and stylized handdrawn tiles for all furniture depending on material with variation.
- Unique tiles for all geology minerals, stone and soil.
- Unique handrawn tiles for all plants, trees, grasses and mushrooms.
- Unique handrawn sprites for all civilized races and mythological creatures and cavern monsters.
- Mostly personal and handrawn Sprites for all creatures.


Download Link - Vettlingr Outlined Editionn!




Creature Graphics:


Spoiler: Elves (click to show/hide)

Spoiler: Goblins (click to show/hide)

Spoiler: Kobolds (click to show/hide)

Spoiler: Standard (click to show/hide)

Spoiler: Underground (click to show/hide)

Quote
Credits:
""
List of Contributing Creators:
DF community:
Obsidian Soul - Creatures
Doren - Ballista & Catapult
Utkonos - Creatures
Dibujor - Creatures
Vordak - Creatures, refuse
Rally Ho! - Base for Coins
Dungeon set - Various Creatures

Spoiler: 3rd Party artists: (click to show/hide)


Check out Rekov's Dark Elves while you're at it.
It is a mod that lets you play as and encounter Dark Elves in your Dwarf fortress world
link



DISCORD SERVER LINK

MY PATREON - :


And please do check out my other mod(s) while you are at it.

5
DF Modding / Stress relief umbrella mod?
« on: September 04, 2018, 12:30:18 am »
I've been toying around the raws and dfhack lately and been pondering different mods to make.

In the current version, stress has become like a new feature, and stress management has become imperative in every fortress. While your regular Urist McModder might just choose to reduce the STRESS_VULNERABILITY personality trait, us Obok McVisionaries have better ideas.

As syndromes can work as a fairly good thought injector for certain interactions, new options for stress relief should be endless, especially if one were to use modtools in dfhack among functions such as triggers from reactions and whatnot. So... I have been balling a few ideas for stress relief workshops, reactions, materials and animals, for a while. Some of them have already been done in mods, but no recent modular mod seem to exist that combines most of them.

Gambling, War-gaming, smoking, incense, pet-interactions, and much more.

Gambling
Reaction uses coin, returns coin, adds thrill thought to worker. (Modtools/reaction-trigger)

War-gaming
Trains tactician perhaps? Otherwise same as gambling. Uses figurines?

Smoking
Uses plants to give a positive thought to the Worker, reaction however creates smoke, giving surrounding dwarves negative thoughts. (Modtools/reaction-trigger)

Incense
Spread hippie incense in your tavern by burning plant resin in reaction. Creates smoke that injects dwarves with good thoughts. No dfhack needed?

Any other ideas? And are there any other mods that have any fun solutions worth mentioning?

6
Domestically Bred Dwarven Beasts v1.4 for 47.05+



WELCOME fellow beardlings!

This mod aims to replace the Common Domestic animals with beasts themed around Dwarves, Caves and Mountains. The beasts were designed with utility in mind, and fleshes out the descriptions, colors and appearance modifiers for each individual animal. The mod also relies heavily on inspiration from previous similar mods such as DDD, by Wannabehero, hence some critters are very similar to those found there, but goes further by building and trying to improve on the concept.

Since 44.00 and the changes to animals among the entity tokens, I found it strange that no-one had come out with a new domestic animals mod. Thats why I want to introduce you to the !!DOMESTICALLY BRED DWARVEN BEASTS MOD!! to fulfill all your dwarven agricultural needs.
This standalone mod introduces 2 birds, 9 mammals, 2 reptiles and 2 arachnids and bugs for the dwarven faction, for a total of 15 new creatures.

To install, download the mod from the link below:
http://dffd.bay12games.com/file.php?id=14001
Copy and paste the files into your raw/objects directory.




Birds:


Spoiler: Grouse (click to show/hide)

Spoiler: Bittern (click to show/hide)

Mammals:

Spoiler: Brock (click to show/hide)

Spoiler: Shrewdog (click to show/hide)

Spoiler: Stygian Otter (click to show/hide)

Spoiler: Bristleback (click to show/hide)

Spoiler: Slothbat (click to show/hide)

Spoiler: Molebeast (click to show/hide)

Spoiler: Shoveldon (click to show/hide)

Spoiler: Winter Goat (click to show/hide)

Spoiler: Woolly Ibex (click to show/hide)

Reptiles:


Spoiler: Firenewt (click to show/hide)

Spoiler: Aquifer Turtle (click to show/hide)

Arachnids and Bugs:


Spoiler: Fortress Aphid (click to show/hide)

Spoiler: Lockspider (click to show/hide)

Graphics Set Support:
Gemset:   http://dffd.bay12games.com/file.php?id=14002
Spoiler (click to show/hide)
32x32: http://dffd.bay12games.com/file.php?id=14006
Spoiler (click to show/hide)
16x16: http://dffd.bay12games.com/file.php?id=14007
Spoiler (click to show/hide)

Spoiler: Changelog (click to show/hide)

Upcoming Features:
- Wild equivalents of most animals.
- Combatability with other mods.
- Graphics!
- Goblin equivalent to this mod?


Pages: [1]