Difference between revisions of "Modding:Migrate to Stardew Valley 1.6.9"
Pathoschild (talk | contribs) (→Changes for all mods: + Tokenizable string changes) |
Pathoschild (talk | contribs) m (→Debug command changes: fix typo) |
||
(23 intermediate revisions by 4 users not shown) | |||
Line 32: | Line 32: | ||
==Changes for all mods== | ==Changes for all mods== | ||
− | |||
− | |||
− | |||
===[[Modding:Dialogue|Dialogue]] changes=== | ===[[Modding:Dialogue|Dialogue]] changes=== | ||
<ul> | <ul> | ||
Line 124: | Line 121: | ||
| <samp>logWallAndFloorWarnings</samp> | | <samp>logWallAndFloorWarnings</samp> | ||
| Enable debug logs when applying wallpaper and flooring to a farmhouse (or other decoratable location) to help troubleshoot cases where they don't work with a custom map. You'd usually enable this before loading the save. | | Enable debug logs when applying wallpaper and flooring to a farmhouse (or other decoratable location) to help troubleshoot cases where they don't work with a custom map. You'd usually enable this before loading the save. | ||
+ | |- | ||
+ | | <samp>whereIsItem</samp>,<br /><samp>whereItem</samp> | ||
+ | | List all items matching the given item ID or name in the save. | ||
+ | |||
+ | For example: | ||
+ | <pre> | ||
+ | > debug whereItem "Watering Can" | ||
+ | |||
+ | Found 1 item matching name 'Watering Can': | ||
+ | - Farm > Shed at 50, 14 > Shed149bae63-2add-4ab6-a5aa-b3bd76372004 > Chest at 4, 4 > Watering Can ((T)CopperWateringCan) | ||
+ | </pre> | ||
|- | |- | ||
| <samp>worldMapPosition {{o|includeLog}}</samp> | | <samp>worldMapPosition {{o|includeLog}}</samp> | ||
Line 167: | Line 175: | ||
| The <samp>clearMore</samp> argument no longer treats any value as true. | | The <samp>clearMore</samp> argument no longer treats any value as true. | ||
|- | |- | ||
− | | <samp> | + | | <samp>spreadSeeds</samp> |
| Now affects crops in garden pots. | | Now affects crops in garden pots. | ||
|- | |- | ||
Line 264: | Line 272: | ||
===[[Modding:Items|Item data]] changes=== | ===[[Modding:Items|Item data]] changes=== | ||
− | + | ====In Data/Objects==== | |
+ | <ul> | ||
+ | <li>Added a new field</samp>: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 272: | Line 282: | ||
| <samp>ColorOverlayFromNextIndex</samp> | | <samp>ColorOverlayFromNextIndex</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. | | ''(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. | ||
− | |} | + | |}</li> |
+ | <li>Object buffs can now also set these buff attributes: <samp>CombatLevel</samp>, <samp>AttackMultiplier</samp>, <samp>CriticalChanceMultiplier</samp>, <samp>CriticalPowerMultiplier</samp>, <samp>Immunity</samp>, <samp>KnockbackMultiplier</samp>, <samp>WeaponPrecisionMultiplier</samp>, and <samp>WeaponSpeedMultiplier</samp>.</li> | ||
+ | <li>Flavor name translations like <code>Wine_Flavored_Name</code> can use a new <samp>{1}</samp> token for the lowercase name.</li> | ||
+ | <li>You can now customize the display name for specific flavor items. For example, the <code>Wine_Flavored_(O)282_Name</code> translation ("Cranberry Wine") overrides <code>Wine_Flavored_Name</code> ("{0} Wine").</li> | ||
+ | </ul> | ||
− | + | ====Item spawn fields==== | |
+ | 1.6.9 adds a new field for all [[Modding:Item queries#Item spawn fields|item spawn fields]]: | ||
{| class="wikitable" | {| class="wikitable" | ||
! field | ! field | ||
Line 282: | Line 297: | ||
| ''(Optional)'' The tint color to apply to the produced item. Default none. | | ''(Optional)'' The tint color to apply to the produced item. Default none. | ||
|} | |} | ||
+ | |||
+ | ====Other==== | ||
+ | * For C# mods, the <samp>Object.displayNameFormat</samp> field can now use two new tokens: <samp>%DISPLAY_NAME_LOWERCASE</samp> and <samp>%PRESERVED_DISPLAY_NAME_LOWERCASE</samp>. | ||
===[[Modding:Machines|Machine data]] changes=== | ===[[Modding:Machines|Machine data]] changes=== | ||
Line 288: | Line 306: | ||
* The <samp>CopyColor</samp> field now works for any input item, even if it's not a <samp>ColoredObject</samp> (in which case it uses the color from its context tags). | * The <samp>CopyColor</samp> field now works for any input item, even if it's not a <samp>ColoredObject</samp> (in which case it uses the color from its context tags). | ||
* The <samp>CopyQuality</samp> field no longer disables <samp>QualityModifiers</samp>; those are now applied to the result of the copy. | * The <samp>CopyQuality</samp> field no longer disables <samp>QualityModifiers</samp>; those are now applied to the result of the copy. | ||
+ | |||
+ | ===[[Modding:Maps|Map]] property changes=== | ||
+ | 1.6.9 adds new map properties: | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! property | ||
+ | ! explanation | ||
+ | |- | ||
+ | | <samp>AllowBeds {{t|allowed}}</samp><br /><samp>AllowMiniFridges {{t|allowed}}</samp> | ||
+ | | Whether [[Furniture#Beds|beds]] or [[Mini-Fridge|mini-fridges]] can be placed in this location. This can be <samp>true</samp> or <samp>false</samp>. If specified, this bypasses the usual specific requirements (e.g. farmhouse upgrade level), though general furniture restrictions still apply (e.g. the 'placement restriction' field in <samp>Data/Furniture</samp>). | ||
+ | |} | ||
===[[Modding:Pets|Pet data]] changes=== | ===[[Modding:Pets|Pet data]] changes=== | ||
Line 293: | Line 323: | ||
===[[Modding:Tokenizable strings|Tokenizable string]] changes=== | ===[[Modding:Tokenizable strings|Tokenizable string]] changes=== | ||
− | + | <ul> | |
− | + | <li>Added new tokens: | |
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! token format | ||
+ | ! output | ||
+ | |- | ||
+ | | <samp>[CapitalizeFirstLetter {{t|text}}]</samp> | ||
+ | | The input text, with the first letter capitalized. | ||
+ | |- | ||
+ | | <samp>[ItemNameWithFlavor {{t|flavor type}} {{t|flavor ID}}]</samp> | ||
+ | | The translated display name for a flavored item name, where... | ||
+ | * {{t|flavor type}} is one of <samp>AgedRoe</samp>, <samp>Bait</samp>, <samp>DriedFruit</samp>, <samp>DriedMushroom</samp>, <samp>Honey</samp>, <samp>Jelly</samp>, <samp>Juice</samp>, <samp>Pickle</samp>, <samp>Roe</samp>, <samp>SmokedFish</samp>, or <samp>Wine</samp>; | ||
+ | * {{t|flavor ID}} is the [[Modding:Common data field types#Item ID|qualified or qualified item ID]] for the flavor (e.g. the blueberry in blueberry wine). | ||
+ | |}</li> | ||
+ | <li>For C# mods with custom tokens, parsers now receive argument values with any escape characters from <samp>[EscapedText]</samp> stripped back out.</li> | ||
+ | </ul> | ||
===[[Modding:Items#Tools|Tool data]] changes=== | ===[[Modding:Items#Tools|Tool data]] changes=== | ||
Line 373: | Line 418: | ||
* Removed the <samp>TemporaryAnimatedSprite.light</samp> boolean field; the light is now enabled by setting the <samp>lightId</samp> field. | * Removed the <samp>TemporaryAnimatedSprite.light</samp> boolean field; the light is now enabled by setting the <samp>lightId</samp> field. | ||
− | === | + | ===Quest event revamp=== |
− | + | Previously, the game would call <samp>Game1.player.checkForQuestComplete</samp> with various arguments like <code>string str</code> and <code>int number2</code>, which had different behavior depending on the quest type. | |
+ | |||
+ | These have been replaced with more specific methods like <samp>Quest.OnMonsterSlain</samp>, which... | ||
+ | * are more intuitive to use; | ||
+ | * receive more detailed info (e.g. the damage type when a monster is slain); | ||
+ | * and let custom quests handle multiple event types (e.g. both item crafted and item received). | ||
− | + | The <samp>Farmer</samp> method has been replaced with a single <samp>NotifyQuests</samp> method, which performs an action on each quest and returns whether any quest was updated. | |
+ | Here's how the old <samp>Quest</samp> methods map to the new ones. (The <samp>Farmer</samp> methods are the same thing, but just add <samp>Game1.player.NotifyQuests(quest => ...)</samp> around them.) | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | ! type | + | ! old code |
− | ! method | + | ! new code |
− | ! usage | + | |- |
+ | | <syntaxhighlight lang="c#">quest.checkForQuestComplete(n, -1, -1, null, null, Quests.Quest.type_socialize)</syntaxhighlight> | ||
+ | | <syntaxhighlight lang="c#">quest.OnNpcSocialized(npc)</syntaxhighlight> | ||
+ | |- | ||
+ | | <syntaxhighlight lang="c#">quest.checkForQuestComplete(null, -1, -1, null, buildingType, Quests.Quest.type_building)</syntaxhighlight> | ||
+ | | <syntaxhighlight lang="c#">quest.OnBuildingFirstConstructed(buildingType)</syntaxhighlight> | ||
+ | |- | ||
+ | | <syntaxhighlight lang="c#">quest.checkForQuestComplete(null, -1, numberCaught, null, itemId, Quest.type_fishing)</syntaxhighlight> | ||
+ | | <syntaxhighlight lang="c#">quest.OnFishCaught(itemId, numberCaught, size)</syntaxhighlight> | ||
+ | |- | ||
+ | | <syntaxhighlight lang="c#">quest.checkForQuestComplete(null, -1, countAdded, item, null, Quest.type_harvest) | ||
+ | quest.checkForQuestComplete(null, -1, countAdded, actualItem, null, Quest.type_resource)</syntaxhighlight> | ||
+ | | <syntaxhighlight lang="c#">quest.OnItemReceived(item, countAdded)</syntaxhighlight> | ||
+ | |- | ||
+ | | <syntaxhighlight lang="c#">quest.checkForQuestComplete(npc, -1, -1, item, "", Quests.Quest.type_harvest, Quests.Quest.type_itemDelivery)</syntaxhighlight> | ||
+ | | <syntaxhighlight lang="c#">quest.OnItemOfferedToNpc(npc, item)</syntaxhighlight> | ||
+ | |- | ||
+ | | <syntaxhighlight lang="c#">quest.checkForQuestComplete(null, 1, 1, null, monster.Name, Quests.Quest.type_monster)</syntaxhighlight> | ||
+ | | <syntaxhighlight lang="c#">quest.OnMonsterSlain(location, monster, killedByBomb, isHutchSlime)</syntaxhighlight> | ||
+ | |- | ||
+ | | <syntaxhighlight lang="c#">quest.checkForQuestComplete(null, -1, -1, crafted, null, Quests.Quest.type_crafting)</syntaxhighlight> | ||
+ | | <syntaxhighlight lang="c#">quest.OnRecipeCrafted(recipe, crafted)</syntaxhighlight> | ||
+ | |- | ||
+ | | <syntaxhighlight lang="c#">quest.checkIfComplete(null, -1, -2, null, location.name)</syntaxhighlight> | ||
+ | | <syntaxhighlight lang="c#">quest.OnWarped(location)</syntaxhighlight> | ||
+ | |} | ||
+ | |||
+ | ===New extension methods=== | ||
+ | The game has [https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/extension-methods extension methods] in the <samp>StardewValley.Extensions</samp> namespace. These add utility methods to more general types like strings. | ||
+ | |||
+ | 1.6.9 adds some new extension methods: | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! type | ||
+ | ! method | ||
+ | ! usage | ||
|- | |- | ||
| <samp>Dictionary<TKey, TValue></samp> | | <samp>Dictionary<TKey, TValue></samp> | ||
Line 510: | Line 597: | ||
| <samp>Crop.replaceWithObjectOnFullGrown</samp> | | <samp>Crop.replaceWithObjectOnFullGrown</samp> | ||
| If set, the qualified object ID to spawn on the crop's tile when it's full-grown. The crop will be removed when the object is spawned. | | If set, the qualified object ID to spawn on the crop's tile when it's full-grown. The crop will be removed when the object is spawned. | ||
+ | |- | ||
+ | | <samp>Dialogue.GetFallbackForError(npc)</samp><br /><samp>Dialogue.GetFallbackTextForError()</samp> | ||
+ | | Get a translated default "..." dialogue, which is shown in cases where a valid dialogue couldn't be loaded. | ||
|- | |- | ||
| <samp>Event.TryResolveCommandName(…)</samp> | | <samp>Event.TryResolveCommandName(…)</samp> | ||
Line 519: | Line 609: | ||
...; // commandName = AddMailReceived | ...; // commandName = AddMailReceived | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |- | ||
+ | | <samp>FarmHouse.GetFridgePositionFromMap()</samp> | ||
+ | | Get the position of the map fridge by scanning the map tiles. (Most code should use the cached <samp>fridgePosition</samp> field instead.) | ||
|- | |- | ||
| <samp>Game1.IsHudDrawn</samp> | | <samp>Game1.IsHudDrawn</samp> | ||
Line 547: | Line 640: | ||
| <samp>GameLocation.OnHarvestedForage(…)</samp> | | <samp>GameLocation.OnHarvestedForage(…)</samp> | ||
| Grant foraging or farming XP when the player harvests forage, and any other behavior defined by mods. | | Grant foraging or farming XP when the player harvests forage, and any other behavior defined by mods. | ||
+ | |- | ||
+ | | <samp>GameLocation.ParentBuilding</samp> | ||
+ | | The building which contains this location, if applicable. This replaces the former <samp>GetContainingBuilding()</samp> method, to avoid iterating the parent location's building list each time. | ||
|- | |- | ||
| <samp>HoeDirt.Pot</samp> | | <samp>HoeDirt.Pot</samp> | ||
Line 559: | Line 655: | ||
| <samp>Item.CopyFieldsFrom(otherItem)</samp> | | <samp>Item.CopyFieldsFrom(otherItem)</samp> | ||
| Copy all fields from another item into the current one. This is equivalent to <samp>item.getOne()</samp>, except that you update an existing item instead. | | Copy all fields from another item into the current one. This is equivalent to <samp>item.getOne()</samp>, except that you update an existing item instead. | ||
+ | |- | ||
+ | | <samp>LocalizedContentManager.LoadStringReturnNullIfNotFound(…)</samp> | ||
+ | | This method already existed, but now has optional substitution arguments and an optional <samp>localeFallback</samp> argument. | ||
+ | |- | ||
+ | | <samp>LocalizedContentManager.LoadBaseStringOrNull(…)</samp> | ||
+ | | Get the default English text for a translation path, or <samp>null</samp> if it's not found. | ||
|- | |- | ||
| <samp>Item.LearnRecipe()</samp> | | <samp>Item.LearnRecipe()</samp> | ||
Line 578: | Line 680: | ||
| <samp>Object.IsTextSign()</samp> | | <samp>Object.IsTextSign()</samp> | ||
| Get whether the object can have editable text which is shown on hover like a [[Text Sign|text sign]]. | | Get whether the object can have editable text which is shown on hover like a [[Text Sign|text sign]]. | ||
+ | |- | ||
+ | | <samp>Object.GetObjectDisplayName(…)</samp> | ||
+ | | Get the display name which would be set for an object, without needing to create an object instance. | ||
|- | |- | ||
| <samp>Raccoon.GetBundle()</samp><br /><samp>Raccoon.GetBundle(timesFed)</samp> | | <samp>Raccoon.GetBundle()</samp><br /><samp>Raccoon.GetBundle(timesFed)</samp> | ||
Line 629: | Line 734: | ||
|} | |} | ||
− | ===<samp> | + | ===<samp>ForEachItem</samp> changes=== |
− | + | The <samp>ForEachItem</samp> methods changed a bit in 1.6.9. (These methods iterate through every item in the world, and optionally remove/replace instances.) | |
+ | |||
+ | '''Most mods aren't affected.''' This affects mods which use the advanced <samp>ForEachItem</samp> form (like <code>Utility.ForEachItem((item, remove, replaceWith) => ...)</code>), or which implement custom item types which can contain other items. Mods which use the simple form (like <code>Utility.ForEachItem(item => ...)</code>) don't need any changes. | ||
+ | |||
+ | The main changes are: | ||
+ | <ul> | ||
+ | <li>The advanced forms now use a context object, which also provides the 'path' to the item. For example, an item inside a chest would have a path consisting of the location and chest: | ||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
− | /// <summary>The method signature for a custom <see cref="MachineItemOutput.OutputMethod"/> method.</summary> | + | Utility.ForEachItemContext(delegate(in ForEachItemContext context) |
+ | { | ||
+ | // remove pufferfish inside chests | ||
+ | if (context.Item.QualifiedItemId == "(O)128" && context.GetPath().Last() is Chest) | ||
+ | context.RemoveItem(); | ||
+ | return true; | ||
+ | }); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | The context must be passed by reference using the <samp>in</samp> keyword. This doesn't work with lambdas, so you'll need to adjust the format: | ||
+ | <syntaxhighlight lang="c#"> | ||
+ | // ✘ lambda can't use 'in' | ||
+ | Utility.ForEachItemContext(in context => | ||
+ | { | ||
+ | context.RemoveItem(); | ||
+ | return true; | ||
+ | }); | ||
+ | |||
+ | // ✓ use method or local function | ||
+ | bool HandleItem(in ForEachItemContext context) | ||
+ | { | ||
+ | context.RemoveItem(); | ||
+ | return true; | ||
+ | } | ||
+ | Utility.ForEachItemContext(HandleItem); | ||
+ | |||
+ | // ✓ use delegate | ||
+ | Utility.ForEachItemContext(delegate(in ForEachItemContext context) | ||
+ | { | ||
+ | context.RemoveItem(); | ||
+ | return true; | ||
+ | }); | ||
+ | </syntaxhighlight></li> | ||
+ | <li>For custom items which override <samp>Item.ForEachItem</samp>, the method signature has changed from this: | ||
+ | <syntaxhighlight lang="c#"> | ||
+ | /// <summary>Perform an action for each item contained within this item (e.g. items stored within a chest, item placed on a table, etc). This doesn't include the item itself.</summary> | ||
+ | /// <param name="handler">The action to perform for each item.</param> | ||
+ | /// <returns>Returns whether to continue iterating.</returns> | ||
+ | bool ForEachItem(ForEachItemDelegate handler); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | To this: | ||
+ | <syntaxhighlight lang="c#"> | ||
+ | /// <summary>Perform an action for each item contained within this item (e.g. items stored within a chest, item placed on a table, etc). This doesn't include the item itself.</summary> | ||
+ | /// <param name="handler">The action to perform for each item.</param> | ||
+ | /// <param name="getPath">The contextual path leading to this item (including the item), or <c>null</c> to treat this as the root.</param> | ||
+ | /// <returns>Returns whether to continue iterating.</returns> | ||
+ | bool ForEachItem(ForEachItemDelegate handler, GetForEachItemPathDelegate getPath); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | You should pass the <samp>getPath</samp> value to <samp>ForEachItemHelper</samp> methods.</li> | ||
+ | </ul> | ||
+ | |||
+ | ===<samp>OutputMethod</samp> changes in <samp>Data/Machines</samp>=== | ||
+ | If you have custom C# methods which are used in the <samp>OutputMethod</samp> field in [[Modding:Machines|<samp>Data/Machines</samp>]], the method signature has changed in 1.6.9. You'll need to add the new <samp>Farmer player</samp> argument to your methods: | ||
+ | <syntaxhighlight lang="c#"> | ||
+ | /// <summary>The method signature for a custom <see cref="MachineItemOutput.OutputMethod"/> method.</summary> | ||
/// <param name="machine">The machine instance for which to produce output.</param> | /// <param name="machine">The machine instance for which to produce output.</param> | ||
/// <param name="inputItem">The item being dropped into the machine, if applicable.</param> | /// <param name="inputItem">The item being dropped into the machine, if applicable.</param> | ||
Line 653: | Line 820: | ||
===Objects=== | ===Objects=== | ||
− | ; | + | ; English |
: {| class="wikitable" | : {| class="wikitable" | ||
|- | |- | ||
Line 660: | Line 827: | ||
! new name | ! new name | ||
|- | |- | ||
− | | [[Aerinite]] | + | | [[Jellies and Pickles|Jelly]] |
− | | ''Aerinite'' | + | | ''Cranberries Jelly'' |
− | | ''Aérinite'' | + | | ''Cranberry Jelly'' |
+ | |- | ||
+ | | [[Juice]] | ||
+ | | ''Cranberries Juice'' | ||
+ | | ''Cranberry Juice'' | ||
+ | |- | ||
+ | | [[Wine]] | ||
+ | | ''Cranberries Wine'' | ||
+ | | ''Cranberry Wine'' | ||
+ | |} | ||
+ | |||
+ | ; French | ||
+ | : {| class="wikitable" | ||
+ | |- | ||
+ | ! item | ||
+ | ! old name | ||
+ | ! new name | ||
+ | |- | ||
+ | | [[Aerinite]] | ||
+ | | ''Aerinite'' | ||
+ | | ''Aérinite'' | ||
|- | |- | ||
| [[Blobfish]] | | [[Blobfish]] | ||
Line 683: | Line 870: | ||
| ''Mayonnaise dinosaure'' | | ''Mayonnaise dinosaure'' | ||
| ''Mayonnaise de dinosaure'' | | ''Mayonnaise de dinosaure'' | ||
+ | |- | ||
+ | |rowspan="3"| [[Dried Fruit]] | ||
+ | | ''Un morceau séché de abricot'' | ||
+ | | ''Un morceau séché d’abricot'' | ||
+ | |- | ||
+ | | ''Un morceau séché de ananas'' | ||
+ | | ''Un morceau séché d’ananas'' | ||
+ | |- | ||
+ | | ''Un morceau séché de orange'' | ||
+ | | ''Un morceau séché d’orange'' | ||
|- | |- | ||
| [[Fairy Rose]] | | [[Fairy Rose]] | ||
Line 711: | Line 908: | ||
| ''Item Pedestal'' | | ''Item Pedestal'' | ||
| ''Piédestal'' | | ''Piédestal'' | ||
+ | |- | ||
+ | |rowspan="3"| [[Jellies and Pickles|Jelly]] | ||
+ | | ''Gelée de abricot'' | ||
+ | | ''Gelée d’abricot'' | ||
+ | |- | ||
+ | | ''Gelée de ananas'' | ||
+ | | ''Gelée d’ananas'' | ||
+ | |- | ||
+ | | ''Gelée de orange'' | ||
+ | | ''Gelée d’orange'' | ||
+ | |- | ||
+ | |rowspan="5"| [[Juice]] | ||
+ | | ''Jus de Ail'' | ||
+ | | ''Jus d’ail'' | ||
+ | |- | ||
+ | | ''Jus de Amarante'' | ||
+ | | ''Jus d’amarante'' | ||
+ | |- | ||
+ | | ''Jus de Artichaut'' | ||
+ | | ''Jus d’artichaut'' | ||
+ | |- | ||
+ | | ''Jus de Aubergine'' | ||
+ | | ''Jus d’aubergine'' | ||
+ | |- | ||
+ | | ''Jus de Igname'' | ||
+ | | ''Jus d’igname'' | ||
|- | |- | ||
| [[Maple Bar]] | | [[Maple Bar]] | ||
Line 747: | Line 970: | ||
| ''Baie gemme sucrée'' | | ''Baie gemme sucrée'' | ||
| ''Baie de gemme sucrée'' | | ''Baie de gemme sucrée'' | ||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | ! item | + | | rowspan="10"| [[Targeted Bait]] |
− | ! old name | + | | ''Appât de Achigan à grande bouche'' |
− | ! new name | + | | ''Appât d’achigan à grande bouche'' |
+ | |- | ||
+ | | ''Appât de Achigan à petite bouche'' | ||
+ | | ''Appât d’achigan à petite bouche'' | ||
+ | |- | ||
+ | | ''Appât de Albacore'' | ||
+ | | ''Appât d’albacore'' | ||
+ | |- | ||
+ | | ''Appât de Alose'' | ||
+ | | ''Appât d’alose'' | ||
+ | |- | ||
+ | | ''Appât de Anchois'' | ||
+ | | ''Appât d’anchois'' | ||
+ | |- | ||
+ | | ''Appât de Anguille'' | ||
+ | | ''Appât d’anguille'' | ||
+ | |- | ||
+ | | ''Appât de Anguille de lave'' | ||
+ | | ''Appât d’anguille de lave'' | ||
+ | |- | ||
+ | | ''Appât de Écrevisse'' | ||
+ | | ''Appât d’écrevisse'' | ||
+ | |- | ||
+ | | ''Appât de Escargot'' | ||
+ | | ''Appât d’escargot'' | ||
+ | |- | ||
+ | | ''Appât de Esturgeon'' | ||
+ | | ''Appât d’esturgeon'' | ||
+ | |- | ||
+ | |rowspan="3"| [[Wine]] | ||
+ | | ''Vin de abricot'' | ||
+ | | ''Vin d’abricot'' | ||
+ | |- | ||
+ | | ''Vin de ananas'' | ||
+ | | ''Vin d’ananas'' | ||
+ | |- | ||
+ | | ''Vin de orange'' | ||
+ | | ''Vin d’orange'' | ||
+ | |} | ||
+ | |||
+ | ; German | ||
+ | : {| class="wikitable" | ||
+ | |- | ||
+ | ! item | ||
+ | ! old name | ||
+ | ! new name | ||
|- | |- | ||
| [[Artifact Trove]] | | [[Artifact Trove]] | ||
Line 1,000: | Line 1,264: | ||
| ''Семена бок-чой'' | | ''Семена бок-чой'' | ||
| ''Семена бок-чоя'' | | ''Семена бок-чоя'' | ||
+ | |- | ||
+ | | [[Chicken Decal]] | ||
+ | | ''Наклейка «Курица»'' | ||
+ | | ''Наклейка «Курицы»'' | ||
|- | |- | ||
| [[Crimsonfish]] | | [[Crimsonfish]] | ||
Line 1,005: | Line 1,273: | ||
| ''Багрянник'' | | ''Багрянник'' | ||
|- | |- | ||
− | | [[ | + | |rowspan="20"| [[Dried Fruit]] |
− | | '' | + | | ''{{t|item name}} (засушено)'' |
− | | '' | + | | ''Сушен. {{t|item name}}'' |
+ | |- | ||
+ | | ''Сморчок (засушено)'' | ||
+ | | ''Сушен. сморчки'' | ||
|- | |- | ||
− | + | | ''Лисичка (засушено)'' | |
− | | '' | + | | ''Сушен. лисички'' |
− | | '' | ||
|- | |- | ||
− | + | | ''Острая ягода (засушено)'' | |
− | | '' | + | | ''Сушен. острые ягоды'' |
− | | '' | ||
|- | |- | ||
− | | [[Green Canes]] | + | | ''Шампиньон (засушено)'' |
+ | | ''Сушен. шампиньоны'' | ||
+ | |- | ||
+ | | ''Черная слива (засушено)'' | ||
+ | | ''Сушен. дикие сливы'' | ||
+ | |- | ||
+ | | ''Кристальный фрукт (засушено)'' | ||
+ | | ''Сушен. кристальные фрукты'' | ||
+ | |- | ||
+ | | ''Фиолетовый гриб (засушено)'' | ||
+ | | ''Сушен. фиолетовые грибы'' | ||
+ | |- | ||
+ | | ''Древний плод (засушено)'' | ||
+ | | ''Сушен. древние фрукты'' | ||
+ | |- | ||
+ | | ''Яблоко (засушено)'' | ||
+ | | ''Сушен. яблоки'' | ||
+ | |- | ||
+ | | ''Абрикос (засушено)'' | ||
+ | | ''Сушен. абрикосы'' | ||
+ | |- | ||
+ | | ''Апельсин (засушено)'' | ||
+ | | ''Сушен. апельсины'' | ||
+ | |- | ||
+ | | ''Персик (засушено)'' | ||
+ | | ''Сушен. персики'' | ||
+ | |- | ||
+ | | ''Гранат (засушено)'' | ||
+ | | ''Сушен. гранаты'' | ||
+ | |- | ||
+ | | ''Ананас (засушено)'' | ||
+ | | ''Сушен. ананасы'' | ||
+ | |- | ||
+ | | ''Магмовый гриб (засушено)'' | ||
+ | | ''Сушен. магмовые грибы'' | ||
+ | |- | ||
+ | | ''Фрукт Ки (засушено)'' | ||
+ | | ''Сушен. фрукты Ки'' | ||
+ | |- | ||
+ | | ''Кокос (засушено)'' | ||
+ | | ''Сушен. кокосы'' | ||
+ | |- | ||
+ | | ''Плод кактуса (засушено)'' | ||
+ | | ''Сушен. плоды кактуса'' | ||
+ | |- | ||
+ | | ''Банан (засушено)'' | ||
+ | | ''Сушен. бананы'' | ||
+ | |- | ||
+ | | [[Far Away Stone]] | ||
+ | | ''Камень издалека'' | ||
+ | | ''Камень из далеких земель'' | ||
+ | |- | ||
+ | | [[Fish Taco]] | ||
+ | | ''Рыбный тако'' | ||
+ | | ''Рыбное тако'' | ||
+ | |- | ||
+ | | [[Glacierfish Jr.]] | ||
+ | | ''Ледорыб Мл.'' | ||
+ | | ''Ледорыб Младший'' | ||
+ | |- | ||
+ | | [[Green Canes]] | ||
| ''Зеленый тростник'' | | ''Зеленый тростник'' | ||
| ''Зеленые тросточки'' | | ''Зеленые тросточки'' | ||
+ | |- | ||
+ | | [[Juice|Tomato Juice]] | ||
+ | | ''Сок (Помидор)'' | ||
+ | | ''Сок (Томат)'' | ||
+ | |- | ||
+ | | [[Mini-Shipping Bin]] | ||
+ | | ''Мини-ящик для отгрузок'' | ||
+ | | ''Мини-ящик для отгрузки'' | ||
|- | |- | ||
| [[Mixed Cane]] | | [[Mixed Cane]] | ||
Line 1,028: | Line 1,365: | ||
| ''Масло Чеснока'' | | ''Масло Чеснока'' | ||
| ''Чесночное масло'' | | ''Чесночное масло'' | ||
+ | |- | ||
+ | | rowspan="5"| [[Jellies and Pickles|Pickles]] | ||
+ | | ''Маринованные консервы: {{t|item name}}'' | ||
+ | | ''Маринов. {{t|item name}}'' | ||
+ | |- | ||
+ | | ''Маринованные консервы: Помидор'' | ||
+ | | ''Маринов. помидоры'' | ||
+ | |- | ||
+ | | ''Маринованные консервы: Съедобный папоротник'' | ||
+ | | ''Маринов. папоротник'' | ||
+ | |- | ||
+ | | ''Маринованные консервы: Неизмельченный рис'' | ||
+ | | ''Маринов. рис'' | ||
+ | |- | ||
+ | | ''Маринованные консервы: Баклажан'' | ||
+ | | ''Маринов. баклажаны'' | ||
+ | |- | ||
+ | |rowspan="25"| [[Smoked Fish]] | ||
+ | | ''{{t|item name}} (закопчено)'' | ||
+ | | ''Копченый {{t|item name}}'' | ||
+ | |- | ||
+ | | ''Рыба-еж (закопчено)'' | ||
+ | | ''Копченая рыба-еж'' | ||
+ | |- | ||
+ | | ''Сардина (закопчено)'' | ||
+ | | ''Копченая сардина'' | ||
+ | |- | ||
+ | | ''Радужная форель (закопчено)'' | ||
+ | | ''Копченая радужная форель'' | ||
+ | |- | ||
+ | | ''Щука (закопчено)'' | ||
+ | | ''Копченая щука'' | ||
+ | |- | ||
+ | | ''Барабулька (закопчено)'' | ||
+ | | ''Копченая барабулька'' | ||
+ | |- | ||
+ | | ''Сельдь (закопчено)'' | ||
+ | | ''Копченая сельдь'' | ||
+ | |- | ||
+ | | ''Рыба-камень (закопчено)'' | ||
+ | | ''Копченая рыба-камень'' | ||
+ | |- | ||
+ | | ''Багрянник (закопчено)'' | ||
+ | | ''Копченый Багрянник'' | ||
+ | |- | ||
+ | | ''Морской черт (закопчено)'' | ||
+ | | ''Копченый Морской черт'' | ||
+ | |- | ||
+ | | ''Легенда (закопчено)'' | ||
+ | | ''Копченая Легенда'' | ||
+ | |- | ||
+ | | ''Мелкая камбала (закопчено)'' | ||
+ | | ''Копченая мелкая камбала'' | ||
+ | |- | ||
+ | | ''Карп-мутант (закопчено)'' | ||
+ | | ''Копченый Карп-мутант'' | ||
+ | |- | ||
+ | | ''Тигровая форель (закопчено)'' | ||
+ | | ''Копченая тигровая форель'' | ||
+ | |- | ||
+ | | ''Тиляпия (закопчено)'' | ||
+ | | ''Копченая тиляпия'' | ||
+ | |- | ||
+ | | ''Дорада (закопчено)'' | ||
+ | | ''Копченая дорада'' | ||
+ | |- | ||
+ | | ''Камбала (закопчено)'' | ||
+ | | ''Копченая камбала'' | ||
+ | |- | ||
+ | | ''Ледорыб (закопчено)'' | ||
+ | | ''Копченый Ледорыб'' | ||
+ | |- | ||
+ | | ''Жуть-рыба (закопчено)'' | ||
+ | | ''Копченая жуть-рыба'' | ||
+ | |- | ||
+ | | ''Рыба-пузырь (закопчено)'' | ||
+ | | ''Копченая рыба-пузырь'' | ||
+ | |- | ||
+ | | ''Малек Багрянника (закопчено)'' | ||
+ | | ''Копченый Малек Багрянника'' | ||
+ | |- | ||
+ | | ''Мисс Морской черт (закопчено)'' | ||
+ | | ''Копченая Мисс Морской черт'' | ||
+ | |- | ||
+ | | ''Легенда II (закопчено)'' | ||
+ | | ''Копченая Легенда II'' | ||
+ | |- | ||
+ | | ''Радиоактивный карп (закопчено)'' | ||
+ | | ''Копченый Радиоактивный карп'' | ||
+ | |- | ||
+ | | ''Ледорыб Младший (закопчено)'' | ||
+ | | ''Копченый Ледорыб Младший'' | ||
|- | |- | ||
| [[Son of Crimsonfish]] | | [[Son of Crimsonfish]] | ||
Line 1,048: | Line 1,477: | ||
| ''Искусство крабства'' | | ''Искусство крабства'' | ||
| ''Краболовное искусство'' | | ''Краболовное искусство'' | ||
+ | |- | ||
+ | | [[Unmilled Rice]] | ||
+ | | ''Неизмельченный рис'' | ||
+ | | ''Неочищенный рис'' | ||
|- | |- | ||
| [[Way Of The Wind pt. 1]] | | [[Way Of The Wind pt. 1]] | ||
Line 1,056: | Line 1,489: | ||
| ''Путь Ветра, ч. 2'' | | ''Путь Ветра, ч. 2'' | ||
| ''Путь Ветра, том 2'' | | ''Путь Ветра, том 2'' | ||
+ | |- | ||
+ | | [[Wild Plum]] | ||
+ | | ''Черная слива'' | ||
+ | | ''Дикая слива'' | ||
|} | |} | ||
Line 1,185: | Line 1,622: | ||
| ''Şerbetçi Otu Yetiştirici'' | | ''Şerbetçi Otu Yetiştirici'' | ||
|- | |- | ||
− | | [[Jelly]] | + | | [[Jellies and Pickles|Jelly]] |
| ''Marmelat'' | | ''Marmelat'' | ||
| ''Reçel'' | | ''Reçel'' | ||
Line 1,373: | Line 1,810: | ||
| ''Темный Коврик'' | | ''Темный Коврик'' | ||
| ''Темный ковер'' | | ''Темный ковер'' | ||
+ | |- | ||
+ | | [[Decorative Trash Can]] | ||
+ | | ''Декоративная мусорка'' | ||
+ | | ''Декоративный мусорный бак'' | ||
|- | |- | ||
| [[Deluxe Tree]] | | [[Deluxe Tree]] | ||
Line 2,290: | Line 2,731: | ||
| ''Magma Tayfı'' | | ''Magma Tayfı'' | ||
|} | |} | ||
+ | |||
+ | ==See also== | ||
+ | * The {{version|1.6.9|1.6.9 release notes}} list many smaller technical changes not covered on this page. | ||
+ | |||
+ | [[tr:Modlama:Stardew Valley 1.6.9'a Aktarım]] |
Latest revision as of 14:45, 24 September 2024
This page is for mod authors. Players: see Modding:Mod compatibility instead.
This page explains how to update your mods for compatibility with Stardew Valley 1.6.9, and documents some of the changes and new functionality. See also Migrate to Stardew Valley 1.6.
FAQs
What's changing?
Stardew Valley 1.6.9 contains many smaller changes for mods after the major 1.6 update.
Is this the modapocalypse?
No. The vast majority of mods should be unaffected by the changes in 1.6.9, and SMAPI will automatically rewrite most mods that are.
How to update your mod
Most mods won't need any changes. Here's a suggested 'quick start' guide to update a mod for Stardew Valley 1.6.9.
- For C# mods:
-
- If you haven't already, update the mod for Stardew Valley 1.6.0.
- Rebuild the solution.
- Fix any build errors. You can search this page for relevant info as needed.
- Test to make sure the mod works.
- Skim through the changes below, and check any section that might be relevant to the mod.
- For Content Patcher packs:
-
- If you haven't already, follow the Content Patcher migration guide until your content pack has
"Format": "2.3.0"
.
Do not skip this step! Content Patcher will assume your content pack is pre-1.6 if you don't, which can cause confusing errors if you already updated it. - Skim through the changes below, and check any section that might be relevant to the mod.
- If you haven't already, follow the Content Patcher migration guide until your content pack has
- For content packs which use another framework:
- See the documentation for the framework mod. Often you won't need to update the content pack if the framework mod itself was updated.
Changes for all mods
Dialogue changes
- 1.6.9 adds several new dialogue keys:
asset key format description Characters/Dialogue/<name> AcceptBirthdayGift_ <taste>
_<context tag>
(Optional) Shown when the NPC receives a birthday gift with the specified gift taste and context tag. See AcceptGift_ <taste>
for valid gift tastes.This is checked immediately before the AcceptBirthdayGift_
<context tag>
key added in 1.6.AcceptGift_ <taste>
_<context tag>
(Optional) Shown when the NPC receives a non-birthday gift with the specified gift taste and context tag. See AcceptGift_ <taste>
for valid gift tastes.This is checked immediately before the AcceptGift_
<context tag>
key added in 1.6.AcceptGift_ <taste>
(Optional) Shown when the NPC receives a gift with the specified gift taste. The <taste>
can be a specific taste level (Loved, Liked, Neutral, Disliked, or Hated), Positive (neutral/liked/loved), or Negative (disliked/hated).This is checked after all AcceptGift_* keys added in 1.6.
AcceptGift (Optional) Shown when the NPC receives a non-birthday gift, if no other AcceptGift_* dialogue key was found. RejectBouquet_AlreadyAccepted_Engaged
RejectBouquet_AlreadyAccepted_Married
RejectBouquet_AlreadyAccepted(Optional) Shown when the player gives a bouquet to an NPC who already accepted one from them. RejectMermaidPendant_AlreadyAccepted_Engaged
RejectMermaidPendant_AlreadyAccepted_Married
RejectMermaidPendant_AlreadyAccepted(Optional) Shown when the player gives a mermaid's pendant to an NPC who already accepted one from them. RejectRoommateProposal_AlreadyAccepted
RejectRoommateProposal_NpcWithSomeoneElse
RejectRoommateProposal_PlayerWithSomeoneElse
RejectRoommateProposal_LowFriendship
RejectRoommateProposal_SmallHouse(Optional) Shown when the NPC rejects a roommate proposal because the player doesn't meet a specific requirement: - AlreadyAccepted: the NPC is already a roommate with this player.
- NpcWithSomeoneElse: the NPC is already a roommate with another player.
- PlayerWithSomeoneElse: the player making the proposal already has a roommate.
- LowFriendship: the player doesn't have 10+ hearts with the NPC.
- SmallHouse: the player hasn't upgraded their house yet.
RejectRoommateProposal (Optional) Shown when the NPC rejects a roommate proposal, if a more specific RejectRoommateProposal_* dialogue wasn't found. - When using the $y dialogue command, you can now escape asterisks. For example, A*B will split A and B into separate dialogue boxes like before, but A**B will be shown with a single literal asterisk.
Game state query changes
- 1.6.9 adds some new game state queries:
Condition effect DATE_RANGE <min season>
<min day>
<min year>
[max season]
[max day]
[max year]
Whether the calendar date is within the specified range, inclusively. The max values default to winter (season), 28 (day), and unlimited (year) if omitted. For example, between summer 15 and winter 15 in year one:
DATE_RANGE Summer 15 1 Winter 15 1
Or fall 15 or later:
DATE_RANGE Fall 15 1
PLAYER_BASE_COMBAT_LEVEL
PLAYER_BASE_FARMING_LEVEL
PLAYER_BASE_FISHING_LEVEL
PLAYER_BASE_FORAGING_LEVEL
PLAYER_BASE_LUCK_LEVEL
PLAYER_BASE_MINING_LEVELSame as the non-BASE queries, but ignores buffs which change skill levels. PLAYER_HAS_TRINKET <player>
+<trinket ID>
+Whether the specified player(s) have one of the listed trinkets equipped. Each ID can be a qualified or unqualified item ID. - You can now check multiple values in more queries, like
PLAYER_HAS_CAUGHT_FISH Current 128 139
for pufferfish or salmon. This affects PLAYER_HAS_BUFF, PLAYER_HAS_CAUGHT_FISH, PLAYER_HAS_CONVERSATION_TOPIC, PLAYER_HAS_DIALOGUE_ANSWER, PLAYER_HAS_HEARD_SONG, PLAYER_HAS_RUN_TRIGGER_ACTION, PLAYER_HAS_SEEN_EVENT, PLAYER_SPECIAL_ORDER_ACTIVE, PLAYER_SPECIAL_ORDER_RULE_ACTIVE, and PLAYER_SPECIAL_ORDER_COMPLETE.
Debug command changes
- All debug commands now validate their arguments.
- Improved error-handling in many cases.
- 1.6.9 adds some new debug command:
command description listLights Show debug info about all currently active light sources. logWallAndFloorWarnings Enable debug logs when applying wallpaper and flooring to a farmhouse (or other decoratable location) to help troubleshoot cases where they don't work with a custom map. You'd usually enable this before loading the save. whereIsItem,
whereItemList all items matching the given item ID or name in the save. For example:
> debug whereItem "Watering Can" Found 1 item matching name 'Watering Can': - Farm > Shed at 50, 14 > Shed149bae63-2add-4ab6-a5aa-b3bd76372004 > Chest at 4, 4 > Watering Can ((T)CopperWateringCan)
worldMapPosition [includeLog]
Show detailed info to help troubleshoot world map positioning data. If [includeLog]
is true, it will print a detailed log of how the current position was determined based on the Data/WorldMap entries. - These have been removed:
command notes buildCoop Replaced by debug build coop. - These have been improved:
command changes build The building type is now case-insensitive, and will list fuzzy matches if an exact match isn't found. event The dontClearEvent option (default false) has been replaced by clearEventsSeen (default true), and no longer treats any value as true. furniture Now allows non-numeric furniture IDs. growCrops Now affects crops in garden pots. holdItem Added an optional [showMessage]
boolean argument to show the item-received message after playing the hold-item animation.item The item ID argument is now required. mineLevel Added an optional [layout]
argument, which can be set to the layout number in Content/Maps/Mines. For example,debug mineLevel 101 47
warps to mine level 101 using layout 47.setUpFarm The clearMore argument no longer treats any value as true. spreadSeeds Now affects crops in garden pots. warpCharacterTo Added a separate argument for the NPC's facing direction, instead of using the Y argument. water Now affects crops in garden pots.
Translation changes
- Many of the 1.6 translations were moved from Strings/1_6_Strings into Strings/BigCraftables, Strings/Objects, and Strings/Tools.
- Tool names/descriptions were moved from Strings/StringsFromCSFiles into a new Strings/Tools asset. Dynamic tool names (like "Gold {0}") have also been replaced by specific names (like "Gold Axe") to allow fixing awkward translations.
Building data changes
1.6.9 adds a new field in Data/Buildings, for indoor item entries:
field | effect |
---|---|
ClearTile | (Optional) Whether to remove any item on the target tile, except for one matching the indoor item's ItemId. The previous contents of the tile will be moved into the lost and found if applicable. Default true. |
Farm animal data changes
1.6.9 adds a new field in Data/FarmAnimals:
field | effect |
---|---|
Shadow | (Optional) The shadow to draw under the farm animal, if a more specific field like ShadowWhenAdult doesn't apply. Defaults to omitted. |
Fish pond data changes
Added new fields:
field | effect | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
MaxPopulation | (Optional) The maximum number of fish that can live in this pond, whether added manually or through population growth. This can't exceed the hardcoded maximum of 10. If omitted, defaults to the maximum based on PopulationGates. | ||||||||||||
WaterColor | (Optional) The color tint to apply to the water when this entry applies. If multiple are specified, the first matching entry is applied. If none match, the default water color is used.
This consists of a list of models with these fields:
| ||||||||||||
Rewards | This field already existed, but now has item spawn fields, conditions, and Id:
|
The former MinQuantity/MaxQuantity fields are now obsolete, and replaced by the standard MinStack/MaxStack item spawn fields. For content packs which set the old fields, the value will be applied to the new ones automatically instead.
Item data changes
In Data/Objects
- Added a new field:
field effect ColorOverlayFromNextIndex (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. - Object buffs can now also set these buff attributes: CombatLevel, AttackMultiplier, CriticalChanceMultiplier, CriticalPowerMultiplier, Immunity, KnockbackMultiplier, WeaponPrecisionMultiplier, and WeaponSpeedMultiplier.
- Flavor name translations like
Wine_Flavored_Name
can use a new {1} token for the lowercase name. - You can now customize the display name for specific flavor items. For example, the
Wine_Flavored_(O)282_Name
translation ("Cranberry Wine") overridesWine_Flavored_Name
("{0} Wine").
Item spawn fields
1.6.9 adds a new field for all item spawn fields:
field | effect |
---|---|
Color | (Optional) The tint color to apply to the produced item. Default none. |
Other
- For C# mods, the Object.displayNameFormat field can now use two new tokens: %DISPLAY_NAME_LOWERCASE and %PRESERVED_DISPLAY_NAME_LOWERCASE.
Machine data changes
1.6.9 fixes some issues with Data/Machines:
- The PreserveId field now supports the DROP_IN_PRESERVE token.
- The CopyColor field now works for any input item, even if it's not a ColoredObject (in which case it uses the color from its context tags).
- The CopyQuality field no longer disables QualityModifiers; those are now applied to the result of the copy.
Map property changes
1.6.9 adds new map properties:
property | explanation |
---|---|
AllowBeds <allowed> AllowMiniFridges <allowed>
|
Whether beds or mini-fridges can be placed in this location. This can be true or false. If specified, this bypasses the usual specific requirements (e.g. farmhouse upgrade level), though general furniture restrictions still apply (e.g. the 'placement restriction' field in Data/Furniture). |
Pet data changes
In Data/Pets, the Gifts field now uses item spawn fields (including conditions and item quality/color/name/etc). The previous QualifiedItemID and Stack fields are now deprecated, but content packs which set them should still work.
Tokenizable string changes
- Added new tokens:
token format output [CapitalizeFirstLetter <text>
]The input text, with the first letter capitalized. [ItemNameWithFlavor <flavor type>
<flavor ID>
]The translated display name for a flavored item name, where... <flavor type>
is one of AgedRoe, Bait, DriedFruit, DriedMushroom, Honey, Jelly, Juice, Pickle, Roe, SmokedFish, or Wine;<flavor ID>
is the qualified or qualified item ID for the flavor (e.g. the blueberry in blueberry wine).
- For C# mods with custom tokens, parsers now receive argument values with any escape characters from [EscapedText] stripped back out.
Tool data changes
In Data/Tools, the ApplyUpgradeLevelToDisplayName field no longer exists. Every tool now has its own name instead (see translation changes).
Trigger action changes
1.6.9 adds a new field in Data/TriggerActions:
field | effect |
---|---|
SkipPermanentlyCondition | (Optional) If set, a game state query which indicates that the action should be marked applied when this condition matches. This happens before Condition, Action, and Actions are applied.
This mainly allows optimizing cases where the action will never be applied, to avoid parsing the Condition each time. |
Changes for C# mods
Player changes
-
The Game1.getFarmer and Game1.getFarmerMaybeOffline methods are now obsolete and should no longer be used. They've been replaced by a unified Game1.GetPlayer method.
The old methods have inconsistent and sometimes counterintuitive behavior. For example, getFarmer(id) returns the main player if the target player is offline, which usually isn't the expected result. getFarmer also returns the main player given an invalid player ID, while getFarmerMaybeOffline returns null in that case. The new method matches offline players by default, returns null if the ID isn't found (so you can choose the best fallback behavior), and has full code docs and nullability annotations.
To migrate existing code:
old code migration Farmer player = Game1.getFarmer(id);
The exact equivalent is: Farmer player = Game1.GetPlayer(id, onlineOnly: true) ?? Game1.MasterPlayer;
However, most mods probably didn't expect it to work that way. Consider whether you meant this instead:
Farmer? player = Game1.GetPlayer(id);
Farmer? player = Game1.getFarmerMaybeOffline(id);
This is directly equivalent to: Farmer? player = Game1.GetPlayer(id);
- The Game1.player setter is now internal. Setting it causes side-effects that are typically unexpected by mod authors, which led to frequent errors and crashes. These are explained in its new code docs. Mods can still set it via reflection if they really want to.
Screen reader changes
1.6.9 adds fields to support screen reader mods. These let mods with custom UI elements add information which can be shown to blind players, without requiring an integration with each screen reader mod.
The main change is a new interface:
/// <summary>A UI element that provides information for screen readers.</summary>
/// <remarks>These values aren't displayed by the game; they're provided to allow for implementing screen reader mods.</remarks>
public interface IScreenReadable
{
/// <summary>If set, the translated text which represents this component for a screen reader. This may be the displayed text (for a text component), or an equivalent representation (e.g. "exit" for an 'X' button).</summary>
string ScreenReaderText { get; }
/// <summary>If set, a translated tooltip-like description for this component which can be displayed by screen readers, in addition to the <see cref="ScreenReaderText"/>.</summary>
string ScreenReaderDescription { get; }
/// <summary>Whether this is a purely visual component which should be ignored by screen readers.</summary>
bool ScreenReaderIgnore { get; }
}
This is implemented by ClickableComponent and OptionsElement, so you can add screen reader data to most UI elements out of the box.
Light source revamp
1.6.9 revamps how light sources are tracked:
- LightSource now has a required string ID (LightSource.Id), instead of the former optional numeric ID (LightSource.Identifier).
- Game1.currentLightSources is now a dictionary by ID. (You can still write Game1.currentLightSources.Add(light) like before if you add using StardewValley.Extensions.)
- Added unique IDs for every vanilla light source.
- Added validation warnings and auto-recovery for some issues.
- Added null handling in related helpers. For example, you can replace logic like
if (light != null) Utility.repositionLightSource(light.Id, position)
withUtility.repositionLightSource(light?.Id, position)
. - Added optional LightSource.onlyLocation field, which ensures that the light is only shown when viewing that location.
- Added code docs.
- Removed the TemporaryAnimatedSprite.light boolean field; the light is now enabled by setting the lightId field.
Quest event revamp
Previously, the game would call Game1.player.checkForQuestComplete with various arguments like string str
and int number2
, which had different behavior depending on the quest type.
These have been replaced with more specific methods like Quest.OnMonsterSlain, which...
- are more intuitive to use;
- receive more detailed info (e.g. the damage type when a monster is slain);
- and let custom quests handle multiple event types (e.g. both item crafted and item received).
The Farmer method has been replaced with a single NotifyQuests method, which performs an action on each quest and returns whether any quest was updated.
Here's how the old Quest methods map to the new ones. (The Farmer methods are the same thing, but just add Game1.player.NotifyQuests(quest => ...) around them.)
old code | new code |
---|---|
quest.checkForQuestComplete(n, -1, -1, null, null, Quests.Quest.type_socialize)
|
quest.OnNpcSocialized(npc)
|
quest.checkForQuestComplete(null, -1, -1, null, buildingType, Quests.Quest.type_building)
|
quest.OnBuildingFirstConstructed(buildingType)
|
quest.checkForQuestComplete(null, -1, numberCaught, null, itemId, Quest.type_fishing)
|
quest.OnFishCaught(itemId, numberCaught, size)
|
quest.checkForQuestComplete(null, -1, countAdded, item, null, Quest.type_harvest)
quest.checkForQuestComplete(null, -1, countAdded, actualItem, null, Quest.type_resource)
|
quest.OnItemReceived(item, countAdded)
|
quest.checkForQuestComplete(npc, -1, -1, item, "", Quests.Quest.type_harvest, Quests.Quest.type_itemDelivery)
|
quest.OnItemOfferedToNpc(npc, item)
|
quest.checkForQuestComplete(null, 1, 1, null, monster.Name, Quests.Quest.type_monster)
|
quest.OnMonsterSlain(location, monster, killedByBomb, isHutchSlime)
|
quest.checkForQuestComplete(null, -1, -1, crafted, null, Quests.Quest.type_crafting)
|
quest.OnRecipeCrafted(recipe, crafted)
|
quest.checkIfComplete(null, -1, -2, null, location.name)
|
quest.OnWarped(location)
|
New extension methods
The game has extension methods in the StardewValley.Extensions namespace. These add utility methods to more general types like strings.
1.6.9 adds some new extension methods:
type | method | usage |
---|---|---|
Dictionary<TKey, TValue> | TryAddMany | Add all the key/value pairs from another dictionary to this one, except for keys that already exist.
For example: // before 1.6.9
Dictionary<string, string> fields = new();
if (obj.customFields != null)
{
foreach ((string key, string value) in obj.customFields)
fields.TryAdd(key, value);
}
// after 1.6.9
Dictionary<string, string> fields = new();
fields.TryAddMany(obj.customFields);
|
string | ContainsIgnoreCase EqualsIgnoreCase IndexOfIgnoreCase StartsWithIgnoreCase EndsWithIgnoreCase |
Compare two strings case-insensitively.
For example: // before 1.6.9
if (string.Equals(left, right, StringComparison.OrdinalIgnoreCase))
...
// after 1.6.9
if (left.EqualsIgnoreCase(right))
...
The new methods also handle null as you'd expect. For example, left.EqualsIgnoreCase(right) will be true if both are null. |
SyntaxAbstractor
⚠ This is highly specialized. It's meant for vanilla unit tests, so it may not handle non-vanilla text correctly and may change at any time.
The new SyntaxAbstractor class converts arbitrary text from content assets into language-independent syntax representations. These representations can be compared between languages to make sure they have the same sequence of commands, portraits, unlocalized metadata and delimiters, etc. This supports dialogue, event/festival, mail, and specific data formats.
For example:
SyntaxAbstractor abstractor = new();
// for an asset
string syntax = abstractor.ExtractSyntaxFor("Characters/Dialogue/Abigail", "Sun_old", "$p 17#I guess you think nothing would happen, right?$u|Maybe a wicked ghost would appear!"); // $p 17#text$u|text
// for a format
string syntax = abstractor.ExtractMailSyntax("Hey there!^I had some extra wood lying around... I thought maybe you could use it. Take care! ^ -Robin %item id (O)388 50 %%[#]A Gift From Robin"); // text%item id (O)388 50%%[#]text
// for arbitrary delimited data
string customData = "SomeKey/Example Title/An example description./Robin (O)788 Forest 110 81/-1/true/Hey, nice to see you!$h";
int[] textFields = [1, 2];
int[] dialogueFields = [6];
string syntax = abstractor.ExtractDelimitedDataSyntax(customData, '/', textFields, dialogueFields); // SomeKey/text/text/Robin (O)788 Forest 110 81/-1/true/text$h
This is meant for unit tests that compare translations with the base text to make sure the basic format is the same. For unit tests, you'd usually use this through the TranslationValidator instead of directly.
TranslationValidator
The new TranslationValidator class compares translations to the original data, and returns a list of detected issues like missing or unknown keys, mismatched syntax, or malformed syntax (e.g. invalid gender-switch blocks).
For example, to validate a C# mod's translations:
// get translations
var translatedData = helper.Translation.GetTranslations().ToDictionary(p => p.Key);
// get base text
var baseData = new Dictionary<string, Translation>();
foreach (string key in translatedData.Keys)
{
if (helper.Translation.GetInAllLocales(key).TryGetValue("default", out Translation? baseText))
baseData[key] = baseText;
}
// assert all tests succeed
SyntaxAbstractor abstractor = new();
foreach (var issue in TranslationValidator.Compare(baseData, translatedData, element => element.Value, (key, value) => abstractor.ExtractDialogueSyntax(value)))
Assert.Fail($"Validation failed for '{issue.Key}': {issue.SuggestedError}.");
New utility fields & methods
1.6.9 adds many new utility methods and fields. For example:
member | usage |
---|---|
object dictionaries → GetValueOrDefault(…) | Object dictionaries (like GameLocation.objects) now implement the .NET GetValueOrDefault method, which lets you simplify common code:
// before 1.6.9
string? itemId = location.objects.TryGetValue(tile, out Object? obj)
? obj.ItemId
: null;
// after 1.6.9
string? itemId = location.objects.GetValueOrDefault(tile)?.ItemId;
|
Buff.customFields | The custom fields from the Data/Buffs and/or Data/Objects entry used to create the buff, if any. |
Bush.readyForHarvest() | Get whether this bush has berries or fruit to harvest. |
ClickableTextureComponent.drawLabel | Set whether the label should be drawn. This lets you add a label that's not rendered automatically. |
ColoredObject.TrySetColor(…) | Apply a tint color to an arbitrary item. This will change the input item directly if it's a ColoredObject, otherwise it'll create a new ColoredObject instance.
For example: Item inputItem = ItemRegistry.Create("(O)128"); // pufferfish
if (ColoredObject.TrySetColor(inputItem, Color.Red, out ColoredObject? coloredObj)) // coloredObj = red pufferfish
...;
|
CrabPot.NeedsBait(player) | Get whether the crab pot doesn't have bait, and bait is needed before it can catch anything based on the player's professions. |
Crop.replaceWithObjectOnFullGrown | If set, the qualified object ID to spawn on the crop's tile when it's full-grown. The crop will be removed when the object is spawned. |
Dialogue.GetFallbackForError(npc) Dialogue.GetFallbackTextForError() |
Get a translated default "..." dialogue, which is shown in cases where a valid dialogue couldn't be loaded. |
Event.TryResolveCommandName(…) | Get the actual event command name which matches an input command or alias name. This can be used to resolve an alias (like mailReceived → AddMailReceived) or normalize the capitalization (like itemnamed → ItemNamed).
For example: if (Event.TryResolveCommandName("mailRECEIVED", out string commandName))
...; // commandName = AddMailReceived
|
FarmHouse.GetFridgePositionFromMap() | Get the position of the map fridge by scanning the map tiles. (Most code should use the cached fridgePosition field instead.) |
Game1.IsHudDrawn | Whether HUD elements like the toolbar are currently visible. |
Game1.locationData | A cached view of the Data/Locations asset. |
GameLocation.CanWakeUpHere() | Get whether a player can wake up in this location, instead of being warped home. |
GameLocation.ForEachDirt(…) | Perform an action for every tilled dirt in the location. You can optionally exclude dirt in garden pots.
For example: Game1.currentLocation.ForEachDirt(dirt =>
{
dirt.Pot?.Water();
dirt.state.Value = HoeDirt.watered;
return true;
});
|
GameLocation.GetHarvestSpawnedObjectQuality(…) | Get the quality to set when harvesting a spawned object like forage. |
GameLocation.OnHarvestedForage(…) | Grant foraging or farming XP when the player harvests forage, and any other behavior defined by mods. |
GameLocation.ParentBuilding | The building which contains this location, if applicable. This replaces the former GetContainingBuilding() method, to avoid iterating the parent location's building list each time. |
HoeDirt.Pot | The garden pot which holds the dirt, if applicable. This is set automatically by the game. |
Item.BaseName | If the item's Name contains temporary dynamic changes like the " Recipe" suffix for a recipe, the item name without those changes. |
Item.canBeShipped() | Get whether this item can be put in the shipping bin. This replaces the former Object.canBeShipped(), and returning true now works with any item type. |
Item.CopyFieldsFrom(otherItem) | Copy all fields from another item into the current one. This is equivalent to item.getOne(), except that you update an existing item instead. |
LocalizedContentManager.LoadStringReturnNullIfNotFound(…) | This method already existed, but now has optional substitution arguments and an optional localeFallback argument. |
LocalizedContentManager.LoadBaseStringOrNull(…) | Get the default English text for a translation path, or null if it's not found. |
Item.LearnRecipe() | Learn the recipe for this item (regardless of whether the recipe is in Data/CookingRecipes or Data/CraftingRecipes). |
MineShaft.IsGeneratedLevel(…) VolcanoDungeon.IsGeneratedLevel(…) |
These methods already existed before 1.6.9, but they now have overloads without the out parameters to simplify common logic. For example:
if (MineShaft.IsGeneratedLevel(location))
...;
|
NPC.CanSocializePerData(…) | Get whether social features (like birthdays, gift giving, friendship, and an entry in the social tab) should be enabled for an NPC, based on their entry in Data/Characters. This is equivalent to npc.CanSocialize, but doesn't need an instance of the NPC. |
Object.GetPreservedItemId() | Get the item ID which was preserved as part of this item (e.g. the tulip ID for tulip honey), if applicable. This is equivalent to item.preservedParentSheetIndex, except in special cases like wild honey where preservedParentSheetIndex is set to a non-item value like -1. |
Object.IsTextSign() | Get whether the object can have editable text which is shown on hover like a text sign. |
Object.GetObjectDisplayName(…) | Get the display name which would be set for an object, without needing to create an object instance. |
Raccoon.GetBundle() Raccoon.GetBundle(timesFed) |
Get the raccoon bundle that will be shown currently, or after completing a given number of bundles. |
Utility.fuzzySearchAll(…) | Find all matches for a search term based on fuzzy compare rules.
For example: IEnumerable<string> coopNames = Utility.FuzzySearchAll("coop", Game1.buildingData.Keys); // [ "Coop", "Big Coop", "Deluxe Coop" ]
|
WorldDate.GetDaysPlayed(…) | Get the total days for a given date from the start of the game, to allow for efficient date comparisons.
For example: int minDaysPlayed = WorldDate.GetDaysPlayed(year, season, dayOfMonth);
int actualDaysPlayed = Game1.Date.TotalDays;
if (actualDaysPlayed >= minDaysPlayed)
...;
|
New constants
1.6.9 adds new constants:
constant | usage |
---|---|
AchievementIds.* | The IDs for achievements in Data/Achievements. For example:
// before 1.6.9
if (player.achievements.Contains(34))
...;
// after 1.6.9
if (player.achievements.Contains(AchievementIds.FullShipment))
...;
|
Item.ErrorItemName | The "Error Item" name shown for invalid items. |
SpecialCurrencyDisplay.currency_qiGems SpecialCurrencyDisplay.currency_walnuts |
The currency types supported by the special currency display (shown in the top-left corner when you find a Qi gem or golden walnut). |
ForEachItem changes
The ForEachItem methods changed a bit in 1.6.9. (These methods iterate through every item in the world, and optionally remove/replace instances.)
Most mods aren't affected. This affects mods which use the advanced ForEachItem form (like Utility.ForEachItem((item, remove, replaceWith) => ...)
), or which implement custom item types which can contain other items. Mods which use the simple form (like Utility.ForEachItem(item => ...)
) don't need any changes.
The main changes are:
- The advanced forms now use a context object, which also provides the 'path' to the item. For example, an item inside a chest would have a path consisting of the location and chest:
Utility.ForEachItemContext(delegate(in ForEachItemContext context) { // remove pufferfish inside chests if (context.Item.QualifiedItemId == "(O)128" && context.GetPath().Last() is Chest) context.RemoveItem(); return true; });
The context must be passed by reference using the in keyword. This doesn't work with lambdas, so you'll need to adjust the format:
// ✘ lambda can't use 'in' Utility.ForEachItemContext(in context => { context.RemoveItem(); return true; }); // ✓ use method or local function bool HandleItem(in ForEachItemContext context) { context.RemoveItem(); return true; } Utility.ForEachItemContext(HandleItem); // ✓ use delegate Utility.ForEachItemContext(delegate(in ForEachItemContext context) { context.RemoveItem(); return true; });
- For custom items which override Item.ForEachItem, the method signature has changed from this:
/// <summary>Perform an action for each item contained within this item (e.g. items stored within a chest, item placed on a table, etc). This doesn't include the item itself.</summary> /// <param name="handler">The action to perform for each item.</param> /// <returns>Returns whether to continue iterating.</returns> bool ForEachItem(ForEachItemDelegate handler);
To this:
You should pass the getPath value to ForEachItemHelper methods./// <summary>Perform an action for each item contained within this item (e.g. items stored within a chest, item placed on a table, etc). This doesn't include the item itself.</summary> /// <param name="handler">The action to perform for each item.</param> /// <param name="getPath">The contextual path leading to this item (including the item), or <c>null</c> to treat this as the root.</param> /// <returns>Returns whether to continue iterating.</returns> bool ForEachItem(ForEachItemDelegate handler, GetForEachItemPathDelegate getPath);
OutputMethod changes in Data/Machines
If you have custom C# methods which are used in the OutputMethod field in Data/Machines, the method signature has changed in 1.6.9. You'll need to add the new Farmer player argument to your methods:
/// <summary>The method signature for a custom <see cref="MachineItemOutput.OutputMethod"/> method.</summary>
/// <param name="machine">The machine instance for which to produce output.</param>
/// <param name="inputItem">The item being dropped into the machine, if applicable.</param>
/// <param name="probe">Whether the machine is only checking the output that would be produced. If so, the input/machine shouldn't be changed and no animations/sounds should play.</param>
/// <param name="outputData">The item output data from <c>Data/Machines</c> for which output is being created, if applicable.</param>
/// <param name="player">The player interacting with the machine, if any.</param>
/// <param name="overrideMinutesUntilReady">The in-game minutes until the item will be ready to collect, if set. This overrides the equivalent fields in the machine data if set.</param>
/// <returns>Returns the item to produce, or <c>null</c> if none should be produced.</returns>
public delegate Item MachineOutputDelegate(Object machine, Item inputItem, bool probe, MachineItemOutput outputData, Farmer player, out int? overrideMinutesUntilReady);
Changes for SMAPI and external tools
Content hashes
The game now has a Content/ContentHashes.json file, which contains the MD5 hash for every vanilla content asset. This lets SMAPI, mod managers, and other tools auto-detect content files that are outdated, broken, missing, or replaced by XNB mods.
Name translation changes for wiki maintainers
Some in-game item or monster names were retranslated in some languages for clarity or correctness.
This list is mostly provided to help wiki maintainers update pages, so it doesn't include names which only changed capitalization, changed '
(straight apostrophe) to ’
(curly) in French, or aren't visible to vanilla players (like mine rocks).
Objects
- English
item old name new name Jelly Cranberries Jelly Cranberry Jelly Juice Cranberries Juice Cranberry Juice Wine Cranberries Wine Cranberry Wine
- French
item old name new name Aerinite Aerinite Aérinite Blobfish Blobfish Poisson-blob Bone Mill Bone Moulin Moulin à os Cave Jelly Méduse des cavernes Gelée des cavernes Cookie Cookie Biscuit Dinosaur Mayonnaise Mayonnaise dinosaure Mayonnaise de dinosaure Dried Fruit Un morceau séché de abricot Un morceau séché d’abricot Un morceau séché de ananas Un morceau séché d’ananas Un morceau séché de orange Un morceau séché d’orange Fairy Rose Rose Féerie Rose de fée Fairy Seeds Graines de rose Féerie Graines de rose de fée Fiddlehead Fern Fougères de Fern Crosse de fougère Fiddlehead Risotto Risotto aux fougères Risotto aux crosses de fougère Granite Granite Granit Haley's Lost Bracelet Haley's Lost Bracelet Bracelet perdu de Haley Item Pedestal Item Pedestal Piédestal Jelly Gelée de abricot Gelée d’abricot Gelée de ananas Gelée d’ananas Gelée de orange Gelée d’orange Juice Jus de Ail Jus d’ail Jus de Amarante Jus d’amarante Jus de Artichaut Jus d’artichaut Jus de Aubergine Jus d’aubergine Jus de Igname Jus d’igname Maple Bar Gâteau à l'érable Gâteau d’érable Midnight Squid Calmar de minuit Calamar de minuit Qi Bean Haricot Qi Haricot de Qi Qi Fruit Fruit Qi Fruit de Qi Qi Gem Gemme Qi Gemmes de Qi River Jelly Méduse d’eau douce Gelée de rivière Sea Jelly Méduse de l’océan. Gelée de mer Squid Calmar Calamar Sweet Gem Berry Baie gemme sucrée Baie de gemme sucrée Targeted Bait Appât de Achigan à grande bouche Appât d’achigan à grande bouche Appât de Achigan à petite bouche Appât d’achigan à petite bouche Appât de Albacore Appât d’albacore Appât de Alose Appât d’alose Appât de Anchois Appât d’anchois Appât de Anguille Appât d’anguille Appât de Anguille de lave Appât d’anguille de lave Appât de Écrevisse Appât d’écrevisse Appât de Escargot Appât d’escargot Appât de Esturgeon Appât d’esturgeon Wine Vin de abricot Vin d’abricot Vin de ananas Vin d’ananas Vin de orange Vin d’orange
- German
item old name new name Artifact Trove Artefakt Fund Artefaktfund Calico Egg Calico Ei Calico-Ei Combat Quarterly Kampf-Vierteljahresschrift Kampf-Quartalsheft Curiosity Lure Neugierde Köder Neugierköder Deluxe Worm Bin Luxus-Wurmbehälter Luxus-Wurmeimer Dressed Spinner Verkleideter Dreher Verkleideter Spinner Farm Computer Hof Rechner Hof-Rechner Fireworks Fireworks (Grün) Feuerwerk (Grün) Goby Goby Grundeln Hot Java Ring Heißer Java Ring Heißer Java-Ring Item Pedestal Item Pedestal Gegenstand Podest Magma Cap Magma Hut Magmahut Mango Sticky Rice Mango Klebreis Mango-Klebreis Monster Compendium Monster Kompendium Monster-Kompendium Movie Ticket Kino Ticket Kinoticket Qi Fruit Qi Frucht Qi-Frucht Qi Gem Qi Edelstein Qi-Edelstein Raccoon Journal Waschbär Tagebuch Waschbär-Tagebuch Sonar Bobber Sonar Köder Sonarköder Spinner Dreher Spinner Stardew Valley Almanac Stardew Valley Almanach Sternentautaler Almanach Stardew Valley Rose Stardew Valley Rose Sternentautaler Rose Stardrop Tea Sternentropfen-Tee Sternenfall-Tee Tea Leaves Tee Blätter Teeblätter Tent Kit Zelt Bausatz Zelt-Bausatz Treasure Totem Schatz Totem Schatz-Totem Warp Totem: Desert Teleport Totem: Wüste Teleport-Totem: Wüste
- Hungarian
item old name new name Cave Jelly Barlangi medúza Barlangi zselé River Jelly Folyami medúza Folyami zselé Sea Jelly Tengeri medúza Tengeri zselé
- Italian
item old name new name Cave Jelly Medusa di grotta Gelatina di grotta Ginger Ale Ginger ale Liquore allo zenzero Haley's Lost Bracelet Haley's Lost Bracelet Braccialetto perduto di Haley Item Pedestal Item Pedestal Piedistallo per oggetto Rice Shoot Spara di riso Germoglio di riso River Jelly Medusa fluviale Gelatina fluviale Sea Jelly Medusa marina Gelatina marina
- Japanese
item old name new name Bone Mill クリスタルチェア 骨粉砕機 Cave Jelly 洞窟クラゲ 洞窟ゼリー Haley's Lost Bracelet Haley's Lost Bracelet ヘイリーがなくしたブレスレット Heavy Tapper Heavy Tapper 大型樹液採取器 Item Pedestal Item Pedestal アイテム用の台座 River Jelly 川クラゲ 川ゼリー Roe 明太子 魚卵 Sea Jelly 海クラゲ 海ゼリー Stone Cairn 石のカイム 石のケアン
- Korean
item old name new name Haley's Lost Bracelet Haley's Lost Bracelet 헤일리의 잃어버린 팔찌 Sunfish 개복치 선피쉬
- Russian
item old name new name Big Green Cane Большой зеленый тростник Большая зеленая трость Big Red Cane Большой красный тростник Большая красная трость Bok Choy Seeds Семена бок-чой Семена бок-чоя Chicken Decal Наклейка «Курица» Наклейка «Курицы» Crimsonfish Кримзонфиш Багрянник Dried Fruit <item name>
(засушено)Сушен. <item name>
Сморчок (засушено) Сушен. сморчки Лисичка (засушено) Сушен. лисички Острая ягода (засушено) Сушен. острые ягоды Шампиньон (засушено) Сушен. шампиньоны Черная слива (засушено) Сушен. дикие сливы Кристальный фрукт (засушено) Сушен. кристальные фрукты Фиолетовый гриб (засушено) Сушен. фиолетовые грибы Древний плод (засушено) Сушен. древние фрукты Яблоко (засушено) Сушен. яблоки Абрикос (засушено) Сушен. абрикосы Апельсин (засушено) Сушен. апельсины Персик (засушено) Сушен. персики Гранат (засушено) Сушен. гранаты Ананас (засушено) Сушен. ананасы Магмовый гриб (засушено) Сушен. магмовые грибы Фрукт Ки (засушено) Сушен. фрукты Ки Кокос (засушено) Сушен. кокосы Плод кактуса (засушено) Сушен. плоды кактуса Банан (засушено) Сушен. бананы Far Away Stone Камень издалека Камень из далеких земель Fish Taco Рыбный тако Рыбное тако Glacierfish Jr. Ледорыб Мл. Ледорыб Младший Green Canes Зеленый тростник Зеленые тросточки Tomato Juice Сок (Помидор) Сок (Томат) Mini-Shipping Bin Мини-ящик для отгрузок Мини-ящик для отгрузки Mixed Cane Смешанный тростник Смешанные тросточки Oil of Garlic Масло Чеснока Чесночное масло Pickles Маринованные консервы: <item name>
Маринов. <item name>
Маринованные консервы: Помидор Маринов. помидоры Маринованные консервы: Съедобный папоротник Маринов. папоротник Маринованные консервы: Неизмельченный рис Маринов. рис Маринованные консервы: Баклажан Маринов. баклажаны Smoked Fish <item name>
(закопчено)Копченый <item name>
Рыба-еж (закопчено) Копченая рыба-еж Сардина (закопчено) Копченая сардина Радужная форель (закопчено) Копченая радужная форель Щука (закопчено) Копченая щука Барабулька (закопчено) Копченая барабулька Сельдь (закопчено) Копченая сельдь Рыба-камень (закопчено) Копченая рыба-камень Багрянник (закопчено) Копченый Багрянник Морской черт (закопчено) Копченый Морской черт Легенда (закопчено) Копченая Легенда Мелкая камбала (закопчено) Копченая мелкая камбала Карп-мутант (закопчено) Копченый Карп-мутант Тигровая форель (закопчено) Копченая тигровая форель Тиляпия (закопчено) Копченая тиляпия Дорада (закопчено) Копченая дорада Камбала (закопчено) Копченая камбала Ледорыб (закопчено) Копченый Ледорыб Жуть-рыба (закопчено) Копченая жуть-рыба Рыба-пузырь (закопчено) Копченая рыба-пузырь Малек Багрянника (закопчено) Копченый Малек Багрянника Мисс Морской черт (закопчено) Копченая Мисс Морской черт Легенда II (закопчено) Копченая Легенда II Радиоактивный карп (закопчено) Копченый Радиоактивный карп Ледорыб Младший (закопчено) Копченый Ледорыб Младший Son of Crimsonfish Сын Кримзонфиш Малек Багрянника Statue of Endless Fortune Статуя Вечной Удачи Статуя бесконечной удачи Stonefish Камень-рыба Рыба-камень Tall Torch Стоячий факел Длинный факел The Art O' Crabbing Искусство крабства Краболовное искусство Unmilled Rice Неизмельченный рис Неочищенный рис Way Of The Wind pt. 1 Путь Ветра, ч. 1 Путь Ветра, том 1 Way Of The Wind pt. 2 Путь Ветра, ч. 2 Путь Ветра, том 2 Wild Plum Черная слива Дикая слива
- Spanish
item old name new name Glacierfish Jr. Pez glacial jóven Pez glacial joven Haley's Lost Bracelet Haley's Lost Bracelet El brazalete perdido de Haley Item Pedestal Item Pedestal Pedestal para objetos Stardrop Tea Té de fruta estelar. Té de fruta estelar Tent Kit Kit de tienda de campaña. Kit de tienda de campaña Treasure Totem Totem del tesoro Tótem del tesoro Warp Totem: Island Totem de teletransporte: Isla Tótem de teletransporte: Isla
- Turkish
item old name new name Algae Soup Yosun Çorbası Su Yosunu Çorbası Big Green Cane Büyük Yeşil Şekerkamışı Büyük Yeşil Şeker Kamışı Big Red Cane Büyük Kırmızı Şekerkamışı Büyük Kırmızı Şeker Kamışı Blueberry Yabanmersini Yaban Mersini Blueberry Seeds Yabanmersini Tohumu Yaban Mersini Tohumu Blueberry Tart Yabanmersinli Turta Yaban Mersinli Turta Broccoli Seeds Brokoli Tohumları Brokoli Tohumu Carrot Seeds Havuç Tohumları Havuç Tohumu Cask Fıçı Varil Caviar Hayvar Havyar Coleslaw Lahana Salatası Kırmızı Lahana Salatası Dark Sign Kara İşaret Kara Tabela Dried Sunflowers Kurumuş Ayçicekleri Kurumuş Ayçiçekleri Fiddlehead Fern Eğreltiotu Eğrelti Otu Fiddlehead Risotto Eğreltiotlu Pilav Eğrelti Otlu Pilav Haley's Lost Bracelet Haley's Lost Bracelet Haley'nin Kayıp Bileziği Goby Kayabalığı Taşbalığı Golden Pumpkin Altın Balkabağı Altın Bal Kabağı Green Canes Yeşil Şekerkamışları Yeşil Şeker Kamışları Hops Şerbetçiotu Şerbetçi Otu Hops Starter Şerbetçiotu Yetiştirici Şerbetçi Otu Yetiştirici Jelly Marmelat Reçel Loom Dokuma Tezgahı Dokuma Tezgâhı Magma Cap Mağma Mantarı Magma Mantarı Mixed Cane Renkli Şekerkamışları Renkli Şeker Kamışları Ostrich Egg Devekuşu Yumurtası Deve Kuşu Yumurtası Ostrich Incubator Devekuşu Kuluçka Makinesi Deve Kuşu Kuluçka Makinesi Poppyseed Muffin Haşhaşlı Börek Haşhaşlı Kek Powdermelon Seeds Kış Kavunu Tohumları Kış Kavunu Tohumu Plush Bunny Peluş Tavşan Pelüş Tavşan Pumpkin Balkabağı Bal Kabağı Pumpkin Seeds Balkabağı Tohumu Bal Kabağı Tohumu Queen Of Sauce Cookbook Sosun Kraliçesi Yemek Kitabı Soslar Kraliçesi Yemek Kitabı Rarecrows Hepsini bul! (1 Hepsini bul! (X/8)
(where X is the rarecrow number)Red Canes Kırmızı Şekerkamışları Kırmızı Şeker Kamışları Sloth Skeleton L Tembel Hayvan İskeleti Tembel Hayvan İskeleti (Sol) Sloth Skeleton M Tembel Hayvan İskeleti Tembel Hayvan İskeleti (Orta) Sloth Skeleton R Tembel Hayvan İskeleti Tembel Hayvan İskeleti (Sağ) Stardew Valley Almanac Stardew Valley Yıllığı Yıldızçiyi Vadisi Yıllığı Stuffing İç Doldurma Summer Squash Seeds Yaz Kabak Tohumları Yaz Kabağı Tohumu Workbench Çalışma Tezgahı Çalışma Tezgâhı
Furniture
- French
item old name new name Book Stack Pile de livres Tas de livres J. Cola Light "J. Cola Light" Enseigne murale lumineuse J.Cola Large Book Stack Grande pile de livres Grand tas de livres Midnight Beach Bed Lit Lit de plage nocturne Midnight Beach Double Bed Lit Lit double de plage nocturne Small Book Stack Petite pile de livres Petit tas de livres Wizard Bookshelf Bibliothèque de sorcier Étagère de sorcier
- Hungarian
item old name new name Midnight Beach Bed Ágy Éjféli strand ágy Midnight Beach Double Bed Dupla ágy Éjféli strand dupla ágy
- Italian
item old name new name Large Green Rug Tappeto verde gande Tappeto verde grande
- Russian
item old name new name Birch Lamp End Table Березовый приставной столик Березовый приставной столик с лампой Blossom Rug Цветочный коврик Цветочный ковер Bountiful Dining Table Изобильный обеденный стол Обеденный стол «Изобилие» Circular Junimo Rug Круглый коврик Джунимо Круглый ковер Джунимо 'Community Center' «Общественный центр» «Клуб» Curly Tree Изогнутое дерево Кудрявое дерево Dark Leafy Wall Panel Темная панель «Листва» Средняя панель «Листва» Dark Rug Темный Коврик Темный ковер Decorative Trash Can Декоративная мусорка Декоративный мусорный бак Deluxe Tree Элитное дерево Изысканное дерево Elixir Shelf Полка для эликсиров Полка с эликсирами Elixir Table Стол для эликсиров Стол с эликсирами Funky Rug Модный коврик Модный ковер Green Plush Seat Зеленое плюшевое сидение Зеленое плюшевое сиденье 'Groovy' «Клево» «Волнистые линии» Harvey Portrait Портрет Хэйли Портрет Харви Icy Rug Ледяной коврик Ледяной ковер Indoor Hanging Basket Комнатная висячая корзина Комнатная подвесная корзина J Джей Буква «J» 'Jade Hills Extended' «Нефритовые холмы» (расширенная версия) «Нефритовые холмы» (широкая версия) Joja Cola Tea Table Чайный столик Джоджа-кола Чайный столик «Джоджа-кола» 'Journey Of The Prairie King: The Motion Picture' «Путешествие Короля Прерий: Фильм» «Путешествие Короля прерий: Худ. фильм» Junimo Bag Сумка Джунимо Мешочек Джунимо Junimo Bundle Сверток Джунимо Узелок Джунимо Junimo Mat Мат Джунимо Коврик Джунимо Junimo Plaque Табличка Джунимо Пластина Джунимо Junimo Rug Коврик Джунимо Ковер Джунимо Junimo Wall Plaque Настенная табличка Джунимо Настенная пластина Джунимо Large Cottage Rug Большой домашний коврик Большой деревенский ковер Large Green Rug Большой зеленый коврик Большой зеленый ковер Large Joja Rug Большой коврик Джоджа Большой ковер Джоджа Large Red Rug Большой красный коврик Большой красный ковер Large Retro Rug Большой коврик «Ретро» Большой ковер «Ретро» Light Green Rug Коврик «Зеленые листья» Ковер «Зеленые листья» Light Leafy Wall Panel Светлая панель «Листва» Короткая панель «Листва» Log Panel Панель «Бревно» Бревенчатая панель Long Elixir Table Длинный стол для эликсиров Длинный стол с эликсирами Mahogany Lamp End Table Приставной столик из красного дерева Приставной столик из красного дерева с лампой Midnight Beach Bed Кровать Кровать «Полночь на пляже» Midnight Beach Double Bed Двуспальная кровать Двуспальная кровать «Полночь на пляже» Modern Fish Tank Современный аквариум Аквариум «Модерн» Modern Rug Современный коврик Ковер «Модерн» Oak Lamp End Table Дубовый приставной столик Дубовый приставной столик с лампой Old World Rug Старый протертый коврик Старый протертый ковер Patchwork Rug Лоскутный коврик Лоскутный ковер Pink Plush Seat Розовое плюшевое сидение Розовое плюшевое сиденье Retro Banner Плакат «Ретро» Баннер «Ретро» Retro Mat Мат «Ретро» Маленький коврик «Ретро» Retro Rug Коврик «Ретро» Ковер «Ретро» Small Book Pile Кучка книг Несколько книг Small Book Stack Стопочка книг Малая стопка книг Small Elixir Shelf Полочка для эликсиров Узкая полка с эликсирами Small Junimo Mat Маленький мат Джунимо Маленький коврик Джунимо Small Stacked Elixir Shelf Заставленная эликсирами полочка Двойная узкая полка с эликсирами Stacked Elixir Shelf Заставленная эликсирами полка Двойная полка с эликсирами Stacked Joja Boxes Куча коробок Джоджа Стопка коробок Джоджа Standing Geode Стоячая жеода Жеода на подставке Starry Double Bed Звездная двуспальная кровать Звездчатая двуспальная кровать Starry Moon Rug Коврик со звездной ночью Ковер «Звездная ночь» 'Sun #44' «Солнце №44» «Солнце № 44» 'Sun #45' «Солнце №45» «Солнце № 45» Swirl Rug Коврик с завихрениями Ковер с завихрениями 'VGA Paradise' «VGA-рай» «Рай VGA» Wallflower Pal Дружок у стенки Настенный дружок Wall Sconce Настенный канделябр Настенный светильник Walnut Lamp End Table Ореховый приставной столик Ореховый приставной столик с лампой Winter Tree Decal Наклейка «Зимнее дерево» Наклейка «Зимняя ель» Witch's Broom Метла ведьмы Ведьмина метла Wood Panel Панель «Дерево» Дощатая панель
- Spanish
item old name new name Modern Fish Tank Pecera mdoerna Pecera moderna
- Turkish
item old name new name Aquamarine Crystal Ball Deniz Yeşili Kristal Küre Gök Zümrüdü Kristal Küre Birch Dresser Huş Şifoniyer Huş Şifonyer Book Pile Kitap Yığını Yığılmış Kitaplar Green Cottage Rug Yeşil Baraka Yeşil Baraka Kilimi J. Cola Light Diyet J. Kola J. Kola Işığı Joja Crate Joja Sandığı Joja Kutusu Journey Of The Prairie King: The Motion Picture 'Çayır Kralı'nın Yolculuğu' 'Çayır Kralı'nın Yolculuğu: Sinema Filmi' Junimo Plush Peluş Junimo Pelüş Junimo Krobus Portrait Krobus'in Portresi Krobus'un Portresi Large Book Pile Büyük Kitap Yığını Büyük Yığılmış Kitaplar Large Joja Crate Büyük Joja Sandığı Büyük Joja Kutusu Leah Portrait Leah'ın Portresi Leah'nın Portresi Leah's Sculpture Leah'ın Heykeli Leah'nın Heykeli Mahogany Bench Mahun Oturak Maun Oturak Mahogany Chair Mahun Sandalye Maun Sandalye Mahogany Dining Table Mahun Yemek Masası Maun Yemek Masası Mahogany Dresser Mahun Şifoniyer Maun Şifonyer Mahogany End Table Mahun Komodin Maun Komodin Mahogany Table Mahun Masa Maun Masa Mahogany Tea-Table Mahun Sehpa Maun Sehpa Midnight Beach Bed Yatak Gece Yarısı Kumsallı Yatak Midnight Beach Double Bed Çift Kişilik Yatak Gece Yarısı Kumsallı Çift Kişilik Yatak Modern Rug Modern Kilim Modern Halı Oak Dresser Meşe Şifoniyer Meşe Şifonyer Pierre's Sign Pierre'nin Tabelası Pierre'in Tabelası Red Cottage Rug Kırmızı Baraka Kırmızı Baraka Kilimi Short Wizard Bookcase Küçük Büyücü Kitaplığı Kısa Büyücü Kitaplığı Small Book Pile Küçük Kitap Yığını Küçük Yığılmış Kitaplar Small Junimo Plush Küçük Junimo Peluşu Küçük Junimo Pelüşü Walnut Dresser Ceviz Şifoniyer Ceviz Şifonyer Wizard Bookshelf Büyücü Kitaplığı Büyücü Rafı
Hats
- French
- German
item old name new name Bucket Hat Fischerhut Bucket-Hut Panda Hat Panda Hat Panda-Hut
- Russian
item old name new name Arcane Hat Загадочная шляпа Таинственная шляпа Flat Topped Hat Канотье Капотен
- Spanish
item old name new name Gold Pan Sartén de Oro Cacerola de Oro Iridium Pan Sartén de Iridio Cacerola de Iridio Steel Pan Sartén de Acero Cacerola de Acero Totem Mask Máscara totem Máscara tótem
- Turkish
item old name new name Arcane Hat Gizemli Şapka Büyücü Şapkası Copper Pan Bakır Tava Bakır Eleme Tavası Flat Topped Hat Fötr Şapka Seyyah Şapkası
Pants
- German
item old name new name Island Bikini Island Bikini Insel Bikini Prismatic Pants Prismatic Pants Prisma Hose
Shirts
- French
item old name new name gender-variant shirts "(M)" suffix "(H)" suffix Island Bikini Island Bikini Bikini des îles
- German
item old name new name Hot Pink Shirt Hot Pink Shirt Pinkes Hemd
- Italian
item old name new name Island Bikini Island Bikini Bikini delle isole
- Japanese
item old name new name gender-variant shirts " (F)" and " (M)" suffixes "(女)" and "(男)" suffixes Island Bikini Island Bikini アイランドビキニ
- Korean
item old name new name gender-variant shirts "(F)" and "(M)" suffixes "(여)" and "(남)" suffixes Island Bikini Island Bikini 섬 비키니
- Russian
item old name new name Midnight Dog Jacket Куртка полночного пса Куртка полуночного пса Mineral Dog Jacket Минеральная куртка для собаки Куртка минерального пса Prismatic Shirt Призматичная рубашка Радужная рубашка
- Spanish
item old name new name Island Bikini Island Bikini Bikini isleño
- Turkish
item old name new name gender-variant shirts "(F)" and "(M)" suffixes "(K)" and "(E)" suffixes Aquamarine Shirt Deniz Yeşili Tişört Gök Zümrüdü Tişört Midnight Dog Jacket Geceyarısı Ceketi Gece Yarısı Ceketi Tan Striped Shirt Çizgili Tenrengi Tişört Çizgili Ten Rengi Tişört
Tools
- German
item old name new name upgradeable tools <level>
<tool>
(like Stahl-Axt)<level>
<tool>
(like StahlAxt)
- Hungarian
item old name new name upgradeable tools <level>
<tool>
(like Acél Balta)<level>
<tool>
(like Acélbalta)
- Japanese
item old name new name upgradeable tools <level>
<tool>
(like 鋼 オノ)<level>
の<tool>
(like 鋼のオノ)
- Korean
item old name new name Bamboo Pole 대나무 막대 대나무 낚싯대
- Russian
item old name new name upgradeable tools <tool>
(<level>
) (like Топор (Медь))<level>
<tool>
(like Медный топор)
- Spanish
item old name new name Advanced Iridium Rod Barra de Iridio Avanzada Caña de Iridio Avanzada
- Turkish
item old name new name Advanced Iridium Rod Gelişmiş İridyum Oltası Gelişmiş İridyum Olta Bamboo Pole Bambu Oltası Bambu Olta Fiberglass Rod Camyünü Oltası Camyünü Olta Iridium Rod İridyum Oltası İridyum Olta
Weapons
- Japanese
item old name new name Galaxy Hammer Galaxy Hammer ギャラクシーハンマー
- Turkish
item old name new name Elliott's Pencil Elliot'ın Kalemi Elliott'ın Kalemi
Monsters
- French
monster old name new name Pepper Rex Poivron Rex Poivrosaure Squid Kid Jeune calmar Tête flottante
- German
monster old name new name Magma Duggy Magma Schwenker Magma-Schwenker Magma Sparker Magma Sprenger Magma-Sprenger Magma Sprite Magma Wicht Magma-Wicht Wilderness Golem Golem der Wildnis Wildnis-Golem
- Hungarian
monster old name new name Carbon Ghost Szén szellem Szénszellem Iridium Bat Irídium denevér Irídiumdenevér Iridium Crab Irídium rák Irídiumrák Iridium Golem Wilderness Golem Vad gólem Lava Bat Láva denevér Lávadenevér Lava Crab Láva rák Lávarák Rock Crab Kő rák Kőrák Shadow Brute Árnyék állat Árnyékállat Shadow Shaman Árnyék sámán Árnyéksámán Tiger Slime Tigris ragacs Tigrisragacs Truffle Crab Rock Crab Kőrák
- Portuguese
monster old name new name Frost Jelly Geleia congelada Gosma Congelada Iridium Golem Wilderness Golem Golem Selvagem Pepper Rex Pimenta Rex Rex Pimenta Shadow Guy O cara das sombras Homem das Sombras Skeleton Mage Mago esqueleto Esqueleto Mago Skeleton Warrior Guerreiro esqueleto Esqueleto Guerreiro
- Russian
monster old name new name Carbon Ghost Углеродный признак Углеродный призрак Dwarvish Sentry Часовой дварфов Дварфийский часовой Iridium Golem Wilderness Golem Голем из глуши Shadow Shaman Шаман теней Теневой шаман Truffle Crab Rock Crab Каменный краб
- Turkish
monster old name new name Magma Duggy Mağma Kazılcası Magma Kazılcası Magma Sprite Mağma Tayfı Magma Tayfı
See also
- The 1.6.9 release notes list many smaller technical changes not covered on this page.