Yum!
material_template_default.txt with notes on values - if you update any of these with better values, please let me know:
EDIT: Need to add this line to the material template for milk:
[MATERIAL_TEMPLATE:MILK_TEMPLATE]
[MATERIAL_REACTION_PRODUCT:BUTTER_MAT:LOCAL_CREATURE_MAT:BUTTER]
Butter material template:
just copied cheese with a couple changes
[MATERIAL_TEMPLATE:BUTTER_TEMPLATE]
[STATE_COLOR:ALL_SOLID:YELLOW]
[STATE_NAME:ALL_SOLID:butter]
[STATE_ADJ:ALL_SOLID:buttery]
[STATE_COLOR:LIQUID:YELLOW]
[STATE_NAME:LIQUID:melted butter]
[STATE_ADJ:LIQUID:melted buttery]
[STATE_COLOR:GAS:YELLOW]
[STATE_NAME:GAS:n/a]
[STATE_ADJ:GAS:n/a]
[DISPLAY_COLOR:6:0:1]
[MATERIAL_VALUE:1]
[SPEC_HEAT:4181]
[IGNITE_POINT:10300] top end of smoke point is 300 deg F, used this rounded up
[MELTING_POINT:10063] wiki states melts to liquid at 32-35 deg C (90-95 deg F)
[BOILING_POINT:10180] used water
[HEATDAM_POINT:10218] wiki states milk solids brown and burn above 150 deg C (250 deg F)
[COLDDAM_POINT:9900]
[MAT_FIXED_TEMP:NONE]
[SOLID_DENSITY:911] wiki states density is 911 g/L (56.9 lb/cu ft)
[LIQUID_DENSITY:911] used solid value for now
[MOLAR_MASS:NONE]
[IMPACT_YIELD:10000]
[IMPACT_FRACTURE:10000]
[IMPACT_STRAIN_AT_YIELD:50000]
[COMPRESSIVE_YIELD:10000]
[COMPRESSIVE_FRACTURE:10000]
[COMPRESSIVE_STRAIN_AT_YIELD:50000]
[TENSILE_YIELD:10000]
[TENSILE_FRACTURE:10000]
[TENSILE_STRAIN_AT_YIELD:50000]
[TORSION_YIELD:10000]
[TORSION_FRACTURE:10000]
[TORSION_STRAIN_AT_YIELD:50000]
[SHEAR_YIELD:10000] no data
[SHEAR_FRACTURE:10000]
[SHEAR_STRAIN_AT_YIELD:50000]
[BENDING_YIELD:10000]
[BENDING_FRACTURE:10000]
[BENDING_STRAIN_AT_YIELD:50000]
[MAX_EDGE:0]
[ABSORPTION:100]
[EDIBLE_VERMIN]
[EDIBLE_RAW]
[EDIBLE_COOKED]
[ROTS]
[STOCKPILE_GLOB_PASTE]
[DO_NOT_CLEAN_GLOB]
reaction_other.txt:
[REACTION:CHURN_BUTTER]
[NAME:churn butter]
[BUILDING:BUTTER_CHURN:NONE]
[REAGENT:milk:150:LIQUID_MISC:NONE:NONE:NONE]
[REACTION_CLASS:MILK]
[UNROTTEN]
[REAGENT:milk container:1:NONE:NONE:NONE:NONE]
[CONTAINS:milk]
[PRESERVE_REAGENT]
[DOES_NOT_DETERMINE_PRODUCT_AMOUNT]
[REAGENT:barrel/pot:1:NONE:NONE:NONE:NONE]
[EMPTY]
[FOOD_STORAGE_CONTAINER]
[PRESERVE_REAGENT]
[DOES_NOT_DETERMINE_PRODUCT_AMOUNT]
[PRODUCT:100:1:GLOB:NONE:GET_MATERIAL_FROM_REAGENT:milk:BUTTER_MAT]
[PRODUCT_TO_CONTAINER:barrel/pot]
[PRODUCT_DIMENSION:150]
[PRODUCT_PASTE]
[SKILL:COOK]
building_custom.txt (I used the
barrel type for dwarfs and would use the plunger type for humans):
this building is used to churn butter from milk
[BUILDING_WORKSHOP:BUTTER_CHURN]
[NAME:Butter Churn]
[NAME_COLOR:7:0:0]
[DIM:1:1]
[WORK_LOCATION:1:1]
[BUILD_LABOR:COOK]
[BUILD_KEY:NONE]
[BLOCK:1:0]
[TILE:0:1:246]
[COLOR:0:1:0:7:0]
[TILE:1:1:246]
[COLOR:1:1:MAT]
[BUILD_ITEM:1:BARREL:NONE:NONE:NONE][EMPTY][CAN_USE_ARTIFACT]
[BUILD_ITEM:1:TRAPPARTS:NONE:NONE:NONE][CAN_USE_ARTIFACT]
creature_[whatever].txt - place this in whichever creatures whose milk you want to use - cow example:
[USE_MATERIAL_TEMPLATE:BUTTER:BUTTER_TEMPLATE]
[STATE_NAME_ADJ:ALL_SOLID:cow butter]
[STATE_NAME_ADJ:LIQUID:melted cow butter]
[STATE_NAME_ADJ:GAS:boiling cow butter]
[PREFIX:NONE]
Don't forget to add the reaction and building to your entities.
I don't know if I'm entirely sold on the glob/paste item type, but it works as it is. This means it will produce individual globs (like tallow) of butter in the amount of units of milk (usually 10 at most). Gameplay milk (milking action and caravans) will be fine, but if you use the embark-with-milk exploit, be aware the reaction will fill the barrel and the rest will be on the ground, generating however many hauling jobs it requires.
UPDATE: even with the edible_raw tag, entities won't eat this item until it is cooked; not sure if it is the paste state that is doing this or not.