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 - Roses

Pages: [1] 2
1
DF Modding / Need feedback on new DF utility <The Encyclopedia>
« on: March 01, 2019, 03:49:26 pm »
Hello all, I am looking for some feedback (suggestions, concerns, critiques, etc...) on a new GUI tool I have been working on. Think of it as a Journal/Compendium/Encyclopedia. Basically it's designed to give you human readable information about everything in the game by using DFHack and reading through the raws and other information. Below are several screenshots from the current version. I have already gotten some good feedback from Meph (some of which has already been included, some that still needs to be), but I am hoping to get a lot of eyes looking at it so that I can make it useful for the community.

This is the view that shows up at the start. It shows the various sub-pages and counts of how many creatures/materials/buildings/etc... there are in each sub-page.
Spoiler: Main (click to show/hide)

Buildings are split into All, Workshops, and Furnaces. Pushing 'B' on the main screen takes you to the buildings sub-page where you can select a building and see information regarding that building.
Spoiler: Buildings (click to show/hide)

Creatures are split into groups by flags, currently you can sort them by GOOD, EVIL, SAVAGE, and MEGABEAST (adding new sort categories is super easy, those are just the ones I chose for the default). You then select the creature and the caste and you get a whole bunch of information about them
Spoiler: Creatures (click to show/hide)

Entities are a little different than the other sub-pages because they read both from the raws and from the in-game entities. They are grouped by the ENTITY object from the raws (e.g. MOUNTAIN for dwarves in vanilla DF) and then show all of the in game entities that use that entity raw. Note that this is the least worked on sub-page so far as there is just so much information that could be put there.
Spoiler: Entities (click to show/hide)

The inorganics page is grouped by gems, metals, and stones, and can also be sorted based on their environmental location (e.g. metamorphic). The page shows both the inorganic information and the material information.
Spoiler: Inorganics (click to show/hide)

Items are a little tough because each item type has such different information associated with them, but it should  handle any item in the game. There are no sorting flags for the items currently.
Spoiler: Items (click to show/hide)

Organics sub-page has the plant and creature materials that can be used for item creation and food. This and the Products sub-page could probably be combined, but for now they are seperate.
Spoiler: Organics (click to show/hide)

The plants sub-page is broken into bushes, grasses, and trees and can also be sorted by various flags (currently EVIL and GOOD are in there, but just like the creatures it is easy to add more sorting flags). This page shows the materials, growths, and plant information of the plant. If you hit 'M' you will get taken to the Organics sub-page with only the current plants materials (in case you wanted to see how strong a trees wood is for example)
Spoiler: Plants (click to show/hide)

The products sub-page is very similar to the organics sub-page, except it shows the extracts/secretions/milk stuff. Basically liquids, powders, cheese, and alcohol. Again, this could be just combined with the Organics sub-page, but for now they are seperate
Spoiler: Products (click to show/hide)

The reactions sub-page is broken into the reaction categories, and can be sorted based on if it needs fuel or is automatic or adventure mode enabled. This page is the second least worked on, so a lot more can be done, especially for reactions that are more complicated (like improvements).
Spoiler: Reactions (click to show/hide)

For now these are the only sup-pages. I am thinking about adding a "Religion" sub-page that lists forces/powers and different worship information, an "Arts" sub-page that lists the different generated art forms, and a "Syndromes/Interactions" sub-page for more detailed information about those.

If I could get any feedback about any of the sub-pages or anything else that would be great.

2
Utilities and 3rd Party Applications / Research
« on: December 18, 2015, 04:20:36 pm »
I wasn't exactly sure where I should put this, so I decided to start a new thread, in hopes people will see it. This topic will concern the inner workings of DF as they relate to things we can change with DFHack and the research I have been doing/have done on them. (Others please feel free to post your own findings)

First up, tokens in the unit.counters and unit.counters2 vectors (e.g. pain, suffocation, stunned, winded, etc...)
  • Pain - Altering this value directly in the counters vector will have no effect. If you wish to inflict pain on a unit with DFHack you need to create a wound with the pain in the wound itself. Note that the pain value in the wound will not directly translate to the pain value in the counters, it will be adjusted based on the pain receptors of the specific body part.
  • Nausea - Same as Pain (minus pain receptors)
  • Dizziness - Same as Pain (minus pain receptors)
  • Winded - Winded can be set to whatever you want, but it seems to cap at 50 (at least for the creatures I tested on). It then decreases by between 4 and 10 each tick (again for the creatures I tested). For each tick that Winded > 0 Suffocation increases by one.
  • Stunned - Stunned can be set directly in counters, it's value will decrease by one each tick. Note that no matter what you set Stunned too you can never make a unit unconscious with just setting this.
  • Unconscious - Same as stunned, in addition when Unconscious reaches 0 it will set Stunned to ~75 and will set Unconscious to -1. While Unconscious is -1 the unit will ignore increases certain counters.
  • Suffocation - Suffocation will automatically reset to 0 if Winded is 0 (or presumably if the lungs are damaged, more testing is needed for this).
  • Webbed - Same as Stunned except that it decreases by 2 each tick instead of 1.
  • Paralysis - Same as Pain (minus pain receptors)
  • Numbness - Same as Pain (minus pain receptors)
  • Fever - Same as Pain (minus pain receptors)
  • Exhaustion - Same as Stunned with the caveat that certain threshold values will change the health display of the unit (e.g. Tired, Over-Exerted, etc...)
In general there are two types of counters, those that have an effect without adding a wound, and those that require a wound to function. Note that just having a wound is not enough. You can't, for instance, just increase the value of Pain in unit.counters, you must increase the Pain value in unit.body.wounds. The game will then automatically adjust the pain value in unit.counters.

Next Up;

I will try and get an idea of values for emotions, there effects, and the possible effects traits have on them.
Determine effect of density on spawned flows
More as I come across it

3
https://github.com/Pheosics/roses_collection
Use the master branch for the most recent stable version, and the devel branch for the most recent developments

UPDATE 07/06/2021
Fixed the {ATTRIBUTE} and {SKILL} shortcuts for the enhanced items. Now the attributes/skills are correctly increased/decreased when the item is equipped/unequipped

What is it
This is a collection of scripts, systems, and utilities that can be used with DFHack to modify the DF experience. The two main folders are Scripts (which include scripts and systems) and Utilities. All Utilities are built with Python 3+ and are run outside of the game. The scripts and systems are lua files that are run through DFHack. Scripts are run just like any other DFHack script and can be called from the command line or through any other method used to call the base DFHack scripts. Each script contains a help message which can be accessed by using script-name -help. The systems are called automatically behind the scenes and gather information through the raws (or in the case where there are no corresponding raws, such as the Class System, it uses a fake raw file).

Design philosophy
As many of you know, I have been around on this forum for awhile (over 11 years) and have created many scripts. Unfortunately they often became unusably complex as I added more and more to each script while still trying to maintain each scripts individuality. It eventually got to the point where even I had trouble running my own scripts and so I decided that a fresh start was needed. Instead of trying to make each script a stand alone download I have created a set of functions which act as the powerhouse behind the whole thing. These functions are made available through custom classes where appropriate, and through simple calls otherwise. Since each function serves a specific purpose they are relatively small and their use is shared across many different scripts. Additionally they can be called by other modders scripts if desired. Each script included in the collection (except for the intialization script) is also available to be called as a module through dfhack.reqscript, providing a simpler interface to the functions.

In addition to the scripts and their functions, there are the systems. Systems are a somewhat unique method through which a modder can change the way the game works, without worrying about writing their own scripts or getting the DFHack syntax correct. These also take advantage of the functions, but operate behind the scenes by reading the raw/objects files. Some of what the systems do can already be done with the existing modding tools (e.q. you can put "modtools/outside-only -building SCREW_PRESS -type OUTSIDE_ONLY" in the onLoad init file or you can put {OUTSIDE_ONLY} under the SCREW_PRESS in the building_custom.txt raw file), but other uses are not currently found in other scripts. The advantage to this method of scripting is that it allows modders who want to interface only with the raws the ability to use DFHack still.

How to use it
  • Copy the Scripts/raw/scripts folder into your DF raw folder (hopefully there are no conflicts with any other scripts you have installed there)
  • Copy the Scripts/raw/systems folder into your DF raw folder (directly into the raw folder, not the raw/scripts folder)
  • Put core/initialize in your onLoad init file. If you want more verbose output you can use -v repeatedly (up to -vvvvv)
  • All available systems should now be working, and all scripts should now be callable through any other methods you want

