Difference between revisions of "Modding:Blueprint data"
(part 8: add info from Modding:Migrate to Stardew Valley 1.6 (main author Pathoschild, with formatting fixes by Margotbean and other fixes by Atravita) |
(part 9: add info from Modding:Migrate to Stardew Valley 1.6 (main author Pathoschild, with formatting fixes by Margotbean and other fixes by Atravita) |
||
Line 353: | Line 353: | ||
| <samp>ValidOccupantTypes</samp> | | <samp>ValidOccupantTypes</samp> | ||
| ''(Optional)'' A list of building IDs whose animals to allow in this building too. For example, <code>[ "Barn", "Coop" ]</code> will allow [[barn]] and [[coop]] animals in this building. Default none. | | ''(Optional)'' A list of building IDs whose animals to allow in this building too. For example, <code>[ "Barn", "Coop" ]</code> will allow [[barn]] and [[coop]] animals in this building. Default none. | ||
+ | |} | ||
+ | |||
+ | |||
+ | ====Item processing==== | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! field | ||
+ | ! effect | ||
+ | |- | ||
+ | | <samp>HayCapacity</samp> | ||
+ | | ''(Optional)'' The amount of hay that can be stored in this building. If built on the [[The Farm|farm]], this works just like [[silo]]s and contributes to the farm's available hay. | ||
+ | |- | ||
+ | | <samp>ItemConversions</samp> | ||
+ | | ''(Optional)'' The item processing rules which take input items and convert them into output items using the inventories defined by <samp>Chests</samp>. 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 rule within the current list. | ||
+ | |- | ||
+ | | <samp>RequiredTags</samp> | ||
+ | | A list of [[Modding:Items#Context tags|context tags]] to match against an input item. An item must have ''all'' of these tags to be accepted. | ||
+ | |- | ||
+ | | <samp>SourceChest</samp> | ||
+ | | The ID of the inventory defined in <samp>Chests</samp> from which to take input items. | ||
+ | |- | ||
+ | | <samp>DestinationChest</samp> | ||
+ | | The ID of the inventory defined in <samp>Chests</samp> in which to store output items. | ||
+ | |- | ||
+ | | <samp>ProducedItems</samp> | ||
+ | | The output items produced when an input item is converted. This consists of a list of models with these fields: | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! field | ||
+ | ! effect | ||
+ | |- | ||
+ | | ''common fields'' | ||
+ | | See [[Modding:Item queries#Item spawn fields|item spawn fields]] for the generic item fields supported by machine output. | ||
+ | |||
+ | If set to an [[Modding:Item queries|item query]] which returns multiple items, one of them will be selected at random. | ||
+ | |- | ||
+ | | <samp>Chance</samp> | ||
+ | | ''(Optional)'' The probability that the item will be produced, as a value between 0 (never drops) and 1 (always drops). Default 1 (100% chance). | ||
+ | |} | ||
+ | |- | ||
+ | | <samp>RequiredCount</samp> | ||
+ | | ''(Optional)'' The number of the input item to consume. Default 1. | ||
+ | |- | ||
+ | | <samp>MaxDailyConversions</samp> | ||
+ | | ''(Optional)'' The maximum number of the input item which can be processed each day. Each conversion rule has its own separate maximum (e.g. if you have two rules each with a max of 1, then you can convert one of each daily). Set to -1 to allow unlimited conversions. Default 1. | ||
+ | |} | ||
+ | |- | ||
+ | | <samp>Chests</samp> | ||
+ | | ''(Optional)'' The input/output inventories that can be accessed from a tile on the building exterior. The allowed items are defined by the separate <samp>ItemConversions</samp> field. This is 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 chest within the current list. | ||
+ | |||
+ | This is referenced from the <samp>ItemConversions</samp> field. | ||
+ | |- | ||
+ | | <samp>Type</samp> | ||
+ | | The inventory type. This must be one of: | ||
+ | * <samp>Chest</samp>: show a normal chest UI on click. | ||
+ | * <samp>Collect</samp>: provides items for the player to collect. Clicking the tile will do nothing (if empty), grab the item directly (if it only contains one item), else show a grab-only inventory UI. | ||
+ | * <samp>Load</samp>: lets the player add items for the building to process. | ||
+ | |- | ||
+ | | <samp>Sound</samp> | ||
+ | | ''(Optional)'' The sound to play once when the player clicks the chest. | ||
+ | |- | ||
+ | | <samp>InvalidItemMessage</samp><br /><samp>InvalidCountMessage</samp><br /><samp>ChestFullMessage</samp> | ||
+ | | ''(Optional)'' A [[Modding:Tokenizable strings|tokenizable string]] to show when the player tries to add an item to the chest when... | ||
+ | * it isn't a supported item; | ||
+ | * it's supported but they don't have enough in their inventory; | ||
+ | * the chest has no more room to accept it. | ||
+ | If omitted, the player interaction is ignored with no message shown. | ||
+ | |- | ||
+ | | <samp>InvalidItemMessageCondition</samp> | ||
+ | | ''(Optional)'' A [[Modding:Game state queries|game state query]] which indicates whether <samp>InvalidItemMessage</samp> should be shown. This can use item-related queries like <samp>ITEM_TYPE</samp>. Defaults to always true. | ||
+ | |- | ||
+ | | <samp>DisplayTile</samp> | ||
+ | | ''(Optional)'' The chest's position on the building exterior, measured in tiles from the top-left corner of the building, specified in the form <samp>"{{t|x}}, {{t|y}}"</samp>. This affects the position of the 'item ready to collect' bubble. If omitted, the bubble is disabled. | ||
+ | |- | ||
+ | | <samp>DisplayHeight</samp> | ||
+ | | ''(Optional)'' If <samp>DisplayTile</samp> is set, the chest's tile height like <samp>1.5</samp>. | ||
+ | |} | ||
|} | |} | ||
Revision as of 03:47, 26 August 2024
← Index
This page explains how the define custom buildings. This is an advanced guide for mod developers.
Raw data
Blueprint data is stored in Content\Data\Blueprints.xnb, which can be unpacked for editing. Here's the raw data as of 1.5.1 for reference:
Data |
---|
{
"Silo": "390 100 330 10 334 5/3/3/-1/-1/-2/-1/null/Silo/Allows you to cut and store grass for feed./Buildings/none/48/128/-1/null/Farm/100/false",
"Mill": "388 150 390 50 428 4/4/2/-1/-1/-2/-1/null/Mill/Allows you to mill wheat, beets and rice./Buildings/none/64/128/-1/null/Farm/2500/false",
"Earth Obelisk": "337 10 86 10/3/2/-1/-1/-2/-1/null/Earth Obelisk/Warps you to the mountains./Buildings/none/48/128/-1/null/Farm/500000/true",
"Water Obelisk": "337 5 372 10 393 10/3/2/-1/-1/-2/-1/null/Water Obelisk/Warps you to the beach./Buildings/none/48/128/-1/null/Farm/500000/true",
"Desert Obelisk": "337 20 88 10 90 10/3/2/-1/-1/-2/-1/null/Desert Obelisk/Warps you to the desert./Buildings/none/48/128/-1/null/Farm/1000000/true",
"Island Obelisk": "337 10 852 10 91 10/3/2/-1/-1/-2/-1/null/Island Obelisk/Warps you to Ginger Island./Buildings/none/48/128/-1/null/Farm/1000000/true",
"Junimo Hut": "390 200 268 9 771 100/3/2/-1/-1/-2/-1/null/Junimo Hut/Junimos will harvest crops around the hut for you./Buildings/none/48/64/-1/null/Farm/20000/true",
"Gold Clock": "/3/2/-1/-1/-2/-1/null/Gold Clock/Prevents debris from appearing on your farm. Keeps fences from decaying./Buildings/none/48/80/-1/null/Farm/10000000/true",
"Stable": "709 100 335 5/4/2/-1/-1/-2/-1/null/Stable/Allows you to keep and ride a horse. Horse included./Buildings/none/64/96/-1/null/Farm/10000/false",
"Well": "390 75/3/3/-1/-1/-1/-1/null/Well/Provides a place for you to refill your watering can./Buildings/none/32/32/-1/null/Farm/1000/false",
"Shipping Bin": "388 150/2/1/-1/-1/-1/-1/null/Shipping Bin/Throw items inside to sell them overnight./Buildings/none/48/80/-1/null/Farm/250/false/0",
"Coop": "388 300 390 100/6/3/1/2/2/2/Coop/Coop/Houses 4 coop-dwelling animals./Buildings/none/64/96/4/null/Farm/4000/false",
"Big Coop": "388 400 390 150/6/3/1/2/2/2/Coop2/Big Coop/Houses 8 coop-dwelling animals. Comes with an incubator. Unlocks ducks./Upgrades/Coop/64/96/8/null/Farm/10000/false",
"Deluxe Coop": "388 500 390 200/6/3/1/2/2/2/Coop3/Deluxe Coop/Houses 12 coop-dwelling animals. Comes with an auto-feed system. Unlocks rabbits./Upgrades/Big Coop/64/96/12/null/Farm/20000/false",
"Barn": "388 350 390 150/7/4/1/3/3/3/Barn/Barn/Houses 4 barn-dwelling animals./Buildings/none/96/96/4/null/Farm/6000/false",
"Big Barn": "388 450 390 200/7/4/1/3/4/3/Barn2/Big Barn/Houses 8 barn-dwelling animals. Allows animals to give birth. Unlocks goats./Upgrades/Barn/96/96/8/null/Farm/12000/false",
"Deluxe Barn": "388 550 390 300/7/4/1/3/4/3/Barn3/Deluxe Barn/Houses 12 barn-dwelling animals. Comes with an auto-feed system. Unlocks sheep and pigs./Upgrades/Big Barn/96/96/12/null/Farm/25000/false",
"Slime Hutch": "390 500 338 10 337 1/11/6/5/5/-1/-1/SlimeHutch/Slime Hutch/Raise up to 20 slimes. Fill water troughs and slimes will create slime balls./Buildings/none/96/96/20/null/Farm/10000/false",
"Shed": "388 300/7/3/3/2/-1/-1/Shed/Shed/An empty building. Fill it with whatever you like! The interior can be decorated./Buildings/none/96/96/20/null/Farm/15000/false",
"Big Shed": "388 550 390 300/7/3/3/2/-1/-1/Shed2/Big Shed/Doubles the size of the shed. The interior can be decorated./Upgrades/Shed/96/96/20/null/Farm/20000/false",
"Stone Cabin": "390 10/5/3/2/1/-1/-1/Cabin/Cabin/A home for a friend! Subsidized by the town agricultural fund./Buildings/none/96/96/20/null/Farm/100/false/0",
"Plank Cabin": "388 5 771 10/5/3/2/1/-1/-1/Cabin/Cabin/A home for a friend! Subsidized by the town agricultural fund./Buildings/none/96/96/20/null/Farm/100/false/0",
"Log Cabin": "388 10/5/3/2/1/-1/-1/Cabin/Cabin/A home for a friend! Subsidized by the town agricultural fund./Buildings/none/96/96/20/null/Farm/100/false/0",
"Greenhouse": "/7/6/3/5/-1/-1/null/Greenhouse/A place to grow crops from any season, year round!/Buildings/none/64/96/-1/null/Farm/-1/false/0/2 6 3 6 4 6 2 7 3 7 4 7",
"Mine Elevator": "388 30 390 15 334 5/4/2/1/1/-1/-1/null/Mine Elevator/Quickly travel between any mine elevators you construct. You can only build one per mine level./Buildings/none/64/64/-1/MineElevator/UndergroundMine",
"Fish Pond": "390 200 152 5 153 5/5/5/-1/-1/-2/-1/null/Fish Pond/Raise fish and harvest their produce. Fish multiply over time./Buildings/none/76/78/10/null/Farm/5000/false/2",
"Chicken": "animal/500/64/64/Chicken/Lays delicious eggs. Comes in two colors./null/Farm",
"Duck": "animal/1000/64/64/Duck/Lays eggs and occasionally drops feathers./null/Farm",
"Rabbit": "animal/1500/64/64/Rabbit/These are wooly rabbits!/null/Farm",
"Cow": "animal/1000/64/96/Cow/Produces rich, creamy milk./null/Farm",
"Sheep": "animal/1500/64/96/Sheep/Can be sheared for valuable wool./null/Farm",
"Goat": "animal/1500/64/96/Goat/Produces tasty goat's milk!/null/Farm",
"Pig": "animal/2000/64/96/Pig/These are specially trained to find truffles./null/Farm"
}
|
Format
The Data/Buildings asset consists of a string → model lookup, where...
- The key is a unique string ID for the building type.
- The value is a model with the fields listed below.
Required fields
field | effect |
---|---|
Name Description |
A tokenizable string for the display name and description (e.g. shown in the construction menu). |
Texture | The asset name for the texture under the game's Content folder. |
Construction
field | effect | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Builder | (Optional) The NPC from whom you can request construction. The vanilla values are Robin and Wizard, but you can specify a different name if a C# mod opens a construction menu for them. Defaults to Robin. If set to null, it won't appear in any menu. | ||||||||||
BuildCost | (Optional) The gold cost to construct the building. Defaults to 0g. | ||||||||||
BuildMaterials | (Optional) The materials you must provide to start construction, as a list of models with these fields:
| ||||||||||
BuildDays | (Optional) The number of days needed to complete construction (e.g. 1 for a building completed the next day). If set to 0, construction finishes instantly. Defaults to 0. | ||||||||||
BuildCondition | (Optional) A game state query which indicates whether the building should be available in the construction menu. Defaults to always available. | ||||||||||
BuildMenuDrawOffset | (Optional) A pixel offset to apply to the building sprite when drawn in the construction menu. Default none. | ||||||||||
AdditionalPlacementTiles | (Optional) The extra tiles to treat as part of the building when placing it through the construction menu. For example, the farmhouse uses this to make sure the stairs are clear. This consists of a list of models with these fields:
| ||||||||||
IndoorItems | (Optional) The items to place in the building interior when it's constructed or upgraded. This consists of a list of models with these fields:
| ||||||||||
MagicalConstruction | (Optional) Whether the building is magical. This changes the carpenter menu to a mystic theme while this building's blueprint is selected, and completes the construction instantly when placed. | ||||||||||
AddMailOnBuild | (Optional) A list of letter IDs to send to all players when the building is constructed for the first time. |
Upgrades
field | effect | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
BuildingToUpgrade | (Optional) The ID of the building for which this is an upgrade, or omit to allow constructing it as a new building. For example, the Big Coop sets this to "Coop". Any numbers of buildings can be an upgrade for the same building, in which case the player can choose one upgrade path. | ||||||||||
IndoorItemMoves | (Optional) When applied as an upgrade to an existing building, the placed items in its interior to move when transitioning to the new map. This is a list of models with these fields:
| ||||||||||
UpgradeSignTile | (Optional) The tile position relative to the top-left corner of the building where the upgrade sign will be placed when Robin is building an upgrade, in the form "<x> , <y> ". Defaults to approximately "5, 1" if the building interior type is Shed, else "0, 0".
| ||||||||||
UpgradeSignHeight | (Optional) The pixel height of the upgrade sign when Robin is building an upgrade. Defaults to 0. |
Exterior behavior
field | effect |
---|---|
Size | (Optional) The building's width and height when constructed, measured in tiles. Defaults to a 1 x 1 area. |
CollisionMap | (Optional) An ASCII text block which indicates which of the building's tiles the players can walk onto, where each character can be X (blocked) or O (passable). Defaults to all tiles blocked.
For example, a stable covers a 2x4 tile area with the front two tiles passable: XXXX XOOX When the collision map is parsed, leading/trailing whitespace is trimmed (both for the entire map and for each line). In JSON, you can specify it in two forms: // single line with \n line breaks
"CollisionMap": "XXXX\nXOOX"
// multi-line with optional indentation
"CollisionMap": "
XXXX
XOOX
"
|
HumanDoor | (Optional) The position of the door that can be clicked to warp into the building interior. This is measured in tiles relative to the top-left corner tile. Defaults to disabled. |
AnimalDoor | (Optional) The position and size of the door that animals use to enter/exit the building, if the building interior is an animal location, specified as an object with X, Y, Width, and Height fields. This is measured in tiles relative to the top-left corner tile. Defaults to disabled. |
AnimalDoorOpenDuration AnimalDoorCloseDuration |
(Optional) The duration of the open/close animation for the animal door, measured in milliseconds. If omitted, the door switches to the open/closed state instantly. |
AnimalDoorOpenSound AnimalDoorCloseSound |
(Optional) The sound which is played once each time the animal door is opened/closed. Disabled by default. |
Exterior appearance
field | effect | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SourceRect | (Optional) The building's pixel area within the Texture, specified as an object with X, Y, Width, and Height fields. Defaults to the entire texture. | ||||||||||||||||||||
Skins | (Optional) The appearances which can be selected from Robin's menu (like stone/plank/log cabins), in addition to the default appearance based on Texture. This consists of a list of models with these fields:
| ||||||||||||||||||||
FadeWhenBehind | (Optional) Whether the building should become semi-transparent when the player is behind it. Default true. | ||||||||||||||||||||
DrawOffset | (Optional) A pixel offset applied to the building sprite's placement in the world. Default 0. | ||||||||||||||||||||
SeasonOffset | (Optional) A pixel offset to apply each season. This is applied to the SourceRect position by multiplying the offset by 0 (spring), 1 (summer), 2 (fall), or 3 (winter). Default 0, so all seasons use the same source rect. | ||||||||||||||||||||
SortTileOffset | (Optional) A Y tile offset applied when figuring out render layering. For example, a value of 2.5 will treat the building as if it was 2.5 tiles further up the screen for the purposes of layering. Default 0. | ||||||||||||||||||||
DrawLayers | (Optional) A list of textures to draw over or behind the building, with support for conditions and animations. This consists of a list of models with these fields:
| ||||||||||||||||||||
DrawShadow | (Optional) Whether to draw an automatic shadow along the bottom edge of the building's sprite. Default true. |
Interior
field | effect |
---|---|
IndoorMap | (Optional) The name of the map asset under Maps to load for the building interior. For example, "Shed" will load the shed's Maps/Shed map. |
IndoorMapType | (Optional) The full name of the C# location class which will manage the building's interior location. This must be one of the vanilla types to avoid a crash when saving. There are too many to list here, but the most useful types are likely...
Defaults to the generic StardewValley.GameLocation class. |
NonInstancedIndoorLocation | (Optional) The name of the existing global location to treat as the building's interior, like FarmHouse and Greenhouse for their buildings.
Each location can only be used by one building. If the location is already in use (e.g. because the player has two of this building), each subsequent building will use the IndoorMap and IndoorMapType instead. For example, the first greenhouse will use the global Greenhouse location, and any subsequent greenhouse will use a separate instanced location. |
MaxOccupants | (Optional) The maximum number of animals who can live in this building. |
AllowAnimalPregnancy | (Optional) Whether animals can get pregnant and produce offspring in this building. Default false. |
ValidOccupantTypes | (Optional) A list of building IDs whose animals to allow in this building too. For example, [ "Barn", "Coop" ] will allow barn and coop animals in this building. Default none.
|
Item processing
field | effect | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
HayCapacity | (Optional) The amount of hay that can be stored in this building. If built on the farm, this works just like silos and contributes to the farm's available hay. | ||||||||||||||||||||||
ItemConversions | (Optional) The item processing rules which take input items and convert them into output items using the inventories defined by Chests. This consists of a list of models with these fields:
| ||||||||||||||||||||||
Chests | (Optional) The input/output inventories that can be accessed from a tile on the building exterior. The allowed items are defined by the separate ItemConversions field. This is a list of models with these fields:
|