Difference between revisions of "Modding:Animal data"
Pathoschild (talk | contribs) (copyedit, simplify a bit, minor updates & clarifications) |
(Fix links that were targeting as if this page was still on the migration page) |
||
(21 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
←[[Modding:Index|Index]] | ←[[Modding:Index|Index]] | ||
− | + | This page explains how to create and edit in-game [[Animals|farm animals]]. | |
− | |||
− | + | ==Data format== | |
− | + | You can add or edit farm animals by editing the <samp>Data/FarmAnimals</samp> [[Modding:Editing XNB files|asset]]. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | </ | ||
− | + | This consists of a string → model lookup, where... | |
− | + | * The key is a [[Modding:Common data field types#Unique string ID|unique string ID]] for the farm animal type. | |
+ | * The value is a model with the fields listed below. | ||
− | === | + | ===Main info=== |
− | + | {| class="wikitable" | |
+ | |- | ||
+ | ! field | ||
+ | ! effect | ||
+ | |- | ||
+ | | <samp>DisplayName</samp> | ||
+ | | A [[Modding:Tokenizable strings|tokenizable string]] for the animal type's display name. | ||
+ | |- | ||
+ | | <samp>House</samp> | ||
+ | | The [[Modding:Migrate to Stardew Valley 1.6#Custom buildings|building ID]] for the main building type that houses this animal. The animal will also be placeable in buildings whose <samp>ValidOccupantTypes</samp> field contains this value. | ||
+ | |- | ||
+ | | <samp>Gender</samp> | ||
+ | | ''(Optional)'' The possible genders for the animal type. Currently this only affects the text shown after purchasing the animal, like "''Great! I'll send little <name> to [his/her] new home right away''". Default <samp>Female</samp>. | ||
+ | |||
+ | The possible values are: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! value | ||
+ | ! effect | ||
+ | |- | ||
+ | | <samp>Male</samp><br /><samp>Female</samp> | ||
+ | | Farm animals of this type are always male or always female. | ||
+ | |- | ||
+ | | <samp>MaleOrFemale</samp> | ||
+ | | The gender of each animal is randomized based on its internal unique ID. | ||
+ | |} | ||
+ | |} | ||
+ | |||
+ | ===Animal shop=== | ||
+ | These fields affect how this farm animal type is shown in [[Marnie's Ranch|Marnie's animal shop]]. Animals are automatically listed if they have a valid <samp>PurchasePrice</samp> value. | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! field | ||
+ | ! effect | ||
+ | |- | ||
+ | | <samp>PurchasePrice</samp> | ||
+ | | ''(Optional if not purchaseable)'' Half the cost to purchase the animal (the actual price is double this value), or a negative value to disable purchasing this animal type. Default -1. | ||
+ | |- | ||
+ | | <samp>ShopTexture</samp> | ||
+ | | ''(Optional if not purchaseable)'' The asset name for the icon texture to show in shops. Defaults to <samp>LooseSprites/Cursors</samp> or <samp>LooseSprites/Cursors2</samp> based on the animal's position within the loaded data (but using the default isn't recommended if it's purchaseable). | ||
+ | |- | ||
+ | | <samp>ShopSourceRect</samp> | ||
+ | | ''(Optional if not purchaseable)'' The pixel area within the <samp>ShopTexture</samp> to draw, specified as an object with <samp>X</samp>, <samp>Y</samp>, <samp>Width</samp>, and <samp>Height</samp> fields. This should be 32 pixels wide and 16 high. Ignored if <samp>ShopTexture</samp> isn't set. | ||
+ | |- | ||
+ | | <samp>RequiredBuilding</samp> | ||
+ | | ''(Optional)'' The building that needs to be built on the farm for this animal to be available to purchase. Buildings that are upgraded from this building are valid too. Default none. | ||
+ | |- | ||
+ | | <samp>UnlockCondition</samp> | ||
+ | | ''(Optional)'' A [[Modding:Game state queries|game state query]] which indicates whether the farm animal is available in the shop menu. Default always unlocked. | ||
+ | |- | ||
+ | | <samp>ShopDisplayName</samp> | ||
+ | | ''(Optional)'' A [[Modding:Tokenizable strings|tokenizable string]] for the display name shown in the shop menu. Defaults to the <samp>DisplayName</samp> field. | ||
+ | |- | ||
+ | | <samp>ShopDescription</samp> | ||
+ | | ''(Optional)'' A [[Modding:Tokenizable strings|tokenizable string]] for the tooltip description shown in the shop menu. Defaults to none. | ||
+ | |- | ||
+ | | <samp>ShopMissingBuildingDescription</samp> | ||
+ | | ''(Optional)'' A [[Modding:Tokenizable strings|tokenizable string]] which overrides <samp>ShopDescription</samp> if the <samp>RequiredBuilding</samp> isn't built. Defaults to none. | ||
+ | |- | ||
+ | | <samp>AlternatePurchaseTypes</samp> | ||
+ | | ''(Optional)'' The possible variants for this farm animal (e.g. chickens can be Brown Chicken, Blue Chicken, or White Chicken). This consists of a list of models with these fields: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! field | ||
+ | ! effect | ||
+ | |- | ||
+ | | <samp>ID</samp> | ||
+ | | The [[Modding:Common data field types#Unique string ID|unique string ID]] for is purchase type within the current list. | ||
+ | |- | ||
+ | | <samp>AnimalIDs</samp> | ||
+ | | A list of animal IDs to spawn instead of the main <samp>ID</samp> field. If multiple are listed, one is chosen at random on purchase. | ||
+ | |- | ||
+ | | <samp>Condition</samp> | ||
+ | | ''(Optional)'' A [[Modding:Game state queries|game state query]] which indicates whether this variant entry is available. Default always enabled. | ||
+ | |} | ||
− | + | If multiple are listed, the first available variant is returned. Default none. | |
− | + | |} | |
+ | ===Hatching=== | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | ! index | + | ! field |
− | ! | + | ! effect |
− | ! | + | |- |
+ | | <samp>EggItemIds</samp> | ||
+ | | ''(Optional)'' A list of the [[Modding:Items|object IDs]] that can be placed in the [[incubator]] or [[Ostrich Incubator|ostrich incubator]] to hatch this animal. If the animal's <samp>House</samp> field doesn't match the current building, the entry will be ignored. Default none. | ||
+ | |- | ||
+ | | <samp>IncubationTime</samp> | ||
+ | | ''(Optional)'' How long eggs incubate before they hatch. Default 9000 minutes. | ||
+ | |- | ||
+ | | <samp>IncubatorParentSheetOffset</samp> | ||
+ | | ''(Optional)'' An offset applied to the incubator's sprite index when it's holding an egg. Default 1. | ||
+ | |||
+ | The vanilla values are: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! offset | ||
+ | ! [[incubator]] | ||
+ | ! [[Ostrich Incubator|ostrich incubator]] | ||
|- | |- | ||
| 0 | | 0 | ||
− | | | + | | empty incubator |
− | | | + | | empty incubator |
|- | |- | ||
| 1 | | 1 | ||
− | | | + | | small white egg |
− | | | + | | large brown egg |
|- | |- | ||
| 2 | | 2 | ||
− | | {{ | + | | small brown egg |
− | | The [[Modding: | + | | ''invalid'' (will show [[Junimo Chest|Junimo chest]] sprite) |
+ | |} | ||
+ | |- | ||
+ | | <samp>BirthText</samp> | ||
+ | | ''(Optional)'' A [[Modding:Tokenizable strings|tokenizable string]] for the message shown when entering the building after the egg hatched. Defaults to the text "<samp>???</samp>". | ||
+ | |} | ||
+ | |||
+ | ===Growth=== | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! field | ||
+ | ! effect | ||
+ | |- | ||
+ | | <samp>DaysToMature</samp> | ||
+ | | ''(Optional)'' The number of days until a freshly purchased/born animal becomes an adult and begins producing items. Default 1. | ||
+ | |- | ||
+ | | <samp>CanGetPregnant</samp> | ||
+ | | ''(Optional)'' Whether an animal can [[Animals#Animal Births|produce a child]] (regardless of gender). Default false. | ||
+ | |} | ||
+ | |||
+ | ===Produce=== | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! field | ||
+ | ! effect | ||
+ | |- | ||
+ | | <samp>ProduceItemIds</samp><br /><samp>DeluxeProduceItemIds</samp> | ||
+ | | ''(Optional)'' The items produced by the animal when it's an adult. The <samp>DeluxeProduceItemIds</samp> field only applies if the <samp>Deluxe*</samp> fields match. Both default to none. | ||
+ | |||
+ | This consists of a list of models with these fields: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! field | ||
+ | ! effect | ||
+ | |- | ||
+ | | <samp>ItemId</samp> | ||
+ | | The [[Modding:Items|''unqualified'' object ID]] of the item to produce. | ||
+ | |- | ||
+ | | <samp>Condition</samp> | ||
+ | | ''(Optional)'' A [[Modding:Game state queries|game state query]] which indicates whether this item can be produced now. Defaults to always true. | ||
+ | |- | ||
+ | | <samp>MinimumFriendship</samp> | ||
+ | | ''(Optional)'' The minimum friendship points with the animal needed to produce this item. Default 0. | ||
+ | |} | ||
+ | |||
+ | If multiple items can be produced, one is chosen at random (with deluxe items taking priority if applicable). | ||
+ | |- | ||
+ | | <samp>DaysToProduce</samp> | ||
+ | | ''(Optional)'' The number of days between item productions. For example, setting <samp>1</samp> will produce an item every day. Default 1. | ||
+ | |- | ||
+ | | <samp>ProduceOnMature</samp> | ||
+ | | ''(Optional)'' Whether an item is produced on the day the animal becomes an adult. Default false. | ||
+ | |- | ||
+ | | <samp>FriendshipForFasterProduce</samp> | ||
+ | | ''(Optional)'' The minimum friendship points needed to reduce the <samp>DaysToProduce</samp> by one. Defaults to no reduction based on friendship. | ||
+ | |- | ||
+ | | <samp>DeluxeProduceMinimumFriendship</samp> | ||
+ | | ''(Optional)'' The minimum friendship points needed to produce the <samp>DeluxeProduceItemId</samp>. Default 200. | ||
+ | |- | ||
+ | | <samp>DeluxeProduceCareDivisor</samp><br /><samp>DeluxeProduceLuckMultiplier</samp> | ||
+ | | ''(Optional)'' [[Modding:Common data field types#Quantity modifiers|Quantity modifiers]] which change the probability of producing the <samp>DeluxeProduceItemId</samp>, based on this formula: | ||
+ | <pre> | ||
+ | if happiness > 200: | ||
+ | happiness_modifier = happiness * 1.5 | ||
+ | else if happiness > 100: | ||
+ | happiness_modifier = 0 | ||
+ | else | ||
+ | happiness_modifier = happiness - 100 | ||
+ | |||
+ | ((friendship + happiness_modifier) / DeluxeProduceCareDivisor) + (daily_luck * DeluxeProduceLuckMultiplier) | ||
+ | </pre> | ||
+ | |||
+ | Specifically: | ||
+ | * <samp>DeluxeProduceCareDivisor</samp> reduces the bonus from friendship and happiness, so a lower value ''increases'' the probability of producing the deluxe item. Default 1200. | ||
+ | * <samp>DeluxeProduceLuckMultiplier</samp> increases the effect of [[Luck|daily luck]]. Default 0. | ||
+ | |||
+ | For example, given a friendship of 102 and happiness of 150, the probability with the default field values will be <code>((102 + 0) / 1200) + (daily_luck * 0) = (102 / 1200) = 0.085</code> or 8.5%. | ||
+ | |||
+ | See [[Animals#Produce|Animal Produce]] for more info on the calculation. | ||
+ | |- | ||
+ | | <samp>HarvestType</samp> | ||
+ | | ''(Optional)'' How produced items are collected from the animal. The valid values are: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! value | ||
+ | ! effect | ||
+ | |- | ||
+ | | <samp>DropOvernight</samp> | ||
+ | | The item is placed on the ground in the animal's home building overnight. | ||
+ | |- | ||
+ | | <samp>HarvestWithTool</samp> | ||
+ | | The item is collected from the animal directly based on the <samp>HarvestTool</samp> field. | ||
+ | |- | ||
+ | | <samp>DigUp</samp> | ||
+ | | The farm animal will dig it up randomly throughout the day. This applies the same logic as [[Pig#Produce|pigs finding truffles]], but for the current item to produce via <samp>ProduceItemIds</samp> and <samp>DeluxeProduceItemIds</samp>. | ||
+ | |} | ||
+ | |||
+ | Default <samp>DropOvernight</samp>. | ||
+ | |- | ||
+ | | <samp>HarvestTool</samp> | ||
+ | | ''(Optional)'' The [[Modding:Items|tool ID]] with which produced items can be collected from the animal, if the <samp>HarvestType</samp> is set to <samp>HarvestWithTool</samp>. The values recognized by the vanilla tools are <samp>Milk Pail</samp> and <samp>Shears</samp>. Default none. | ||
+ | |- | ||
+ | | <samp>CanEatGoldenCrackers</samp> | ||
+ | | ''(Optional)'' Whether players can feed this animal a golden cracker to double its normal output. Default true. | ||
+ | |} | ||
+ | |||
+ | ===Audio & Sprite=== | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! field | ||
+ | ! effect | ||
+ | |- | ||
+ | | <samp>Sound</samp> | ||
+ | | ''(Optional)'' The [[Modding:Audio|audio cue ID]] for the sound produced by the animal (e.g. when pet). Default none. | ||
+ | |- | ||
+ | | <samp>BabySound</samp> | ||
+ | | ''(Optional)'' Overrides <samp>Sound</samp> field when the animal is a baby. Has no effect if <samp>Sound</samp> isn't specified. Default none. | ||
+ | |- | ||
+ | | <samp>Texture</samp> | ||
+ | | ''(Optional)'' The asset name for the animal's spritesheet. Defaults to <samp>Animals/{{t|ID}}</samp> (like <samp>Animals/Goat</samp> for a [[goat]]). This asset must exist even if you use <samp>Skins</samp> below, since the default appearance is automatically an available skin. See [[#Spritesheet layout|spritesheet layout]]. | ||
+ | |- | ||
+ | | <samp>HarvestedTexture</samp> | ||
+ | | ''(Optional)'' Overrides <samp>Texture</samp> if the animal doesn't currently have an item ready to collect (like the [[sheep]]'s sheared sprite). Default none. | ||
+ | |- | ||
+ | | <samp>BabyTexture</samp> | ||
+ | | ''(Optional)'' Overrides <samp>Texture</samp> and <samp>HarvestedTexture</samp> when the animal is a baby. Default none. | ||
+ | |- | ||
+ | | <samp>UseFlippedRightForLeft</samp> | ||
+ | | ''(Optional)'' When the animal is facing left, whether to use a flipped version of their right-facing sprite. See [[#Spritesheet layout|spritesheet layout]] for more info. Default false. | ||
+ | |- | ||
+ | | <samp>SpriteWidth</samp><br /><samp>SpriteHeight</samp> | ||
+ | | ''(Optional)'' The pixel height & width of the animal's sprite (before the in-game pixel zoom). Both default to 16. | ||
+ | |- | ||
+ | | <samp>EmoteOffset</samp> | ||
+ | | ''(Optional)'' A pixel offset to apply to emotes from the farm animal, specified as an object with <samp>X</samp> and <samp>Y</samp>. Default zero. | ||
+ | |- | ||
+ | | <samp>SwimOffset</samp> | ||
+ | | ''(Optional)'' A pixel offset to apply to the farm animal's sprite while it's swimming, specified as an object with <samp>X</samp> and <samp>Y</samp>. Default <samp>"X": 0, "Y": 112</samp>. | ||
+ | |- | ||
+ | | <samp>Skins</samp> | ||
+ | | ''(Optional)'' A list of alternate appearances. If specified, a skin is chosen at random when the animal is purchased or hatched based on the <samp>Weight</samp> field. The default appearance (e.g. using <samp>Texture</samp>) is automatically an available skin with a weight of 1. | ||
+ | |||
+ | This consists of a list of models with these fields: | ||
+ | {| class="wikitable" | ||
|- | |- | ||
− | + | ! field | |
− | + | ! effect | |
− | |||
|- | |- | ||
− | | | + | | <samp>ID</samp> |
− | + | | The [[Modding:Common data field types#Unique string ID|unique string ID]] for the skin within the current list. | |
− | | The | ||
|- | |- | ||
− | | | + | | <samp>Weight</samp> |
− | | | + | | ''(Optional)'' A multiplier for the probability to choose this skin when an animal is purchased. For example, <samp>2.0</samp> will double the chance this skin is selected relative to the other skins. Default <samp>1.0</samp>. |
− | |||
|- | |- | ||
− | | | + | | <samp>Texture</samp><br /><samp>HarvestedTexture</samp><br /><samp>BabyTexture</samp> |
− | + | | ''(Optional)'' Overrides the equivalent main field when this skin is selected. Defaults to the main field's value. | |
− | + | |} | |
|- | |- | ||
− | | | + | | <samp>SleepFrame</samp> |
− | + | | ''(Optional)'' The sprite index in the texture to display when sleeping. Default 12. | |
− | |||
|- | |- | ||
− | | | + | | <samp>UseDoubleUniqueAnimationFrames</samp> |
− | | | + | | ''(Optional)'' Whether the texture has two frames for the randomized 'unique' animation instead of one. See [[#Spritesheet layout|spritesheet layout]] for more info. Default false. |
− | + | ||
+ | The unique animation sprite indexes are: | ||
+ | * If false: 13 (down), 14 (right), 12 (left if <samp>UseFlippedRightForLeft</samp> is false), and 15 (up). | ||
+ | * If true: 16 (down), 18 (right), 22 (left), and 20 (up). | ||
+ | |- | ||
+ | | <samp>ShadowWhenBaby</samp><br /><samp>ShadowWhenBabySwims</samp><br /><samp>ShadowWhenAdult</samp><br /><samp>ShadowWhenAdultSwims</samp> | ||
+ | | ''(Optional)'' The shadow to draw under the farm animal. The <samp>Baby</samp> fields only apply when the farm animal is a baby, and <samp>Adult</samp> fields only applies when it's an adult (e.g. a baby animal won't default to the adult fields). When the farm animal swims, it'll use the <samp>Swims</samp> variant if it's set, else default to the non-swim variant. | ||
+ | |||
+ | These consist of a model with these fields: | ||
+ | |||
+ | {| class="wikitable" | ||
|- | |- | ||
− | + | ! field | |
− | + | ! effect | |
− | |||
|- | |- | ||
− | | | + | | <samp>Visible</samp> |
− | | | + | | ''(Optional)'' Whether the shadow should be drawn. Default true. |
− | |||
|- | |- | ||
− | | | + | | <samp>Offset</samp> |
− | | | + | | ''(Optional)'' A pixel offset applied to the shadow position, specified as an object with <samp>X</samp> and <samp>Y</samp> fields. Default zero. |
− | |||
|- | |- | ||
− | | | + | | <samp>Scale</samp> |
− | + | | ''(Optional)'' The scale at which to draw the shadow. Default 2.5 (swimming baby), 3 (baby), 3.5 (swimming adult), or 4 (adult). | |
− | + | |} | |
+ | |} | ||
+ | |||
+ | ===Player profession effects=== | ||
+ | {| class="wikitable" | ||
|- | |- | ||
− | + | ! field | |
− | + | ! effect | |
− | |||
|- | |- | ||
− | | | + | | <samp>ProfessionForFasterProduce</samp> |
− | | | + | | ''(Optional)'' The internal ID of a [[Skills|profession]] which reduces the <samp>DaysToProduce</samp> by one. Default none. |
− | |||
|- | |- | ||
− | | | + | | <samp>ProfessionForHappinessBoost</samp> |
− | | | + | | ''(Optional)'' The internal ID of a [[Skills|profession]] which makes it easier to befriend this animal. Default none. |
− | |||
|- | |- | ||
− | | | + | | <samp>ProfessionForQualityBoost</samp> |
− | | | + | | ''(Optional)'' The internal ID of a [[Skills|profession]] which increases the chance of higher-quality produce. Default none. |
− | |||
|} | |} | ||
+ | ===Behavior=== | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! field | ||
+ | ! effect | ||
+ | |- | ||
+ | | <samp>CanSwim</samp> | ||
+ | | ''(Optional)'' Whether animals on the farm can swim in water once they've been pet. Default false. | ||
+ | |- | ||
+ | | <samp>BabiesFollowAdults</samp> | ||
+ | | ''(Optional)'' Whether baby animals can follow nearby adults. Default false. | ||
+ | |- | ||
+ | | <samp>GrassEatAmount</samp> | ||
+ | | ''(Optional)'' The amount of grass eaten by this animal each day. Setting it to <samp>0</samp> will disable the farm animal's hunger. Default 2. | ||
+ | |- | ||
+ | | <samp>HappinessDrain</samp> | ||
+ | | ''(Optional)'' An amount which affects the daily reduction in happiness if the animal wasn't pet, or didn't have a heater in winter. Default none. | ||
+ | |- | ||
+ | | <samp>SellPrice</samp> | ||
+ | | ''(Optional)'' The price when [[Animals#Selling Animals|the player sells the animal]], before it's adjusted for the animal's friendship towards the player. Default 0. | ||
+ | |||
+ | The actual sell price will be this value multiplied by a number between 0.3 (zero friendship) and 1.3 (max friendship). | ||
+ | |- | ||
+ | | <samp>CustomFields</samp> | ||
+ | | The [[Modding:Migrate to Stardew Valley 1.6#Custom data fields|custom fields]] for this entry. | ||
+ | |} | ||
+ | |||
+ | ===Other=== | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! field | ||
+ | ! effect | ||
+ | |- | ||
+ | | <samp>ShowInSummitCredits</samp> | ||
+ | | ''(Optional)'' Whether to show the farm animal in the credit scene on [[The Summit|the summit]] after the player achieves [[perfection]]. Default false. | ||
+ | |- | ||
+ | | <samp>StatToIncrementOnProduce</samp> | ||
+ | | ''(Optional)'' The game stat counters to increment when the animal produces an item. Default none. This consists of a list of models with these fields: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! field | ||
+ | ! effect | ||
+ | |- | ||
+ | | <samp>ID</samp> | ||
+ | | The [[Modding:Common data field types#Unique string ID|unique string ID]] for this entry within the current list. | ||
+ | |- | ||
+ | | <samp>StatName</samp> | ||
+ | | The name of the stat counter field on <samp>Game1.stats</samp>. | ||
+ | |- | ||
+ | | <samp>RequiredTags</samp> | ||
+ | | ''(Optional)'' A comma-delimited list of [[Modding:Items#Context tags|context tags]] required on the main input item. The stat is only incremented if the item has ''all'' of these. You can negate a tag with <samp>!</samp> (like <code>bone_item,!fossil_item</code> for bone items that aren't fossils). Defaults to always enabled. | ||
+ | |} | ||
+ | |- | ||
+ | | <samp>UpDownPetHitboxTileSize</samp><br /><samp>LeftRightPetHitboxTileSize</samp> | ||
+ | | ''(Optional)'' The animal sprite's [[Modding:Modder Guide/Game Fundamentals#Tiles|tile]] size in the world when the player is clicking to pet them, specified in the form <samp>{{t|width}}, {{t|height}}</samp>. The <samp>UpDownPetHitboxTileSize</samp> applies when the animal is facing up or down, and <samp>LeftRightPetHitboxTileSize</samp> applies when facing left or right. The values can be fractional (''e.g.'' cows have a width of 1.75). Both default to a 1×1 tile. | ||
+ | |- | ||
+ | | <samp>BabyUpDownPetHitboxTileSize</samp><br /><samp>BabyLeftRightPetHitboxTileSize</samp> | ||
+ | | ''(Optional)'' Overrides <samp>UpDownPetHitboxTileSize</samp> and <samp>LeftRightPetHitboxTileSize</samp> respectively before the animal is an adult. Both default to 1×1 tile. | ||
+ | |} | ||
+ | |||
+ | ==Spritesheet layout== | ||
+ | ===Explanation=== | ||
+ | Each farm animal's spritesheet must have exactly 4 columns, and at least 5–7 rows (depending on the data fields). The sprite size depends on the [[#Audio .26 Sprite|<samp>SpriteWidth</samp> and <samp>SpriteHeight</samp>]] fields; for example, the default sprite width of 16 pixels means the spritesheet must be exactly 4 × 16 = 64 pixels wide. | ||
+ | |||
+ | The expected rows are: | ||
+ | # move down; | ||
+ | # move right; | ||
+ | # move up; | ||
+ | # move left ('''only''' if <samp>UseFlippedRightForLeft</samp> is false); | ||
+ | # unique animations 1; | ||
+ | # unique animations 2 ('''only''' if <samp>UseDoubleUniqueAnimationFrames</samp> is true); | ||
+ | # eat. | ||
+ | |||
+ | For example, the default layout (with <samp>UseFlippedRightForLeft</samp> and <samp>UseDoubleUniqueAnimationFrames</samp> both false) is: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | 0 (move down 1) | ||
+ | | 1 (move down 2) | ||
+ | | 2 (move down 3) | ||
+ | | 3 (move down 4) | ||
+ | |- | ||
+ | | 4 (move right 1) | ||
+ | | 5 (move right 2) | ||
+ | | 6 (move right 3) | ||
+ | | 7 (move right 4) | ||
+ | |- | ||
+ | | 8 (move up) | ||
+ | | 9 (move up) | ||
+ | | 10 (move up) | ||
+ | | 11 (move up) | ||
+ | |- | ||
+ | | 12 (''unused'') | ||
+ | | 13 (unique down) | ||
+ | | 14 (unique right) | ||
+ | | 15 (unique up) | ||
+ | |- | ||
+ | | 16 (eat 1) | ||
+ | | 17 (eat 1) | ||
+ | | 18 (eat 1) | ||
+ | | 19 (eat 1) | ||
+ | |} | ||
+ | |||
+ | When both are true, that becomes: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | 0 (move down 1) | ||
+ | | 1 (move down 2) | ||
+ | | 2 (move down 3) | ||
+ | | 3 (move down 4) | ||
+ | |- | ||
+ | | 4 (move right 1) | ||
+ | | 5 (move right 2) | ||
+ | | 6 (move right 3) | ||
+ | | 7 (move right 4) | ||
+ | |- | ||
+ | | 8 (move up) | ||
+ | | 9 (move up) | ||
+ | | 10 (move up) | ||
+ | | 11 (move up) | ||
+ | |- | ||
+ | | 12 (move left) | ||
+ | | 13 (move left) | ||
+ | | 14 (move left) | ||
+ | | 15 (move left) | ||
+ | |- | ||
+ | | 16 (unique down 1) | ||
+ | | 17 (unique down 2) | ||
+ | | 18 (unique right 1) | ||
+ | | 19 (unique right 2) | ||
+ | |- | ||
+ | | 20 (unique up 1) | ||
+ | | 21 (unique up 2) | ||
+ | | 22 (unique left 1) | ||
+ | | 23 (unique left 2) | ||
+ | |- | ||
+ | | 24 (eat 1) | ||
+ | | 25 (eat 1) | ||
+ | | 26 (eat 1) | ||
+ | | 27 (eat 1) | ||
+ | |} | ||
+ | |||
+ | ===Pre-1.6 vanilla layouts=== | ||
+ | Before Stardew Valley 1.6, there were two main spritesheet layouts depending on whether the animal lived in a [[barn]] or [[coop]]. If you want to match the previous spritesheet layouts (e.g. to update a pre-1.6 custom animal), the options to set are: | ||
+ | <syntaxhighlight lang="js"> | ||
+ | // for barn animals | ||
+ | "UseFlippedRightForLeft": true, | ||
+ | "UseDoubleUniqueAnimationFrames": false | ||
+ | |||
+ | // for coop animals | ||
+ | "UseFlippedRightForLeft": false, | ||
+ | "UseDoubleUniqueAnimationFrames": true | ||
+ | </syntaxhighlight> | ||
[[Category:Modding]] | [[Category:Modding]] | ||
[[ru:Модификации:Животные]] | [[ru:Модификации:Животные]] |
Latest revision as of 03:44, 10 June 2024
This page explains how to create and edit in-game farm animals.
Data format
You can add or edit farm animals by editing the Data/FarmAnimals asset.
This consists of a string → model lookup, where...
- The key is a unique string ID for the farm animal type.
- The value is a model with the fields listed below.
Main info
field | effect | ||||||
---|---|---|---|---|---|---|---|
DisplayName | A tokenizable string for the animal type's display name. | ||||||
House | The building ID for the main building type that houses this animal. The animal will also be placeable in buildings whose ValidOccupantTypes field contains this value. | ||||||
Gender | (Optional) The possible genders for the animal type. Currently this only affects the text shown after purchasing the animal, like "Great! I'll send little <name> to [his/her] new home right away". Default Female.
The possible values are:
|
Animal shop
These fields affect how this farm animal type is shown in Marnie's animal shop. Animals are automatically listed if they have a valid PurchasePrice value.
field | effect | ||||||||
---|---|---|---|---|---|---|---|---|---|
PurchasePrice | (Optional if not purchaseable) Half the cost to purchase the animal (the actual price is double this value), or a negative value to disable purchasing this animal type. Default -1. | ||||||||
ShopTexture | (Optional if not purchaseable) The asset name for the icon texture to show in shops. Defaults to LooseSprites/Cursors or LooseSprites/Cursors2 based on the animal's position within the loaded data (but using the default isn't recommended if it's purchaseable). | ||||||||
ShopSourceRect | (Optional if not purchaseable) The pixel area within the ShopTexture to draw, specified as an object with X, Y, Width, and Height fields. This should be 32 pixels wide and 16 high. Ignored if ShopTexture isn't set. | ||||||||
RequiredBuilding | (Optional) The building that needs to be built on the farm for this animal to be available to purchase. Buildings that are upgraded from this building are valid too. Default none. | ||||||||
UnlockCondition | (Optional) A game state query which indicates whether the farm animal is available in the shop menu. Default always unlocked. | ||||||||
ShopDisplayName | (Optional) A tokenizable string for the display name shown in the shop menu. Defaults to the DisplayName field. | ||||||||
ShopDescription | (Optional) A tokenizable string for the tooltip description shown in the shop menu. Defaults to none. | ||||||||
ShopMissingBuildingDescription | (Optional) A tokenizable string which overrides ShopDescription if the RequiredBuilding isn't built. Defaults to none. | ||||||||
AlternatePurchaseTypes | (Optional) The possible variants for this farm animal (e.g. chickens can be Brown Chicken, Blue Chicken, or White Chicken). This consists of a list of models with these fields:
If multiple are listed, the first available variant is returned. Default none. |
Hatching
field | effect | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
EggItemIds | (Optional) A list of the object IDs that can be placed in the incubator or ostrich incubator to hatch this animal. If the animal's House field doesn't match the current building, the entry will be ignored. Default none. | ||||||||||||
IncubationTime | (Optional) How long eggs incubate before they hatch. Default 9000 minutes. | ||||||||||||
IncubatorParentSheetOffset | (Optional) An offset applied to the incubator's sprite index when it's holding an egg. Default 1.
The vanilla values are:
| ||||||||||||
BirthText | (Optional) A tokenizable string for the message shown when entering the building after the egg hatched. Defaults to the text "???". |
Growth
field | effect |
---|---|
DaysToMature | (Optional) The number of days until a freshly purchased/born animal becomes an adult and begins producing items. Default 1. |
CanGetPregnant | (Optional) Whether an animal can produce a child (regardless of gender). Default false. |
Produce
field | effect | ||||||||
---|---|---|---|---|---|---|---|---|---|
ProduceItemIds DeluxeProduceItemIds |
(Optional) The items produced by the animal when it's an adult. The DeluxeProduceItemIds field only applies if the Deluxe* fields match. Both default to none.
This consists of a list of models with these fields:
If multiple items can be produced, one is chosen at random (with deluxe items taking priority if applicable). | ||||||||
DaysToProduce | (Optional) The number of days between item productions. For example, setting 1 will produce an item every day. Default 1. | ||||||||
ProduceOnMature | (Optional) Whether an item is produced on the day the animal becomes an adult. Default false. | ||||||||
FriendshipForFasterProduce | (Optional) The minimum friendship points needed to reduce the DaysToProduce by one. Defaults to no reduction based on friendship. | ||||||||
DeluxeProduceMinimumFriendship | (Optional) The minimum friendship points needed to produce the DeluxeProduceItemId. Default 200. | ||||||||
DeluxeProduceCareDivisor DeluxeProduceLuckMultiplier |
(Optional) Quantity modifiers which change the probability of producing the DeluxeProduceItemId, based on this formula:
if happiness > 200: happiness_modifier = happiness * 1.5 else if happiness > 100: happiness_modifier = 0 else happiness_modifier = happiness - 100 ((friendship + happiness_modifier) / DeluxeProduceCareDivisor) + (daily_luck * DeluxeProduceLuckMultiplier) Specifically:
For example, given a friendship of 102 and happiness of 150, the probability with the default field values will be See Animal Produce for more info on the calculation. | ||||||||
HarvestType | (Optional) How produced items are collected from the animal. The valid values are:
Default DropOvernight. | ||||||||
HarvestTool | (Optional) The tool ID with which produced items can be collected from the animal, if the HarvestType is set to HarvestWithTool. The values recognized by the vanilla tools are Milk Pail and Shears. Default none. | ||||||||
CanEatGoldenCrackers | (Optional) Whether players can feed this animal a golden cracker to double its normal output. Default true. |
Audio & Sprite
field | effect | ||||||||
---|---|---|---|---|---|---|---|---|---|
Sound | (Optional) The audio cue ID for the sound produced by the animal (e.g. when pet). Default none. | ||||||||
BabySound | (Optional) Overrides Sound field when the animal is a baby. Has no effect if Sound isn't specified. Default none. | ||||||||
Texture | (Optional) The asset name for the animal's spritesheet. Defaults to Animals/<ID> (like Animals/Goat for a goat). This asset must exist even if you use Skins below, since the default appearance is automatically an available skin. See spritesheet layout.
| ||||||||
HarvestedTexture | (Optional) Overrides Texture if the animal doesn't currently have an item ready to collect (like the sheep's sheared sprite). Default none. | ||||||||
BabyTexture | (Optional) Overrides Texture and HarvestedTexture when the animal is a baby. Default none. | ||||||||
UseFlippedRightForLeft | (Optional) When the animal is facing left, whether to use a flipped version of their right-facing sprite. See spritesheet layout for more info. Default false. | ||||||||
SpriteWidth SpriteHeight |
(Optional) The pixel height & width of the animal's sprite (before the in-game pixel zoom). Both default to 16. | ||||||||
EmoteOffset | (Optional) A pixel offset to apply to emotes from the farm animal, specified as an object with X and Y. Default zero. | ||||||||
SwimOffset | (Optional) A pixel offset to apply to the farm animal's sprite while it's swimming, specified as an object with X and Y. Default "X": 0, "Y": 112. | ||||||||
Skins | (Optional) A list of alternate appearances. If specified, a skin is chosen at random when the animal is purchased or hatched based on the Weight field. The default appearance (e.g. using Texture) is automatically an available skin with a weight of 1.
This consists of a list of models with these fields:
| ||||||||
SleepFrame | (Optional) The sprite index in the texture to display when sleeping. Default 12. | ||||||||
UseDoubleUniqueAnimationFrames | (Optional) Whether the texture has two frames for the randomized 'unique' animation instead of one. See spritesheet layout for more info. Default false.
The unique animation sprite indexes are:
| ||||||||
ShadowWhenBaby ShadowWhenBabySwims ShadowWhenAdult ShadowWhenAdultSwims |
(Optional) The shadow to draw under the farm animal. The Baby fields only apply when the farm animal is a baby, and Adult fields only applies when it's an adult (e.g. a baby animal won't default to the adult fields). When the farm animal swims, it'll use the Swims variant if it's set, else default to the non-swim variant.
These consist of a model with these fields:
|
Player profession effects
field | effect |
---|---|
ProfessionForFasterProduce | (Optional) The internal ID of a profession which reduces the DaysToProduce by one. Default none. |
ProfessionForHappinessBoost | (Optional) The internal ID of a profession which makes it easier to befriend this animal. Default none. |
ProfessionForQualityBoost | (Optional) The internal ID of a profession which increases the chance of higher-quality produce. Default none. |
Behavior
field | effect |
---|---|
CanSwim | (Optional) Whether animals on the farm can swim in water once they've been pet. Default false. |
BabiesFollowAdults | (Optional) Whether baby animals can follow nearby adults. Default false. |
GrassEatAmount | (Optional) The amount of grass eaten by this animal each day. Setting it to 0 will disable the farm animal's hunger. Default 2. |
HappinessDrain | (Optional) An amount which affects the daily reduction in happiness if the animal wasn't pet, or didn't have a heater in winter. Default none. |
SellPrice | (Optional) The price when the player sells the animal, before it's adjusted for the animal's friendship towards the player. Default 0.
The actual sell price will be this value multiplied by a number between 0.3 (zero friendship) and 1.3 (max friendship). |
CustomFields | The custom fields for this entry. |
Other
field | effect | ||||||||
---|---|---|---|---|---|---|---|---|---|
ShowInSummitCredits | (Optional) Whether to show the farm animal in the credit scene on the summit after the player achieves perfection. Default false. | ||||||||
StatToIncrementOnProduce | (Optional) The game stat counters to increment when the animal produces an item. Default none. This consists of a list of models with these fields:
| ||||||||
UpDownPetHitboxTileSize LeftRightPetHitboxTileSize |
(Optional) The animal sprite's tile size in the world when the player is clicking to pet them, specified in the form <width> , <height> . The UpDownPetHitboxTileSize applies when the animal is facing up or down, and LeftRightPetHitboxTileSize applies when facing left or right. The values can be fractional (e.g. cows have a width of 1.75). Both default to a 1×1 tile.
| ||||||||
BabyUpDownPetHitboxTileSize BabyLeftRightPetHitboxTileSize |
(Optional) Overrides UpDownPetHitboxTileSize and LeftRightPetHitboxTileSize respectively before the animal is an adult. Both default to 1×1 tile. |
Spritesheet layout
Explanation
Each farm animal's spritesheet must have exactly 4 columns, and at least 5–7 rows (depending on the data fields). The sprite size depends on the SpriteWidth and SpriteHeight fields; for example, the default sprite width of 16 pixels means the spritesheet must be exactly 4 × 16 = 64 pixels wide.
The expected rows are:
- move down;
- move right;
- move up;
- move left (only if UseFlippedRightForLeft is false);
- unique animations 1;
- unique animations 2 (only if UseDoubleUniqueAnimationFrames is true);
- eat.
For example, the default layout (with UseFlippedRightForLeft and UseDoubleUniqueAnimationFrames both false) is:
0 (move down 1) | 1 (move down 2) | 2 (move down 3) | 3 (move down 4) |
4 (move right 1) | 5 (move right 2) | 6 (move right 3) | 7 (move right 4) |
8 (move up) | 9 (move up) | 10 (move up) | 11 (move up) |
12 (unused) | 13 (unique down) | 14 (unique right) | 15 (unique up) |
16 (eat 1) | 17 (eat 1) | 18 (eat 1) | 19 (eat 1) |
When both are true, that becomes:
0 (move down 1) | 1 (move down 2) | 2 (move down 3) | 3 (move down 4) |
4 (move right 1) | 5 (move right 2) | 6 (move right 3) | 7 (move right 4) |
8 (move up) | 9 (move up) | 10 (move up) | 11 (move up) |
12 (move left) | 13 (move left) | 14 (move left) | 15 (move left) |
16 (unique down 1) | 17 (unique down 2) | 18 (unique right 1) | 19 (unique right 2) |
20 (unique up 1) | 21 (unique up 2) | 22 (unique left 1) | 23 (unique left 2) |
24 (eat 1) | 25 (eat 1) | 26 (eat 1) | 27 (eat 1) |
Pre-1.6 vanilla layouts
Before Stardew Valley 1.6, there were two main spritesheet layouts depending on whether the animal lived in a barn or coop. If you want to match the previous spritesheet layouts (e.g. to update a pre-1.6 custom animal), the options to set are:
// for barn animals
"UseFlippedRightForLeft": true,
"UseDoubleUniqueAnimationFrames": false
// for coop animals
"UseFlippedRightForLeft": false,
"UseDoubleUniqueAnimationFrames": true