Update history
UPDATE 10/13/2020
Added Reactions to the Enhanced System. More detail is on the third post

UPDATE 04/06/2020
Massive revamp of all scripts, functions, and systems. See next two posts for included scripts and systems. Utilities are not currently up to date and should not be used. More information coming soon.

4
DF Dwarf Mode Discussion / Request for game save (0.40.24)
« on: March 23, 2015, 11:46:50 am »
I am requesting a few game saves of currently active forts with at least a several year history. The following is a list of things I am looking for.

  • 2+ years old
  • 2+ Invasions (also if you have a save with an active invasion that would be awesome)
  • Conflicts with at least two separate entities
  • Several dead dwarves, invaders, and local wildlife
  • Wounded dwarves, the more the better, and the more interesting the wounds the better (chopped of arms, missing eyes, etc...)

Any help would be appreciated.

5
So I hate to start a new thread just for this, but I think it it something that is important enough to discuss by itself.

The Goal: I am creating a script that will allow you to send your own dwarves on scouting/raiding missions in fortress mode. There will obviously be some randomness involved, but a group of adamantine clad, legenedary warriors should be able to do much better on a raid then a group of naked peasants.

The Issue: We need some sort of formula to calculate a units combat/scouting "rating" (for lack of a better word). Off the top of my head, the things that are important are, health of the unit, skills and attributes, types of items worn, and materials of items worn.

The Question: What should the actual formula for calculating these things be? How should each aspect add/subtract/multiply/divide into eachother to give a reasonable estimating of a units abilities.

An Example:
Code: [Select]
(H) Health is a number (0-1) where perfectly healthy is 1, and missing limbs/nerve damage/breathing trouble/anything else decreases the number
(S) Skill is an accumulation of all the military skills valid for a unit (i.e. if they are using an Axe and a Shield make sure to count the AXE and SHIELD skill)
(A) Attributes is a sum of all attributes, each with a different weighting
Items is broken down into weapons and armor;
 (I_W) Weapons takes the ATTACKS of the equipped weapon and takes the average "damage" a weapon can do
 (I_A) Armor takes the ARMOR_LEVEL, COVERAGE, and anything else of the equipped armor and computes a score
(M) Materials take the various YIELD/COMPRESS/SHEAR factors and computes a material value

combat_rating = H*(S+A+M*(I_W+I_A))
Now obviously there is a lot that needs to be fleshed out there, and it may be necessary to factor in interaction abilities and the like so that spell casters aren't left in the dust.

What I am hoping from the community is some serious, math oriented feedback about how best to calculate a units combat rating. In reality these ratings should be able to be used to predict arena fights to at least some extent (i.e. a unit with a combat rating of 1000 should almost always beat a unit with combat rating 100). Without this, any sort of scouting/raiding script will be practically useless, so please, leave as much feed back as you can! This is a project that is going to take the input of many many people.

6
Utilities and 3rd Party Applications / Another Random Creature Script
« on: July 15, 2014, 10:32:54 am »
Download here

Let me just start by saying that I don't think there is anything wrong with any of the other random creation scripts around, I was just looking for something a little different, and instead of asking the authors to change (or add more options) to theirs I decided to make my own.

Background:
I originally made this script for my own use (which is why it is not very polished, and overall poorly written from a coders perspective), but with the downtime at the start of the new release (DFHack being updated, bugs being squashed) I decided that now was an ok time to get it a least somewhat usable by others.

Differences to others:
What makes this random creature script different is that it assembles creatures from a group of templates that the user can dynamically add or subtract from. These templates cover;
  • Body Parts
  • Body Materials
  • Biomes
  • Interactions
  • Extracts
  • Castes
  • Types
  • Attacks

