|
|
| (79 intermediate revisions by 15 users not shown) |
| Line 1: |
Line 1: |
| ← [[Modding:Index|Index]] | | ← [[Modding:Items|Items]] |
|
| |
|
| This page explains how the game stores and parses item data. This is an advanced guide for mod developers. | | This page explains how the game stores and parses object-type item data. For items in general, see [[Modding:Items]]. |
|
| |
|
| ==Introduction==
| | ==Overview== |
| ===Overview===
| | Objects are the default type for items in inventories or in the world. Depending on their data, they can be placed, picked up, eaten, sold to shops, etc. |
| Items are divided into several types:
| |
|
| |
|
| {| class="wikitable"
| | They have [[Modding:Items#Item types|item type]] <code>(O)</code> (or <code>ItemRegistry.type_object</code> in C# code), their data in <samp>Data/Objects</samp>, their icon sprites in <samp>Maps/springobjects</samp> or <samp>TileSheets/Objects_2</samp> by default, and their code in <samp>StardewValley.Object</samp>. See [[/Object sprites|a table of sprites and their corresponding indexes]]. |
| |-
| |
| ! type
| |
| ! summary
| |
| |-
| |
| | [[#Objects|objects]]
| |
| | The default type for items in inventories or placed in the world.
| |
| |-
| |
| | [[#Big craftables|big craftables]]
| |
| | Craftable items which can be placed in the world and are two tiles tall.
| |
| |-
| |
| | [[#Boots|boots]]
| |
| | Items that can be equipped in the player's [[footwear]] slot.
| |
| |-
| |
| | [[#Clothing|clothing]]
| |
| | Cosmetic items that can be equipped in the player's [[Tailoring|pants and shirt]] slots.
| |
| |-
| |
| | [[#Furniture|furniture]]
| |
| | Decorative items which can be placed in the world, including chairs which the player can sit on.
| |
| |-
| |
| | [[#Hats|hats]]
| |
| | Items that can be equipped in the player's [[hats|hat]] slot.
| |
| |-
| |
| | [[#Tools|tools]]
| |
| | Items that can be swung or used by the player to perform some effect.
| |
| |-
| |
| | [[#Weapons|weapons]]
| |
| | Tools that can be used by the player to damage monsters.
| |
| |}
| |
| | |
| For each item type, the game has two files in its <samp>Content</samp> folder (which can be [[Modding:Editing XNB files#unpacking|unpacked for editing]]):
| |
| * a ''data asset'' for the text data for its items (names, descriptions, prices, etc);
| |
| * and a ''spritesheet'' for the in-game item icons.
| |
| | |
| Each item has a <samp>ParentSheetIndex</samp> field which is its position in the item type's spritesheet, starting at 0 in the top-left and incrementing by one as you move across and then down. For example, hat #0 is the first sprite in <samp>Characters/Farmer/hats</samp>. The <samp>ParentSheetIndex</samp> is also used to identify the item itself; since spritesheet indexes aren't unique (''e.g.,'' there's both a hat #10 and object #10), code needs to check the type too like <code>item is Weapon weapon && weapon.ParentSheetIndex == 4</code>.
| |
| | |
| Flooring and wallpaper are not in any of these types and are not currently documented in this wiki.
| |
| | |
| See the sections below for details on each item type. | |
| | |
| ===Get a list of items===
| |
| With [[Modding:Player Guide/Getting Started|SMAPI installed]], you can [[Modding:Console commands#Console commands|run the <samp>list_items</samp> console command]] in-game to view/search items and their IDs.
| |
|
| |
|
| ===Define a custom item=== | | ==Data format== |
| Every item must be assigned a unique <samp>ParentSheetIndex</samp> within its type, and that index must fit within the item type's spritesheet.
| | The object data in <samp>Data/Objects</samp> consists of a string → model lookup, where... |
| | | * The key is the unqualified [[Modding:Common data field types#Item ID|item ID]]. |
| Adding custom items to the data assets and spritesheets directly is '''not recommended''', since it's very easy to conflict with other mods or cause game errors. Instead you should create a content pack for {{nexus mod|1720|Json Assets}}, which coordinates dynamic item ID assignment so multiple custom item mods can work together.
| | * The value is a model with the fields listed below. |
| | |
| ==Common data==
| |
| ===Quality===
| |
| Each item has a quality level which (depending on the item type) may affect its price, health boost, etc. The valid qualities are:
| |
|
| |
|
| | ===Basic info=== |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
| ! quality | | ! field |
| ! value | | ! purpose |
| ! constant
| |
| |-
| |
| | normal
| |
| | <samp>0</samp>
| |
| | <samp>Object.lowQuality</samp>
| |
| |- | | |- |
| | silver
| | | <samp>Name</samp> |
| | <samp>1</samp> | | | The internal item name. |
| | <samp>Object.medQuality</samp> | |
| |- | | |- |
| | gold
| | | <samp>DisplayName</samp><br /><samp>Description</samp> |
| | <samp>2</samp> | | | A [[Modding:Tokenizable strings|tokenizable string]] for the item's in-game display name and description. |
| | <samp>Object.highQuality</samp>
| |
| |- | | |- |
| | iridium | | | <samp>Type</samp> |
| | <samp>4</samp> | | | The item's general type, like Arch (artifact) or Minerals. The vanilla types are: <samp>Basic</samp>, <samp>Arch</samp> (artifact), <samp>Litter</samp> (e.g. debris), <samp>Minerals</samp>, <samp>Quest</samp>, <samp>Crafting</samp>, <samp>Fish</samp>, <samp>Cooking</samp>, <samp>Seeds</samp>, <samp>Ring</samp>, <samp>interactive</samp>, and some placeholder values like <samp>asdf</samp>. |
| | <samp>Object.bestQuality</samp>
| |
| |}
| |
|
| |
|
| ===Categories===
| | '''Caution:''' adding custom items with the <samp>Arch</samp> type is inadvisable as it often leads to [[Artifact Spot|artifact spot]]s becoming broken and not giving any items. |
| Each item also has a category (represented by a negative integer). In code, you can get an item's category value from <samp>item.Category</samp>, and its translated name from <samp>item.getCategoryName()</samp>. Here are the valid categories:
| |
|
| |
|
| {| class="wikitable sortable"
| | '''Note:''' The "Type" affects whether an item shows up in the collections menu. For example, items with <samp>Type: Cooking</samp> will show up as silhouettes in the cooked items collection menu, items with <samp>Type: Minerals</samp> will show up as silhouettes in the mineral collection menu, etc. However, the [[Modding:Items#Categories|Category]] of the item must also be the correct number or the item will not count toward Perfection/Achievements. For example, if an item has Type: Cooking, it must also be "Category": -7 in order to count toward the "Gourmet Chef" achievement and Perfection. |
| |-
| |
| ! value
| |
| ! internal constant
| |
| ! [[#Context tags|context tag]]
| |
| ! English translation
| |
| ! Properties
| |
| |-
| |
| | -2
| |
| | <samp>Object.GemCategory</samp>
| |
| | <samp>category_gem</samp>
| |
| | Mineral
| |
| | Affected by [[Skills#Mining|Gemologist]] profession
| |
| |-
| |
| | -4
| |
| | <samp>Object.FishCategory</samp>
| |
| | <samp>category_fish</samp>
| |
| | Fish
| |
| | Affected by [[Skills#Fishing|Fisher]] and [[Skills#Fishing|Angler]] professions
| |
| |-
| |
| | -5
| |
| | <samp>Object.EggCategory</samp>
| |
| | <samp>category_egg</samp>
| |
| | Animal Product
| |
| | Affected by [[Skills#Farming|Rancher]] profession, can be used in a slingshot
| |
| |-
| |
| | -6
| |
| | <samp>Object.MilkCategory</samp>
| |
| | <samp>category_milk</samp>
| |
| | Animal Product
| |
| | Affected by [[Skills#Farming|Rancher]] profession
| |
| |-
| |
| | -7
| |
| | <samp>Object.CookingCategory</samp>
| |
| | <samp>category_cooking</samp>
| |
| | Cooking
| |
| |
| |
| |-
| |
| | -8
| |
| | <samp>Object.CraftingCategory</samp>
| |
| | <samp>category_crafting</samp>
| |
| | Crafting
| |
| | Is Placeable
| |
| |-
| |
| | -9
| |
| | <samp>Object.BigCraftableCategory</samp>
| |
| | <samp>category_big_craftable</samp>
| |
| |
| |
| | Is Placeable
| |
| |-
| |
| | -12
| |
| | <samp>Object.mineralsCategory</samp>
| |
| | <samp>category_minerals</samp>
| |
| | Mineral
| |
| | Affected by [[Skills#Mining|Gemologist]] profession
| |
| |-
| |
| | -14
| |
| | <samp>Object.meatCategory</samp>
| |
| | <samp>category_meat</samp>
| |
| | Animal Product
| |
| |
| |
| |-
| |
| | -15
| |
| | <samp>Object.metalResources</samp>
| |
| | <samp>category_metal_resources</samp>
| |
| | Resource
| |
| |
| |
| |-
| |
| | -16
| |
| | <samp>Object.buildingResources</samp>
| |
| | <samp>category_building_resources</samp>
| |
| | Resource
| |
| |
| |
| |-
| |
| | -17
| |
| | <samp>Object.sellAtPierres</samp>
| |
| | <samp>category_sell_at_pierres</samp>
| |
| |
| |
| |
| |
| |- | | |- |
| | -18
| | | <samp>Category</samp> |
| | <samp>Object.sellAtPierresAndMarnies</samp> | | | The [[Modding:Items#Categories|item category]]. |
| | <samp>category_sell_at_pierres_and_marnies</samp> | |
| | Animal Product
| |
| | Affected by [[Skills#Farming|Rancher]] profession
| |
| |- | | |- |
| | -19
| | | <samp>Price</samp> |
| | <samp>Object.fertilizerCategory</samp> | | | ''(Optional)'' The price when sold by the player. This is not the price when bought from a shop. Default 0. |
| | <samp>category_fertilizer</samp> | |
| | Fertilizer
| |
| | Is Placeable, is always passable
| |
| |-
| |
| | -20
| |
| | <samp>Object.junkCategory</samp>
| |
| | <samp>category_junk</samp>
| |
| | Trash
| |
| |
| |
| |-
| |
| | -21
| |
| | <samp>Object.baitCategory</samp>
| |
| | <samp>category_bait</samp>
| |
| | Bait
| |
| | Can be attached to a fishing rod
| |
| |-
| |
| | -22
| |
| | <samp>Object.tackleCategory</samp>
| |
| | <samp>category_tackle</samp>
| |
| | Fishing Tackle
| |
| | Can be attached to a fishing rod, cannot stack
| |
| |-
| |
| | -23
| |
| | <samp>sellAtFishShopCategory</samp>
| |
| | <samp>category_sell_at_fish_shop</samp>
| |
| |
| |
| |
| |
| |-
| |
| | -24
| |
| | <samp>Object.furnitureCategory</samp>
| |
| | <samp>category_furniture</samp>
| |
| | Decor
| |
| |
| |
| |-
| |
| | -25
| |
| | <samp>Object.ingredientsCategory</samp>
| |
| | <samp>category_ingredients</samp>
| |
| | Cooking
| |
| |
| |
| |-
| |
| | -26
| |
| | <samp>Object.artisanGoodsCategory</samp>
| |
| | <samp>category_artisan_goods</samp>
| |
| | Artisan Goods
| |
| | Affected by [[Skills#Farming|Artisan]] profession
| |
| |-
| |
| | -27
| |
| | <samp>Object.syrupCategory</samp>
| |
| | <samp>category_syrup</samp>
| |
| | Artisan Goods
| |
| | Affected by [[Skills#Foraging|Tapper]] profession
| |
| |-
| |
| | -28
| |
| | <samp>Object.monsterLootCategory</samp>
| |
| | <samp>category_monster_loot</samp>
| |
| | Monster Loot
| |
| |
| |
| |-
| |
| | -29
| |
| | <samp>Object.equipmentCategory</samp>
| |
| | <samp>category_equipment</samp>
| |
| |
| |
| |
| |
| |-
| |
| | -74
| |
| | <samp>Object.SeedsCategory</samp>
| |
| | <samp>category_seeds</samp>
| |
| | Seed
| |
| | Is Placeable, is always passable
| |
| |-
| |
| | -75
| |
| | <samp>Object.VegetableCategory</samp>
| |
| | <samp>category_vegetable</samp>
| |
| | Vegetable
| |
| | Affected by [[Skills#Farming|Tiller]] profession, can be used in a slingshot
| |
| |-
| |
| | -79
| |
| | <samp>Object.FruitsCategory</samp>
| |
| | <samp>category_fruits</samp>
| |
| | Fruit
| |
| | Affected by [[Skills#Farming|Tiller]] profession (if not foraged), can be used in a slingshot
| |
| |-
| |
| | -80
| |
| | <samp>Object.flowersCategory</samp>
| |
| | <samp>category_flowers</samp>
| |
| | Flower
| |
| | Affected by [[Skills#Farming|Tiller]] profession
| |
| |-
| |
| | -81
| |
| | <samp>Object.GreensCategory</samp>
| |
| | <samp>category_greens</samp>
| |
| | Forage
| |
| |
| |
| |-
| |
| | -95
| |
| | <samp>Object.hatCategory</samp>
| |
| | <samp>category_hat</samp>
| |
| |
| |
| |
| |
| |-
| |
| | -96
| |
| | <samp>Object.ringCategory</samp>
| |
| | <samp>category_ring</samp>
| |
| |
| |
| |
| |
| |-
| |
| | -98
| |
| | <samp>Object.weaponCategory</samp>
| |
| | <samp>category_weapon</samp>
| |
| |
| |
| |
| |
| |-
| |
| | -99
| |
| | <samp>Object.toolCategory</samp>
| |
| | <samp>category_tool</samp>
| |
| |
| |
| |
| |
| |} | | |} |
|
| |
|
| {{collapse|Console commands|content=
| | ===Appearance=== |
| With the {{nexus mod|3101|Console Code}} mod installed, you can run this command in the SMAPI console to see a list of objects by category:
| |
| | |
| <pre>cs return string.Join(`\n`, Game1.objectInformation.Keys.Select(key => new StardewValley.Object(key, 1)).GroupBy(item => item.Category, item => item.Name).OrderByDescending(p => p.Key).Select(p => $`{p.Key}: {string.Join(`, `, p.OrderBy(name => name))}`));</pre>
| |
| }}
| |
| | |
| ===Context tags===
| |
| A ''context tag'' is an arbitrary data label attached to items. These can produce various effects in-game, or may be informational only.
| |
| | |
| The game generates some tags based on the game data (like the item quality), and others are defined in the <samp>Data/ObjectContextTags</samp> data asset (which consists of a string→string dictionary, where the key is the item's internal name ''or'' the alternative ID matching the <samp>id_{{t|type}}_{{t|identifier}}</samp> tag, and the value is a comma-delimited list of tags to add).
| |
| | |
| Here's an ''incomplete'' list of context tags added or used in the base game. Mods can add custom context tags, which aren't listed here.
| |
| | |
| <dl style="margin-left: 2em;">
| |
| <dt>Added automatically for all items:</dt>
| |
| <dd>
| |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
| ! context tag | | ! field |
| ! effect | | ! purpose |
| |-
| |
| | <samp>category_{{t|category}}</samp>
| |
| | Added automatically based on the item category. See the 'context tag' column in the [[#Categories|item category list]] for possible values.
| |
| |- | | |- |
| | <samp>fish_{{t|metadata}}</samp> | | | <samp>Texture</samp> |
| | Added automatically for a fish item based on [[Modding:Fish data|its metadata in <samp>Data/Fish</samp>]]. | | | The asset name for the texture containing the item's sprite. Defaults to <samp>Maps/springobjects</samp>. |
| | |
| For [[Crab Pot|crab pot]] fish (''i.e.'' those with type <samp>trap</samp>):
| |
| | |
| {| class="wikitable"
| |
| |- | | |- |
| ! context tag
| | | <samp>SpriteIndex</samp> |
| ! notes
| | | The sprite's index within the <samp>Texture</samp>, where 0 is the top-left sprite. |
| |- | | |- |
| | <samp>fish_trap_location_{{t|water type}}</samp> | | | <samp>ColorOverlayFromNextIndex</samp> |
| | Based on field 2 ('darting randomness'). For example, <samp>fish_trap_location_ocean</samp>. | | | ''(Optional)'' When drawn as a colored object, whether to apply the color to the next sprite in the spritesheet and draw that over the main sprite. If false, the color is applied to the main sprite instead. Default false. |
| |} | | |} |
|
| |
|
| For fishing rod fish (''i.e.'' those whose type is ''not'' <samp>trap</samp>):
| | ===Edibility=== |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
| ! context tag | | ! field |
| ! notes | | ! purpose |
| |-
| |
| | <samp>fish_difficulty_{{t|difficulty}}</samp>
| |
| | Based on field 1 ('chance to dart'), where {{t|difficulty}} is one of <samp>easy</samp> (0–33), <samp>medium</samp> (34–66), <samp>hard</samp> (67–100), or <samp>extremely_hard</samp> (101+). For example, <samp>fish_difficulty_hard</samp>.
| |
| |-
| |
| | <samp>fish_motion_{{t|motion}}</samp>
| |
| | Based on field 4 ('location'). For example, <samp>fish_motion_floater</samp>.
| |
| |- | | |- |
| | <samp>fish_favor_weather_{{t|weather}}</samp> | | | <samp>Edibility</samp> |
| | Based on field 7 ('weather'). For example, <samp>fish_favor_weather_sunny</samp>. | | | ''(Optional)'' A numeric value that determines how much energy (edibility × 2.5) and health (edibility × 1.125) is restored when this item is eaten. An item with an edibility of -300 can't be eaten, values from -299 to -1 reduce health and energy, and zero can be eaten but doesn't change health/energy. Default -300. |
| |}
| |
| |- | | |- |
| | <samp>id_{{t|type}}_{{t|identifier}}</samp> | | | <samp>IsDrink</samp> |
| | Added automatically as an alternative ID. The {{t|type}} is one of <samp>B</samp> (boots), <samp>BBL</samp> (big craftable recipe), <samp>BL</samp> (object recipe), <samp>BO</samp> (big craftable), <samp>C</samp> (clothing), <samp>F</samp> (furniture), <samp>H</samp> (hat), <samp>O</samp> (object), <samp>R</samp> (ring), <samp>W</samp> (melee weapon), else blank. The {{t|identifier}} is the item's parent sheet index. For example, [[pufferfish]] has value <samp>id_o_128</samp> (object #128). | | | ''(Optional)'' Whether to drink the item instead of eating it. Default false. |
| |- | | |- |
| | <samp>item_{{t|name}}</samp> | | | <samp>Buffs</samp> |
| | Added automatically based on the item name. The name is trimmed, lowercase, with spaces replaced with underscores, and with single quotes removed. For example, [['1000 Years From Now']] has context tag <samp>item_1000_years_from_now</samp>. | | | ''(Optional)'' The buffs to apply to the player when this item is eaten, if any. Default none. |
| |}
| |
| </dd>
| |
|
| |
|
| <dt>Added automatically for [[#Objects|object-type]] items:</dt>
| | This consists of a list of models with these fields: |
| <dd>
| |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
| ! context tag | | ! field |
| ! effect | | ! purpose |
| |- | | |- |
| | <samp>jelly_item</samp><br /><samp>juice_item</samp><br /><samp>pickle_item</samp><br /><samp>wine_item</samp> | | | <samp>Id</samp> |
| | For items produced by the [[keg]] or [[Preserves Jar|preserves jar]], the preserved item type. | | | The [[Modding:Common data field types#Unique string ID|unique string ID]] for this entry within the list. |
| |- | | |- |
| | <samp>preserve_sheet_index_{{t|id}}</samp> | | | <samp>Duration</samp> |
| | For items produced by the [[keg]] or [[Preserves Jar|preserves jar]], the parent sheet index for the original item that was produced. For example, blueberry [[wine]] has <samp>preserve_sheet_index_258</samp>, where 258 is the [[blueberry]] item's index. | | | ''(Optional if <samp>BuffId</samp> is set)'' The buff duration measured in in-game minutes. This can be set to <samp>-2</samp> for a buff that should last for the rest of the day. |
| |- | | |- |
| | <samp>quality_none</samp><br /><samp>quality_silver</samp><br /><samp>quality_gold</samp><br /><samp>quality_iridium</samp> | | | <samp>BuffId</samp> |
| | Added automatically based on the item quality.
| | | ''(Optional)'' The unique ID of a buff from <samp>Data/Buffs</samp> to apply, or <samp>null</samp> to ignore <samp>Data/Buffs</samp> and set the ID to <samp>food</samp> or <samp>drink</samp> depending on the item's <samp>IsDrink</samp> field. |
| |-
| |
| | <samp>quality_qi</samp>
| |
| | Added automatically for items cooked while the [[Quests|''Qi's Cuisine'' special order]] is active.
| |
| |}
| |
| </dd>
| |
|
| |
|
| <dt>Context tags from <samp>Data/ObjectContextTags</samp>:</dt>
| | If a buff from <samp>Data/Buffs</samp> is applied and you also specify other fields, here's how the buff data is combined: |
| <dd>
| |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
| ! context tag | | ! field |
| ! effect | | ! result |
| |- | | |- |
| | <samp>color_*</samp> | | | <samp>Duration</samp><br /><samp>IconTexture</samp><br /><samp>IconSpriteIndex</samp><br /><samp>GlowColor</samp> |
| | The color produced by this item when the player [[Dyeing#Dye Pots|dyes clothing]] at [[2 Willow Lane|Emily's house]]. The context tag only affects which of the six color dye pots it can be placed in; for example, <samp>color_red</samp> and <samp>color_dark_red</samp> are both placed in the red pot, but they don't produce different colors.
| | | If specified, the value in <samp>Data/Objects</samp> is used instead of the one in <samp>Data/Buffs</samp>. If omitted, defaults to the value from <samp>Data/Buffs</samp>. |
| | |
| {| class="wikitable"
| |
| |-
| |
| ! dye pot
| |
| ! context tags
| |
| |-
| |
| | red
| |
| | <samp>color_red</samp>, <samp>color_salmon</samp>, <samp>color_dark_red</samp>, <samp>color_pink</samp>
| |
| |- | |
| | orange
| |
| | <samp>color_orange</samp>, <samp>color_dark_orange</samp>, <samp>color_dark_brown</samp>, <samp>color_brown</samp>, <samp>color_copper</samp>
| |
| |-
| |
| | yellow
| |
| | <samp>color_yellow</samp>, <samp>color_dark_yellow</samp>, <samp>color_gold</samp>, <samp>color_sand</samp>
| |
| |-
| |
| | green
| |
| | <samp>color_green</samp>, <samp>color_dark_green</samp>, <samp>color_lime</samp>, <samp>color_yellow_green</samp>, <samp>color_jade</samp>
| |
| |- | | |- |
| | blue
| | | <samp>CustomAttributes</samp> |
| | <samp>color_blue</samp>, <samp>color_dark_blue</samp>, <samp>color_dark_cyan</samp>, <samp>color_light_cyan</samp>, <samp>color_cyan</samp>, <samp>color_aquamarine</samp> | | | The values from both entries are combined (e.g. +1 speed in <samp>Data/Objects</samp> and +1 speed in <samp>Data/Buffs</samp> results in +2 speed). |
| |- | | |- |
| | purple
| | | <samp>IsDebuff</samp> |
| | <samp>color_purple</samp>, <samp>color_dark_purple</samp>, <samp>color_dark_pink</samp>, <samp>color_pale_violet_red</samp>, <samp>color_poppyseed</samp>, <samp>color_iridium</samp> | | | The value in <samp>Data/Objects</samp> is used. |
| |} | | |} |
| |}
| |
| </dd>
| |
| </dl>
| |
|
| |
| Some game data also references context tags in a generic way. For example, you can add custom tags for an item to <samp>Data/ObjectContextTags</samp>, then reference them in the fish pond data. Specifically:
| |
|
| |
| {| class="wikitable"
| |
| |- | | |- |
| ! game data
| | | <samp>IsDebuff</samp> |
| ! effects
| | | ''(Optional)'' Whether this buff counts as a debuff, so its duration should be halved when wearing a Sturdy Ring. Default false. |
| |- | | |- |
| | [[Modding:Fish Pond data|fish ponds]] | | | <samp>IconTexture</samp> |
| | In <samp>Data/FishPondData</samp>, used to match fish that can be placed in the pond (see [[Modding:Fish Pond data#RequiredTags|<samp>RequiredTags</samp> in the fish pond data]]).
| | | ''(Optional)'' The asset name for the icon texture to load. This must contain one or more 16x16 icons in a grid of any size. If omitted, the game will draw a default icon based on the <samp>BuffId</samp> and <samp>CustomAttributes</samp> fields. |
| |- | | |- |
| | [[Modding:Special orders|special orders]] | | | <samp>IconSpriteIndex</samp> |
| | In <samp>Data/SpecialOrders</samp>, used to match items that meet the quest objectives (see [[Modding:Special orders#Context tags|<samp>AcceptedContextTags</samp> in the special order data]]).
| | | ''(Optional)'' The buff's icon index within the <samp>IconTexture</samp>, where 0 is the top-left icon. Default 0. |
| |- | | |- |
| | tailoring | | | <samp>GlowColor</samp> |
| | In <samp>Data/TailoringRecipes</samp>, used to match items that are needed for a recipe.
| | | ''(Optional)'' The glow color to apply to the player. See [[Modding:Common data field types#Color|color format]]. Default none. |
| |- | | |- |
| | [[Modding:Gift taste data|gift tastes]] | | | <samp>CustomAttributes</samp> |
| | In <samp>Data/NPCGiftTastes</samp>, used to set character likes and dislike for every item using the context tag.
| | | The custom buff attributes to apply, if any. |
| |}
| |
| | |
| | |
| The <samp>debug listtags</samp> [[Modding:Console commands|console command]] lists all the tags of the item being held.
| |
| | |
| {{collapse|raw tag dump|content=Here's a list of context tags extracted from <samp>Data/ObjectContextTags</samp> that aren't listed above yet: <samp>alcohol_item</samp>, <samp>algae_item</samp>, <samp>ancient_item</samp>, <samp>beach_item</samp>, <samp>bomb_item</samp>, <samp>bone_item</samp>, <samp>book_item</samp>, <samp>ceramic_item</samp>, <samp>chicken_item</samp>, <samp>color_black</samp>, <samp>color_dark_gray</samp>, <samp>color_gray</samp>, <samp>color_iron</samp>, <samp>color_prismatic</samp>, <samp>color_white</samp>, <samp>cooking_item</samp>, <samp>cow_milk_item</samp>, <samp>cowboy_item</samp>, <samp>crop_year_2</samp>, <samp>dinosaur_item</samp>, <samp>doll_item</samp>, <samp>drink_item</samp>, <samp>dwarvish_item</samp>, <samp>dye_medium</samp>, <samp>dye_strong</samp>, <samp>egg_item</samp>, <samp>elvish_item</samp>, <samp>fertilizer_item</samp>, <samp>fish_bug_lair</samp>, <samp>fish_carnivorous</samp>, <samp>fish_crab_pot</samp>, <samp>fish_desert</samp>, <samp>fish_freshwater</samp>, <samp>fish_lake</samp>, <samp>fish_legendary</samp>, <samp>fish_mines</samp>, <samp>fish_night_market</samp>, <samp>fish_nonfish</samp>, <samp>fish_ocean</samp>, <samp>fish_pond</samp>, <samp>fish_river</samp>, <samp>fish_secret_pond</samp>, <samp>fish_semi_rare</samp>, <samp>fish_sewers</samp>, <samp>fish_swamp</samp>, <samp>fish_talk_demanding</samp>, <samp>fish_talk_rude</samp>, <samp>fish_talk_stiff</samp>, <samp>fish_upright</samp>, <samp>flower_item</samp>, <samp>food_bakery</samp>, <samp>food_breakfast</samp>, <samp>food_cake</samp>, <samp>food_party</samp>, <samp>food_pasta</samp>, <samp>food_salad</samp>, <samp>food_sauce</samp>, <samp>food_seafood</samp>, <samp>food_soup</samp>, <samp>food_spicy</samp>, <samp>food_sushi</samp>, <samp>food_sweet</samp>, <samp>forage_item</samp>, <samp>forage_item_beach</samp>, <samp>forage_item_cave</samp>, <samp>forage_item_desert</samp>, <samp>forage_item_mines</samp>, <samp>forage_item_secret</samp>, <samp>fossil_item</samp>, <samp>fruit_item</samp>, <samp>fruit_tree_item</samp>, <samp>furnace_item</samp>, <samp>ginger_item</samp>, <samp>goat_milk_item</samp>, <samp>golden_relic_item</samp>, <samp>honey_item</samp>, <samp>hunting_item</samp>, <samp>instrument_item</samp>, <samp>jelly_item</samp>, <samp>juice_item</samp>, <samp>large_egg_item</samp>, <samp>large_milk_item</samp>, <samp>light_source</samp>, <samp>machine_item</samp>, <samp>marine_item</samp>, <samp>mayo_item</samp>, <samp>medicine_item</samp>, <samp>milk_item</samp>, <samp>noble_item</samp>, <samp>ore_item</samp>, <samp>pickle_item</samp>, <samp>potion_item</samp>, <samp>prehistoric_item</samp>, <samp>quality_fertilizer_item</samp>, <samp>scroll_item</samp>, <samp>season_all</samp>, <samp>season_fall</samp>, <samp>season_spring</samp>, <samp>season_summer</samp>, <samp>season_winter</samp>, <samp>slime_egg_item</samp>, <samp>slime_item</samp>, <samp>statue_item</samp>, <samp>strange_doll_1</samp>, <samp>strange_doll_2</samp>, <samp>syrup_item</samp>, <samp>totem_item</samp>, <samp>toy_item</samp>, <samp>trash_item</samp>, <samp>tree_seed_item</samp>, <samp>wood_item</samp>.}}
| |
| | |
| ==Objects==
| |
| Objects are the default type for items in inventories or placed in the world.
| |
| | |
| They have their data in <samp>Data/Objects</samp>, their icon sprites in <samp>Maps/springobjects</samp>, and their code in <samp>StardewValley.Object</samp>. See [[Modding:Items/Object sprites|a table of sprites and their corresponding indexes]].
| |
| | |
| ===Data format===
| |
| The object data in <samp>Data/Objects</samp> consists of a string→ObjectData dictionary (where ObjectData is defined in the game code in <samp>StardewValley.GameData.Objects.ObjectData</samp>). It has entries like this<ref>See <samp>Data/Objects.xnb</ref>: | |
| <syntaxhighlight lang="json">
| |
| "201": {
| |
| "Name": "Complete Breakfast",
| |
| "DisplayName": "[LocalizedText Strings\\Objects:CompleteBreakfast_Name]",
| |
| "Description": "[LocalizedText Strings\\Objects:CompleteBreakfast_Description]",
| |
| "Type": "Cooking",
| |
| "Category": -7,
| |
| "Price": 350,
| |
| "Texture": null,
| |
| "SpriteIndex": 201,
| |
| "Edibility": 80,
| |
| "IsDrink": false,
| |
| "Buffs": [
| |
| {
| |
| "Id": "Food",
| |
| "BuffId": null,
| |
| "IconTexture": null,
| |
| "IconSpriteIndex": 0,
| |
| "Duration": 600,
| |
| "IsDebuff": false,
| |
| "GlowColor": null,
| |
| "CustomAttributes": {
| |
| "FarmingLevel": 2.0,
| |
| "FishingLevel": 0.0,
| |
| "MiningLevel": 0.0,
| |
| "LuckLevel": 0.0,
| |
| "ForagingLevel": 0.0,
| |
| "MaxStamina": 50.0,
| |
| "MagneticRadius": 0.0,
| |
| "Speed": 0.0,
| |
| "Defense": 0.0,
| |
| "Attack": 0.0
| |
| },
| |
| "CustomFields": null
| |
| }
| |
| ],
| |
| "GeodeDropsDefaultItems": false,
| |
| "GeodeDrops": null,
| |
| "ArtifactSpotChances": null,
| |
| "ExcludeFromFishingCollection": false,
| |
| "ExcludeFromShippingCollection": false,
| |
| "ExcludeFromRandomSale": false,
| |
| "ContextTags": [
| |
| "color_yellow",
| |
| "food_breakfast"
| |
| ],
| |
| "CustomFields": null
| |
| }
| |
| </syntaxhighlight>
| |
| | |
| For each entry in the data asset:
| |
| * The key (before the colon) is the item ID and its sprite index within the [[Modding:Items/Object sprites|object spritesheet]] (saved as <samp>ParentSheetIndex</samp> in-code).
| |
| * The value (after the colon) is the data pertaining to that object, with the fields listed below. The objects with keys 516–534 (<samp>Ring.ringLowerIndexRange</samp> through <samp>Ring.ringUpperIndexRange</samp>) and 801 (wedding ring) are hardcoded as rings.
| |
| | |
| Field values are described below:
| |
|
| |
|
| | This consists of a model with any combination of these fields: |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
| ! Field | | ! field |
| ! Data Type | | ! purpose |
| ! Effect<ref>See <samp>StardewValley.GameData.Objects.ObjectData</samp></ref>
| |
| |-
| |
| | Name
| |
| | string
| |
| | The internal item name (and display name in English).
| |
| |-
| |
| | DisplayName
| |
| | string
| |
| | A tokenizable string for the item's translated display name.
| |
| |- | | |- |
| | Description | | | <samp>CombatLevel</samp><br /><samp>FarmingLevel</samp><br /><samp>FishingLevel</samp><br /><samp>ForagingLevel</samp><br /><samp>LuckLevel</samp><br /><samp>MiningLevel</samp> |
| | string
| | | ''(Optional)'' An amount applied to the matching [[Skills|skill level]] while the buff is active. This can be negative for a debuff. Default 0. |
| | A tokenizable string for the item's translated description.
| |
| |-
| |
| | Type
| |
| | string
| |
| | The item's general type, like Arch (artifact) or Minerals.
| |
| Types appear to be apocryphal data from early in the game's development. As such, some of them are not very well understood. The types used in <samp>Data/Objects</samp> and their purposes (as is currently understood) are as follows:
| |
| *<samp>Ring</samp>, used for all rings, even the [[Wedding Ring]]. Category is 0 (signifying an omitted category), though every <samp>Ring</samp> type is automatically given the category <samp>-96</samp>.
| |
| *<samp>Fish</samp>, used not only for fish but all items gained through fishing. Always paired with <samp>-4</samp> for true fish or <samp>-20</samp> for junk items such as [[Joja Cola]].
| |
| *<samp>Arch</samp>, used for artifacts, presumably standing for "archaeology." Category is ommitted, though every <samp>Arch</samp> type is automatically given the category <samp>0</samp>. Is ''not'' used for Gems or Minerals. '''Adding custom items of the <samp>Arch</samp> type is not recommended, as it can break all Artifact Spots in the game.'''
| |
| *<samp>asdf</samp>, used for a handful of items the player isn't intended to ever have in their inventory, such as an Artifact Spot or Secret Note. Category is ommitted.
| |
| *<samp>Seeds</samp>, used for seeds, starters, shoots, etc. Always paired with the category <samp>-74</samp>.
| |
| *<samp>Crafting</samp>, used for a variety of crafted items. Notably, however, there are some non-craftable items with this type: all tree seeds, various "Weeds", the [[Dwarvish Translation Guide]], [[Coffee]], [[Stardrop]], [[Galaxy Soul]], [[Horse Flute]], and supply crates. Category is either 0 (omitted) or <samp>-8</samp>, <samp>-24</samp>, or <samp>-74</samp>.
| |
| *<samp>Quest</samp>, used for quest items as well as [[Golden Coconut|Golden Coconuts]]. Category is ommitted.
| |
| *<samp>Basic</samp>, a general type for a myriad of items.
| |
| *<samp>Cooking</samp>, used for cooked items. Not used for cooking ingredients. Always paired with category <samp>-7</samp>.
| |
| *<samp>Minerals</samp>, used for Gems and Minerals. Paired with categories <samp>-2</samp> or <samp>-12</samp>, respectively.
| |
| |-
| |
| | Category
| |
| | integer
| |
| | The item category, usually matching a constant like <samp>Object.flowersCategory</samp>. [[#Categories|Categories]] are either 0 (omitted category) or a negative integer. They are frequently referenced in other parts of the game.
| |
| |-
| |
| | Price
| |
| | integer
| |
| | The gold price of the item when sold by the player. This is not the price when bought from a shop.
| |
| |-
| |
| | Texture
| |
| | string
| |
| | The asset name for the texture containing the item's sprite, or null for Maps/springobjects.
| |
| |-
| |
| | SpriteIndex
| |
| | integer
| |
| | The sprite's index in the spritesheet.
| |
| |-
| |
| | Edibility
| |
| | integer
| |
| | A numeric value that determines how much energy (edibility × 2.5) and health
| |
| edibility × 1.125) is restored when this item is eaten. An item with an edibility
| |
| of -300 can't be eaten, values from -299 to -1 reduce health and energy, and
| |
| zero can be eaten but doesn't change health/energy.
| |
| | |
| This is ignored for Rings.
| |
| |-
| |
| | IsDrink
| |
| | boolean
| |
| | Whether to drink the item instead of eating it. Ignored if the item isn't edible per its Edibility.
| |
| |-
| |
| | Buffs
| |
| | <samp>List</samp> of <samp>ObjectBuffData</samp>, stored in the game code in <samp>StardewValley.GameData.Objects.ObjectBuffData</samp>.
| |
| | The buffs to apply to the player when this item is eaten, if any. Ignored if the item isn't edible per its Edibility.
| |
| |-
| |
| | GeodeDropsDefaultItems
| |
| | boolean
| |
| | If true, the item will drop a default item when broken as a geode. If GeodeDrops is also set, there's a 50% chance of choosing a value from that list instead.
| |
| |-
| |
| | GeodeDrops
| |
| | <samp>List</samp> of <samp>ObjectGeodeDropData</samp>, stored in the game code in <samp>StardewValley.GameData.Objects.ObjectGeodeDropData</samp>.
| |
| | The items that can be dropped when this item is broken open as a geode, or null.
| |
| |-
| |
| | ArtifactSpotChances
| |
| | <samp>Dictionary</samp> of string keys and float values.
| |
| | If this is an artifact (i.e. Type is Arch), the chance that it can be found by digging artifact spots in each location.
| |
| |-
| |
| | ExcludeFromFishingCollection
| |
| | boolean
| |
| | Whether to exclude this item from the fishing collection and perfection score.
| |
| |-
| |
| | ExcludeFromShippingCollection
| |
| | boolean
| |
| | Whether to exclude this item from the shipping collection and perfection score.
| |
| |-
| |
| | ExcludeFromRandomSale
| |
| | boolean
| |
| | Whether to exclude this item from shops when selecting random items to sell.
| |
| |-
| |
| | ContextTags
| |
| | <samp>List</samp> of strings.
| |
| | The custom [[#Context_tags|context tags]] to add for this item (in addition to the tags added automatically based on the other object data).
| |
| |-
| |
| | CustomFields
| |
| | <samp>Dictionary</samp> of string keys and string values.
| |
| | Custom fields ignored by the base game, for use by mods.
| |
| |- | | |- |
| | | <samp>Attack</samp><br /><samp>AttackMultiplier</samp><br /><samp>CriticalChanceMultiplier</samp><br /><samp>CriticalPowerMultiplier</samp><br /><samp>Defense</samp><br /><samp>Immunity</samp><br /><samp>KnockbackMultiplier</samp><br /><samp>MagneticRadius</samp><br /><samp>MaxStamina</samp><br /><samp>Speed</samp><br /><samp>WeaponPrecisionMultiplier</samp><br /><samp>WeaponSpeedMultiplier</samp> |
| | | ''(Optional)'' An amount applied to the player's [[attack]], [[Crit. Chance|critical chance]] and [[Crit. Power|critical power]], [[defense]], [[immunity]], knockback (i.e. [[weight]]), [[Magnetism|magnetic radius]], maximum [[Energy|stamina]], [[speed]], or weapon precision/[[speed|speed]] while the buff is active. This can be negative for a debuff. Default 0. |
| |} | | |} |
|
| |
| ===Notes===
| |
| * Prior to 1.6, items that have a number in index 6 (the "Crafting" field) showed buggy information in-game (''e.g.,'' Bean Hotpot prior to version 1.4). Items that had a number in the "Attack" field displayed the Attack icon and a number, but no description. It's unclear how these buffs work (if at all).
| |
| * '''Adding custom items with the <samp>Arch</samp> type is inadvisable as it often leads to Artifact Spots becoming broken and not giving any items.'''
| |
| * Named [[buffs]] (like [[Oil of Garlic]], [[Life Elixir]], or [[Buffs#Tipsy|Tipsy]]) are implemented in code and can't be set in the food buff fields.
| |
| * The spritesheet and data have items that can't normally be found in the player inventory (like twigs and lumber), and some sprites have no corresponding item data. There are also multiple entries for ''weeds'' and ''stone'' corresponding to different sprites, but the player can only normally obtain one ''stone'' item (index 390) and no ''weeds'' items.
| |
|
| |
| ==Big craftables==
| |
| Big craftables are objects which can be placed in the world and are two tiles tall (instead of one like objects).
| |
|
| |
| They have their data in <samp>Data/BigCraftables</samp>, their in-game sprites in <samp>TileSheets/Craftables</samp>, and their code in <samp>StardewValley.Object</samp> (with the <code>bigCraftable.Value = true</code> flag).
| |
|
| |
| ===Data format===
| |
| The big craftables data in <samp>Data/BigCraftables</samp> consists of an integer→string dictionary with entries like this<ref>See <samp>Data/BigCraftables.xnb</samp></ref>:
| |
|
| |
| <syntaxhighlight lang="json">
| |
| "19": {
| |
| "Name": "Oil Maker",
| |
| "DisplayName": "[LocalizedText Strings\\BigCraftables:OilMaker_Name]",
| |
| "Description": "[LocalizedText Strings\\BigCraftables:OilMaker_Description]",
| |
| "Price": 50,
| |
| "Fragility": 0,
| |
| "CanBePlacedOutdoors": true,
| |
| "CanBePlacedIndoors": true,
| |
| "IsLamp": false,
| |
| "Texture": null,
| |
| "SpriteIndex": 19,
| |
| "ContextTags": null,
| |
| "CustomFields": null
| |
| }
| |
| </syntaxhighlight>
| |
|
| |
| For each entry in the data asset, the key is the item's <samp>ParentSheetIndex</samp> and the value is a slash-delimited string with these fields:
| |
|
| |
| {| class="wikitable"
| |
| |-
| |
| ! Field
| |
| ! Data Type
| |
| ! Effect<ref>See <samp>GameData.BigCraftables.BigCraftableData</samp></ref>
| |
| |-
| |
| | Name
| |
| | string
| |
| | The internal item name (and display name in English).
| |
| |-
| |
| | DisplayName
| |
| | string
| |
| | A tokenizable string for the item's translated display name.
| |
| |-
| |
| | Description
| |
| | string
| |
| | A tokenizable string for the item's translated description.
| |
| |-
| |
| | Price
| |
| | integer
| |
| | The gold price when sold by the player. This is not the price when bought from a shop.
| |
| |-
| |
| | Fragility
| |
| | integer
| |
| | How the item is removed by tools. Possible values:
| |
| {| class="wikitable"
| |
| |- | | |- |
| ! fragility
| | | <samp>CustomFields</samp> |
| ! effect
| | | ''(Optional)'' The [[Modding:Common data field types#Custom fields|custom fields]] for this entry. |
| |-
| |
| | <samp>0</samp> | |
| | Pick up with any tool. | |
| |-
| |
| | <samp>1</samp>
| |
| | Destroyed if hit with an [[Axes|axe]], [[Hoes|hoe]], or [[Pickaxes|pickaxe]]. Any other tool will pick it up.
| |
| |-
| |
| | <samp>2</samp>
| |
| | Indestructible. The item can't be removed once placed.
| |
| |} | | |} |
| |-
| |
| | CanBePlacedOutdoors
| |
| | boolean
| |
| | Whether the item can be placed outdoors.
| |
| |-
| |
| | CanBePlacedIndoors
| |
| | boolean
| |
| | Whether the item can be placed indoors.
| |
| |-
| |
| | IsLamp
| |
| | boolean
| |
| | Whether the item is a lamp and produces light when it's dark.
| |
| |-
| |
| | Texture
| |
| | string
| |
| | The asset name for the texture containing the item's sprite, or null for <samp>TileSheets/Craftables</samp>.
| |
| |-
| |
| | SpriteIndex
| |
| | integer
| |
| | The sprite's index in the spritesheet.
| |
| |-
| |
| | ContextTags
| |
| | <samp>List</samp> of strings
| |
| | Thee custom [[#Context_tags|context tags]] to add for this item (in addition to the tags added automatically based on the other object data).
| |
| |-
| |
| | CustomFields
| |
| | <samp>Dictionary</samp> of string keys to string values
| |
| | Custom fields ignored by the base game, for use by mods.
| |
| |-
| |
| |} | | |} |
|
| |
|
| ===Notes=== | | ===Geodes & artifact spots=== |
| * Many of the items in the data asset aren't implemented in-game. They may be completely absent from the game, or they may be unused as craftables and instead appear in [[#Objects|object data]] or [[#Furniture|furniture data]].
| |
| | |
| ==Boots==
| |
| Boots are items that can be equipped in the player's [[footwear]] slot.
| |
| | |
| They have their data in <samp>Data/Boots</samp>, their in-game sprites in <samp>Maps/springobjects</samp> (item sprite) and <samp>Characters/Farmer/shoeColors</samp> (shoe color), and their code in <samp>StardewValley.Objects.Boots</samp>.
| |
| | |
| ===Data format===
| |
| The boots data in <samp>Data/Boots</samp> consists of an integer→string dictionary with entries like this:
| |
| | |
| <syntaxhighlight lang="json">
| |
| "511": "Dark Boots/Made from thick black leather./250/4/2/7"
| |
| </syntaxhighlight>
| |
| | |
| For each entry in the data asset, the key is the item's <samp>ParentSheetIndex</samp> and the value is a slash-delimited string with these fields:
| |
| | |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
| ! index
| |
| ! field | | ! field |
| ! effect | | ! purpose |
| |-
| |
| | 0
| |
| | name
| |
| | The internal item name (and display name in English).
| |
| |-
| |
| | 1
| |
| | description
| |
| | The translated item description shown in-game.
| |
| |-
| |
| | 2
| |
| | price
| |
| | '''Unused.''' The actual price is calculated as <samp>(''added defence'' × 100) + (''added immunity'' × 100)</samp>.
| |
| |-
| |
| | 3
| |
| | added defense
| |
| | A [[defense]] bonus applied to the player while equipped.
| |
| |-
| |
| | 4
| |
| | added immunity
| |
| | An [[immunity]] bonus applied to the player while equipped.
| |
| |-
| |
| | 5
| |
| | color index
| |
| | The index of the boot color in the <samp>Characters/Farmer/shoeColors</samp> spritesheet.
| |
| |- | | |- |
| | 6 | | | <samp>GeodeDrops</samp><br /><samp><samp>GeodeDropsDefaultItems</samp> |
| | display name
| | | ''(Optional)'' The items that can be dropped when breaking open this item as a [[Minerals#Geodes|geode]]. Specifying either or both fields automatically enables geode behavior for this item. |
| | The translated item name shown in-game (for non-English assets only).
| |
| |}
| |
| | |
| ==Clothing==
| |
| Clothing consists of cosmetic items that can be equipped in the player's [[Tailoring|pants and shirt]] slots.
| |
| | |
| They have their data in <samp>Data/ClothingInformation</samp>, their in-game sprites in <samp>Characters/Farmer/pants</samp> & <samp>Characters/Farmer/shirts</samp>, and their code in <samp>StardewValley.Objects.Clothing</samp>.
| |
| | |
| ===Data format===
| |
| The clothing data in <samp>Data/ClothingInformation</samp> consists of an integer→string dictionary with entries like this:
| |
| | |
| <syntaxhighlight lang="json">
| |
| "1282": "Tomato Shirt/Tomato Shirt/A shirt that answers the big question: 'Tomatoes are'... (but the rest is smudged)./282/-1/50/255 0 0/false/Shirt/Sleeveless"
| |
| </syntaxhighlight>
| |
| | |
| For each entry in the data asset, the key is the item's <samp>ParentSheetIndex</samp> (offset by 1000 for shirts) and the value is a slash-delimited string with these fields:
| |
|
| |
|
| | You can specify one or both fields: |
| | <ul> |
| | <li><samp>GeodeDrops</samp> can be set to the specific items to drop. Default none. This consists of a list of models with these fields: |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
| ! index
| |
| ! field | | ! field |
| ! effect | | ! purpose |
| |- | | |- |
| | 0
| |
| | name
| |
| | The internal item name (and display name in English).
| |
| |- | | |- |
| | 1 | | | ''common fields'' |
| | display name | | | See [[Modding:Item queries#Item spawn fields|item spawn fields]] for the generic item fields supported by geode drops. |
| | The translated item name shown in-game. | | |
| |-
| | If set to an [[Modding:Item queries|item query]] which returns multiple items, one of them will be selected at random. |
| | 2
| |
| | description | |
| | The translated item description shown in-game.
| |
| |-
| |
| | 3
| |
| | male index
| |
| | The sprite index in the clothing spritesheet for male characters.
| |
| |- | | |- |
| | 4 | | | <samp>Chance</samp> |
| | female index
| | | ''(Optional)'' The probability that the item will be dropped if the other fields match, as a decimal value between 0 (never) and 1 (always). Default 1. |
| | The sprite index in the clothing spritesheet for female characters, or <samp>-1</samp> to use the male index.
| |
| |- | | |- |
| | 5 | | | <samp>SetFlagOnPickup</samp> |
| | price
| | | ''(Optional)'' The mail flag to set for the current player when this drop is picked up. |
| | The price when purchased from shops. | |
| |- | | |- |
| | 6 | | | <samp>Precedence</samp> |
| | default color
| | | ''(Optional)'' The order in which this entry should be checked, where lower values are checked first. This can be a negative value. Geode drops with the same precedence are checked in the order listed. Default 0. |
| | The default color, specified in space-delimited RGB with each channel being an integer from 0 (no color) to 255 (full color). For example, <samp>255 0 0</samp> for full red.
| |
| |- | |
| | 7
| |
| | dyeable
| |
| | Whether the clothing can be [[Dyeing|dyed]] (<samp>true</samp> or <samp>false</samp>).
| |
| |-
| |
| | 8
| |
| | Type
| |
| | The clothing type. One of <samp>Pants</samp>, <samp>Shirt</samp>, or <s><samp>Accessory</samp></s> (unimplemented).
| |
| |-
| |
| | 9
| |
| | extra data
| |
| | A comma-delimited list of tags attached to the item (unrelated to [[#Context tags|context tags]]). The values recognized by the game are <samp>Prismatic</samp> (adds a shifting rainbow effect) and <samp>Sleeveless</samp> (disables drawing the sleeve color over the player's arms).
| |
| |}
| |
|
| |
|
| ==Furniture==
| | For consistency, vanilla drops mostly use these values: |
| Furniture are decorative items which can be placed in the world, including chairs which the player can sit on.
| | * <samp>-1000</samp>: special overrides like the [[Golden Helmet|golden helmet]]; |
| | * <samp>0</samp>: normal items. |
| | |}</li> |
| | <li><samp>GeodeDropsDefaultItems</samp> chooses a predefined list of possible geode drops like [[clay]], [[coal]], [[Copper Ore|copper]], [[Iridium Ore|iridium]], etc. Default false.</li> |
| | </ul> |
|
| |
|
| They have their data in <samp>Data/Furniture</samp>, their in-game sprites in <samp>TileSheets/furniture</samp>, and their code in <samp>StardewValley.Objects.Furniture</samp>.
| | If both fields are specified, each geode will choose between them with an equal 50% chance. If <samp>GeodeDrops</samp> is specified but no entries match, the geode will use the <samp>GeodeDropsDefaultItems</samp> regardless of whether it's true. |
| | |- |
| | | <samp>ArtifactSpotChances</samp> |
| | | ''(Optional)'' If this is an artifact (i.e. the <samp>Type</samp> field is <samp>Arch</samp>), the chance that it can be found by digging [[Artifact Spot|artifact spots]] in each location. |
|
| |
|
| ===Data format===
| | This consists of a string → model lookup, where: |
| The furniture data in <samp>Data/Furniture</samp> consists of an integer→string dictionary with entries like this:
| | * the key is the internal location name; |
| | | * the value is the probability the item will spawn if checked, as a decimal value between 0 (never) and 1 (always). |
| <syntaxhighlight lang="json">
| | |} |
| "18": "Country Chair/chair/-1/-1/4/750"
| |
| </syntaxhighlight>
| |
| | |
| For each entry in the data asset, the key is the item's <samp>ParentSheetIndex</samp> and the value is a slash-delimited string with these fields:
| |
|
| |
|
| | ===Context tags & exclusions=== |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
| ! index
| |
| ! field | | ! field |
| ! effect | | ! purpose |
| |- | | |- |
| | 0 | | | <samp>ContextTags</samp> |
| | name | | | ''(Optional)'' The custom [[Modding:Context tags|context tags]] to add for this item (in addition to the tags added automatically based on the other object data). This is formatted as a list; for example: |
| | The internal item name (and display name in English). | | <syntaxhighlight lang="json"> |
| |-
| | "ContextTags": [ "color_yellow", "fish_ocean", "fish_upright", "season_summer" ] |
| | 1
| | </syntaxhighlight> |
| | type
| |
| | The furniture type. Possible values:
| |
| {| class="wikitable sortable"
| |
| |-
| |
| ! type
| |
| ! meaning
| |
| |-
| |
| | 0
| |
| | chair
| |
| |-
| |
| | 1
| |
| | bench
| |
| |-
| |
| | 2
| |
| | couch
| |
| |-
| |
| | 3
| |
| | armchair
| |
| |-
| |
| | 4
| |
| | dresser
| |
| |-
| |
| | 5
| |
| | long table
| |
| |-
| |
| | 6
| |
| | painting
| |
| |-
| |
| | 7
| |
| | lamp
| |
| |-
| |
| | 8
| |
| | decor
| |
| |-
| |
| | 9
| |
| | other
| |
| |-
| |
| | 10
| |
| | bookcase
| |
| |- | | |- |
| | 11 | | | <samp>CanBeGivenAsGift</samp> |
| | table | | | ''(Optional)'' Whether this item can be gifted to NPCs. Default true. |
| |- | | |- |
| | 12 | | | <samp>CanBeTrashed</samp> |
| | rug | | | ''(Optional)'' Whether this item can be trashed from the player's inventory. Also affects whether the item can be shipped but not whether it can be sold to shops. Default true. |
| |- | | |- |
| | 13 | | | <samp>ExcludeFromRandomSale</samp> |
| | window | | | ''(Optional)'' Whether to exclude this item from shops when selecting random items to sell. Default false. |
| |- | | |- |
| | 14 | | | <samp>ExcludeFromFishingCollection</samp><br /><samp>ExcludeFromShippingCollection</samp> |
| | fireplace
| | | ''(Optional)'' Whether to exclude this item from the fishing/shipping collection and their respective effect on the [[perfection|perfection score]]. Default false, in which case the normal requirements apply (e.g., artifacts are always excluded from the shipping collection). |
| |-
| |
| | 15
| |
| | bed
| |
| |-
| |
| | 16
| |
| | torch
| |
| |-
| |
| | 17
| |
| | sconce
| |
| |}
| |
| |-
| |
| | 2
| |
| | tilesheet size
| |
| | The furniture sprite size on the tilesheet, measured in tiles. This can be <samp>{{t|width}} {{t|height}}</samp> (e.g. <samp>1 2</samp>), or <samp>-1</samp> to use the default size for the type.
| |
| |-
| |
| | 3
| |
| | bounding box size
| |
| | The size of the hitbox when the furniture is placed in-game, measured in tiles. The bounding box will be anchored to the bottom-left corner and extend upwards and rightwards. This can be <samp>{{t|width}} {{t|height}}</samp> (e.g. <samp>1 2</samp>), or <samp>-1</samp> to use the default size for the type.
| |
| |-
| |
| | 4
| |
| | rotations
| |
| | The number of rotations possible (1, 2, or 4).
| |
| |-
| |
| | 5
| |
| | price
| |
| | The price when purchased from a shop.
| |
| |-
| |
| | 6
| |
| | placement restriction
| |
| | Where the furniture can be placed.
| |
| {| class="wikitable sortable"
| |
| |-
| |
| ! value
| |
| ! meaning
| |
| |-
| |
| | -1
| |
| | default (uses furniture type)
| |
| |-
| |
| | 0
| |
| | indoors-only
| |
| |-
| |
| | 1
| |
| | outdoors-only
| |
| |-
| |
| | 2
| |
| | indoors or outdoors
| |
| |}
| |
| |-
| |
| | 7
| |
| | display name
| |
| | The translated furniture name (in non-English data assets only).
| |
| |} | | |} |
|
| |
|
| ==Hats== | | ===Advanced=== |
| Hats are items that can be equipped in the player's [[hats|hat]] slot.
| |
| | |
| They have their data in <samp>Data/Hats</samp>, their in-game sprites in <samp>Characters/Farmer/hats</samp>, and their code in <samp>StardewValley.Objects.Hat</samp>.
| |
| | |
| ===Data format=== | |
| The hat data in <samp>Data/Hats</samp> consists of an integer→string dictionary with entries like this:
| |
| | |
| <syntaxhighlight lang="json">
| |
| "5": "Official Cap/Looks like it belonged to a postman or policeman. Either way, it's still very soft and smells okay./false/true"
| |
| </syntaxhighlight>
| |
| | |
| For each entry in the data asset, the key is the item's <samp>ParentSheetIndex</samp> and the value is a slash-delimited string with these fields:
| |
| | |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
| ! index
| |
| ! field | | ! field |
| ! effect | | ! purpose |
| |-
| |
| | 0
| |
| | name
| |
| | The internal item name (and display name in English).
| |
| |-
| |
| | 1
| |
| | description
| |
| | The translated item description shown in-game.
| |
| |-
| |
| | 2
| |
| | show real hair
| |
| | Whether to show the player's hairstyle as-is when the hat is worn (<samp>true</samp>), or change the hairstyle to fit the hat (<samp>false</samp>).
| |
| |-
| |
| | 3
| |
| | skip hairstyle offset
| |
| | Whether to ignore the current style when positioning the hat (one of <samp>true</samp> or <samp>false</samp>). For example, the [[Eye Patch|eye patch]] sets <samp>true</samp> since its position isn't affected by the hair, but the [[Butterfly Bow|butterfly bow]] sets <samp>false</samp> to adjust its position on top of your hair.
| |
| |- | | |- |
| | 4 | | | <samp>CustomFields</samp> |
| | display name | | | ''(Optional)'' The [[Modding:Common data field types#Custom fields|custom fields]] for this entry. |
| | The translated item name shown in-game (for non-English assets only). | |
| |} | | |} |
|
| |
|
| Hats have a hard-coded category of -95 (<samp>Hats.cs::Load</samp>)
| | ==Unobtainable items== |
| | The spritesheet and data have items that can't normally be found in the player inventory (like twigs and lumber), and some sprites have no corresponding item data. There are also multiple entries for ''weeds'' and ''stone'' corresponding to different sprites, but the player can only normally obtain one ''stone'' item (index 390) and no ''weeds'' items. |
|
| |
|
| ==Tools== | | ==For C# mods== |
| [[Tools]] are items that can be swung or used by the player to perform some effect (e.g. dig dirt, chop trees, etc).
| | Object-type items are represented by the <samp>StardewValley.Object</samp> type. |
|
| |
|
| They have their in-game sprites in <samp>TileSheets/Tools</samp>, and their code in <samp>StardewValley.Tool</samp> and various subclasses like <samp>StardewValley.Tools.Axe</samp>.
| | This provides many methods to simplify common logic. Some notable examples: |
|
| |
|
| ===Data format===
| | {| class="wikitable" |
| Tools are currently hardcoded and can't be edited by content packs.
| |
| | |
| ==Weapons==
| |
| [[Weapons]] are tools that can be used by the player to damage monsters.
| |
| | |
| They have their data in <samp>Data/Weapons</samp>, their in-game sprites in <samp>TileSheets/weapons</samp>, and their code in <samp>StardewValley.Tools.MeleeWeapon</samp> and <samp>StardewValley.Tools.Slingshot</samp>.
| |
| | |
| ===Data format===
| |
| The weapon data in <samp>Data/Weapons</samp> consists of an integer→string dictionary with entries like this:
| |
| | |
| <syntaxhighlight lang="json">
| |
| "12": "Wooden Blade/Not bad for a piece of carved wood./3/7/1/0/0/0/0/3/-1/0/.02/3"
| |
| </syntaxhighlight>
| |
| | |
| For each entry in the data asset, the key is the item's <samp>ParentSheetIndex</samp> and the value is a slash-delimited string with these fields:
| |
| | |
| ; Melee weapons
| |
| : {| class="wikitable"
| |
| |- | | |- |
| ! index | | ! method |
| ! field
| |
| ! effect | | ! effect |
| |- | | |- |
| | 0 | | | <samp>Object.GetRadiusForScarecrow()</samp> |
| | name | | | The tile radius that Object protects as a scarecrow. Default behavior: Checks for the value in the <samp>crow_scare_radius_{{t|radius}}</samp> [[Modding:Context tags|context tag]] if applicable, then defaults to 17 if the internal name contains "Deluxe" and 9 otherwise. Can be patched to support custom scarecrows. |
| | The internal weapon name (and display name in English). | |
| |-
| |
| | 1
| |
| | description
| |
| | The translated item description shown in-game.
| |
| |- | | |- |
| | 2<br />3 | | | <samp>Object.IsBar()</samp> |
| | min damage<br />max damage
| | | Whether the item is a [[Copper Bar|copper bar]], [[Iron Bar|iron bar]], [[Gold Bar|gold bar]], [[Iridium Bar|iridium bar]], or [[Radioactive Bar|radioactive bar]]. |
| | The minimum and maximum damage caused when hitting a monster with this weapon. | |
| |- | | |- |
| | 4 | | | <samp>Object.IsBreakableStone()</samp> |
| | knockback
| | | Whether the item is a stone debris item which can be broken by a pickaxe. |
| | How far the target is pushed when hit, as a multiplier relative to a base weapon like the [[Rusty Sword]] (e.g. <samp>1.5</samp> for 150% of Rusty Sword's weight).
| |
| |- | | |- |
| | 5 | | | <samp>Object.IsFence()</samp> |
| | speed
| | | Whether the item is a [[Crafting#Fences|fence]]. |
| | How fast the player can swing the weapon. Each point of speed is worth 40ms of swing time relative to 0. This stacks with the [[speed|player's weapon speed]]. | |
| |- | | |- |
| | 6 | | | <samp>Object.IsFruitTreeSapling()</samp> |
| | added precision | | | Whether the item is a [[Fruit Trees|fruit tree]] sapling. This checks the <samp>Data\fruitTrees</samp> keys, so it works with custom fruit trees too. |
| | Reduces the chance that a strike will miss. | |
| |- | | |- |
| | 7 | | | <samp>Object.IsHeldOverHead()</samp> |
| | added defence | | | Whether the player is shown holding up the item when it's selected in their toolbar. Default true (except for furniture). |
| | Reduces damage received by the player.
| |
| |- | | |- |
| | 8 | | | <samp>Object.IsIncubator()</samp> |
| | type
| | | Whether the item can incubate [[Animals|farm animal]] eggs when placed in a building. |
| | The weapon type. One of <samp>0</samp> (stabbing sword), <samp>1</samp> (dagger), <samp>2</samp> (club or hammer), or <samp>3</samp> (slashing sword).
| |
| |- | | |- |
| | 9<br />10 | | | <samp>Object.IsScarecrow()</samp> |
| | base mine level<br />min mine level | | | Whether the item is a scarecrow. Default: <samp>true</samp> if the object has the <samp>crow_scare</samp> [[Modding:Context_tags|context tag]]. Otherwise, returns whether the object's internal name contains "arecrow". Can be patched to support custom scarecrows. |
| | The base and minimum mine level, which affect [[#Mine container drops|mine container drops]].
| |
| |- | | |- |
| | 11 | | | <samp>Object.IsTapper()</samp> |
| | added area of effect | | | Whether the item is a [[Tapper|tapper]] or [[Heavy Tapper|heavy tapper]]. |
| | Slightly increases the area of effect. | |
| |- | | |- |
| | 12 | | | <samp>Object.IsTeaSapling()</samp> |
| | critical chance | | | Whether the item is a [[Tea Sapling|tea sapling]]. |
| | The chance of a critical hit, as a decimal value between 0 and 1. | |
| |- | | |- |
| | 13 | | | <samp>Object.IsTwig()</samp> |
| | critical damage | | | Whether the item is a twig debris item. |
| | A multiplier applied to the damage for critical hit.
| |
| |- | | |- |
| | 14 | | | <samp>Object.IsWeeds()</samp> |
| | display name | | | Whether the item is a weed debris item. |
| | The translated item name (in non-English assets only).
| |
| |} | | |} |
|
| |
| ; Slingshots
| |
| : {| class="wikitable"
| |
| |-
| |
| ! index
| |
| ! field
| |
| ! effect
| |
| |-
| |
| | 0
| |
| | name
| |
| | The internal weapon name (and display name in English).
| |
| |-
| |
| | 1
| |
| | description
| |
| | The translated item description shown in-game (for non-English assets only).
| |
| |-
| |
| | 2–8
| |
| | ''unused''
| |
| |
| |
| |-
| |
| | 9<br />10
| |
| | base mine level<br />min mine level
| |
| | The base and minimum mine level, which affect [[#Mine container drops|mine container drops]].
| |
| |-
| |
| | 11–13
| |
| | ''unused''
| |
| |
| |
| |-
| |
| | 14
| |
| | display name
| |
| | The translated item description shown in-game (for non-English assets only).
| |
| |}
| |
|
| |
| Weapons have a hardcoded category of -98 (<samp>Object.weaponCategory</samp>).
| |
|
| |
| ===Slingshot notes===
| |
| * The base [[slingshot]] has <samp>ParentSheetIndex</samp> 32 in the weapon data, which increases by one for each upgrade level (up to 34 in the weapon data, though only 32 and 33 are obtainable without mods).
| |
| * Slingshot damage is [[Slingshot#Ammunition|calculated dynamically]] regardless of the weapon data.
| |
|
| |
| ===Mine container drops===
| |
| When the player breaks a container in [[The Mines|the mines]], there's a chance it will drop a weapon. Here's how the weapon to drop is chosen<ref>See <samp>Utility.getUncommonItemForThisMineLevel</samp> in the game code.</ref>:
| |
|
| |
| <ol>
| |
| <li>Match weapons whose minimum mine level ([[#Format|field 10]]) is less than the current mine level.</li>
| |
| <li>From that list, match weapons with a probability check based on the gap between the base mine level ([[#Format|field 9]]) and current mine level. The probability is a bell curve centered on the base mine level:
| |
| {| class="wikitable"
| |
| |-
| |
| ! level difference
| |
| ! probability
| |
| |-
| |
| | 0
| |
| | 100%
| |
| |-
| |
| | 5
| |
| | 92%
| |
| |-
| |
| | 10
| |
| | 71%
| |
| |-
| |
| | 15
| |
| | 46%
| |
| |-
| |
| | 20
| |
| | 25%
| |
| |-
| |
| | 25
| |
| | 4%
| |
| |}
| |
| The difference applies in both directions; for example, two weapons whose base levels are 5 below and 5 above the current level both have a 92% chance. (The probability is calculated with a [[wikipedia:Gaussian function|Gaussian function]] <code>e<sup>-(current mine level - base mine level)<sup>2</sup> / (2 * 12<sup>2</sup>)</sup></code>.)</li>
| |
| <li>Find the weapon with the smallest gap between the current and base mine levels, and add it to the list. (If the item was also selected in step 2, it has two chances to drop.)</li>
| |
| <li>From the remaining list of weapons, randomly choose one to drop.</li>
| |
| </ol>
| |
|
| |
|
| ==See also== | | ==See also== |
| * [[Modding:Index]] for related content like [[Modding:Crop data|crops]], [[Modding:Fish data|fish]], [[Modding:Gift taste data|gift tastes]], and [[Modding:Recipe data|recipes]] | | * [[Modding:Items]] for item data in general |
| | |
| ==References==
| |
| <references />
| |
|
| |
|
| [[Category:Modding]] | | [[Category:Modding]] |
|
| |
|
| [[ru:Модификации:Объекты]] | | [[ru:Модификации:Объекты]] |
| | | [[zh:模组:物体]] |
| ==History==
| |
| {{History|1.6|Objects are now stored in <samp>Data/Objects</samp> rather than <samp>Data/ObjectInformation</samp> and have a new format.}}
| |