Changes

m
Line 1: Line 1:  
←[[Modding:Index|Index]]
 
←[[Modding:Index|Index]]
   −
'''This page is for modders. Players: see [[Modding:Mod compatibility]] instead.'''
+
{{Modder compatibility header}}
 
   
This page explains how to update your mods for compatibility with {{version|1.5|Stardew Valley 1.5}}, and documents some of the changes and new functionality.
 
This page explains how to update your mods for compatibility with {{version|1.5|Stardew Valley 1.5}}, and documents some of the changes and new functionality.
    
==For SMAPI mods==
 
==For SMAPI mods==
 
===Split-screen mode===
 
===Split-screen mode===
Stardew Valley 1.5 adds [[Multiplayer|split-screen local multiplayer]].
+
Stardew Valley 1.5 adds [[Multiplayer|split-screen local multiplayer]]. Most mods aren't affected in non-split-screen mode, and will work the same as before.
 
  −
Most mods aren't affected in non-split-screen mode, and will work the same as before.
      
In split-screen mode…
 
In split-screen mode…
   −
* '''Each screen runs within the same game instance''', so in-memory data (including those in your mod's class fields) are shared between all screens. The game swaps its own state automatically, but you can wrap fields with SMAPI's [[Modding:Modder Guide/APIs/Utilities#Per-screen data|<tt>PerScreen&lt;T&gt;</tt>]] utility if needed to auto-manage a separate value for each player.
+
* '''Each screen runs within the same game instance'''. The game automatically swaps the game state for the current player, but in-memory data from mods will be shared between all screens. You can wrap fields with SMAPI's [[Modding:Modder Guide/APIs/Utilities#Per-screen data|<samp>PerScreen&lt;T&gt;</samp>]] to have separate values for each player.
* '''Each screen has its own events''' (except <tt>GameLoop.GameLaunched</tt>). For example, with two active screens the <tt>GameLoop.UpdateTicked</tt> event happens twice per tick (120/second instead of 60/second).<p>You may need to update your mod code to account for events being raised for different players; you can use <tt>Context</tt> fields as needed to detect which player it is (like <tt>IsMainPlayer</tt>, <tt>IsSplitScreen</tt>, <tt>IsOnHostComputer</tt>, or <tt>PlayerIndex</tt>).</p>
+
* '''Each screen has its own events''' (except <samp>GameLoop.GameLaunched</samp>). For example, with two active screens the <samp>GameLoop.UpdateTicked</samp> event happens twice per tick (120/second instead of 60/second). You can use <samp>Context</samp> fields if you need to check which player it is (like <samp>IsMainPlayer</samp>, <samp>IsSplitScreen</samp>, <samp>IsOnHostComputer</samp>, or <samp>PlayerIndex</samp>).
* Split-screen is just normal multiplayer under the hood, which means '''multiplayer limitations still apply for split-screen farmhands'''. For example, even though they're running on the host computer, split-screen farmhands can only access synced locations (unless you manually access the host's stashed state).<p>The exception is SMAPI's save data API, which does work for farmhands on the host computer (but not remote farmhands).</p><p><tt>Context.IsMultiplayer</tt> returns true for split-screen multiplayer; you can use more specific fields like <tt>IsSplitScreen</tt>, <tt>HasRemotePlayers</tt>, or <tt>IsOnHostComputer</tt> if needed.</p>
+
* '''Multiplayer limitations still apply for split-screen farmhands''', since split-screen is just normal multiplayer under the hood. For example, even though they're running on the host computer, split-screen farmhands can only access synced locations (unless you manually access the host's stashed state). The exception is SMAPI's save data API, which does work for farmhands on the host computer (but not remote farmhands).
 +
* <samp>Context.IsMultiplayer</samp> returns true for split-screen multiplayer. You can use more specific fields like <samp>IsSplitScreen</samp>, <samp>HasRemotePlayers</samp>, or <samp>IsOnHostComputer</samp> if needed.
   −
===Custom item data===
+
===Custom mod data===
Each <tt>Character</tt>, <tt>GameLocation</tt>, <tt>Item</tt>, and <tt>TerrainFeature</tt> instance now has a <tt>modData</tt> dictionary field, which is persisted to the save file and synchronized in multiplayer. This can be used to store arbitrary mod data, including on the player itself via <tt>Game1.player.modData</tt>.
+
Each <samp>Character</samp>, <samp>GameLocation</samp>, <samp>Item</samp>, and <samp>TerrainFeature</samp> instance now has a <samp>modData</samp> dictionary field, which is persisted to the save file and synchronized in multiplayer. This can be used to store arbitrary mod data, including on the player itself via <samp>Game1.player.modData</samp>.
   −
When you split an item stack, the new stack copies the previous one's mod data; when merged into another stack, the merged items adopt the target stack's mod data. Otherwise mod data has no effect on item split/merge logic (e.g. you can still merge items with different mod data), unless overridden by a Harmony patch.
+
When you split an item stack, the new stack copies the previous one's mod data; when merged into another stack, the merged items adopt the target stack's mod data. Otherwise mod data has no effect on item split/merge logic (''e.g.,'' you can still merge items with different mod data), unless overridden by a Harmony patch.
    
'''Note:''' to avoid mod conflicts, prefixing data fields with your mod ID is strongly recommended:
 
'''Note:''' to avoid mod conflicts, prefixing data fields with your mod ID is strongly recommended:
   −
<source lang="C#">
+
<syntaxhighlight lang="C#">
 
item.modData[$"{this.ModManifest.UniqueID}/item-age"] = "30";
 
item.modData[$"{this.ModManifest.UniqueID}/item-age"] = "30";
</source>
+
</syntaxhighlight>
    
===UI scale changes===
 
===UI scale changes===
 +
: ''Main article: [[Modding:Modder Guide/Game Fundamentals#UI scaling]].''
 +
 
Stardew Valley 1.5 lets players change the UI scaling separate from the zoom level. What this means for mods depends on what they're doing.
 
Stardew Valley 1.5 lets players change the UI scaling separate from the zoom level. What this means for mods depends on what they're doing.
   Line 35: Line 35:  
:* menus;
 
:* menus;
 
:* HUD elements;
 
:* HUD elements;
:* SMAPI's <tt>RenderingActiveMenu</tt> and <tt>RenderedActiveMenu</tt> events;
+
:* SMAPI's <samp>RenderingActiveMenu</samp> and <samp>RenderedActiveMenu</samp> events;
:* SMAPI's <tt>Rendering</tt> and <tt>Rendered</tt> events in some contexts (check <tt>Game1.uiMode</tt>).
+
:* SMAPI's <samp>Rendering</samp> and <samp>Rendered</samp> events in some contexts (check <samp>Game1.uiMode</samp>).
    
: This does ''not'' affect…
 
: This does ''not'' affect…
:* the <tt>draw</tt> method for map objects, furniture, crops, etc placed in the world;
+
:* the <samp>draw</samp> method for map objects, furniture, crops, etc placed in the world;
 
:* code which only uses tile coordinates (not pixel coordinates).
 
:* code which only uses tile coordinates (not pixel coordinates).
   −
: You can test your mod by setting the zoom to maximum and the UI scale to minimum (i.e. have them at different values) or vice versa; in particular check any logic which handles pixel positions, like menus clicking. If everything looks fine, you can skip the rest of this section.
+
: You can test your mod by setting the zoom to maximum and the UI scale to minimum (''i.e.,'' have them at different values) or vice versa; in particular check any logic which handles pixel positions, like menus clicking. If everything looks fine, you can skip the rest of this section.
    
; What does this mean for affected mods?
 
; What does this mean for affected mods?
    
:* This introduces two UI-adjusted pixel [[Modding:Modder Guide/Game Fundamentals#Positions|coordinate systems]], one for absolute positions (relative to the top-left corner of the map) and one for screen positions (relative to the top-left corner of the screen). You should be careful not to mix them to avoid tricky calculations; for example, do all your work in one coordinate system and then convert them once.
 
:* This introduces two UI-adjusted pixel [[Modding:Modder Guide/Game Fundamentals#Positions|coordinate systems]], one for absolute positions (relative to the top-left corner of the map) and one for screen positions (relative to the top-left corner of the screen). You should be careful not to mix them to avoid tricky calculations; for example, do all your work in one coordinate system and then convert them once.
:* The game now has two distinct draw modes depending on the context: ''UI mode'' and ''non-UI mode''. You can check <tt>Game1.uiMode</tt> to know which mode is active. This affects which of the coordinate systems should be used to draw to the screen.<p>When drawing UI, you can indicate to the game that you want to use UI scaling. This has minimal performance impact if the game is already in UI mode, but you should avoid doing it unnecessarily if you know the code will always run in non-UI mode.</p><source lang="c#">Game1.game1.InUIMode(() =>
+
:* The game now has two distinct draw modes depending on the context: ''UI mode'' and ''non-UI mode''. You can check <samp>Game1.uiMode</samp> to know which mode is active. This affects which of the coordinate systems should be used to draw to the screen.<p>When drawing UI, you can indicate to the game that you want to use UI scaling. This has minimal performance impact if the game is already in UI mode, but you should avoid doing it unnecessarily if you know the code will always run in non-UI mode.</p><syntaxhighlight lang="c#">Game1.game1.InUIMode(() =>
 
{
 
{
 
   // your UI draw code here
 
   // your UI draw code here
 
});
 
});
</source>
+
</syntaxhighlight>
    
; How do I update affected code?
 
; How do I update affected code?
   −
:* Drawing something into the game world (e.g. a tile overlay) in UI mode will make things much more difficult. Consider drawing outside UI mode instead, e.g. by switching from SMAPI's <tt>Rendered</tt> event to <tt>RenderedWorld</tt>.
+
:* Drawing something into the game world (''e.g.,'' a tile overlay) in UI mode will make things much more difficult. Consider drawing outside UI mode instead, ''e.g.,'' by switching from SMAPI's <samp>Rendered</samp> event to <samp>RenderedWorld</samp>.
 
:* Be very careful about mixed coordinate systems. For example, a menu constructed outside the draw loop may initialize coordinates in non-UI mode, then handle clicks in UI mode. You may need to convert values to non-UI coordinates to check them in that case (see conversions below).
 
:* Be very careful about mixed coordinate systems. For example, a menu constructed outside the draw loop may initialize coordinates in non-UI mode, then handle clicks in UI mode. You may need to convert values to non-UI coordinates to check them in that case (see conversions below).
:* When drawing UI, in most cases you should replace <tt>Game1.viewport</tt> with <tt>Game1.uiViewport</tt>. These provide UI-adjusted pixel positions. '''Don't''' do this if you'll be adjusting the positions for UI scaling separately (see below), since double-conversion will give you incorrect results.
+
:* When drawing UI, in most cases you should replace <samp>Game1.viewport</samp> with <samp>Game1.uiViewport</samp>. These provide UI-adjusted pixel positions. '''Don't''' do this if you'll be adjusting the positions for UI scaling separately (see below), since double-conversion will give you incorrect results.
 
:* If you adjust pixel positions manually, see conversions below.
 
:* If you adjust pixel positions manually, see conversions below.
   Line 78: Line 78:     
===Chest inventory===
 
===Chest inventory===
Using <tt>chest.items</tt> and <tt>Chest.capacity</tt> to access chest inventory won't handle special cases like the [[Junimo Chest]] or [[Mini-Shipping Bin]]. Instead you should use <tt>chest.GetItemsForPlayer</tt> to get the item list, and <tt>chest.GetActualCapacity()</tt> to get the max capacity.
+
Using <samp>chest.items</samp> and <samp>Chest.capacity</samp> to access chest inventory won't handle special cases like the [[Junimo Chest]] or [[Mini-Shipping Bin]]. Instead you should use <samp>chest.GetItemsForPlayer</samp> to get the item list, and <samp>chest.GetActualCapacity()</samp> to get the max capacity.
    
===Paint buildings===
 
===Paint buildings===
Line 86: Line 86:     
The feature is based on two files:
 
The feature is based on two files:
* <tt>Data/PaintData</tt> lists the buildings which can be painted, the group names shown in the UI, and the relative ranges for the brightness slider. More info from the game developers: {{quote|To explain: the hue and saturation values are applied as is, but the brightness value is actually tracked as a "relative" brightness, i.e. a value halfway through the slider bar actually corresponds to a value that's lerped halfway between the lowest acceptable brightness and highest acceptable brightness.
+
* <samp>Data/PaintData</samp> lists the buildings which can be painted, the group names shown in the UI, and the relative ranges for the brightness slider. More info from the game developers: {{quote|To explain: the hue and saturation values are applied as is, but the brightness value is actually tracked as a "relative" brightness, ''i.e.,'' a value halfway through the slider bar actually corresponds to a value that's lerped halfway between the lowest acceptable brightness and highest acceptable brightness.
    
This is so that a single paint color will look generally the same when applied across multiple buildings, and is also used to ensure brightness values that are overbright or too dark aren't usable as they generally look bad. This is also used to prevent values that shade in weird ways.}}
 
This is so that a single paint color will look generally the same when applied across multiple buildings, and is also used to ensure brightness values that are overbright or too dark aren't usable as they generally look bad. This is also used to prevent values that shade in weird ways.}}
* Each paintable building also has a separate mask texture, like <tt>Buildings/Stable_PaintMask</tt> for the stable. The masks use three predefined colors: green (roof), blue (trim), and red (walls) matching the order in <tt>Data/PaintData</tt> (other colors are ignored). Groups don't need to be contiguous (e.g. you can have separate red areas).  
+
* Each paintable building also has a separate mask texture, like <samp>Buildings/Stable_PaintMask</samp> for the stable. The masks use three predefined colors: green (roof), blue (trim), and red (walls) matching the order in <samp>Data/PaintData</samp> (other colors are ignored). Groups don't need to be contiguous (''e.g.,'' you can have separate red areas).  
    
===Other breaking changes===
 
===Other breaking changes===
* The game's <tt>NetCollection&lt;T&gt;</tt> enumerator changed in a way that SMAPI can't easily rewrite. Affected mods only need to be recompiled to fix it.
+
* The game's <samp>NetCollection&lt;T&gt;</samp> enumerator changed in a way that SMAPI can't easily rewrite. Affected mods only need to be recompiled to fix it.
* The <tt>IsTileLocationOpen</tt> and <tt>isTileLocationOpenIgnoreFrontLayers</tt> methods now take tile coordinates instead of pixel coordinates.
+
* The <samp>IsTileLocationOpen</samp> and <samp>isTileLocationOpenIgnoreFrontLayers</samp> methods now take tile coordinates instead of pixel coordinates.
* Bundles can now be randomized, so you should read data from <tt>Game1.netWorldState.Value.BundleData</tt> instead of loading the <tt>Data\Bundles</tt> asset.
+
* Bundles can now be randomized, so you should read data from <samp>Game1.netWorldState.Value.BundleData</samp> instead of loading the <samp>Data\Bundles</samp> asset.
* The game now has per-location seasons/weather to support the Fern Islands. In many cases you may need to use methods like <tt>Game1.GetSeasonForLocation</tt>, <tt>Game1.IsRainingHere</tt>, etc instead of accessing the values like <tt>Game1.currentSeason</tt> directly.
+
* The game now has per-location seasons/weather to support the Fern Islands. In many cases you may need to use methods like <samp>Game1.GetSeasonForLocation</samp>, <samp>Game1.IsRainingHere</samp>, etc instead of accessing the values like <samp>Game1.currentSeason</samp> directly.
    
===Other notable changes===
 
===Other notable changes===
Line 103: Line 103:  
* See ''[[#For Content Patcher packs|For Content Patcher packs]]'' for content changes.
 
* See ''[[#For Content Patcher packs|For Content Patcher packs]]'' for content changes.
 
* Location changes:
 
* Location changes:
** All locations can now have furniture, resource clumps, and <tt>getWalls()</tt>.
+
** All locations can now have furniture, resource clumps, and <samp>getWalls()</samp>.
 
** The greenhouse is now always synced to farmhands in multiplayer.
 
** The greenhouse is now always synced to farmhands in multiplayer.
** Some furniture can now be placed outdoors or outside the farm (based on <tt>furniture.placementRestriction</tt>).
+
** Some furniture can now be placed outdoors or outside the farm (based on <samp>furniture.placementRestriction</samp>).
** Added <tt>location.treatAsOutdoors</tt> field.
+
** Added <samp>location.treatAsOutdoors</samp> field.
** Added <tt>LightSource.fishTankLight</tt> light source type, matching <tt>LooseSprites\Lighting\fishTankLight</tt>.
+
** Added <samp>LightSource.fishTankLight</samp> light source type, matching <samp>LooseSprites\Lighting\fishTankLight</samp>.
* New <tt>Utility</tt> methods:
+
* New <samp>Utility</samp> methods:
** <tt>ModifyTime</tt>: perform simple time calculations like <tt>ModifyTime(1250, 10) == 1300</tt>;
+
** <samp>ModifyTime</samp>: perform simple time calculations like <samp>ModifyTime(1250, 10) == 1300</samp>;
** <tt>AOrAn</tt>;
+
** <samp>AOrAn</samp>;
** <tt>ConvertMinutesToTime</tt>;
+
** <samp>ConvertMinutesToTime</samp>;
** <tt>forAllLocations</tt>;
+
** <samp>forAllLocations</samp>;
** <tt>getNumObjectsOfIndexWithinRectangle</tt>;
+
** <samp>getNumObjectsOfIndexWithinRectangle</samp>;
** <tt>fuzzyAnimalSearch</tt>;
+
** <samp>fuzzyAnimalSearch</samp>;
** <tt>getRandomBasicSeasonalForageItem</tt>;
+
** <samp>getRandomBasicSeasonalForageItem</samp>;
** <tt>HasAnyPlayerSeenSecretNote</tt>;
+
** <samp>HasAnyPlayerSeenSecretNote</samp>;
** <tt>RGBtoHSL</tt>, <tt>HSLtoRGB</tt>, <tt>QQHtoRGB</tt>;
+
** <samp>RGBtoHSL</samp>, <samp>HSLtoRGB</samp>, <samp>QQHtoRGB</samp>;
** <tt>ModifyCoordinateFromUIScale</tt>, <tt>ModifyCoordinatesFromUIScale</tt>, <tt>ModifyCoordinateForUIScale</tt>, <tt>ModifyCoordinatesForUIScale</tt>;
+
** <samp>ModifyCoordinateFromUIScale</samp>, <samp>ModifyCoordinatesFromUIScale</samp>, <samp>ModifyCoordinateForUIScale</samp>, <samp>ModifyCoordinatesForUIScale</samp>;
** <tt>IsHospitalVisitDay</tt>.
+
** <samp>IsHospitalVisitDay</samp>.
* New <tt>Farm</tt> methods:
+
* New <samp>Farm</samp> methods:
** <tt>doesFarmCaveNeedHarvesting</tt>;
+
** <samp>doesFarmCaveNeedHarvesting</samp>;
** <tt>getTotalCrops</tt>;
+
** <samp>getTotalCrops</samp>;
** <tt>getTotalCropsReadyforHarvest</tt>;
+
** <samp>getTotalCropsReadyforHarvest</samp>;
** <tt>getTotalGreenouseCropsReadyForHarvest</tt>;
+
** <samp>getTotalGreenouseCropsReadyForHarvest</samp>;
** <tt>getGreenhouseBuilding</tt>;
+
** <samp>getGreenhouseBuilding</samp>;
** <tt>getTotalOpenHoeDirt</tt>;
+
** <samp>getTotalOpenHoeDirt</samp>;
** <tt>getTotalForageItems</tt>;
+
** <samp>getTotalForageItems</samp>;
** <tt>getNumberOfMachinesReadyForHarvest</tt>.
+
** <samp>getNumberOfMachinesReadyForHarvest</samp>.
* New <tt>Furniture.GetFurnitureInstance</tt> method to create furniture without needing to hardcode the separate types for TVs, etc.
+
* New <samp>Furniture.GetFurnitureInstance</samp> method to create furniture without needing to hardcode the separate types for TVs, etc.
* <tt>Farmer</tt> changes:
+
* <samp>Farmer</samp> changes:
** <tt>Farmer.addItemToInventory</tt> now returns a list of item stacks in the player's inventory to which items were added.
+
** <samp>Farmer.addItemToInventory</samp> now returns a list of item stacks in the player's inventory to which items were added.
* <tt>Game1</tt> changes:
+
* <samp>Game1</samp> changes:
** Added <tt>Game1.setMousePosition</tt>.
+
** Added <samp>Game1.setMousePosition</samp>.
* Changed <tt>Utility.GetPrismaticColor</tt> to take an optional speed multiplier.
+
* Changed <samp>Utility.GetPrismaticColor</samp> to take an optional speed multiplier.
* Added <tt>Farmer.IsBusyDoingSomething()</tt> method.
+
* Added <samp>Farmer.IsBusyDoingSomething()</samp> method.
* Added a new <tt>LikeLevel</tt> enum for gift tastes.
+
* Added a new <samp>LikeLevel</samp> enum for gift tastes.
 
* Dialogue changes:
 
* Dialogue changes:
** You can now specify a custom portrait texture when calling <tt>Game1.drawDialogue</tt>.
+
** You can now specify a custom portrait texture when calling <samp>Game1.drawDialogue</samp>.
** You can now set <tt>dialogue.onFinish</tt> to do something when the dialogue closes.
+
** You can now set <samp>dialogue.onFinish</samp> to do something when the dialogue closes.
* Added <tt>object.isEssentialItem()</tt>, which prevents the item from sinking and considers the player always in range for magnetism.
+
* Added <samp>object.isEssentialItem()</samp>, which prevents the item from sinking and considers the player always in range for magnetism.
* Added <tt>Debris.DebrisType</tt> field (<tt>ARCHAEOLOGY</tt> or <tt>OBJECT</tt>).
+
* Added <samp>Debris.DebrisType</samp> field (<samp>ARCHAEOLOGY</samp> or <samp>OBJECT</samp>).
* Added <tt>Event.eventPositionTileOffset</tt> field, which adjusts any tile positions referenced by event by the specified amount. For example, this is used to offset farm events to match the farmhouse position. This is ignored if the event has the <tt>ignoreEventTileOffset</tt> command. (Some hardcoded sprite positions aren't adjusted.)
+
* Added <samp>Event.eventPositionTileOffset</samp> field, which adjusts any tile positions referenced by event by the specified amount. For example, this is used to offset farm events to match the farmhouse position. This is ignored if the event has the <samp>ignoreEventTileOffset</samp> command. (Some hardcoded sprite positions aren't adjusted.)
    
===Debug command changes===
 
===Debug command changes===
This section is mainly intended for wiki maintainers; see [[Modding:Debug commands]] for the general documentation.
+
This section is mainly intended for wiki maintainers; see [[Modding:Console commands]] for the general documentation.
    
* Added commands:
 
* Added commands:
** <tt>boatjourney</tt>: start the BoatJourney minigame.
+
** <samp>boatjourney</samp>: start the BoatJourney minigame.
** <tt>bpm</tt>: show the building painting menu for the building immediately north of the player, or for the farmhouse if no such building is found.
+
** <samp>bpm</samp>: show the building painting menu for the building immediately north of the player, or for the farmhouse if no such building is found.
** <tt>broadcastMailbox</tt>: send a given letter ID to all players and adds it retroactively to any players who join the game afterwards.
+
** <samp>broadcastMailbox</samp>: send a given letter ID to all players and adds it retroactively to any players who join the game afterwards.
** <tt>completespecialorders</tt> / <tt>cso</tt>: marks every objective for every open special order complete.
+
** <samp>completespecialorders</samp> / <samp>cso</samp>: marks every objective for every open special order complete.
** <tt>crib</tt>: change crib style in the farmhouse.
+
** <samp>crib</samp>: change crib style in the farmhouse.
** <tt>darts</tt>: start the darts minigame.
+
** <samp>darts</samp>: start the darts minigame.
** <tt>forge</tt>: show the forge menu.
+
** <samp>forge</samp>: show the forge menu.
** <tt>gem</tt>: add the specified number of Qi gems to the player.
+
** <samp>gem</samp>: add the specified number of Qi gems to the player.
** <tt>language</tt>: show the language selection screen.
+
** <samp>language</samp>: show the language selection screen.
** <tt>minedifficulty</tt> / <tt>md</tt> and <tt>skullcavedifficulty</tt> / <tt>scd</tt>: change the mine or skull cavern difficulty level.
+
** <samp>minedifficulty</samp> / <samp>md</samp> and <samp>skullcavedifficulty</samp> / <samp>scd</samp>: change the mine or skull cavern difficulty level.
** <tt>ordersboard</tt>: show the special orders board.
+
** <samp>ordersboard</samp>: show the special orders board.
** <tt>pathspousetome</tt> / <tt>pstm</tt>: warp or path the player's spouse spouse to the player.
+
** <samp>pathspousetome</samp> / <samp>pstm</samp>: warp or path the player's spouse spouse to the player.
** <tt>perfection</tt>: makes changes needed for 100% game completion (e.g. max all friendships, mark all fish caught, etc).
+
** <samp>perfection</samp>: makes changes needed for 100% game completion (''e.g.,'' max all friendships, mark all fish caught, etc).
** <tt>pgb</tt>: prints the solution to the island gem bird shrine puzzle.
+
** <samp>pgb</samp>: prints the solution to the island gem bird shrine puzzle.
** <tt>phone</tt>: show the telephone menu.
+
** <samp>phone</samp>: show the telephone menu.
** <tt>printPlayerPosition</tt> /  <tt>ppp</tt>:
+
** <samp>printPlayerPosition</samp> /  <samp>ppp</samp>:
** <tt>qiboard / qi</tt>: show a special orders board for Mr. Qi.
+
** <samp>qiboard / qi</samp>: show a special orders board for Mr. Qi.
** <tt>recountnuts</tt>: resets the player’s walnut count to its expected value given walnuts found and spent. Will likely be removed on launch.
+
** <samp>recountnuts</samp>: resets the player’s walnut count to its expected value given walnuts found and spent. Will likely be removed on launch.
** <tt>renovate</tt>: show the house renovation menu.
+
** <samp>renovate</samp>: show the house renovation menu.
** <tt>returneddonations</tt>: open the returned donations UI.
+
** <samp>returneddonations</samp>: open the returned donations UI.
** <tt>runtestevent</tt> / <tt>rte</tt>: read an event from a <tt>test_event.txt</tt> file in the game folder, and start the event. The first line of the file is the location the event takes place, and the rest of the contents of the file are the same as a normal event file, except line breaks will be treated as ‘\’ delimiters.
+
** <samp>runtestevent</samp> / <samp>rte</samp>: read an event from a <samp>test_event.txt</samp> file in the game folder, and start the event. The first line of the file is the location the event takes place, and the rest of the contents of the file are the same as a normal event file, except line breaks will be treated as ‘\’ delimiters.
** <tt>showplurals</tt>: prints a list of the plural forms for each item name and lexicon term.
+
** <samp>showplurals</samp>: prints a list of the plural forms for each item name and lexicon term.
** <tt>shufflebundles</tt>: randomise bundles.
+
** <samp>shufflebundles</samp>: randomise bundles.
** <tt>specialorder</tt>: adds the special order with the matching ID to the active special orders list.
+
** <samp>specialorder</samp>: adds the special order with the matching ID to the active special orders list.
** <tt>split</tt>: start split-screen mode or add players.
+
** <samp>split</samp>: start split-screen mode or add players.
** <tt>testnut</tt>: spawn a golden walnut at (0, 0)?
+
** <samp>testnut</samp>: spawn a golden walnut at (0, 0)?
** <tt>tls</tt>: toggle between scaled and unscaled lighting.
+
** <samp>tls</samp>: toggle between scaled and unscaled lighting.
** <tt>townkey</tt>: give the current player the [[Key To The Town]].
+
** <samp>townkey</samp>: give the current player the [[Key To The Town]].
** <tt>uiscale</tt> / <tt>us</tt>: set a new UI scale.
+
** <samp>uiscale</samp> / <samp>us</samp>: set a new UI scale.
** <tt>volcano</tt>: warp player to specified level of the volcano dungeon.
+
** <samp>volcano</samp>: warp player to specified level of the volcano dungeon.
** <tt>walnut</tt>: add a specified number of golden walnuts for the player team.
+
** <samp>walnut</samp>: add a specified number of golden walnuts for the player team.
** <tt>warpanimaltome</tt> / <tt>watm</tt>: find a named animal and warp it to player.
+
** <samp>warpanimaltome</samp> / <samp>watm</samp>: find a named animal and warp it to player.
** <tt>warpcharactertome</tt> / <tt>wctm</tt>: find a named character and warp them to the player.
+
** <samp>warpcharactertome</samp> / <samp>wctm</samp>: find a named character and warp them to the player.
 
* Command changes:
 
* Command changes:
** <tt>marry</tt>: fixed issue when NPC hasn't been met?
+
** <samp>marry</samp>: fixed issue when NPC hasn't been met?
** <tt>minigame</tt>: added 'fishing' option.
+
** <samp>minigame</samp>: added 'fishing' option.
** <tt>invincible</tt>: added 'gm' and 'inv' aliases.
+
** <samp>invincible</samp>: added 'gm' and 'inv' aliases.
    
==For Content Patcher packs==
 
==For Content Patcher packs==
Line 191: Line 191:     
* See ''[[#Update impact|update impact]]'' below.
 
* See ''[[#Update impact|update impact]]'' below.
 +
 +
===Home renovations===
 +
Stardew Valley 1.5 adds [[Carpenter's Shop#House Renovations|house renovations]]. Mods can add or change removations by editing the <samp>Data/HomeRenovations</samp> asset. This consists of a string → model lookup, where the asset key is a unique renovation ID. The asset value is a model with these fields:
 +
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! effect
 +
|-
 +
| <samp>TextStrings</samp>
 +
| A translation key in the form <samp>{{t|asset name}}:{{t|key}}</samp> (like <samp>Strings\\Locations:ScienceHouse_Renovation_BuildCrib</samp>). The translation text should contain three slash-delimited fields:
 +
{| class="wikitable"
 +
|-
 +
! index
 +
! effect
 +
|-
 +
| 0
 +
| The translated display name shown in the renovation menu.
 +
|-
 +
| 1
 +
| The translated description shown in the renovation menu.
 +
|-
 +
| 2
 +
| The message shown to ask the player which area to renovate.
 +
|}
 +
For example, the vanilla 'remove crib' matches a translation in this format:
 +
<pre>"Remove Crib/Remove the crib from your home./Select a crib to remove."</pre>
 +
|-
 +
| <samp>Requirements</samp>
 +
| The criteria that must match for the renovation to appear as an option. This consists of a list of models with these fields:
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! effect
 +
|-
 +
| <samp>Type</samp>
 +
| The requirement type. This can be <samp>Mail</samp> (check if the player has the given [[Modding:Mail data#Mail flags|mail flag]]) or <samp>Value</samp> (check the value of a C# <samp>NetInt</samp> field on the farmhouse instance). Any other type always returns true.
 +
|-
 +
| <samp>Key</samp>
 +
| &#32;
 +
* For a <samp>Mail</samp> requirement, the mail flag.
 +
* For a <samp>Value</samp> requirement, the C# <samp>NetInt</samp> field name.
 +
|-
 +
| <samp>Value</samp>
 +
| &#32;
 +
* For a <samp>Mail</samp> requirement, <samp>"0"</samp> (player must ''not'' have the flag) or <samp>"1"</samp> (player must have it).
 +
* For a <samp>Value</samp> requirement, the required field value. The value can be prefixed with <samp>!</samp> to require any value ''except'' this one.
 +
|}
 +
 +
For example, <code>"Key": "renovation_bedroom_open", "Value": "1"</code> matches if the player has the <samp>renovation_bedroom_open</samp> mail flag.
 +
|-
 +
| <samp>RenovateActions</samp>
 +
| The actions to perform after the renovation is applied. This consists of a list of models with these fields:
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! effect
 +
|-
 +
| <samp>Type</samp>
 +
| The action type. This can be <samp>Mail</samp> (add or remove a [[Modding:Mail data#Mail flags|mail flag]]) or <samp>Value</samp> (set the value of a C# field on the farmhouse instance). Any other type is ignored.
 +
|-
 +
| <samp>Key</samp>
 +
| &#32;
 +
* For a <samp>Mail</samp> requirement, the mail flag to add or remove.
 +
* For a <samp>Value</samp> requirement, the C# <samp>NetInt</samp> field name.
 +
|-
 +
| <samp>Value</samp>
 +
| &#32;
 +
* For a <samp>Mail</samp> requirement, either <samp>"0"</samp> (remove the mail flag) or <samp>"1"</samp> (add it).
 +
* For a <samp>Value</samp> requirement, either the integer value to set, or the exact string <samp>"selected"</samp> to set it to the index of the applied renovation.
 +
|}
 +
|-
 +
| <samp>RectGroups</samp>
 +
| The tile areas within the farmhouse where the renovation can be placed.
 +
|-
 +
| <samp>AnimationType</samp>
 +
| ''(Optional)'' The animation to play when the renovation is applied. The possible values are <samp>destroy</samp> or <samp>build</samp>. Any other value defaults to <samp>build</samp>.
 +
|-
 +
| <samp>CheckForObstructions</samp>
 +
| ''(Optional)'' Whether to prevent the player from applying the renovations if there are any players, NPCs, items, etc within the target area. Default false.
 +
|-
 +
| <samp>SpecialRect</samp>
 +
| ''(Optional)'' A dynamic area to add to the <samp>RectGroups</samp> field. The only supported value is <samp>crib</samp>, which is the farmhouse area containing the cribs.
 +
|}
 +
 +
For example, this content pack redefines one of the vanilla home renovations:
 +
 +
{{#tag:syntaxhighlight|<nowiki>
 +
{
 +
    "Format": "</nowiki>{{Content Patcher version}}<nowiki>",
 +
    "Changes": [
 +
        {
 +
            "Action": "EditData",
 +
            "Target": "Data/HomeRenovations",
 +
            "Entries": {
 +
                "open_bedroom": {
 +
                    "TextStrings": "Strings\\Locations:ScienceHouse_Renovation_OpenBedroom",
 +
                    "AnimationType": "destroy",
 +
                    "CheckForObstructions": true,
 +
                    "Requirements": [
 +
                        {
 +
                            "Type": "Mail",
 +
                            "Key": "renovation_bedroom_open",
 +
                            "Value": "0"
 +
                        }
 +
                    ],
 +
                    "RenovateActions": [
 +
                        {
 +
                            "Type": "Mail",
 +
                            "Key": "renovation_bedroom_open",
 +
                            "Value": "1"
 +
                        }
 +
                    ],
 +
                    "RectGroups": [
 +
                        {
 +
                            "Rects": [
 +
                                { "X": 21, "Y": 10, "Width": 2, "Height": 8 },
 +
                                { "X": 21, "Y": 19, "Width": 2, "Height": 1 }
 +
                            ]
 +
                        }
 +
                    ]
 +
                }
 +
        }
 +
    ]
 +
}</nowiki>|lang=javascript}}
    
===Special orders===
 
===Special orders===
1.5 adds a new 'special orders' quest system which is much more flexible and supports custom quests. You can add special orders to <tt>Data/SpecialOrders</tt> with options like duration, repeatability, objectives, and rewards etc. Each order can have any number of objectives of predefined types (<tt>Collect</tt>, <tt>Deliver</tt>, <tt>Fish</tt>, <tt>Gift</tt>, <tt>JKScore</tt>, <tt>ReachMineFloor</tt>, <tt>Ship</tt>, <tt>Slay</tt>) and rewards (<tt>Friendship</tt>, <tt>Gems</tt>, <tt>Mail</tt>, <tt>Money</tt>, <tt>ResetEvent</tt>). The <tt>Mail</tt> reward sets a mail flag, which can be used to trigger custom events, dialogue, or other changes.
+
1.5 adds a new 'special orders' quest system which is much more flexible and supports custom quests. You can add special orders to <samp>Data/SpecialOrders</samp> with options like duration, repeatability, objectives, and rewards etc. Each order can have any number of objectives of predefined types (<samp>Collect</samp>, <samp>Deliver</samp>, <samp>Fish</samp>, <samp>Gift</samp>, <samp>JKScore</samp>, <samp>ReachMineFloor</samp>, <samp>Ship</samp>, <samp>Slay</samp>) and rewards (<samp>Friendship</samp>, <samp>Gems</samp>, <samp>Mail</samp>, <samp>Money</samp>, <samp>ResetEvent</samp>). The <samp>Mail</samp> reward sets a mail flag, which can be used to trigger custom events, dialogue, or other changes.
    
===Dialogue changes===
 
===Dialogue changes===
* Added dialogue keys related to the resort area on the islands (keys starting with <tt>Resort</tt>).
+
* Added dialogue keys related to the resort area on the islands (keys starting with <samp>Resort</samp>).
* Added <tt>%year</tt> placeholder.
+
* Added <samp>%year</samp> placeholder.
    
===Event changes===
 
===Event changes===
* Tile positions in farm events are now offset to match the farmhouse position automatically. If an event shouldn't be based on the farmhouse position, add an <tt>ignoreEventTileOffset</tt> command to disable the offset for that event. (Some hardcoded sprite positions aren't adjusted.)
+
* Tile positions in farm events are now offset to match the farmhouse position automatically. If an event shouldn't be based on the farmhouse position, add an <samp>ignoreEventTileOffset</samp> command to disable the offset for that event. (Some hardcoded sprite positions aren't adjusted.)
 
* NPCs and players in events now walk through obstacles by default, instead of getting stuck.
 
* NPCs and players in events now walk through obstacles by default, instead of getting stuck.
 
* New event commands:
 
* New event commands:
** <tt>animateHeight</tt>: something about jumping.
+
** <samp>animateHeight</samp>: something about jumping.
** <tt>changeName</tt>: change the display name for an actor.
+
** <samp>changeName</samp>: change the display name for an actor.
** <tt>drawOffset</tt>: set the draw offset for a farmer or named NPC.
+
** <samp>drawOffset</samp>: set the draw offset for a farmer or named NPC.
** <tt>hideShadow</tt>: hide the shadow for a named NPC.
+
** <samp>hideShadow</samp>: hide the shadow for a named NPC.
** <tt>ignoreEventTileOffset</tt>: disables event tile offsets for the remainder of the event.
+
** <samp>ignoreEventTileOffset</samp>: disables event tile offsets for the remainder of the event.
** <tt>ignoreMovementAnimation</tt>. Toggles a flag that allows NPCs to move without animating their walk animations (?).
+
** <samp>ignoreMovementAnimation</samp>. Toggles a flag that allows NPCs to move without animating their walk animations (?).
** <tt>hostMail</tt> option: add mail for tomorrow.
+
** <samp>hostMail</samp> option: add mail for tomorrow.
** <tt>locationSpecificCommand</tt>. used for some events, used just to call some location specific logic that’s hardcoded into some of the GameLocations.
+
** <samp>locationSpecificCommand</samp>. used for some events, used just to call some location specific logic that’s hardcoded into some of the GameLocations.
** <tt>playFramesAhead</tt>: skips specified number of commands.
+
** <samp>playFramesAhead</samp>: skips specified number of commands.
** <tt>showKissFrame</tt>;
+
** <samp>showKissFrame</samp>;
** <tt>unskippable</tt>: marks the event unskippable. This is used in conjunction with the skippable command for cases where the event should no longer be skippable after a certain point.
+
** <samp>unskippable</samp>: marks the event unskippable. This is used in conjunction with the skippable command for cases where the event should no longer be skippable after a certain point.
 
* Changed event commands:
 
* Changed event commands:
** <tt>addTemporaryActor</tt> can now set the actor's display name at the 8th index ("Character", "Animal", or "Monster").
+
** <samp>addTemporaryActor</samp> can now set the actor's display name at the 8th index ("Character", "Animal", or "Monster").
** <tt>awardFestivalPrize</tt>: added _birdiereward_ and _memento_ as options.
+
** <samp>awardFestivalPrize</samp>: added _birdiereward_ and _memento_ as options.
** <tt>fork</tt>: args changed somehow?
+
** <samp>fork</samp>: args changed somehow?
 
* Other command changes:
 
* Other command changes:
** Commands which start with <tt>--</tt> are now skipped. This is mainly meant for the <tt>runTestEvent</tt> command, to act as a comment.
+
** Commands which start with <samp>--</samp> are now skipped. This is mainly meant for the <samp>runTestEvent</samp> command, to act as a comment.
 
** When an event fails to parse a command, it now shows an error box and skips the rest of the event instead of crashing.
 
** When an event fails to parse a command, it now shows an error box and skips the rest of the event instead of crashing.
 
* New preconditions:
 
* New preconditions:
** <tt>N &lt;count></tt>: player has collected at least this many Golden Walnuts.
+
** <samp>N &lt;count></samp>: player has collected at least this many Golden Walnuts.
** <tt>B</tt>: the player's home has a spouse bed.
+
** <samp>B</samp>: the player's home has a spouse bed.
 
* New event options (editable by SMAPI mods):
 
* New event options (editable by SMAPI mods):
** <tt>ignoreObjectCollisions</tt>: whether NPCs/players should walk through obstacles instead of getting stuck. Default true.
+
** <samp>ignoreObjectCollisions</samp>: whether NPCs/players should walk through obstacles instead of getting stuck. Default true.
** <tt>showWorldCharacters</tt>: whether to draw NPCs which are in the same location as the event, even if they're not part of the event script. Default false.
+
** <samp>showWorldCharacters</samp>: whether to draw NPCs which are in the same location as the event, even if they're not part of the event script. Default false.
 
* New specific temporary sprites: doneWithSlideShow + getEndSlideshow, georgeLeekGift, grandpaThumbsUp, krobusraven, islandFishSplash, parrotHutSquawk, parrotPerchHut, staticSprite, WillyWad.
 
* New specific temporary sprites: doneWithSlideShow + getEndSlideshow, georgeLeekGift, grandpaThumbsUp, krobusraven, islandFishSplash, parrotHutSquawk, parrotPerchHut, staticSprite, WillyWad.
    
===Festival changes===
 
===Festival changes===
* Festivals can now have different versions per year. This works by adding a new <tt>set-up_y&lt;year&gt;</tt> field in the festival data (modulo with the current year), and/or <tt>&lt;npc>_y&lt;year&gt;</tt> dialogue keys for each NPC (like <tt>Abigail_y2</tt>).
+
: ''Main article: [[Modding:Festival data]].''
* Custom NPCs can now be added to festivals by editing the festival data file (instead of patching them into the character sheet which is conflict-prone). The key is "Set-Up_additionalCharacters" (with that exact capitalization), and the value format is "NpcName X Y Direction" (where direction can be up/down/left/right or an integer code) delimited by "/".<p>For example, this safely adds a custom NPC to the Stardew Valley Fair using Content Patcher:</p><source lang="js">{
+
 
 +
* Festivals can now have different versions per year. This works by adding a new <samp>set-up_y&lt;year&gt;</samp> field in the festival data (modulo with the current year), and/or <samp>&lt;npc>_y&lt;year&gt;</samp> dialogue keys for each NPC (like <samp>Abigail_y2</samp>).
 +
* Custom NPCs can now be added to festivals by editing the festival data file (instead of patching them into the character sheet which is conflict-prone). The key is "Set-Up_additionalCharacters" (with that exact capitalization), and the value format is "NpcName X Y Direction" (where direction can be up/down/left/right or an integer code) delimited by "/".<p>For example, this safely adds a custom NPC to the Stardew Valley Fair using Content Patcher:</p><syntaxhighlight lang="js">{
 
   "Action": "EditData",
 
   "Action": "EditData",
 
   "Target": "Data/Festivals/fall16",
 
   "Target": "Data/Festivals/fall16",
Line 242: Line 369:  
       }
 
       }
 
   ]
 
   ]
}</source>
+
}</syntaxhighlight>
* Shops can now sell furniture via the <tt>shop</tt> field in the festival data file. The format is identical to the existing field, but with a <tt>F</tt> item type code.
+
* Shops can now sell furniture via the <samp>shop</samp> field in the festival data file. The format is identical to the existing field, but with a <samp>F</samp> item type code.
    
===Schedule changes===
 
===Schedule changes===
* Added a <tt>marriage_&lt;season&gt;_&lt;day of month&gt;</tt> key used by spouse NPCs to enable schedules for specific days. This has a higher priority than the existing marriage keys.
+
: ''Main article: [[Modding:Schedule data]].''
 +
 
 +
* Added a <samp>marriage_&lt;season&gt;_&lt;day of month&gt;</samp> key used by spouse NPCs to enable schedules for specific days. This has a higher priority than the existing marriage keys.
    
===New map properties===
 
===New map properties===
 +
{{main article|Modding:Maps}}
 +
 
Stardew Valley 1.5 adds several map properties.
 
Stardew Valley 1.5 adds several map properties.
    
* For the farm only:
 
* For the farm only:
** <tt>GrandpaShrineLocation</tt>, <tt>GreenhouseLocation</tt>, <tt>MailboxLocation</tt>, <tt>ShippingBinLocation</tt>, <tt>SpouseAreaLocation</tt>: the top-left tile at which to place the target by default.
+
** <samp>GrandpaShrineLocation</samp>, <samp>GreenhouseLocation</samp>, <samp>MailboxLocation</samp>, <samp>ShippingBinLocation</samp>, <samp>SpouseAreaLocation</samp>: the top-left tile at which to place the target by default.
** <tt>BackwoodsEntry</tt>, <tt>BusStopEntry</tt>, <tt>FarmCaveEntry</tt>, <tt>FarmHouseEntry</tt>, <tt>ForestEntry</tt>, <tt>WarpTotemEntry</tt>: when the player enters the farm from the named location, the position to which to move them instead of the default position. The FarmhouseEntry map property also affects other house-related logic such as the house sprite draw location, the location where events on the farm take place, etc.
+
** <samp>BackwoodsEntry</samp>, <samp>BusStopEntry</samp>, <samp>FarmCaveEntry</samp>, <samp>FarmHouseEntry</samp>, <samp>ForestEntry</samp>, <samp>WarpTotemEntry</samp>: when the player enters the farm from the named location, the position to which to move them instead of the default position. The FarmhouseEntry map property also affects other house-related logic such as the house sprite draw location, the location where events on the farm take place, etc.
 
* For the farmhouse only:
 
* For the farmhouse only:
** <tt>KitchenStandingLocation</tt>: the position where the player's spouse stands while in the kitchen. If omitted, the spouse will stand in front of the oven.
+
** <samp>KitchenStandingLocation</samp>: the position where the player's spouse stands while in the kitchen. If omitted, the spouse will stand in front of the oven.
 
* For indoor locations:
 
* For indoor locations:
** <tt>ForceSpawnForageables</tt>: causes forage to spawn in the location.
+
** <samp>ForceSpawnForageables</samp>: causes forage to spawn in the location.
** <tt>indoorWater</tt>: enables water tiles in the location (e.g. for fishing).
+
** <samp>indoorWater</samp>: enables water tiles in the location (''e.g.,'' for fishing).
 
* For all locations:
 
* For all locations:
** <tt>CanCaskHere</tt>: if set to any value, casks will work in this location regardless of whether it's a cellar.
+
** <samp>CanCaskHere</samp>: if set to any value, casks will work in this location regardless of whether it's a cellar.
** <tt>LocationContext</tt>: the general world area (possible values: <tt>Default</tt> and <tt>Island</tt>). This affects which area's weather is used, whether you hear the train whistle when it's passing, etc.
+
** <samp>LocationContext</samp>: the general world area (possible values: <samp>Default</samp> and <samp>Island</samp>). This affects which area's weather is used, whether you hear the train whistle when it's passing, etc.
** <tt>NPCWarp</tt>: equivalent to <tt>Warp</tt>, but only usable by NPCs.
+
** <samp>NPCWarp</samp>: equivalent to <samp>Warp</samp>, but only usable by NPCs.
** <tt>SeasonOverride</tt>: assumes the given season for many checks in that location (such as crop growing season, tilesheet appearance, etc). Some game checks still use the global season where it makes sense to do so.
+
** <samp>SeasonOverride</samp>: assumes the given season for many checks in that location (such as crop growing season, tilesheet appearance, etc). Some game checks still use the global season where it makes sense to do so.
** <tt>skipWeedGrowth</tt>: skip spawning/spreading weeds in this location.
+
** <samp>skipWeedGrowth</samp>: skip spawning/spreading weeds in this location.
   −
The various tiles/properties that accompany these features (e.g. door tiles, mailbox tile action, etc) still need to be added to the map file. These aren't added/moved automatically by the map properties.
+
The various tiles/properties that accompany these features (''e.g.,'' door tiles, mailbox tile action, etc) still need to be added to the map file. These aren't added/moved automatically by the map properties.
    
===Greenhouse building===
 
===Greenhouse building===
Stardew Valley 1.5 changes the greenhouse into its own building that can be moved. The greenhouse sprites were moved out of <tt>Buildings/House</tt> into a new <tt>Buildings/Greenhouse</tt> asset.
+
Stardew Valley 1.5 changes the greenhouse into its own building that can be moved, and moves the greenhouse texture out of <samp>Buildings/House</samp> into a new <samp>Buildings/Greenhouse</samp> asset.
   −
Mods editing the farm map may also want to look at <tt>Maps/Farm_Greenhouse_Dirt</tt> and <tt>Maps/Farm_Greenhouse_Dirt_FourCorners</tt>. They patch the area where the greenhouse was originally when the save was created (even if using the new property to set greenhouse location, in this case the patch will patch the related area). This affects all vanilla farm map type except Beach map.
+
To update an older custom farm map:
 +
<ol>
 +
<li>Make sure all [[Modding:Maps#Custom tilesheet|custom tilesheet IDs have a <code>z_</code> prefix]].</li>
 +
<li>Make sure your farm has these tilesheets before any custom tilesheets, with the exact same IDs and order:
 +
{| class="wikitable"
 +
|-
 +
! tilesheet ID
 +
! file in <samp>Contents/Maps</samp>
 +
|-
 +
| <code>Paths</code>
 +
| <code>paths</code>
 +
|-
 +
| <code>untitled tile sheet</code>
 +
| <code>spring_outdoorsTileSheet</code>
 +
|-
 +
| <code>untitled tile sheet2</code>
 +
| <code>spring_island_tilesheet_1</code> * in <samp>Farm_Island</samp> only
 +
|}
 +
</li>
 +
<li>Remove all tiles on the building layer where the greenhouse was.</li>
 +
<li>Remove the <code>Action: WarpGreenhouse</code> tile property from the building layer where the greenhouse door was.</li>
 +
<li>Add a <code>GreenhouseLocation</code> [[Modding:Maps#Map properties|map property]], with the value set to the top-left tile of your greenhouse position (like <code>24 9</code>).</li>
 +
<li>In rare cases, you may want to edit <samp>Maps/Farm_Greenhouse_Dirt</samp> or <samp>Maps/Farm_Greenhouse_Dirt_FourCorners</samp>. They patch the area where the greenhouse was originally when the save was created (even if using the new property to set greenhouse location, in this case the patch will patch the related area). This affects all vanilla farm map type except Beach map.</li>
 +
</ol>
    
===Bed changes===
 
===Bed changes===
Stardew Valley 1.5 changes beds into furniture that can be picked up and moved. The bed sprites are now in <tt>Tilesheets/furniture</tt>.
+
Stardew Valley 1.5 changes beds into furniture that can be picked up and moved. The bed sprites are now in <samp>Tilesheets/furniture</samp>.
    
===Sitting on non-furniture chairs===
 
===Sitting on non-furniture chairs===
Players can sit on chairs that are part of the map. This works by checking the tile on the <tt>Buildings</tt> layer, and comparing its tilesheet and tilesheet index to the data in <tt>Data\ChairTiles</tt>. That file uses this format:
+
{{main article|Modding:Maps#Sitting on non-furniture chairs}}
   −
<pre>
+
Players can sit on chairs that are part of the map. This works by checking the tile on the <samp>Buildings</samp> layer, and comparing its tilesheet and tilesheet index to the data in <samp>Data\ChairTiles</samp>.
Key: Sheet filename/Tile X/Tile YValue: Width in tiles/Height in tiles/Direction/Type/Tile X in ChairTiles/Tile Y in ChairTiles/Seasonal/(Optional)Alternate tile sheet asset
+
 
</pre>
+
Each entry has a key in the form <code>sheet filename/tile X/tile Y</code>:
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! description
 +
|-
 +
| sheet filename
 +
| The ''file name'' of the tilesheet, without the file extension. For example, for a tilesheet loaded from <code>assets/some-tilesheet.png</code>, this should be <code>some-tilesheet</code>.
 +
|-
 +
| tile X<br />tile Y
 +
| The tile's X and Y position in the map tilesheet, starting at zero.
 +
|}
 +
 
 +
And a value in the form <code>width in tiles/height in tiles/direction/type/draw tile X/draw tile Y/is seasonal/alternate tilesheet</code>:
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! description
 +
|-
 +
| width in tiles<br />height in tiles
 +
| The size of the seat in tiles. For example, a width of 2 lets the player sit on the next tile to the right of it too.
 +
|-
 +
| direction
 +
| The direction the player should face when sitting. The possible values are <samp>down</samp>, <samp>left</samp>, <samp>right</samp>, <samp>up</samp>, or <samp>opposite</samp>. Any other value defaults to <samp>up</samp>.
 +
|-
 +
| type
 +
| An arbitrary seat code (like <samp>playground</samp> or <samp>ccdesk</samp>), which affects hardcoded game logic for specific seats in the game. You can specify an invalid value like <samp>default</samp> to ignore this.
 +
|-
 +
| draw tile X<br />draw tile Y
 +
| The X and Y position in <samp>TileSheets\ChairTiles</samp> (or the custom tilesheet) to draw when the player is sitting, starting at 0. If the width and/or height are more than 1, this is the position of the top-left tile.
 +
|-
 +
| is seasonal
 +
| Whether to draw seasonal variants when sitting. If enabled, the {{t|draw tile X}} and {{t|draw tile Y}} are offset by one width for each season. In other words, the spring/summer/fall/winter sprites should appear in the draw tilesheet directly adjacent, moving rightward in that order.
 +
|-
 +
| alternate tilesheet
 +
| The tilesheet from which to get the draw tiles, instead of <samp>TileSheets\ChairTiles</samp>.
 +
|}
    
===Custom hairstyles===
 
===Custom hairstyles===
You can now define custom hairstyles by editing the <tt>Data/HairData</tt> asset. Each line consists of a unique numeric ID, and a slash-delimited sequence of these fields:
+
You can now define custom hairstyles by editing the <samp>Data/HairData</samp> asset. Each line consists of a unique numeric ID, and a slash-delimited sequence of these fields:
    
{| class="wikitable"
 
{| class="wikitable"
Line 332: Line 522:  
These are changes which might be of interest to modders, but shouldn't break any mods.
 
These are changes which might be of interest to modders, but shouldn't break any mods.
   −
* Some assets were duplicated between <tt>Content/Maps</tt> and <tt>Content</tt>, but the ones directly under <tt>Content</tt> were unused by the game and no longer exist in 1.5.
+
* Some assets were duplicated between <samp>Content/Maps</samp> and <samp>Content</samp>, but the ones directly under <samp>Content</samp> were unused by the game and no longer exist in 1.5.
 
* Farmhouse bed changes:
 
* Farmhouse bed changes:
** The <tt>Bed</tt> and <tt>TouchAction Sleep</tt> properties are no longer required in farmhouses, since placed beds transparently add it to their current position. They can still be added to have static beds that are part of the map.
+
** The <samp>Bed</samp> and <samp>TouchAction Sleep</samp> properties are no longer required in farmhouses, since placed beds transparently add it to their current position. They can still be added to have static beds that are part of the map.
** The new <tt>DefaultBedPosition</tt> property on the <tt>Back</tt> layer can be added to spawn a bed furniture on that spot.
+
** The new <samp>DefaultBedPosition</samp> property on the <samp>Back</samp> layer can be added to spawn a bed furniture on that spot.
 
* Mail changes:
 
* Mail changes:
** <tt>%item tools</tt> can now be used to give <tt>furniture</tt> too.
+
** <samp>%item tools</samp> can now be used to give <samp>furniture</samp> too.
* Furniture data has a new 'placement restrictions' field at index 6. This overrides the default restrictions. The possible values are <tt>1</tt> (outdoors only), <tt>2</tt> (placed as decoration?), or any other value for inside-farmhouse-only. Certain furniture types programmatically have different default values set by default, but these can be overridden by specifying a value.
+
* Furniture data has a new 'placement restrictions' field at index 6. This overrides the default restrictions. The possible values are <samp>1</samp> (outdoors only), <samp>2</samp> (placed as decoration?), or any other value for inside-farmhouse-only. Certain furniture types programmatically have different default values set by default, but these can be overridden by specifying a value.
 
* New map properties: see [[#New map properties|_new map properties_]] above.
 
* New map properties: see [[#New map properties|_new map properties_]] above.
 
* New map tile properties:
 
* New map tile properties:
** <tt>Back</tt> > <tt>BeachSpawn</tt>: affects beach forage spawning on the beach farm;
+
** <samp>Back</samp> > <samp>BeachSpawn</samp>: affects beach forage spawning on the beach farm;
** <tt>Back</tt> > <tt>NoPath</tt>: prevent NPCs from pathing through the tile;
+
** <samp>Back</samp> > <samp>NoPath</samp>: prevent NPCs from pathing through the tile;
** <tt>Buildings</tt> > <tt>NPCPassable</tt>: equivalent to <tt>Passable</tt>, but only for NPCs;
+
** <samp>Buildings</samp> > <samp>NPCPassable</samp>: equivalent to <samp>Passable</samp>, but only for NPCs;
** <tt>Buildings > ProjectilePassable</tt>: allows projectiles to cross tiles that would normally block them (e.g. to allow shooting into lava pools).
+
** <samp>Buildings > ProjectilePassable</samp>: allows projectiles to cross tiles that would normally block them (''e.g.,'' to allow shooting into lava pools).
    
===Update impact===
 
===Update impact===
Here's a summary of the XNB files which changed in Stardew Valley 1.4.
+
Here's a summary of the XNB files which changed in Stardew Valley 1.5.
    
Notes:
 
Notes:
Line 367: Line 557:  
! Content Patcher
 
! Content Patcher
 
|-
 
|-
| <tt>Animals/BabyWhite Chicken</tt>
+
| <samp>Animals/BabyWhite Chicken</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Animals/Dinosaur</tt>
+
| <samp>Animals/Dinosaur</samp>
 
| cosmetic changes
 
| cosmetic changes
 
| ✘ will remove changes
 
| ✘ will remove changes
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Animals/Duck</tt>
+
| <samp>Animals/Duck</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Buildings/houses</tt>
+
| <samp>Buildings/houses</samp>
| See [[#Greenhouse texture changes|Greenhouse texture changes]].
+
| See [[#Greenhouse building|Greenhouse building]].
 
| ✘ greenhouse edits ignored silently
 
| ✘ greenhouse edits ignored silently
 
| ✘ greenhouse edits ignored with an error
 
| ✘ greenhouse edits ignored with an error
 
|-
 
|-
| <tt>Characters/Abigail</tt>
+
| <samp>Characters/Abigail</samp>
 
| new sitting sprite in empty area
 
| new sitting sprite in empty area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Caroline</tt>
+
| <samp>Characters/Caroline</samp>
 
| new sitting sprite in new area
 
| new sitting sprite in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Demetrius</tt>
+
| <samp>Characters/Demetrius</samp>
 
| cosmetic tweaks
 
| cosmetic tweaks
 
| ✘ will remove changes
 
| ✘ will remove changes
 
| ✘ may remove changes
 
| ✘ may remove changes
 
|-
 
|-
| <tt>Characters/Dialogue/Abigail</tt>
+
| <samp>Characters/Dialogue/Abigail</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Alex</tt>
+
| <samp>Characters/Dialogue/Alex</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Caroline</tt>
+
| <samp>Characters/Dialogue/Caroline</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Clint</tt>
+
| <samp>Characters/Dialogue/Clint</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Demetrius</tt>
+
| <samp>Characters/Dialogue/Demetrius</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Elliott</tt>
+
| <samp>Characters/Dialogue/Elliott</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Emily</tt>
+
| <samp>Characters/Dialogue/Emily</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Evelyn</tt>
+
| <samp>Characters/Dialogue/Evelyn</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/George</tt>
+
| <samp>Characters/Dialogue/George</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Gus</tt>
+
| <samp>Characters/Dialogue/Gus</samp>
 
| new content, fixed typos
 
| new content, fixed typos
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Haley</tt>
+
| <samp>Characters/Dialogue/Haley</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Harvey</tt>
+
| <samp>Characters/Dialogue/Harvey</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Jas</tt>
+
| <samp>Characters/Dialogue/Jas</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Jodi</tt>
+
| <samp>Characters/Dialogue/Jodi</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Kent</tt>
+
| <samp>Characters/Dialogue/Kent</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Leah</tt>
+
| <samp>Characters/Dialogue/Leah</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Lewis</tt>
+
| <samp>Characters/Dialogue/Lewis</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Linus</tt>
+
| <samp>Characters/Dialogue/Linus</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Marnie</tt>
+
| <samp>Characters/Dialogue/Marnie</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/MarriageDialogue</tt>
+
| <samp>Characters/Dialogue/MarriageDialogue</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Maru</tt>
+
| <samp>Characters/Dialogue/Maru</samp>
 
| new content, fixed typo
 
| new content, fixed typo
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Characters/Dialogue/Mister Qi</tt>
+
| <samp>Characters/Dialogue/Mister Qi</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|  
 
|  
 
|-
 
|-
| <tt>Characters/Dialogue/Pam</tt>
+
| <samp>Characters/Dialogue/Pam</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Penny</tt>
+
| <samp>Characters/Dialogue/Penny</samp>
 
| new content, fixed typos
 
| new content, fixed typos
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Pierre</tt>
+
| <samp>Characters/Dialogue/Pierre</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/rainy</tt>
+
| <samp>Characters/Dialogue/rainy</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Robin</tt>
+
| <samp>Characters/Dialogue/Robin</samp>
 
| new content, fixed typo
 
| new content, fixed typo
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Characters/Dialogue/Sam</tt>
+
| <samp>Characters/Dialogue/Sam</samp>
 
| new content, fixed typo
 
| new content, fixed typo
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Characters/Dialogue/Sandy</tt>
+
| <samp>Characters/Dialogue/Sandy</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Sebastian</tt>
+
| <samp>Characters/Dialogue/Sebastian</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Shane</tt>
+
| <samp>Characters/Dialogue/Shane</samp>
 
| new content, fixed typo
 
| new content, fixed typo
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Characters/Dialogue/Vincent</tt>
+
| <samp>Characters/Dialogue/Vincent</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Willy</tt>
+
| <samp>Characters/Dialogue/Willy</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Dialogue/Wizard</tt>
+
| <samp>Characters/Dialogue/Wizard</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Farmer/Farmer_base</tt><br /><tt>Characters/Farmer/Farmer_base_bald</tt><br /><tt>Characters/Farmer/Farmer_girl_base</tt><br /><tt>Characters/Farmer/Farmer_girl_base_bald</tt>
+
| <samp>Characters/Farmer/Farmer_base</samp><br /><samp>Characters/Farmer/Farmer_base_bald</samp><br /><samp>Characters/Farmer/Farmer_girl_base</samp><br /><samp>Characters/Farmer/Farmer_girl_base_bald</samp>
 
| new sprite in empty area<br /><small>(arm sprites when sitting on a chair that's facing down and when using the horse flute)</small>
 
| new sprite in empty area<br /><small>(arm sprites when sitting on a chair that's facing down and when using the horse flute)</small>
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Farmer/hats</tt>
+
| <samp>Characters/Farmer/hats</samp>
 
| new sprites in empty area, new area
 
| new sprites in empty area, new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Farmer/shoeColors</tt>
+
| <samp>Characters/Farmer/shoeColors</samp>
 
| new sprites in empty area
 
| new sprites in empty area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/George</tt>
+
| <samp>Characters/George</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Haley</tt>
+
| <samp>Characters/Haley</samp>
 
| new sprite in empty area
 
| new sprite in empty area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Lewis</tt>
+
| <samp>Characters/Lewis</samp>
 
| new sprite in new area
 
| new sprite in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Linus</tt>
+
| <samp>Characters/Linus</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Marnie</tt>
+
| <samp>Characters/Marnie</samp>
 
| new sprite in empty area
 
| new sprite in empty area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Pam</tt>
+
| <samp>Characters/Pam</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Robin</tt>
+
| <samp>Characters/Robin</samp>
 
| new sprites in empty area
 
| new sprites in empty area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/Willy</tt>
+
| <samp>Characters/Willy</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Characters/schedules/Linus</tt>
+
| <samp>Characters/schedules/Linus</samp>
 
| tweaked schedule position
 
| tweaked schedule position
 
| ✘ will remove changes
 
| ✘ will remove changes
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Characters/schedules/Willy</tt>
+
| <samp>Characters/schedules/Willy</samp>
 
| tweaked schedule positions
 
| tweaked schedule positions
 
| ✘ will remove changes
 
| ✘ will remove changes
 
| ✘ may remove changes
 
| ✘ may remove changes
 
|-
 
|-
| <tt>Data/animationDescriptions</tt>
+
| <samp>Data/animationDescriptions</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/BigCraftablesInformation</tt>
+
| <samp>Data/BigCraftablesInformation</samp>
 
| new content, deleted broken item, tweaked Workbench price
 
| new content, deleted broken item, tweaked Workbench price
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Data/Blueprints</tt>
+
| <samp>Data/Blueprints</samp>
 
| replaced Greenhouse entry, tweaked Mill description
 
| replaced Greenhouse entry, tweaked Mill description
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Data/Boots</tt>
+
| <samp>Data/Boots</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/ClothingInformation</tt>
+
| <samp>Data/ClothingInformation</samp>
 
| fixed typo
 
| fixed typo
 
| ✘ will remove changes
 
| ✘ will remove changes
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Data/CookingRecipes</tt>
+
| <samp>Data/CookingRecipes</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|  
 
|  
 
|-
 
|-
| <tt>Data/CraftingRecipes</tt>
+
| <samp>Data/CraftingRecipes</samp>
 
| new content, changed Skull Brazier recipe
 
| new content, changed Skull Brazier recipe
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Data/Crops</tt>
+
| <samp>Data/Crops</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Events/Beach</tt>
+
| <samp>Data/Events/Beach</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Events/Farm</tt>
+
| <samp>Data/Events/Farm</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Events/FarmHouse</tt>
+
| <samp>Data/Events/FarmHouse</samp>
 
| tweaked precondition
 
| tweaked precondition
 
| ✘ will remove changes
 
| ✘ will remove changes
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Data/Events/Forest</tt>
+
| <samp>Data/Events/Forest</samp>
 
| fixed typo
 
| fixed typo
 
| ✘ will remove changes
 
| ✘ will remove changes
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Data/Events/HaleyHouse</tt>
+
| <samp>Data/Events/HaleyHouse</samp>
 
| new content, tweaked event
 
| new content, tweaked event
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Data/Events/JoshHouse</tt>
+
| <samp>Data/Events/JoshHouse</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Events/Mountain</tt>
+
| <samp>Data/Events/Mountain</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Events/Railroad</tt>
+
| <samp>Data/Events/Railroad</samp>
 
| fixes to Harvey's 10-heart event
 
| fixes to Harvey's 10-heart event
 
| ✘ will remove changes
 
| ✘ will remove changes
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Data/Events/Saloon</tt>
+
| <samp>Data/Events/Saloon</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Events/ScienceHouse</tt>
+
| <samp>Data/Events/ScienceHouse</samp>
 
| new content, fixed typo
 
| new content, fixed typo
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Data/Events/SeedShop</tt>
+
| <samp>Data/Events/SeedShop</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Events/Town</tt>
+
| <samp>Data/Events/Town</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Events/Trailer</tt>
+
| <samp>Data/Events/Trailer</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/ExtraDialogue</tt>
+
| <samp>Data/ExtraDialogue</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/FarmAnimals</tt>
+
| <samp>Data/FarmAnimals</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Festivals/fall16</tt>
+
| <samp>Data/Festivals/fall16</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Festivals/fall27</tt>
+
| <samp>Data/Festivals/fall27</samp>
 
| new content, added new items to shop field
 
| new content, added new items to shop field
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Festivals/spring13</tt>
+
| <samp>Data/Festivals/spring13</samp>
 
| new content, changed 'set-up' and 'mainEvent' fields to add Leo, added new item to shop field
 
| new content, changed 'set-up' and 'mainEvent' fields to add Leo, added new item to shop field
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Data/Festivals/spring24</tt>
+
| <samp>Data/Festivals/spring24</samp>
 
| new content, added new items to shop field
 
| new content, added new items to shop field
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Festivals/summer11</tt>
+
| <samp>Data/Festivals/summer11</samp>
 
| new content, added shop field
 
| new content, added shop field
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Festivals/summer28</tt>
+
| <samp>Data/Festivals/summer28</samp>
 
| new content, added shop field
 
| new content, added shop field
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Festivals/winter8</tt>
+
| <samp>Data/Festivals/winter8</samp>
 
| new content, added new items to shop field
 
| new content, added new items to shop field
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Festivals/winter25</tt>
+
| <samp>Data/Festivals/winter25</samp>
 
| new content, added new items to shop field
 
| new content, added new items to shop field
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Fish</tt>
+
| <samp>Data/Fish</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/FishPondData</tt>
+
| <samp>Data/FishPondData</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/fruitTrees</tt>
+
| <samp>Data/fruitTrees</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Furniture</tt>
+
| <samp>Data/Furniture</samp>
 
| new content, tweaked Butterfly Hutch
 
| new content, tweaked Butterfly Hutch
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Data/hats</tt>
+
| <samp>Data/hats</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/Locations</tt>
+
| <samp>Data/Locations</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|  
 
|  
 
|-
 
|-
| <tt>Data/mail</tt>
+
| <samp>Data/mail</samp>
 
| new content, added item to 'georgeGifts' entry, changed 'foundLostTools' entry, fixed typo
 
| new content, added item to 'georgeGifts' entry, changed 'foundLostTools' entry, fixed typo
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Data/Monsters</tt>
+
| <samp>Data/Monsters</samp>
 
| new content; tweaked Mummy, Skeleton, and Spiker entries
 
| new content; tweaked Mummy, Skeleton, and Spiker entries
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Data/MoviesReactions</tt>
+
| <samp>Data/MoviesReactions</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|  
 
|  
 
|-
 
|-
| <tt>Data/NPCDispositions</tt>
+
| <samp>Data/NPCDispositions</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/NPCGiftTastes</tt>
+
| <samp>Data/NPCGiftTastes</samp>
 
| new content, added new item to several entries, tidying
 
| new content, added new item to several entries, tidying
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✘ may remove changes
 
| ✘ may remove changes
 
|-
 
|-
| <tt>Data/ObjectContextTags</tt>
+
| <samp>Data/ObjectContextTags</samp>
 
| new content, added tags for ring items, added tag for Lionfish entry
 
| new content, added tags for ring items, added tag for Lionfish entry
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Data/ObjectInformation</tt>
+
| <samp>Data/ObjectInformation</samp>
 
| new content, edited a few descriptions, changed duck feather price
 
| new content, edited a few descriptions, changed duck feather price
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Data/SecretNotes</tt>
+
| <samp>Data/SecretNotes</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/TailoringRecipes</tt>
+
| <samp>Data/TailoringRecipes</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Data/weapons</tt>
+
| <samp>Data/weapons</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>LooseSprites/Cursors</tt>
+
| <samp>LooseSprites/Cursors</samp>
 
| new sprites in empty areas, replaced unused sprites, repositioned fertilized dirt overlay
 
| new sprites in empty areas, replaced unused sprites, repositioned fertilized dirt overlay
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>LooseSprites/Cursors2</tt>
+
| <samp>LooseSprites/Cursors2</samp>
 
| new sprites in empty areas + new areas
 
| new sprites in empty areas + new areas
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>LooseSprites/letterBG</tt>
+
| <samp>LooseSprites/letterBG</samp>
 
| new sprite in empty area
 
| new sprite in empty area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>LooseSprites/map</tt>
+
| <samp>LooseSprites/map</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>LooseSprites/temporary_sprites_1</tt>
+
| <samp>LooseSprites/temporary_sprites_1</samp>
 
| new sprites in empty area
 
| new sprites in empty area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Maps/*</tt>
+
| <samp>Maps/*</samp>
 
| All tilesheet paths now have "Maps/" prefixed.
 
| All tilesheet paths now have "Maps/" prefixed.
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/ArchaeologyHouse</tt>
+
| <samp>Maps/ArchaeologyHouse</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Backwoods</tt>
+
| <samp>Maps/Backwoods</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Backwoods-GraveSite</tt>
+
| <samp>Maps/Backwoods-GraveSite</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Barn</tt><br /><tt>Maps/Barn2</tt><br /><tt>Maps/Barn3</tt><br />
+
| <samp>Maps/Barn</samp><br /><samp>Maps/Barn2</samp><br /><samp>Maps/Barn3</samp><br />
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Beach</tt>
+
| <samp>Maps/Beach</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Beach-Jellies</tt>
+
| <samp>Maps/Beach-Jellies</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Beach-Luau</tt>
+
| <samp>Maps/Beach-Luau</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Beach-NightMarket</tt>
+
| <samp>Maps/Beach-NightMarket</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/BusStop</tt>
+
| <samp>Maps/BusStop</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Cabin</tt><br /><tt>Maps/Cabin1</tt><br /><tt>Maps/Cabin1_marriage</tt><br /><tt>Maps/Cabin2</tt><br /><tt>Maps/Cabin2_marriage</tt>
+
| <samp>Maps/Cabin</samp><br /><samp>Maps/Cabin1</samp><br /><samp>Maps/Cabin1_marriage</samp><br /><samp>Maps/Cabin2</samp><br /><samp>Maps/Cabin2_marriage</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/cave</tt>
+
| <samp>Maps/cave</samp>
 
| overhauled spritesheet
 
| overhauled spritesheet
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|-
 
|-
| <tt>Maps/characterSheet</tt>
+
| <samp>Maps/characterSheet</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Maps/Coop</tt><br /><tt>Maps/Coop2</tt><br /><tt>Maps/Coop3</tt><br />
+
| <samp>Maps/Coop</samp><br /><samp>Maps/Coop2</samp><br /><samp>Maps/Coop3</samp><br />
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/desert</tt>
+
| <samp>Maps/desert</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/fall_outdoorsTileSheet2</tt><br /><tt>Maps/spring_outdoorsTileSheet2</tt><br /><tt>Maps/summer_outdoorsTileSheet2</tt><br /><tt>Maps/winter_outdoorsTileSheet2</tt>
+
| <samp>Maps/fall_outdoorsTileSheet2</samp><br /><samp>Maps/spring_outdoorsTileSheet2</samp><br /><samp>Maps/summer_outdoorsTileSheet2</samp><br /><samp>Maps/winter_outdoorsTileSheet2</samp>
 
| new sprites in empty + new areas; replaced unused sprites
 
| new sprites in empty + new areas; replaced unused sprites
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Maps/fall_town</tt><br /><tt>Maps/spring_town</tt><br /><tt>Maps/summer_town</tt><br /><tt>Maps/winter_town</tt>
+
| <samp>Maps/fall_town</samp><br /><samp>Maps/spring_town</samp><br /><samp>Maps/summer_town</samp><br /><samp>Maps/winter_town</samp>
 
| new sprites in empty areas; tweaked winter fountain sprites
 
| new sprites in empty areas; tweaked winter fountain sprites
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Maps/Farm</tt><br /><tt>Maps/Farm_Combat</tt><br /><tt>Maps/Farm_Fishing</tt><br /><tt>Maps/Farm_Foraging</tt><br /><tt>Maps/Farm_FourCorners</tt><br /><tt>Maps/Farm_Mining</tt>
+
| <samp>Maps/Farm</samp><br /><samp>Maps/Farm_Combat</samp><br /><samp>Maps/Farm_Fishing</samp><br /><samp>Maps/Farm_Foraging</samp><br /><samp>Maps/Farm_FourCorners</samp><br /><samp>Maps/Farm_Mining</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/farmhouse_tiles</tt>
+
| <samp>Maps/farmhouse_tiles</samp>
 
| new sprites in empty + new areas, cosmetic tweaks
 
| new sprites in empty + new areas, cosmetic tweaks
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Maps/FarmHouse</tt><br /><tt>Maps/FarmHouse1</tt><br /><tt>Maps/FarmHouse1_marriage</tt><br /><tt>Maps/FarmHouse2</tt><br /><tt>Maps/FarmHouse2_marriage</tt>
+
| <samp>Maps/FarmHouse</samp><br /><samp>Maps/FarmHouse1</samp><br /><samp>Maps/FarmHouse1_marriage</samp><br /><samp>Maps/FarmHouse2</samp><br /><samp>Maps/FarmHouse2_marriage</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Festivals</tt>
+
| <samp>Maps/Festivals</samp>
 
| new sprites in empty area
 
| new sprites in empty area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Maps/FishingGame</tt>
+
| <samp>Maps/FishingGame</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/FishShop</tt>
+
| <samp>Maps/FishShop</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Forest-FlowerFestival</tt>
+
| <samp>Maps/Forest-FlowerFestival</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Forest-IceFestival</tt>
+
| <samp>Maps/Forest-IceFestival</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Forest-SewerClean</tt>
+
| <samp>Maps/Forest-SewerClean</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Greenhouse</tt>
+
| <samp>Maps/Greenhouse</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/JoshHouse</tt>
+
| <samp>Maps/JoshHouse</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/ManorHouse</tt>
+
| <samp>Maps/ManorHouse</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Mines/mine_lava</tt><br /><tt>mine_lava</tt>
+
| <samp>Maps/Mines/mine_lava</samp><br /><samp>mine_lava</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|  
 
|  
 
|-
 
|-
| <tt>Maps/Mountain</tt>
+
| <samp>Maps/Mountain</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Mountain-BridgeFixed</tt>
+
| <samp>Maps/Mountain-BridgeFixed</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/paths</tt>
+
| <samp>Maps/paths</samp>
 
| deleted unused area and sprites
 
| deleted unused area and sprites
 
|
 
|
 
|
 
|
 
|-
 
|-
| <tt>Maps/Railroad</tt>
+
| <samp>Maps/Railroad</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Saloon</tt>
+
| <samp>Maps/Saloon</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/SamHouse</tt>
+
| <samp>Maps/SamHouse</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/ScienceHouse</tt>
+
| <samp>Maps/ScienceHouse</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/SeedShop</tt>
+
| <samp>Maps/SeedShop</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Sewer</tt>
+
| <samp>Maps/Sewer</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Shed</tt><br /><tt>Maps/Shed2</tt>
+
| <samp>Maps/Shed</samp><br /><samp>Maps/Shed2</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/SkullCave</tt>
+
| <samp>Maps/SkullCave</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Submarine</tt>
+
| <samp>Maps/Submarine</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Summit</tt>
+
| <samp>Maps/Summit</samp>
 
| [[The Summit]] was added as an accessible location in 1.5, which includes major changes to the map to make it work.
 
| [[The Summit]] was added as an accessible location in 1.5, which includes major changes to the map to make it work.
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/springobjects</tt>
+
| <samp>Maps/springobjects</samp>
 
| new sprites in empty + new areas; replaced unused sprites; cosmetic changes; tweaked all ring positions so they align for combined rings
 
| new sprites in empty + new areas; replaced unused sprites; cosmetic changes; tweaked all ring positions so they align for combined rings
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Maps/Town</tt>
+
| <samp>Maps/Town</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Town-Christmas</tt>
+
| <samp>Maps/Town-Christmas</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Town-DogHouse</tt>
+
| <samp>Maps/Town-DogHouse</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Town-EggFestival</tt>
+
| <samp>Maps/Town-EggFestival</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Town-Fair</tt>
+
| <samp>Maps/Town-Fair</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Town-Halloween</tt>
+
| <samp>Maps/Town-Halloween</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Town-Theater</tt>
+
| <samp>Maps/Town-Theater</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Town-TheaterCC</tt>
+
| <samp>Maps/Town-TheaterCC</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Town-TrashGone</tt>
+
| <samp>Maps/Town-TrashGone</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/townInterior</tt>
+
| <samp>Maps/townInterior</samp>
 
| cosmetic changes
 
| cosmetic changes
 
| ✘ will remove changes
 
| ✘ will remove changes
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Maps/townInterior2</tt>
+
| <samp>Maps/townInterior2</samp>
 
| new sprites in empty area
 
| new sprites in empty area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Maps/Trailer</tt>
+
| <samp>Maps/Trailer</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Trailer_big</tt>
+
| <samp>Maps/Trailer_big</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Maps/Woods</tt>
+
| <samp>Maps/Woods</samp>
 
| unknown changes
 
| unknown changes
 
| ?
 
| ?
 
| ?
 
| ?
 
|-
 
|-
| <tt>Minigames/Clouds</tt>
+
| <samp>Minigames/Clouds</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Portraits/Grandpa</tt>
+
| <samp>Portraits/Grandpa</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Portraits/Kent</tt>
+
| <samp>Portraits/Kent</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Portraits/Leah</tt>
+
| <samp>Portraits/Leah</samp>
 
| new sprite in empty area
 
| new sprite in empty area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Portraits/Linus</tt>
+
| <samp>Portraits/Linus</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Portraits/Robin</tt>
+
| <samp>Portraits/Robin</samp>
 
| new sprite in new area
 
| new sprite in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Strings/Buildings</tt>
+
| <samp>Strings/Buildings</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Strings/Characters</tt>
+
| <samp>Strings/Characters</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Strings/Lexicon</tt>
+
| <samp>Strings/Lexicon</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Strings/Locations</tt>
+
| <samp>Strings/Locations</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Strings/StringsFromCSFiles</tt>
+
| <samp>Strings/StringsFromCSFiles</samp>
 
| new content, fixed typo, tweaked some entries
 
| new content, fixed typo, tweaked some entries
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>Strings/StringsFromMaps</tt>
+
| <samp>Strings/StringsFromMaps</samp>
 
| new content
 
| new content
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>Strings/UI</tt>
+
| <samp>Strings/UI</samp>
 
| new content, tweaked Desperado description
 
| new content, tweaked Desperado description
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>TerrainFeatures/Flooring</tt><br /><tt>TerrainFeatures/Flooring_winter</tt>
+
| <samp>TerrainFeatures/Flooring</samp><br /><samp>TerrainFeatures/Flooring_winter</samp>
 
| new sprites in empty areas
 
| new sprites in empty areas
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>TerrainFeatures/grass</tt>
+
| <samp>TerrainFeatures/grass</samp>
 
| new sprites in new areas
 
| new sprites in new areas
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>TerrainFeatures/upperCavePlants</tt>
+
| <samp>TerrainFeatures/upperCavePlants</samp>
 
| overhauled spritesheet
 
| overhauled spritesheet
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|-
 
|-
| <tt>TileSheets/BuffsIcons</tt>
+
| <samp>TileSheets/BuffsIcons</samp>
 
| new sprite in new area
 
| new sprite in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>TileSheets/bushes</tt>
+
| <samp>TileSheets/bushes</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>TileSheets/Craftables</tt>
+
| <samp>TileSheets/Craftables</samp>
 
| new sprites in empty + new areas, replaced unused sprites
 
| new sprites in empty + new areas, replaced unused sprites
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>TileSheets/critters</tt>
+
| <samp>TileSheets/critters</samp>
 
| new sprites in empty + new areas
 
| new sprites in empty + new areas
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>TileSheets/crops</tt>
+
| <samp>TileSheets/crops</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>TileSheets/fruitTrees</tt>
+
| <samp>TileSheets/fruitTrees</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>TileSheets/furniture</tt>
+
| <samp>TileSheets/furniture</samp>
 
| new sprites in empty + new areas; cosmetic changes
 
| new sprites in empty + new areas; cosmetic changes
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>TileSheets/Projectiles</tt>
+
| <samp>TileSheets/Projectiles</samp>
 
| new sprite in empty area, cosmetic changes
 
| new sprite in empty area, cosmetic changes
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
| ✓ mostly unaffected
 
| ✓ mostly unaffected
 
|-
 
|-
| <tt>TileSheets/SecretNoteImages</tt>
+
| <samp>TileSheets/SecretNoteImages</samp>
 
| new sprites in new area
 
| new sprites in new area
 
| ✘ '''broken'''
 
| ✘ '''broken'''
 
|
 
|
 
|-
 
|-
| <tt>TileSheets/weapons</tt>
+
| <samp>TileSheets/weapons</samp>
 
| new sprites in empty + new areas
 
| new sprites in empty + new areas
 
| ✘ '''broken'''
 
| ✘ '''broken'''
translators
8,404

edits