For a short example of the templates, this is what one of the HEAD, body part templates looks like.
Code: [Select]
[HEAD:HEAD_SMALL] <- name of the template, must be unique
{#DESCRIPTION;a small head} <- the description to add to the creature
{#ATTACKS;NONE} <- if there is an attack associated with the body part, you put its template ID here
{#ARGS;NONE} <- these allow for extra customization, see below
{#TOKENS;#HEAD} <- these tells the script that the creature now has a head
{#BODY;HEAD_SMALL} <- the actual body part (as used by DF itself)
{#LINK;NONE} <- what the body part links too, this is explained in more detail later

Structure:
The general structure of the code is as follows (more information on each of these steps will be given below);
  • Generate Body:
    • Pick Torso
    • Pick Head
    • Pick Limbs (Arms, Legs, Hands, Feet)
    • Pick Face (Eyes, Mouth, Ears, Nose)
    • Pick 0-2 Head Attachments (horns, antlers, tusks, mandibles, etc...)
    • Pick 0-2 Torso Attachments (tails, wings, stingers, etc...)
    • Pick 0-2 Limb Attachments (spikes, growths, etc...)
    • Pick 0-2 Misc Attachments (whatever you want)
  • Generate Body Materials
  • Generate Creature Biome
  • Generate Creature Type
  • Generate Creature Extracts
  • Generate Creature Interactions
  • Generate Creature Attacks
  • Repeat for X number of creatures

Since each one of these steps is individually customizable, you can see that you have a lot of options.

Templates:
Here is an example of each of the types of templates to give you an idea of how they work.
Biome:
Code: [Select]
[TEMPLATE:TEMPERATE_DENSE] <- template ID
{#DESCRIPTION;Can be found in any dense temperate location.} <- description to add to creature
{#TOKENS;#TEMPERATE} <- Token to be used by other templates
[SHRUBLAND_TEMPERATE] <- Actual raws to add to the creature
[ANY_TEMPERATE_FOREST]
Body Materials:
Code: [Select]
[TEMPLATE:SCALE]
{#DESCRIPTION;A scaled creature}
{#NAME;NONE} <- Not currently used, will be used in the future to help with name generation for creatures
{#ARGS;#SCALE} <- Arguments allow for additional customization within each template, more information on arguments below
{#TOKENS;#SCALE}
{#BP_COLORS;SCALE} <- What body parts might need random colors
[BODY_DETAIL_PLAN:#MATERIALS]
[REMOVE_MATERIAL:SKIN]
[REMOVE_MATERIAL:LEATHER]
[REMOVE_MATERIAL:HAIR]
[USE_MATERIAL:SCALE:CREATURE_MAT:ANIMAL:SCALE_#ARG1]
[BODY_DETAIL_PLAN:#TISSUES]
[REMOVE_TISSUE:HAIR]
[REMOVE_TISSUE:SKIN]
[USE_TISSUE_TEMPLATE:SCALE:SCALE_TEMPLATE_LEVEL_#ARG1]
[BODY_DETAIL_PLAN:VERTEBRATE_TISSUE_LAYERS:SCALE:FAT:MUSCLE:BONE:CARTILAGE]
[SELECT_TISSUE_LAYER:HEART:BY_CATEGORY:HEART]
[PLUS_TISSUE_LAYER:SKIN:BY_CATEGORY:THROAT]
[TL_MAJOR_ARTERIES]
[BODY_DETAIL_PLAN:STANDARD_HEAD_POSITIONS]
[BODY_DETAIL_PLAN:HUMANOID_RIBCAGE_POSITIONS]
[TENDONS:CREATURE_MAT:ANIMAL:SINEW:200]
[LIGAMENTS:CREATURE_MAT:ANIMAL:SINEW:200]
[BLOOD:CREATURE_MAT:ANIMAL:BLOOD:LIQUID]
[PUS:CREATURE_MAT:ANIMAL:PUS:LIQUID]
[HAS_NERVES]
[GETS_WOUND_INFECTIONS]
[GETS_INFECTIONS_FROM_ROT]
Castes:
Code: [Select]
[TEMPLATE:FEMALE_EGG]
{#DESCRIPTION;The females lay eggs.}
{#ARGS;#EGG_SIZE,#CLUTCH_MIN,#CLUTCH_MAX}
{#TOKENS;#EGG}
[CASTE:FEMALE]
[DESCRIPTION:#DESC]
[CASTE_NAME:#NAME:#NAMEs:#NAME]
[FEMALE]
[LAYS_EGGS]
[EGG_MATERIAL:LOCAL_CREATURE_MAT:EGGSHELL:SOLID]
[EGG_MATERIAL:LOCAL_CREATURE_MAT:EGG_WHITE:LIQUID]
[EGG_MATERIAL:LOCAL_CREATURE_MAT:EGG_YOLK:LIQUID]
[EGG_SIZE:#ARG1]
[CLUTCH_SIZE:#ARG2:#ARG3]
[POP_RATIO:100]
Extracts:
Code: [Select]
[TEMPLATE:VENOM_1]
{#DESCRIPTION;It has a painful venom.}
{#ARGS;#SEV,#END}
{#TOKENS;#VENOM}
[USE_MATERIAL_TEMPLATE:VENOM:CREATURE_EXTRACT_TEMPLATE]
[STATE_NAME:ALL_SOLID:frozen #NAME venom]
[STATE_ADJ:ALL_SOLID:frozen #NAME venom]
[STATE_NAME:LIQUID:#NAME venom]
[STATE_ADJ:LIQUID:#NAME venom]
[STATE_NAME:GAS:boiling #NAME venom]
[STATE_ADJ:GAS:boiling #NAME venom]
[PREFIX:NONE]
[ENTERS_BLOOD]
[REACTION_CLASS:VENOM]
[SYNDROME]
[SYN_NAME:#NAME venom]
[SYN_INJECTED]
[SYN_CONTACT]
[CE_PAIN:SEV:#ARG1:PROB:100:RESISTABLE:SIZE_DILUTES:LOCALIZED:VASCULAR_ONLY:START:0:PEAK:10:END:#ARG2]
[EXTRACT:LOCAL_CREATURE_MAT:VENOM]
Interactions:
Code: [Select]
[TEMPLATE:VENOM_SPIT]
{#DESCRIPTION;It is able to spit its venom at range.}
{#ARGS;NONE}
{#TOKENS;#VENOM_SPIT}
[CAN_DO_INTERACTION:MATERIAL_EMISSION]
[CDI:ADV_NAME:Spit venom]
[CDI:USAGE_HINT:ATTACK]
[CDI:MATERIAL:LOCAL_CREATURE_MAT:VENOM:LIQUID_GLOB]
[CDI:VERB:spit venom:spits venom:NA]
[CDI:TARGET:C:LINE_OF_SIGHT]
[CDI:TARGET_RANGE:C:6]
[CDI:MAX_TARGET_NUMBER:C:1]
[CDI:WAIT_PERIOD:5000]
Type:
Code: [Select]
[TEMPLATE:TRADE_WAGON]
{#DESCRIPTION;It is used as a wagon pulling animal.}
{#ARGS;#CAPACITY}
{#TOKENS;#TRADE}
[WAGON_PULLER]
[TRADE_CAPACITY:#ARG1]

Now by this point you might be asking yourself, "This sounds all well and good, but how do I actually go about using any of this nonsense?"

Well for that I need to introduce the last (and probably most confusing) piece of the puzzle, the Configuration file. Here is what mine (and so the currently implemented choices) looks like;
Code: [Select]
shearable_percent = 10 # This percent of creatures with hair will have the #SHEARABLE flag true
webber_percent = 10 # This percent of creatures will have the #WEBBER flag true
web_spray_percent = 50 # This percent of creatures that have #WEBBER will have #WEB_SPRAY
predator_percent = 10 # This percent of creatures will have the #PREDATOR flag true
venom_percent = 10 # This percent of creatures will have the #VENOM flag true
venom_spit_percent = 25 # This percent of creature that have #VENOM will have #VENOM_SPIT
hive_percent = 5 # This percent of vermin will have the #HIVE flag true
flying_percent = 90 # The percent of creatures with wings that have the #FLYING flag true
trade_percent = 10 # The percent of creatures above trade_size that have the #TRADE flag true
train_percent = 90 # The percent of creature with the #TRAIN flag true
roaming_percent = 50
general_percent = 50 # The percent of creatures that will have an additional type token
egg_percent = 10 # The percent of females that lay eggs
milk_percent = 10 # The percent of females that give milk
interaction_simple_percent = 10 # The percent of creatures that will have the #SIMPLE_INTERACTION flag true

vermin_size = 500 # Smaller than this size sets the #VERMIN flag true
tiny_size = 5 # Smaller than this size sets the #TINY flag true
trade_size = 100000 # The minimum size of all trade animals

mean_size = 200000 # Max size of creature is selected between 1 and this value with a triangular distribution function
sigma_size = 125000 # Standard deviation in size

max_attacks = 1 # Creatures will have a number of attacks between 1 and this value
max_age = 100 # Max age of creature will be between 2 and this value
max_venom_severity = 500 # Venom extracts will have a severity between 1 and this value with a triangular distribution function
max_venom_length = 10000 # Venom extract will have a length between 1000 and this value with a triangular distribution function
max_population = 100 # For non-vermin creatures sets a maximum population number with a triangular distribution function
max_cluster = 10 # For non-vermin creatures sets a maximum cluster number with a triangular distribution function

min_population = 1 # For non-vermin creatures sets a minimum population number with a triangular distribution function
min_cluster = 1 # For non-vermin creatures sets a minimum cluster number with a triangular distribution function

base_pet_value = 50 # Base value of all pets before size and modifier scaling
size_pet_divider = 5000 # Amount to divide size by before adding to pet value

max_misc_tags = 5 # Number of extra tags a given creature can have (misc tags are specified below)
max_active_tags = 1 # Number of active tags a given creature can have (active tags are specified below

#'!BODY_DETAIL_TEMPLATE': '!DESCRIPTION MODIFIER',
material = {'MATERIALS_LEVEL_1': 'This creature has weak materials',
'MATERIALS_LEVEL_2': '',
'MATERIALS_LEVEL_3': 'This creature has strong materials',
'MATERIALS_LEVEL_4': 'This creature has very strong materials'
}

tissue = {'MATERIALS_LEVEL_1': 'TISSUES_LEVEL_1',
  'MATERIALS_LEVEL_2': 'TISSUES_LEVEL_2',
  'MATERIALS_LEVEL_3': 'TISSUES_LEVEL_3',
  'MATERIALS_LEVEL_4': 'TISSUES_LEVEL_4'
  }

#'!ACTIVITY TAG': '!DESCRIPTION MODIFIER',
active = {'CREPUSCULAR': 'at dawn and dusk',
  'NOCTURNAL': 'at night',
  'DIURNAL': 'during the day',
  'MATUTINAL': 'at dawn',
  'VESPERTINE': 'at dusk',
  'ALL_ACTIVE': 'all the time'
}

#'!TAG': '!PREFSTRING',
misc = {'ADOPTS_OWNER': 'loyalty',
'AMBUSHPREDATOR': 'ability to stalk prey',
'BENIGN': 'benign nature',
'BONECARN': 'like of bones',
'CARNIVORE': 'taste for meat',
'CAVE_ADAPT': 'adeptness underground',
'COMMON_DOMESTIC': 'ability to domesticate',
'CURIOUSBEAST_EATER': 'curiosity',
'CURIOUSBEAST_GUZZLER': 'curiosity',
'CURIOUSBEAST_ITEM': 'curiosity',
'EXTRAVISION': 'ability to see at night',
'FLEEQUICK': 'ability to run away',
'HUNTS_VERMIN': 'ability to hunt vermin',
'LIKES_FIGHTING': 'ferocious attitude',
'MEANDERER': 'random behaviour',
'MISCHIEVIOUS': 'mischieviousness',
'MOUNT': 'use as a mount',
'MOUNT_EXOTIC': 'use as a mount',
'NO_AUTUMN': 'autumnal hibernation',
'NO_DIZZINESS': 'resistance to dizziness',
'NO_DRINK': 'ability to go long periods without drink',
'NO_EAT': 'ability to go long periods without food',
'NO_FEVERS': 'lack of fevers',
'NO_SLEEP': 'no need of sleep',
'NO_SPRING': 'spring hibernation',
'NO_SUMMER': 'summer hibernation',
'NO_WINTER': 'winter hibernation',
'NOBREATHE': 'no need to breath',
'NOEMOTION': 'lack of emotion',
'NOEXERT': 'incredible endurance',
'NOFEAR': 'lack of fear',
'NONAUSEA': 'resistance to nausea',
'NOPAIN': 'resistance to pain',
'NOSTUN': 'resistance to being stunned',
'PARALYZEIMMUNE': 'resistance to paralysis',
'TRANCES': 'ability to enter martial trances',
'TRAPAVOID': 'ability to avoid traps',
'UBIQUITOUS': 'over abundentness',
'VERMINHUNTER': 'expert vermin hunting',
'WEBIMMUNE': 'ability to slip out of webbing'
}

#'!SELF DECLARED ARGUMENT (in all template.txt)': '!VALUE OF ARGUMENT',
args = {'#SHELL': 'random.randint(1,4)',
'#SCALE': 'random.randint(1,4)',
'#CHITIN': 'random.randint(1,4)',
'#TOOTH': 'random.randint(1,2)',
'#HOOF': 'random.randint(1,2)',
'#HORN': 'random.randint(1,2)',
'#NAIL': 'random.randint(1,2)',
'#SEV': 'int(random.triangular(1,max_venom_severity))',
'#END': 'int(random.triangular(1000,max_venom_length))',
'#MILK': '20000',
'#EGG_SIZE': 'int(size_r/1000)+1',
'#CLUTCH_MIN': 'random.randint(1,5)',
'#CLUTCH_MAX': 'random.randint(6,10)',
'#CAPACITY': 'int(size_r/200)',
'#DIVISOR': '1000'
}

#'!SELF DECLARED ARGUMENT (in template_BODY.txt)': !BOOLEAN FLAG,
body_token = {'#SHEAR_HAIR': False,
'#CHITIN': False,
'#SHELL': False,
'#SCALE': False,
'#WINGS': False
}

#'!SELF DECLARED ARGUMENT (in template_BIOME.txt)': !BOOLEAN FLAG,
biome_token = {'#WATER_ONLY': False,
'#DESERT': False,
'#TEMPERATE': False,
'#TROPICAL': False,
'#MOUNTAIN': False,
'#FREEZING': False,
'#UNDERGROUND': False
}

#'!SELF DECLARED ARGUMENT (in template_TYPE.txt)': '!REQUIRMENTS FOR TRUE',
main_token = {'#MUNDANE': 'True',
'#SAVAGE': 'False',
'#CHAOS': 'False',
'#PURGED': 'False',
'#FANCIFUL': 'False'
}

#'!SELF DECLARED ARGUMENT (in template_TYPE.txt)': '!REQUIRMENTS FOR TRUE',
sub_token = {'#TRADE': '((size_r > trade_size) and (random.randint(1,100) < trade_percent))',
'#VERMIN_WATER': '((biome_token_flag["#WATER_ONLY"]) and (size_r <= vermin_size))',
'#VERMIN_GROUND': '((not biome_token_flag["#WATER_ONLY"]) and (size_r <= vermin_size))',
'#VERMIN_TINY': 'size_r <= tiny_size',
'#FLYING': '((random.randint(1,100) < shearable_percent) and (body_token_flag["#WINGS"]))',
'#TRAIN': 'random.randint(1,100) < train_percent',
'#ROAMING': 'random.randint(1,100) < roaming_percent',
'#PREDATOR': 'random.randint(1,100) < predator_percent',
'#WATER': 'biome_token_flag["#WATER_ONLY"]',
'#SHEARABLE': '((random.randint(1,100) < shearable_percent) and (body_token_flag["#SHEAR_HAIR"]))',
'#WEBBER': 'random.randint(1,100) < webber_percent',
'#GENERAL': 'random.randint(1,100) < general_percent',
'#UNDERGROUND': 'biome_token_flag["#UNDERGROUND"]',
}

#'!SELF DECLARED ARGUMENT (in template_EXTRACT.txt)': '!REQUIRMENTS FOR TRUE',
extract_token = {'#VENOM': 'random.randint(1,100) < venom_percent',
        '#HIVE': '((random.randint(1,100) < hive_percent) and (size_r <= vermin_size))'
}

#'!SELF DECLARED ARGUMENT  (in template_CASTE.txt)': '!REQUIRMENTS FOR TRUE',
caste_token = {'#MALE': 'True',
   '#FEMALE': 'egg_percent+milk_percent < caste_r <= 100',
   '#EGG': 'milk_percent < caste_r <= egg_percent+milk_percent',
               '#MILK': 'caste_r <= milk_percent',
}

caste_numbers = {'#MALE_NUMBER': 1,
'#FEMALE_NUMBER': 1,
'#EGG_NUMBER': 1,
'#MILK_NUMBER': 1,
}

#'!SELF DECLARED ARGUMENT  (in template_CASTE.txt)': '!REQUIRMENTS FOR TRUE',
interaction_token = {'#CLEAN': 'False',
'#BUMP': 'False',
'#SIMPLE': 'random.randint(1,100) < interaction_simple_percent',
'#HIDE': 'False',
'#VENOM_SPIT': 'extract_token_flag["#VENOM"] and random.randint(1,100) < venom_spit_percent',
'#WEB_SPRAY': 'sub_token_flag["#WEBBER"] and random.randint(1,100) < web_spray_percent'
}

#'TISSUE TOKEN TO COLOR (from template_BODY.txt)': 'TISSUE_NAME' <- what the names for the body parts that get color tokens are
color_token = {'SCALE': 'scales',
   'SKIN': 'skin',
   'EYE': 'eyes',
   'CHITIN': 'chitin',
   'SHELL': 'shell'
}

#'!SELF DECLARED ARGUMENT  (any argument from above)': PET VALUE MODIFIER <- If any of the flags are true, will multiply the value of the creature by (1+#)
value_token = {'#VENOM': 1,
     '#SHEARABLE': 1,
     '#WEBBER': 1,
     '#TRAIN': 1,
     '#HIVE': 1,
     '#EGG': 1,
     '#MILK': 1
     }

As you can see, this system is not simple. It is not a basic 'click and run' random creature script. It is highly customizable and adaptable. You can add templates too any of the template files, you can add extra tokens and arguments, you can change the percent probabilities of certain flags being set true, you can basically do whatever you want.

Want to make 10 large, forest dwelling, web spitting, savage, creatures? You can do that.
Want to make 1000 random size, random biome, random trait creatures? You can do that too.

All by just changing some of the parameters in the configuration file and the templates.

Instructions for use will come in the following post.

7
DF Suggestions / Expanded [USAGE_HINT] Tokens
« on: June 10, 2014, 11:47:40 am »
I noticed that there are a couple of new [USAGE_HINT] tokens in the upcoming version, and so am unsure if this suggestion has already been done, but I figured I would add it anyway;

Right now in order to have a dwarf use a buffing ability on themselves only when in combat you are limited to the following weird workarounds:
1. Ping-pong interactions which give the enemy the ability to use an interaction which gives your dwarf the buff. This involves creating multiple interactions for each wanted interaction (it also has other issues with making sure the correct dwarf gets targeted by the enemy and such)
2. Blood-borne interactions which allow the dwarf to use an interaction only when they are covered in their own blood. This, of course, means that the dwarf must bleed, which means a particularly skillful dwarf may never use the interaction.
3. DFHack based interactions which use a [USAGE_HINT:ATTACK] interaction and then detects the casting unit. This is the best solution, but still incomplete, since, as of this posting, it is still not 100% accurately possible to detect the casting dwarf.

My suggestion is to add more usage hints, like, ON_ENEMY_SIGHT. This would mean that your target could still be self-only, but that it wouldn't trigger all the time (like a usage hint of greeting). Below is a list of usage hints that would be fun to see;
  • ON_BERSERK
  • ON_MOOD
  • ON_SIEGE
  • ON_STEALTH
  • ON_OUTNUMBERED
  • ON_HUNGRY/THIRSTY/STARVING/EXHAUSTED

Are there other usage hints people would like to see?

8
This post will be linked to the DFHack script collection thread.

Update 2/21/15
ReadMe files have been included in the package.

Download scripts from github: https://github.com/Pheosics/v24-r3_Scripts
Download scripts from DFFD: (Not currently updated)

Basic (Interaction/Reaction/Command Line based) Scripts Included: (all scripts should contain documentation inside them)
  • Building Based Scripts
    • subtype-change - change the subtype of a building (i.e. change it from one custom building to another)
    • remove - deletes the building
  • Unit Based Scripts
    • attribute-change - change a units physical or mental attributes
    • body-change - change the temperature of a units body parts
    • boolean-change - don't use this, it will crash your game
    • skill-change - change a units skills
    • trait-change - change a units traits
    • counter-change - change the value of one of the various counters associated with a unit (e.g. pain, paralysis, stun, blood, etc...)
    • propel - turn a target unit into a projectile
  • Item Based Scripts
    • create - create an item that will last for a set amount of time
    • remove - removes an item from existence
    • material-change - change the material of a currently equipped item
    • quality-change - change the quality of a currently equipped item
    • subtype-change - change the subtype of a currently equipped item
    • projectile - create (or use item from inventory) an item that shoots from one location to another or falls from the sky
  • Tile Based Scripts
    • material-change - change the material of a tile
    • temperature-change - change the temperature of a tile
  • Flow Scripts
    • customweather - spawn custom weather effects that last for a specified duration
    • spawnflow - spawn one of the various flows
    • eruption - create water or magma in a radius about a unit/location
  • Special Scripts
    • counters - allows for custom tracking of things that is persistent across saves
    • teleport - teleport a unit or item to various locations
Intermediate (Raw/LUA_HOOK Based) Scripts Included: (these scripts are no longer included in current packages, they should all still work from previous packages, but new scripts have replaced their core functionality.)
  • building-upgrade - handles changing building subtypes based on reactions
  • item-copy - copies any item of any material with a single reaction
  • item-imbue - changes the material of an item with a reaction
  • item-improve - change the quality of an already created item using a reaction
  • item-upgrade - change the subtype of an already created item
  • teleport - move unit(s) or item(s) from one place to another using reactions
Advanced Scripts Included:
  • wrapper (this deserves it's own spot because it is so versatile, this post has an in-depth explanation of it's uses)
Custom In-Game Systems Included:
  • Classes System - in depth guide found here
    • Experience system, based on kills (customize how much each creature is worth)
    • Class upgrade trees (e.g. level 3 Warrior required for Knight, level 2 Knight and level 1 Priest required for Paladin)
    • Spell learning based on various requirements (e.g. attributes, skills, traits, class)
    • Completely configurable in external text file (follows format similar to DF raws for ease of use)
  • Civilization System - in depth guide found here
    • Define civilizations based on their entity
    • Civilization level up during gameplay
    • Add/Remove creatures/items/materials/etc... from civilizations as they level up
    • Add new noble positions to civilizations as they level up
    • Completely configurable in external text file (follows format similar to DF raws for ease of use)
  • Event System - in depth guide found here
    • Trigger random events based on specified requirements
    • Events are user specified scripts, allowing for things like spawn-unit
    • Requirements are things like wealth, export, inport, deaths, etc...
    • See this thread for an example
In Progress:
  • GUI - Unit Viewer
    • Check a units attributes and skills
    • Check a units active syndromes
    • Check a units known interactions
    • If used in conjunction with the Class System, it will show all classes, levels, and experience
    • See this thread for current workup
  • GUI - Journal
    • Track encountered creatures (descriptions, stats, etc...)
    • Allow modders to include extra information (reaction requirements, building requirements, material rankings, etc...)
    • Allow modders to hide certain information until certain requirements are met
    • Allow modders to add back story to their mods that is visible in game
  • GUI - Quests
    • Part of the Journal update
    • Allows modders to create generic and specific quests that offer rewards
    • Quests can be things like kill X goblins, export Y wealth, etc...
    • Rewards can be upgraded buildings, item rewards, class level ups, etc...
  • Spell Database
    • Full spell database using various scripts
    • To be used in my mod, but available for other modders to use
    • In depth spells, allowing for silencing, reflecting, immunities, resistances, vulnerabilities, and more

9
Mod Releases / The Third Age v0.10 (Alpha)
« on: October 20, 2013, 06:13:02 pm »
The Third Age v 0.1

Download link coming soon.

Story thus far:

The First Age
Time of Peace:
Little is known about this time. All that is recorded is the five elder races lived in harmony and formed the elder council. The Dragons ruled the skies and mountains, building enormous marble spires in the sky and expanding their mastery of magic. The Xecti ruled the deserts and badlands, turning the desolate wastelands of the world into marvelous glass cities full of beauty. The Sylvan ruled the forests and marshes, keeping watch over the plants and beasts of the world and serving as mediators for any disputes that might arise. The Old Ones ruled the underground, building massive fortresses where they could expand their mastery of technology. And the Giants ruled nothing, tasked with shaping and molding the world, the Giants traveled all the lands creating and destroying where necessary and held mastery over the elements.

Time of Strife:
The time of strife began when the Dragons discovered the Alfar, a lesser race that had begun to show magical prowess over a new sphere of magic. The elder races were amazed to see a lesser race that had powers that they did not. The Old Ones and Xecti demanded that the Alfar be destroyed, for they believed that they were abominations and would tip the scales of balance. The Dragons refused to let harm befall the Alfar and so broke all treaties with the other elder races and left the elder council. In response the Old Ones rekindled their work into the animation of stone and metal, which was previously forbidden by the elder council, in hopes of returning the balance. With the help of the Giants the Old Ones were able to create the Brimir, beings of stone and metal that commanded the forces of the elements, but had no ability for growth and progression. Unhappy with results of their creation, the Old Ones experimented endlessly on the Brimir, continuously digging through the earth in hopes of finding a new element that could increase their creations abilities. It was through this rapid digging that they found the precious metal Adamantine. With this magical metal they were able to transmute stone to flesh and give true life to their creations. Now capable of truly living, the Brimir were able to rival the Alfar in raw power and potential, but the discovery of this rare metal spurred the Old Ones to expand their empire and search for even rarer more powerful minerals.

Time of Turmoil:
The aggressive expansion of the Old Ones started the time of turmoil. The Old Ones were convinced that the mountains the Dragons called home held powerful metals that gave the Dragons their supposed immortality and control over magic. Neither race was willing to attack the other out right, but several skirmishes began to breakout along the mountains. Mainly fought by the Alfar and Brimir, deaths were rare, but inconsequential to the elder races, who viewed the lesser races as little more than tools. The Sylvan and Xecti refused to take sides in the conflict, instead trying to reform the council in the hopes of restoring peace. It was during these skirmishes that the Old Ones found Cuendillar, a metal even stronger than Adamantine. They were only able to find small amounts of it scattered deep underground, but with just the small amount they found they were able to construct colossal metal creations that could rival even the Dragons mighty powers. In their greed to find more Cuendillar they began digging as deep as they could, soon finding a vast supply of it forming an entire layer deep underground. As they excavated it they began rebuilding their underground fortresses with this new metal and again experimenting on the Brimir. But they dug too deep.

The Breaking:
All records from this time have been lost. The stories say that the Old Ones, in their haste and greed, dug through the Cuendillar, looking for more powerful minerals. But what they found was beyond anything they could have imagined. As soon as the breached the last layer of Cuendillar the world shook, volcanoes erupted, mountains fell, and a great evil was unleashed on the world. Chaos flowed out of the small crack they created and began to expand the hole between the worlds. Soon demons and other monstrosities poured out of the rift, killing and corrupting all they came across. At first the other races ignored the Old Ones calls for aid, stating that it was their own fault, but soon the rift broke through the underground and the demons flooded the world. The Xecti were the first to fall. Their marvelous glass cities turned to dust, the few surviving members fled deep into the wastes in hopes of escaping the demons notice. The Sylvans knew that if they did not act fast they would be next, and so, using their powerful connection with the plants and beasts of the world they hid themselves in protective groves, hoping to be spared the demons assault. The Old Ones tried desperately to bring the remaining elder races together in an alliance to stop the demons, but the Dragons still ignored their cries for help, thinking themselves stronger than any demons. On the day that the first dragon died it is said that the entire sky cried with anger, and the Dragons joined the newly formed council of three.
At first it appeared the alliance was working, the Dragons hunted the demons down one by one and slaughtered them as the Old Ones and Giants set about constructing fortifications to protect the rift. But the fortifications were not enough to stop the corruption of Chaos from spreading over the lands. As more and more land became corrupted the demons appeared to grow bolder and gain strength. While at first they simply had to defend against one or two at a time, now there were four or five, then ten, then thirty, then the gates were overwhelmed, and the land grew dark with demons. The dragons did their best to deal with the demons, but they were now strong enough to fight back, and dragons began dying in droves. The council decided that the only way to win this war would be to close the rift. The Old Ones developed a plan, using the combined might of the three elder races and the Alfar and Brimir as conduits they believed they could use the Adamantine to re-seal the rift. In order to by them time the Dragons decided to make the ultimate sacrafice. Every able bodied dragon would fly directly into the rift and hold back the demons. It is said that on that day the sun was blacked out by the hoard of dragons that descended on the rift. Combining the Giants shaping powers with the Alfar and Brimir the Old Ones constructed giant pillars of Adamantine that could carry the energies needed to seal the rift, and using their own life force as the trigger all of the remaining Old Ones withdrew into their fortresses and completed the ritual. In one giant flash of light the rift was sealed, with the Dragons on the other side. The Cuendillar had been mutated into a pitch black rock, harder than any metal, and impossible to penetrate with the fortresses sealed in the same rock. As the Alfar, Brimir and Giants surfaced from the rift they found the world broken and corrupted, but free of demons...

The Second Age:
Time of Wandering:
With the disappearance of the Dragons and Old Ones the Alfar and Brimir were left to fend for themselves. They turned to the Giants, the last remaining elder race, for guidance but found that the Giants had no interest in being their masters. Instead the Giants set out to purge the corruption of Chaos that had spread across the world and so left the two lesser races to their own devices. In the beginning the Alfar and Brimir lived together in the ruins of the once great cities. but ideological differences quickly emerged and they began to wander the world, hoping to find their places. It is during this time that the two races began to fragment. The Alfar split into the Orcs, Elves, and Drow and the Brimir split into the Gnomes, Dwarves, and Goblins.

Time of Rebuilding
During this time the six new races of the world, the young races, began rebuilding themselves. Each found their own niche in the world. Also during this time the Sylvan were reawakened and so the world once again had two of the elder races. Little conflict is reported during this time as the young races had plenty of room to rebuild and they still felt some sense of camaraderie. This was until the Goblins began to attack the other races.

Time of Expanding
The Goblins had been corrupted beyond recognition by the Chaos of the rift. Their attacks broke the last barriers of peace that existed between the young races and started a time of several wars as the newly founded civilizations began to expand, and their need of materials grew. This was a time of much bloodshed and growth, but ended with a tenuous peace between most of the young races as they established well defined boundaries and borders. With the established peace, the races began to trade and communicate again. Several members of the various races also formed together to create the Mages Guild and Hunters Guild, groups of individuals who share commonalities outside of their race.

The Quake
This peace was again disrupted by the great quake. The origin and cause of the quake is unknown. What is known is that the quake opened up the northern mountain passages and a path to the sea.
From the north a new race came, the Humans. Descended from neither the Alfar or the Brimir the Humans brought with them a new civilization, with powers not before seen by any of the young races. Worshiping strange gods they are capable of manipulating life and death. Because of the Humans strange new belief system and culture the young races were again plunged into conflict as these outsiders forced their way in. Several Humans also joined the guilds, further upsetting the young races. From the sea came the desert dwelling Ashari. A strange mix of beast and man, the Ashari are often ignored because none of the young races will live in the desert.
The quake also brought the Giants back into interaction with the other races. Previously moving from one corrupted place to another and purging them, the Giants had no civilization. Now, for the first time in recorded history they were constructing a civilization, The young races were unsure how to handle the Giants as they still had a large amount of admiration and respect for them.

The Third Age:
The Third Age began with the return of the Xecti and the arrival of the Dragon Priests.

Time of the Return:
The young races were unprepared for the return of the Xecti. All of the stories they had heard of this elder race were ones of peace and beauty. But the Xecti they saw now were ruthless, emotionless, and vicious. They quickly destroyed all the settlements near their territory. Killing everyone and everything in their way. The survivors say they saw huge, monstrous creatures leading the Xecti, but the few who did survive were so traumatized and injured that they died shortly after being found. Currently the Xecti seem content to stay in their territory, but any who get too close are never heard from again.
Along with the return of the Xecti a new secretive group has arrived. Calling themselves the Dragon Priests, they wander the lands converting members of every race into their Dragon Cult. The origin of the Dragon Priests is unknown, but one thing is certain, their are not members of any known race, and they have tremendous powers.

This is the time you find yourself in. A leader of a new group of Dwarves, setting out from your mountain home, you are tasked with starting a new stronghold for your civilization and finding out as much as you can about the Xecti, the Dragon Priests, and the Quake. Good luck!

Entities:
Extinct Races: These races are no longer present in the game, but are often mentioned.
  • Alfar: The Alfar were discovered by the Dragons sometime during the Time of Peace. They were one of the many lesser races that existed in the world, but were the first to show an aptitude for magic, and so the Dragons named them first of the lesser races. The Alfar were not masters of magic like the Dragons, but did have an innate connection over the arcane sphere, which no other race, besides the Dragons, possessed. Drow, Elves, and Orcs are descended from the Alfar.
  • Brimir: The Brimir were the Old Ones response to the Alfar. Unlike the Alfar, the Brimir were actually stone creations of the Old Ones, not one of the lesser races, but through science and engineering the Old Ones were able to turn stone into flesh, and with the help of the Giants were able to imbue the Brimir with a connection to the elemental sphere. This earned the Brimir the position of second of the lesser races. Dwarves, Gnomes, and Goblins are descended from the Brimir.
  • Dragons: The Dragons were the largest and most powerful of all the elder races. They held dominion over the sky and mountains and were masters of magic. Each Dragon was born with a specific school of magic bred into them, and from an early age could summon this magic at will. Because of this innate mastery, their magic was often more unpredictable and uncontrollable than other races, but always far more powerful. The vast majority of the Dragons disappeared from the world when the rift was closed with them on the other side. The few remaining members of their race have lost their once noble nature and now attack all lesser races on sight, these are now known as elder dragons. All dragons born after the breaking have been much smaller, and hold less command over the spheres of magic. These dragons are little more than powerful beasts.
  • Old Ones: The Old Ones were not large, powerful, or magically talented, but they were smart. They embraced technology, and created some of the most remarkable inventions the world had ever seen. Their cities were populated by mechanical constructs and moving stone, and they were even able to create life from stone at the height of their civilization. During the breaking the Old Ones sacrificed their life essence to power the machines needed to close the rift and seal it forever. However, it is rumored that some of the Old Ones still travel the underground, twisted and corrupted by their exposure to Chaos, they are no longer anything more than monstrosities.
Races: The various races you will meet in this world
  • Ashari: The Ashari are a strange mix of beast and man. Their origins are unknown, but they began arriving sometime after the quake from across the sea. They are a nomadic race that makes their home in the desert (whether it be the desert of the land or the desert of the sea). They value precious gems and metals above all else and are ruled by a council of twelve merchants. Theft is perfectly acceptable to the Ashari and is seen as nothing more than survival of the fittest. Their beast like nature makes them masters of stealth, and they are some of the worlds most proficient thieves and deadly assassins. They have no innate magical ability, but are able to manipulate the mental sphere after years of practice.
  • Automaton: The Automaton are the constructions of the Gnomes Clockwork Guild. For some unknown reason the automatons rebelled against the Gnomes, slaughtering most of the Clockwork Guild in the process. They are now a semi-sentient race of machines that lives beneath the Earth, and attack all organic creations on sight. It is unknown who leads these machines, or why they rebelled, but it can't be good, whatever the reason.
  • Drow: Descended from the Alfar, the Drow have been perverted by the power of Chaos and now seek to re-open the rift in order to capture that power for themselves and to rejoin with the dragons. Living underground their society has formed around the worship of Chaos and is ruled by priests and priestesses. They still command considerable arcane power, but have begun experimenting with new spheres of magic, particularly the mental sphere.
  • Dwarf: Descended from the Brimir, the Dwarves are the only worshipers of the Old Ones left. They enjoy living underground but have made many settlements outside as well. They embrace their power over the elemental sphere and are masters at smithing and crafting. They are ruled by a monarchy and are born with certain unique traits. While any Dwarf can do almost anything, some are much more suited to certain tasks than others.
  • Elf: Descended from the Alfar, the Elves now live in the forests amongst the Sylvan. After the breaking the Elves wandered the land seeking refuge and guidance, which they found when the re-awoke the Sylvan. Through years of teaching by the Sylvan, the Elves are now able to tap into the nature sphere of magic and command plants and animals. Some Elves still practice the arcane sphere as well, and some have even been able to combine the two spheres for greater affect. It is these few Elves who lead the others, although some would suggest that it is the Sylvan who truly rule the Elves.
  • Giants: One of the elder races, the Giants are the appointed caretakers of the world. They help to shape the rivers, mountains, and all other lands. They were instrumental in helping the Old Ones create the Brimir by infusing them with elemental energy. After the breaking the Giants set about trying to purge the lands of the taint of Chaos. Since the quake they have come abandoned their mission, and for the first time in known history, have begun forming settlements, it is unknown what caused the change, but without their influence the tainted regions of the world have begun growing. Several of the Giants have also been corrupted by their constant exposure to the Chaos and now roam the lands attacking all in their way.
  • Gnome: Descended from the Brimir, the Gnomes are the smartest of the young races. Following in their creators steps the Gnomes hold technology above all else. They are broken into several different guilds, depending on their talents, and are ruled by an elected official amongst the heads of the guilds. The Gnomish Clockwork Guild was responsible for the creation of the Automatons (which was to be the Gnomes crowning achievement). Gnomes have completely abandoned the forces of magic, and have lost most of their connection to the elemental sphere.
  • Goblin: Descended from the Brimir, the Goblins have been almost corrupted beyond recognition by the Chaos. Peaty, vengeful, and just all around crazy, the goblins spend their time mixing technology and magic in strange and deadly ways. They attack everyone and everything that they can find, and are often found attacking each other over the most trivial of things. They are ruled only by the strongest and most devious of goblins and assassinations are a common place occurrence.
  • Human: The Humans arrived from the northern mountains after the quake. Unlike the other races the humans had a large empire far to the north and were able to grow without conflict from other races or interference with the elder races. Sometime after the breaking the humans began worshiping various gods, and through their faith were able to tap into the divine sphere of magic. The group of humans that arrived from the north are just a small group of the northerners, but they have already managed to form a strong civilization amongst the young races, drawing much resentment and anger. They are ruled by noble born and wealthy individuals, with the majority of their populace being poor underprivileged peasants. Their worship of their gods is the core of their society.
  • Kobold: No one knows what the Kobolds are. They have been around as long as the elder races, but are little more than squabbling beasts. Little is known about Kobold society (or even if they have one) but they are simply treated as pests and are only truly a danger to the undefended farmers and country homes.
  • Orc: Descended from the Alfar, the Orcs live in the vast plains of the world, often choosing to live in the most savage and harshest environments. Their society is based on honor through combat, and they are often found out hunting. The more dangerous the beast, the more honor gained. Those who lead the Orcs are those with the most honor. Like the Elves, the Orcs have begun practicing the nature sphere of magic, but instead of plants and animals, they commune with the spirits of the world. They worship those warriors who die gloriously in combat.
  • Sylvan: One of the elder races, the Sylvan are creatures of the forest. Often being mistaken for trees themselves, the Sylvan live in complete harmony with the forest. During the breaking the Sylvan retreated into the forests and hibernated, only being awoken by the Elves sometime after the breaking. They are an aloof and hidden society, with only the Elves interacting with them. They have remained largely neutral and uninvolved for the entire known history.
  • Xecti: One of the elder races, the Xecti were thought destroyed during the breaking, but several members survived by hiding deep in the wastelands of the world. When they returned, they had been changed. No longer the noble race of stories, with their glass cities and wonderful works of art. The Xecti are now viscous killers, obliterating all who come close to their territory, and executing any emissaries sent to speak with them. Their motives are unknown, but if they decide to leave their territory the other races know that they will bring war.
Groups: These are conglomeration of races that have formed large independent groups (note that in game play terms all the races in the groups have been put into one creature, so you will see an Elf mother with a Human father produce a Dwarf child, etc...)
  • Mages Guild: Formed before the quake, the Mages Guild is a place where any member of any race can come to learn and practice the arts of magic. Some show more aptitude than others, but all are welcomed to the guild. They are the self appointed police of magic, and are often called upon to deal with various concerns and crisis that arise. With the arrival of Humans and Ashari their ranks have been bolstered and the divine sphere has been added (reluctantly) to the taught practices, although it is still considered a lesser form of magic. They have begun researching the breaking in attempts to figure out how magic played a role in the near destruction of the world.
  • Hunters Guild: The Hunters Guild was formed around the same time as the Mages Guild, but with a very different purpose. The Hunters Guild members join not for education or practice, but for personal fame and glory. Whenever a beast is terrorizing the land, the people hire the Hunters Guild to come and deal with it. The organization has only a loose hierarchy, and instead is reliant on many small chapters throughout the world.
  • Dragon Worshipers: Since the quake a mysterious group of priests have begun appearing throughout the lands. These priests have been converting entire villages into fanatical cultists who worship the Dragons as gods. Their motives and origin are unknown, but they have been outlawed by almost all the races, and are considered a dangerous threat.

10
HAS NOT BEEN UPDATED TO .40x! WILL BE UPDATED SHORTLY.

So I have written a couple different python utilities for analyzing and modifying dwarf fortress raws. I figured I would start uploading them as I make them public worthy.

Modding with Excel!
 
Modding with Excel is a new set of python scripts I have been working on that allows you to move data between .txt and .csv (comma separated value) files. This allows you to add entries via Excel (or your favorite CSV reader) easily and cleanly, allowing for sorting and quick analysis of entries. Now working for items and inorganics. There are included csv files so you can see how to set them up.
Screen shot for MWE:
Spoiler (click to show/hide)

PLEASE NOTE: In the columns with more than one entry the python program is expecting enters between the entries (i.e. \n). If people feel this is too limiting I can have it acknowledge the entries in a different way.

MWE_ITEMS: This utility will handle all item types (Weapons, Ammo, Armor, Gloves, Helm, Pants, Shoes, Food, Instruments, Tools, Toys, Siege Ammo, and Trap comps) by making separate files for each. To use, simply place the python script in your raws folder and run. It will prompt you if you wish to copy from Raw to CSV or CSV to Raw, choose by entering 1 or -1.

MWE_INORGANICS: This is a preliminary utility. It has all the function you need to create inorganics in Excel, but it doesn't break up the inorganic tokens by what they are commonly used for (i.e. there is a column for MEAT_NAME for all them). I am planning on adding some more logic to the program so that the csv files aren't so large, but currently it works fine (also supports syndromes in your inorganics). Functions the same as MWE_ITEMS.

MWE_PLANTS: Another preliminary utility that suffers from the same drawbacks as MWE_INORGANICS (although it does successfully parse the plants into trees, grasses, and crops) which makes the csv files more manageable.

Both MWE_INORGANICS and MWE_PLANTS works better to generate raws from then as a means for sorting data. More work needs to go into making the csv files generated useful.

MWE_CREATURES: This utility differs from the others in that it only works in one direction (namely to go from CSV files to RAW files). Because of the complexity of creatures I have also introduced a new feature, Templates! (I will be adding this feature into the other MWE scripts as well). Templates allow you to group your creatures with similar bodies, attacks, castes, and traits, while still giving you the ability to modify them. A sample attack template is provided below;

Code: [Select]
[TEMPLATE:BITE]
[ATTACK:BITE:BODYPART:BY_CATEGORY:#ARG1]
[ATTACK_SKILL:BITE]
[ATTACK_VERB:bite:bites]
[ATTACK_CONTACT_PERC:#ARG2]
[ATTACK_PENETRATION_PERC:#ARG3]
[ATTACK_FLAG_EDGE]
[ATTACK_PRIORITY:#ARG4]
[ATTACK_FLAG_CANLATCH]

you can reference this template by providing a line in the CSV file under the attack column BITE:BEAK:100:100:MAIN. Templates are able to handle an infinite number of arguments, but for ease of use it is best to keep your arguments limited in number. An example CSV file (creatures.csv) is included to show case the use of this script. In addition four template files are included (templates_ATTACK.txt, templates_BODY.txt, templates_CASTE.txt, templates_TYPE.txt) each with example templates that are referenced in the CSV file. This script allows fast an easy creation of new creatures. (NOTE: Currently only the ATTACK and CASTE templates support variable arguments, the BODY template uses specific arguments for materials and tissues, and the TYPE template has no argument support. This will be fixed in a later version)

Misc Scripts

ADD_CASTES: This utility adds caste information to creatures raws. It only modifies files specified and adds castes that are user specified to the creatures in those files (UPDATE: There is now an external file named creature_iist.txt that lets the user specify which creatures are actually modified). This allows adding things like giant variations directly to the creature instead of having them as a separate creature. This script requires input from the user. To use open the script with some text editor (I personally use VIM) and modify the required fields (there is short comments that explain what to do). Because of the extra level of complication with this script files in the objects folder will not be overwritten, instead a new file will be created in the raws folder which can then be checked to make sure it did what you wanted, and then put into the objects folder.
Screen shot for ADD_CASTES:
Spoiler (click to show/hide)

ADD_SIZE: This utility reads all of the creature raws and puts the max size of the creature (as listed in the creature raws) in the creatures description. This utility currently has several limitations. It does not add a size to any creature that doesn't have a size listed in the raws (most creatures that use the creature variation templates, like GIANT and ANIMAL_PERSON, don't have their own size listed), and it only lists the largest size in the raws. Also, subsequent runs will not change the values in the description, even if the values in the raws are changed. To run, simply put the python file in the raws folder and run it, it will modify all creature files in the objects folder. As always, it is a good idea to back up your files before running any utility that directly modifies files.
Screen shot for ADD_SIZE:
Spoiler (click to show/hide)

ORGANIZE_ENTITY: This utility reads the entity files and separates each entity into their own files. In addition it organizes the file into different components (e.g. Equipment, Items, Behavior, Ethics, Flavor, etc...) This allows for easier navigation of the entity files. To run, simply put the python file in the raws folder and run it, it will modify all creature files in the objects folder. As always, it is a good idea to back up your files before running any utility that directly modifies files.
Screen shot for ORGANIZE_ENTITY:
Spoiler (click to show/hide)

SPLIT_CVARIATIONS: This utility reads through all of the creatures raws and seperates out the ANIMAL_PERSON and GIANT creature variations into their own files. This allows for easy deletion of these creatures for those that don't like having them in the game, or for easy manipulation.  To run, simply put the python file in the raws folder and run it, it will modify all creature files in the objects folder. As always, it is a good idea to back up your files before running any utility that directly modifies files. (UPDATE: Fixed a bug that was brought to my attention by CryptoCactus)
Screen shot for SPLIT_CVARIATIONS:
Spoiler (click to show/hide)

SPLIT_REACTIONS: This utility reads through all of the reaction raws, and separates them into individual reaction files. I use this for taking apart mods where I just want to use one specific building. To run it all you need to do is place the python file in the raws folder and it will spit out an individual file for each building mentioned in the raws. I have personally used it with Masterwork and Genesis Reborn with no issues. Please note that some mods make use of hundreds of buildings, so it will generate hundreds of text files. Only use if you are wanting a specific buildings reactions separated out.
Screen shot for SPLIT_REACTIONS:
Spoiler (click to show/hide)

SPLIT_VERMIN: Same as SPLIT_CVARIATIONS except it pulls out vermin.

More utilities will be added as I make them fit for public use.
http://dffd.wimbli.com/file.php?id=7916

Python 3+ is required for use. Please let me know if you run into an trouble with any of the utilities

11
DF Modding / Creature Deluxe (v 0.1) New Topic, New Mod
« on: June 11, 2012, 11:49:18 pm »
First Alpha Release!
http://dffd.wimbli.com/file.php?id=6578

v0.1
-Level up your dwarfs skills using the souls of your vanquished enemies
-Learn spells from the souls of the megabeasts
-Craft special items out of the materials of the fallen fantasy creatures. (Behemoth hide shield, Hydra head helm, etc...)
-Dwarf ethic changes made to better handle the butchering of everything.

A couple of notes:
-Right now many of the special items you get from killing the various fantastical beasts are quite bland. This is mainly because there isn't a whole lot we can do with item creation right now. Hopefully we will be able to add interactions and syndromes directly to items in the future.

-The skills that can be improved are Strength, Toughness, Agility, Endurance, Recuperation, Focus, Willpower, Creativity, Intuition, Patience, and Empathy

-There are currently only five spells that can be learned. This will be greatly expanded on in the future

-Golem manufacturing is currently not set up. You can order lesser golems from your home civ, and normal and greater golems can be captured and trained in the world.

-Several items that are dropped by fantastical creatures currently have no use. These will be a large component of the alchemy ark of this mod.

Previous Post:
Spoiler (click to show/hide)

Planned Additions:
-More fantasy creatures!
-More mundane creatures!
-Expanded alchemy system
-More special items and uses for fantasy materials
-Combination of fantasy materials to yield enhanced effects

As always I am accepting any ideas for fantasy creatures (right now I'm not sure what to do with the vast number of underground fantasy creatures in vanilla, I may just add souls to them and not give them anything special to start with), or any other ideas.

Acknowledgements:
-Meph for some of his great fantasy creatures and graphics (Masterwork Mod)
-Narhril for some of her great fantasy creatures and graphics (Legends of Forlorn Realms Mod)
-Tomitapo for his work on the five types of skin and leather and 3 types of wood (Deon's Old Genesis Mod)
-Various tileset creatures for the wonderful graphics (Phoebus' Graphics Set)

12
It would be nice if we could specify an average number of offspring along with a range.

For instance, some animals can have 1 to 6 kids with an average of 2 or 1 to 6 with an average of 3 etc...

EDIT: Other suggestions mentioned in this thread.

-A species specific infant mortality rate
-A species specific birthing death rate (for the mother)

13
DF Modding / Creature Deluxe (v 0.91) Soul System upgrade for .34.
« on: September 03, 2011, 08:14:01 pm »
Version 0.91 added!

So with the inclusion of the new interactions system I have been laying out what I want to be able to do with the Soul System. Currently I do not have a release available, but I have laid out my ideas for you to see below and will be hopefully uploading a new version soon.

1. Level up your dwarves!
-Use souls aquired from slain creatures and monsters to increase the strength, agility, toughness, etc... of your dwarves permanently! Higher level souls will give you a bigger boost.
-Certain creatures souls will give specific changes to your dwarves! Finally kill that pesky GCS? Use it's soul to give your champion dwarf immunity to poison!

2. Golem Factory (Meph already has a working version in his Masterwork mod, will most likely be borrowing heavily from that)
-Sacriface a dwarf to get a strong construct that knows no pain or fear, needs no sleep or food, and will watch over your fortress as a silent guardian!
-If you manage to kill a wandering golem you can use it's golem essence, along with the life force of a cat or dog to animate a new golem. No need to sacrifice your dwarven warriors!
-If you are truly lucky and manage to fell one of the monsterous collosi you can use it's essence, alone with several other rare materials and the soul of your dwarf to create your own collosus!

3. Megabeast Souls to upgrade your dwarves and weapons!
-Each megabeast has a unique soul which will grant special abilities to your dwarves! Teach your dwarves the magic of the dragons and the secrets of the other megabeasts that roam the land!
-Megabeast souls can also be used to create unique weapons and armor for your dwarves.

And please if you have some ideas let me know!

Old Post:

CREATURES DELUXE!
http://dffd.wimbli.com/file.php?id=4914

PLEASE READ THE README FOR INFORMATION. ON HOW TO USE AND INSTALL THIS MOD!

NEW INFO:
Using http://animaldiversity.ummz.umich.edu/site/index.html I have written a script that goes through all of their available pages for Reptiles, Amphibians, Mammals, and Birds and extracts the information they have for them. It then compiles them all together, and using some 30 basic creature templates (e.g. DOG_TEMPLATE, ELEPHANT_TEMPLATE, MONKEY_TEMPLATE, etc...) that I have taken from the raws it puts them all together in readable creatures for DF! Unfortunately there were less pages then I was hoping for on the ADW site, and I only got about 2000 creatures out of it, and many of those creatures have names like 'African bullfrog' or 'Darwin's frog'. Eventually I will go through and either change the name of or remove the creatures that have references to our world, but until then you can think of any of the creatures with peoples names as being people from your DF world, and any place references as being places in your DF world.

Because a list of 2000 some creatures would be to big, I have just included the break down below;
Amphibians: 127
Birds: 437
Mammals: 1277
Reptiles: 103

If you would like a list of all the creatures included I could put that in too, just let me know.

NOTE:
Currently all of the creatures are in one large file, I will be breaking this up into more manageable and readable files as time progresses, but I thought I would at least get this out to you all now.

ALSO INCLUDED:
  • Also included with this file are most of Deon's fantasy creatures from his mod Genesis
  • Tomitapo's leather and scale tiers (also used from Genesis)
  • 4 Levels of Golems that I use in my own games, each one has several dozen castes of each rock/metal/gem and each level drops a different type of golem essence (Note: I haven't included any of my reactions for processing the golem essences, I can if you want, but I thought individual people would have different ideas with what to do with them, and really they are more for the next release)
  • 4 Levels of Dragons, each with 10 unique castes.
  • SOULS!!! - Each creature drops a soul (only the ones in creature_normal right now). Similarly to the golem essences I haven't included reactions for them, but have been thinking up some fun things to do.

Version 0.90 update
-Included three separate versions (vanilla with souls, new creatures without souls, and new creatures with souls)
-Included several python scripts for customization
-Expanded the soul system. Can now level all weapons up to level 5, and can process golem essences into neat things.
-Fixed several problems with certain creatures

Thank yous:
Deon - For his wonderful work with the Genesis mod and the tweaking he has done for it
Tomitapo - Also for his wonderful tweaking and his tiered leather/scale system
Mephansteras - Several of my ideas for the golems and souls came from Civilization Forge

14
DF Modding / Butchering Question
« on: August 28, 2011, 01:56:36 pm »
Is it possible to change what a creature is butchered into?

For example, can I modify a dragon to be butchered like normal and produce all the normal bones, skin, fat, etc... PLUS a "dragon stone" or what have you?

15
DF Suggestions / Variables for creature variations
« on: August 27, 2011, 11:33:17 pm »
It would be nice if we had the option of using arguments in the creature variations like those that can be used in the BODY_DETAIL_PLAN.

Pages: [1] 2