Repository navigation
Animals as Ingredient
A production point can have its own trigger for livestock trailers. The player drives up with the loaded trailer, stays seated in the vehicle and delivers animals; they become an amount of goods in storage, which a perfectly normal recipe then processes further — this is how a slaughterhouse, for example, is made.
On the player's side, the "Trade animals" permission is required and the production point must belong to the player's own farm.
It sits under <productionPoint>, next to <productions> and <storage>.
| Attribute | Default | Meaning |
|---|---|---|
animalTrigger#triggerNode |
– | Shared trigger for all animal inputs of this production point |
Below it, one <input> per animal group under <inputs>:
| Attribute | Default | Meaning |
|---|---|---|
animalType |
– | Animal type whose breeds are all accepted (COW, SHEEP, PIG, HORSE, CHICKEN) |
animalSubType |
– | A single breed instead of the whole animal type (e.g. SHEEP_LANDRACE), takes precedence over animalType
|
inputFillType |
– | Required. Fill type the animals are turned into |
minHealthFactor |
50 |
Minimum health in percent |
maxHealthFactor |
100 |
Maximum health in percent |
minAgeMonth |
6 |
Minimum age in months |
maxAgeMonth |
200 |
Maximum age in months; the default effectively means "no maximum age" |
calculateWeight |
true |
Between two weight steps the amount is interpolated evenly; with false it stays the same until the next step |
triggerNode |
the shared one | Own trigger for this input only |
Any number of <weight> steps per <input>:
| Attribute | Default | Meaning |
|---|---|---|
ageMonth |
6 |
Age in months this value applies to |
value |
1000 |
Amount in liters that an animal of this age yields at full health |
Contradictory values (minimum greater than maximum, values outside 0–100 % or negative months) are reported on load and reset to the defaults instead of discarding the input — a production point that no longer accepts any animals because of a swapped number would be broken for the player. A <weight> step outside the age range is reported and skipped.
Amount per animal = Weight(Age) * (0.1 + 0.9 * Health / maxHealthFactor) * (1 + FatteningBonus)
-
Weight(Age) comes from the
<weight>steps. In between, it is interpolated linearly (calculateWeight="true") or the value of the last step is held (false). Below the first and above the last step, that step's value applies. - Health: a sick animal yields less, but never nothing at all — at 0 % a tenth of the amount remains.
-
FatteningBonus comes from
cluster.fatteningBonus, which MaizePlus attaches to the animal group (0 to 0.3). Without MaizePlus the factor is 1.
How many animals can be delivered results from the free storage space divided by the amount per animal, rounded down and limited to the size of the animal group. The free space takes shared storage into account.
-
The target fill type needs its own
<capacity>in the<storage>of the same production point, otherwise the input is rejected on load. - The trigger in the i3d is a trigger box with
trigger="true",collisionFilterGroup="0x20000000"andcollisionFilterMask="0x110000"— the same mask as on vanilla's animal loading triggers (trailer and player). - An unloading trigger for the animal fill type is not needed. In this case Revamp attaches the storage to the unloading station itself; without that, the production line would never see its ingredient, because the game always queries ingredient stocks through the unloading station and not through the storage.
- Whether the animal fill type may be bought or sold is controlled, as with any other good, by
allowBuying/allowSellingon the<capacity>entry. There is no special rule for it, see Buying and Selling. - Several triggers at one point are possible; each one accepts only the breeds registered on it.
- Several inputs may turn the same breed into different fill types in different age ranges (young animals into X, adult ones into Y). If two ranges overlap, the input entered later applies for the overlapping months.
- The breed names are the fill type names of the animals from
character/animals.xml. Caution withanimalType="COW": in FS25 this also includes the water buffalo.
A group that is not accepted does not disappear from the dialog, but shows the reason where the number would otherwise be — wrong animal type, wrong trigger, age or health outside the range, or storage full. Anyone building a production can see immediately while testing which of their limits applies.
<productionPoint>
<productions>
<production id="cheese" name="%s %s" params="$l10n_fillType_milk|$l10n_fillType_cheese" cyclesPerHour="60" costsPerActiveHour="1">
<inputs>
<input fillType="MILK" amount="10"/>
</inputs>
<outputs>
<output fillType="CHEESE" amount="4"/>
</outputs>
</production>
</productions>
<storage>
<capacity fillType="MILK" capacity="40000"/>
<capacity fillType="CHEESE" capacity="20000"/>
</storage>
<animalTrigger triggerNode="loadingTrigger">
<inputs>
<!-- All cattle breeds from 6 to 24 months, the amount is interpolated in between -->
<input animalType="COW" inputFillType="MILK" minAgeMonth="6" maxAgeMonth="24" minHealthFactor="50" maxHealthFactor="100">
<weight ageMonth="6" value="500"/>
<weight ageMonth="24" value="2000"/>
</input>
<!-- Only one breed, no maximum age, fixed steps instead of interpolation, narrower health limits -->
<input animalSubType="SHEEP_LANDRACE" inputFillType="WOOL" minAgeMonth="12" minHealthFactor="80" maxHealthFactor="100" calculateWeight="false">
<weight ageMonth="12" value="100"/>
<weight ageMonth="36" value="400"/>
</input>
</inputs>
</animalTrigger>
</productionPoint>A cow aged 20 months with 90 % health thus yields 1,667 l × 0.91 = about 1,517 l of milk. A sheep aged 30 months with 90 % health yields 100 l × 0.91 = 91 l of wool, because between steps 12 and 36 the value of step 12 applies.
- The attribute names have stayed the same, the
<animalTrigger>blocks of an FS22 Revamp production keep working without changes. - The overview of accepted animals is no longer a separate button in the production menu, but a view in the Manage dialog. It only appears at a production point with an animal trigger.
- Animal types and breeds are named differently in FS25 than in FS22, so the names need to be checked.