Changes

Line 5,631: Line 5,631:     
===Custom shops===
 
===Custom shops===
====Format====
+
You can now create and edit shops via the new <samp>Data/Shops</samp> asset. See [[Modding:Shops]] for documentation and examples.
You can now create and edit shops via the new <samp>Data/Shops</samp> asset. This consists of a string → model lookup, where the key is a [[Modding:Modder Guide/Game Fundamentals#Unique string IDs|unique string ID]] for the shop, and the value is a model with these fields:
  −
 
  −
{| class="wikitable"
  −
|-
  −
! field
  −
! effect
  −
|-
  −
| <samp>Items</samp>
  −
| The items to add to the shop inventory. This consists of a list of values with these fields:
  −
{| class="wikitable"
  −
|-
  −
! field
  −
! effect
  −
|-
  −
| ''common fields''
  −
| See [[#Item spawn fields|item spawn fields]] for the generic item fields supported by shop items.
  −
 
  −
Notes:
  −
* If set to an [[#Item queries|item query]] which returns multiple items, all of them will be added to the shop.
  −
* The <samp>MinStack</samp> and <samp>MaxStack</samp> fields apply to the item after it's purchased, and have no effect on the price or <samp>Stock</samp> limit.
  −
* If the player found [[Pierre's Missing Stocklist]], season conditions in the <samp>Condition</samp> field are ignored in [[Pierre's General Store]].
  −
|-
  −
| <samp>Price</samp>
  −
| ''(Optional)'' The gold price to purchase the item from the shop. Defaults to the item's normal price, or zero if <samp>TradeItemId</samp> is specified.
  −
|-
  −
| <samp>TradeItemId</samp><br /><samp>TradeItemAmount</samp>
  −
| ''(Optional)'' The [[#Custom items|qualified or unqualified item ID]] and amount which must be traded to purchase this item. Defaults to no item and 1 respectively.
  −
 
  −
If both <samp>Price</samp> and <samp>TradeItemId</samp> are specified, the player will have to provide both to get the item.
  −
|-
  −
| <samp>ApplyProfitMargins</samp>
  −
| ''(Optional)'' Whether to multiply the price by the difficulty modifier, which reduces the price for higher [[options|profit margins]]. This can be <samp>true</samp> (always apply it), <samp>false</samp> (never apply it), or <samp>null</samp> (apply for certain items like saplings). This is applied before any quantity modifiers. Default <samp>null</samp>.
  −
|-
  −
| <samp>IgnoreShopPriceModifiers</samp>
  −
| ''(Optional)'' Whether to ignore the shop's <samp>PriceModifiers</samp> field for this item. This has no effect on the item's equivalent field. Default false.
  −
|-
  −
| <samp>AvailableStockModifiers</samp><br /><samp>PriceModifiers</samp>
  −
| ''(Optional)'' [[#Quantity modifiers|Quantity modifiers]] applied to the <samp>AvailableStock</samp> or <samp>Price</samp> values.
  −
 
  −
Notes:
  −
* The price modifiers stack with the <samp>PriceModifiers</samp> field on the shop (unless <samp>IgnoreStorePriceModifiers</samp> is true).
  −
|-
  −
| <samp>AvailableStockModifierMode</samp><br /><samp>PriceModifierMode</samp>
  −
| ''(Optional)'' [[#Quantity modifiers|quantity modifier modes]] which indicate what to do if multiple modifiers in the <samp>AvailableStockModifiers</samp> or <samp>PriceModifiers</samp> field apply at the same time. Default <samp>Stack</samp>.
  −
|-
  −
| <samp>AvoidRepeat</samp>
  −
| ''(Optional)'' Whether to avoid adding this item to the shop if it would duplicate one that was already added. If the item ID is randomized, this will choose a value that hasn't already been added to the shop if possible. Default false.
  −
|-
  −
| <samp>UseObjectDataPrice</samp>
  −
| ''(Optional)'' If this data produces an object and <samp>Price</samp> is omitted, whether to use the raw price in <samp>Data/Objects</samp> instead of the calculated sell-to-player price.
  −
|-
  −
| <samp>AvailableStock</samp>
  −
| ''(Optional)'' The maximum number of the item which can be purchased in one day. Default unlimited.
  −
|-
  −
| <samp>AvailableStockLimit</samp>
  −
| ''(Optional)'' If <samp>Stock</samp> is set, how the limit is applied in multiplayer. This has no effect on recipes.
  −
 
  −
The possible values are:
  −
{| class="wikitable"
  −
|-
  −
! value
  −
! effect
  −
|-
  −
| <samp>Global</samp>
  −
| The limit is shared by every player in the world. For example, if the <samp>Stock</samp> was <samp>1</samp> and a player bought it, no other players could buy one.
  −
|-
  −
| <samp>Player</samp>
  −
| The limit applies to each player separately. For example, if the <samp>Stock</samp> was <samp>1</samp>, each player could buy one.
  −
|-
  −
| <samp>None</samp>
  −
| The limit applies to the current instance of the shop menu. If you exit and reopen the menu, the item will reappear with the same stock. This is mainly used for items that are added conditionally.
  −
|}
  −
 
  −
Default <samp>Global</samp>.
  −
|}
  −
|-
  −
| <samp>SalableItemTags</samp>
  −
| ''(Optional)'' A list of [[Modding:Items#Context tags|context tags]] for items which the player can sell to to this shop. Default none.
  −
|-
  −
| <samp>Owners</samp>
  −
| ''(Optional)'' The portrait and dialogue to show in the shop menu UI, ''or'' the message to show indicating that the shop is closed if <samp>ClosedMessage</samp> is set.
  −
 
  −
When the [[#Map/tile property changes|<samp>Action OpenShop</samp> tile property]] specifies {{o|owner tile area}}, the first NPC within the tile area which matches an owner entry is used; if no NPCs match, the shop isn't opened. If <samp>Owners</samp> is omitted, the shop is opened regardless of whether an NPC is present, and no portrait or dialogue is shown.
  −
 
  −
This consists of a list of models with these fields:
  −
{| class="wikitable"
  −
|-
  −
! field
  −
! effect
  −
|-
  −
| <samp>Name</samp>
  −
| One of...
  −
* the internal name for the NPC who must be in range to use this entry;
  −
* <samp>AnyOrNone</samp> to use this entry regardless of whether any NPC is within the shop area;
  −
* <samp>Any</samp> to use this entry if ''any'' NPC is within the shop area;
  −
* <samp>None</samp> to use this entry if ''no'' NPC is within the shop area.
  −
|-
  −
| <samp>Id</samp>
  −
| ''(Optional)'' An ID for this entry within the shop. This only needs to be unique within the current shop's owner list. Defaults to the <samp>Name</samp> value.
  −
|-
  −
| <samp>Condition</samp>
  −
| ''(Optional)'' A [[Modding:Game state queries|game state query]] which indicates whether this owner entry is available. If omitted, it's always available.
  −
|-
  −
| <samp>Portrait</samp>
  −
| ''(Optional)'' One of...
  −
* the internal name of the NPC whose portrait to show;
  −
* the asset name of the texture to display.
  −
 
  −
In either case, it'll draw the 64x64 pixel area in the top-left corner of the texture. If omitted, defaults to the portrait for the NPC matching the <samp>Name</samp> field (if any). If set to a value which doesn't match an NPC or texture asset name, the portrait is disabled.
  −
|-
  −
| <samp>Dialogues</samp>
  −
| ''(Optional)'' A list of possible dialogues if this entry is selected. Each day one dialogue will be randomly chosen to show in the shop UI. Each dialogue consists of a model with these fields:
  −
{| class="wikitable"
  −
|-
  −
! field
  −
! effect
  −
|-
  −
| <samp>Id</samp>
  −
| The [[Modding:Modder Guide/Game Fundamentals#Unique string IDs|unique string ID]] for this dialogue within the current list.
  −
|-
  −
| <samp>Dialogue</samp>
  −
| The dialogue text to show, as a [[Modding:Tokenizable strings|tokenizable string]]. The resulting text is parsed using the [[Modding:Dialogue|dialogue format]].
  −
|-
  −
| <samp>RandomDialogue</samp>
  −
| ''(Optional)'' A list of dialogue texts to randomly choose from, using the same format as <samp>Dialogue</samp>. If set, <samp>Dialogue</samp> is optional and ignored. Each entry in the list has an equal probability of being chosen, and the choice is persisted for the current day. For example:
  −
<syntaxhighlight lang="js">
  −
"RandomDialogue": [
  −
    "[LocalizedText Strings\StringsFromCSFiles:ShopMenu.cs.11469]",
  −
    "[LocalizedText Strings\StringsFromCSFiles:ShopMenu.cs.11470]",
  −
    "[LocalizedText Strings\StringsFromCSFiles:ShopMenu.cs.11471]"
  −
]
  −
</syntaxhighlight>
  −
|-
  −
| <samp>Condition</samp>
  −
| ''(Optional)'' A [[Modding:Game state queries|game state query]] which indicates whether the dialogue should be available. If omitted, the dialogue is always available.
  −
|}
  −
 
  −
This can be set to an empty list (<code>"Dialogues": []</code>) to disable the dialogue text entirely. If omitted, defaults to a generic "''Have a look at my wares''" text.
  −
|-
  −
| <samp>ClosedMessage</samp>
  −
| ''(Optional)'' If set, a [[Modding:Tokenizable strings|tokenizable string]] for a 'shop is closed'-style message to show instead of opening the shop.
  −
|-
  −
| <samp>RandomizeDialogueOnOpen</samp>
  −
| ''(Optional)'' If <samp>Dialogues</samp> has multiple matching entries, whether to re-randomize which one is selected each time the shop is opened (<samp>true</samp>) or once per day (<samp>false</samp>).
  −
|}
  −
|-
  −
| <samp>Currency</samp>
  −
| ''(Optional)'' The currency in which all items in the shop should be priced. The valid values are 0 (money), 1 (star tokens), 2 (Qi coins), and 4 (Qi gems). Default 0. For item trading, see <samp>TradeItemId</samp> for each item.
  −
|-
  −
| <samp>ApplyProfitMargins</samp>
  −
| ''(Optional)'' The default value for <samp>ApplyProfitMargins</samp> under <samp>Items</samp>, if set. This can be <samp>true</samp> (always apply it), <samp>false</samp> (never apply it), or <samp>null</samp> (apply for certain items like saplings). This is applied before any quantity modifiers. Default <samp>null</samp>.
  −
|-
  −
| <samp>StackSizeVisibility</samp>
  −
| ''(Optional)'' How to draw stack size numbers in the shop list by default. If omitted, the default shop logic is applied (usually equivalent to <samp>Show</samp>).
  −
 
  −
The possible values are:
  −
{| class="wikitable"
  −
|-
  −
! value
  −
! effect
  −
|-
  −
| <samp>Hide</samp>
  −
| Always hide the stack size.
  −
|-
  −
| <samp>Show</samp>
  −
| Always draw the stack size.
  −
|-
  −
| <samp>ShowIfMultiple</samp>
  −
| Draw the stack size if it's more than one.
  −
|}
  −
 
  −
This is ignored in some special cases (e.g. recipes can't have a stack size).
  −
|-
  −
| <samp>OpenSound</samp>
  −
| ''(Optional)'' The [[#Custom audio|audio cue ID]] to play when the shop menu is opened. Defaults to <samp>dwop</samp>.
  −
|-
  −
| <samp>PurchaseSound</samp>
  −
| ''(Optional)'' The [[#Custom audio|audio cue ID]] to play when an item is purchased normally. Defaults to <samp>purchaseClick</samp>.
  −
|-
  −
| <samp>purchaseRepeatSound</samp>
  −
| ''(Optional)'' The [[#Custom audio|audio cue ID]] to play when accumulating a stack to purchase (e.g. by holding right-click on PC). Defaults to <samp>purchaseRepeat</samp>.
  −
|-
  −
| <samp>PriceModifiers</samp>
  −
| ''(Optional)'' [[#Quantity modifiers|Quantity modifiers]] applied to the sell price for items in this shop. See also <samp>PriceModifiers</samp> under <samp>Items</samp>.
  −
|-
  −
| <samp>PriceModifierMode</samp>
  −
| ''(Optional)'' A [[#Quantity modifiers|quantity modifier mode]] which indicates what to do if multiple modifiers in the <samp>PriceModifiers</samp> field apply at the same time. This only affects that specific field, it won't affect price modifiers under <samp>Items</samp>. Default <samp>Stack</samp>.
  −
|-
  −
| <samp>VisualTheme</samp>
  −
| ''(Optional)'' The visual theme to apply to the shop UI, or omit to use the default theme. The first matching theme is applied. All fields are optional and will fallback to the default theme.
  −
 
  −
This consists of a list of models with these fields:
  −
{| class="wikitable"
  −
|-
  −
! field
  −
! effect
  −
|-
  −
| <samp>Condition</samp>
  −
| ''(Optional)'' A [[Modding:Game state queries|game state query]] which indicates whether this theme should be applied. Defaults to always true.
  −
|-
  −
| <samp>WindowBorderTexture</samp><br /><samp>WindowBorderSourceRect</samp>
  −
| ''(Optional)'' The texture asset name, and the pixel area within it, for the shop window border. Defaults to <samp>LooseSprites\Cursors</samp> at (384, 373) with size 18×18.
  −
|-
  −
| <samp>PortraitBackgroundTexture</samp><br /><samp>PortraitBackgroundSourceRect</samp>
  −
| ''(Optional)'' The texture asset name, and the pixel area within it, for the NPC portrait background. Defaults to <samp>LooseSprites\Cursors</samp> at (603, 414) with size 74×74.
  −
|-
  −
| <samp>DialogueBackgroundTexture</samp><br /><samp>DialogueBackgroundSourceRect</samp>
  −
| ''(Optional)'' The texture asset name, and the pixel area within it, for the NPC dialogue background. Defaults to <samp>Maps\MenuTiles</samp> at (0, 256) with size 60×60.
  −
|-
  −
| <samp>DialogueColor</samp><br /><samp>DialogueShadowColor</samp>
  −
| ''(Optional)'' The sprite text color for the dialogue text. See [[#Color fields|color format]]. Defaults to the game's standard text color.
  −
|-
  −
| <samp>ItemRowBackgroundTexture</samp><br /><samp>ItemRowBackgroundSourceRect</samp>
  −
| ''(Optional)'' The texture asset name, and the pixel area within it, for the item row background in the shop inventory. Defaults to <samp>LooseSprites\Cursors</samp> at (384, 396) with size 15×15.
  −
|-
  −
| <samp>ItemRowBackgroundHoverColor</samp>
  −
| ''(Optional)'' The color tint to apply to the item row background in the shop inventory when the cursor is hovering over it, or <samp>White</samp> for no tint. See [[#Color fields|color format]]. Defaults to <samp>Wheat</samp>.
  −
|-
  −
| <samp>ItemRowTextColor</samp>
  −
| ''(Optional)'' The sprite text color for the item text. See [[#Color fields|color format]]. Defaults to the game's standard text color.
  −
|-
  −
| <samp>ItemIconBackgroundTexture</samp><br /><samp>ItemIconBackgroundSourceRect</samp>
  −
| ''(Optional)'' The texture asset name, and the pixel area within it, for the background behind the item icons. Defaults to <samp>LooseSprites\Cursors</samp> at (296, 363) with size 18×18.
  −
|-
  −
| <samp>ScrollUpTexture</samp><br /><samp>ScrollUpSourceRect</samp>
  −
| ''(Optional)'' The texture asset name, and the pixel area within it, for the up arrow icon above the scrollbar. Defaults to <samp>LooseSprites\Cursors</samp> at (421, 459) with size 11×12.
  −
|-
  −
| <samp>ScrollDownTexture</samp><br /><samp>ScrollDownSourceRect</samp>
  −
| ''(Optional)'' The texture asset name, and the pixel area within it, for the down arrow icon beneath the scrollbar. Defaults to <samp>LooseSprites\Cursors</samp> at (421, 472) with size 11×12.
  −
|-
  −
| <samp>ScrollBarFrontTexture</samp><br /><samp>ScrollBarFrontSourceRect</samp>
  −
| ''(Optional)'' The texture asset name, and the pixel area within it, for the sliding scrollbar foreground. Defaults to <samp>LooseSprites\Cursors</samp> at (435, 463) with size 6×10.
  −
|-
  −
| <samp>ScrollBarBackTexture</samp><br /><samp>ScrollBarBackSourceRect</samp>
  −
| ''(Optional)'' The texture asset name, and the pixel area within it, for the scrollbar background. Defaults to <samp>LooseSprites\Cursors</samp> at (403, 383) with size 6×6.
  −
|}
  −
|-
  −
| <samp>CustomFields</samp>
  −
| The [[#Custom data fields|custom fields]] for this entry.
  −
|}
  −
 
  −
====Open a custom shop====
  −
You can place an [[#Map/tile property changes|<samp>Action OpenShop</samp> tile property]] on the map, which will open the given shop ID when the player clicks it.
  −
 
  −
In C# code, you can get the inventory for a custom shop using <code>Utility.GetShopStock("shop id here")</code>, open a shop menu using <code>Utility.TryOpenShopMenu("shop id", …)</code>, and add temporary items to an open menu using <code>shopMenu.AddForSale(…)</code>. The ID of the opened shop is stored in the shop menu's <samp>storeContext</samp> field.
  −
 
  −
====Examples====
  −
You can add or replace entire shops. For example, this content pack adds a shop that sells ice cream in summer, and pufferfish all year:
  −
 
  −
{{#tag:syntaxhighlight|<nowiki>
  −
{
  −
    "Format": "</nowiki>{{Content Patcher version}}<nowiki>",
  −
    "Changes": [
  −
        {
  −
            "Action": "EditData",
  −
            "Target": "Data/Shops",
  −
            "Entries": {
  −
                "Example.ModId_CustomShop": {
  −
                    "Owners": [
  −
                        {
  −
                            "Name": "Any",
  −
                            "Dialogues": [
  −
                                // dialogue on sunny summer days
  −
                                {
  −
                                    "Id": "Example.ModId_SunnySummer",
  −
                                    "Condition": "SEASON Summer, WEATHER Here Sun",
  −
                                    "Dialogue": "Ice-cream is perfect for a day like this."
  −
                                },
  −
 
  −
                                // dialogue any other time
  −
                                {
  −
                                    "Id": "Example.ModId_Default",
  −
                                    "Dialogue": "Welcome to the only place in town for pufferfish!"
  −
                                }
  −
                            ]
  −
                        }
  −
                    ],
  −
 
  −
                    "Items": [
  −
                        // ice-cream in summer, default price
  −
                        {
  −
                            "Id": "Example.ModId_IceCream",
  −
                            "Condition": "SEASON Summer",
  −
                            "ItemId": "(O)233"
  −
                        },
  −
 
  −
                        // pufferfish for 1000g, limited to one per day per player
  −
                        {
  −
                            "Id": "Example.ModId_PufferFish",
  −
                            "ItemId": "(O)128",
  −
                            "Price": 1000,
  −
                            "AvailableStock": 1,
  −
                            "AvailableStockLimit": "Player"
  −
                        }
  −
                    ]
  −
                }
  −
            }
  −
        }
  −
    ]
  −
}</nowiki>|lang=javascript}}
  −
 
  −
You can also add, replace, edit, or reorder items in a specific shop by targeting the shop's <samp>Items</samp> field. For example, this removes Trout Soup (item #219) and adds Pufferfish above bait (item #685):
  −
{{#tag:syntaxhighlight|<nowiki>
  −
{
  −
    "Format": "</nowiki>{{Content Patcher version}}<nowiki>",
  −
    "Changes": [
  −
        {
  −
            "Action": "EditData",
  −
            "Target": "Data/Shops",
  −
            "TargetField": [ "FishShop", "Items" ],
  −
            "Entries": {
  −
                "(O)219": null,
  −
                "Example.ModId_Pufferfish": {
  −
                    "Id": "Example.ModId_Pufferfish",
  −
                    "ItemId": "(O)128",
  −
                    "Price": 2000
  −
                }
  −
            },
  −
            "MoveEntries": [
  −
                { "Id": "Example.ModId_Pufferfish", "BeforeId": "(O)685" }
  −
            ]
  −
        }
  −
    ]
  −
}</nowiki>|lang=javascript}}
  −
 
  −
====Vanilla shop IDs====
  −
Vanilla shops are now defined in <samp>Data/Shops</samp> too (except a few special cases like [[:Category:Dressers|dressers]] and home renovations).
  −
 
  −
See <samp>Data/Shops</samp> for a full list, but here are the main shop IDs for convenience:
  −
 
  −
{| class="wikitable sortable"
  −
|-
  −
! shop
  −
! ID
  −
|-
  −
| [[Abandoned House|Abandoned house shop]]
  −
| <samp>HatMouse</samp>
  −
|-
  −
| [[Adventurer's Guild]]
  −
| <samp>AdventureShop</samp> (regular shop)<br /><samp>AdventureGuildRecovery</samp> (item recovery service)
  −
|-
  −
| [[Casino]]
  −
| <samp>Casino</samp>
  −
|-
  −
| [[Blacksmith|Clint's blacksmith shop]]
  −
| <samp>Blacksmith</samp> (regular shop)<br /><samp>ClintUpgrade</samp> (tool upgrades)
  −
|-
  −
| [[Desert Trader|Desert trader]]
  −
| <samp>DesertTrade</samp>
  −
|-
  −
| [[Dwarf#Shop|Dwarf's shop]]
  −
| <samp>Dwarf</samp>
  −
|-
  −
| [[Harvey's Clinic|Harvey's clinic]]
  −
| <samp>Hospital</samp>
  −
|-
  −
| [[Ice Cream Stand|Ice-cream stand]]
  −
| <samp>IceCreamStand</samp>
  −
|-
  −
| [[Ginger Island#Beach Resort|Island resort]]
  −
| <samp>ResortBar</samp>
  −
|-
  −
| [[Island Trader|Island trader]]
  −
| <samp>IslandTrade</samp>
  −
|-
  −
| [[Joja Mart]]
  −
| <samp>Joja</samp>
  −
|-
  −
| [[Krobus|Krobus' shop]]
  −
| <samp>ShadowShop</samp>
  −
|-
  −
| [[Marnie's Ranch|Marnie's ranch]]
  −
| <samp>AnimalShop</samp>
  −
|-
  −
| [[Pierre's General Store|Pierre's general store]]
  −
| <samp>SeedShop</samp>
  −
|-
  −
| [[Carpenter's Shop|Robin's carpenter shop]]
  −
| <samp>Carpenter</samp>
  −
|-
  −
| [[Saloon|Stardrop Saloon]]
  −
| <samp>Saloon</samp>
  −
|-
  −
| [[Oasis|Sandy's Oasis shop]]
  −
| <samp>Sandy</samp>
  −
|-
  −
| [[Traveling Cart|Traveling cart]]
  −
| <samp>Traveler</samp>
  −
|-
  −
| [[Fish Shop|Willy's fish shop]]
  −
| <samp>FishShop</samp>
  −
|}
  −
 
  −
Festival shops are also defined in <samp>Data/Shops</samp> now, though they can still be defined in the pre-1.6 way for backwards compatibility.
  −
{| class="wikitable sortable"
  −
|-
  −
! festival shop
  −
! ID
  −
|-
  −
| [[Dance of the Moonlight Jellies]]
  −
| <samp>Festival_DanceOfTheMoonlightJellies_Pierre</samp>
  −
|-
  −
| [[Egg Festival]]
  −
| <samp>Festival_EggFestival_Pierre</samp>
  −
|-
  −
| [[Festival of Ice]]
  −
| <samp>Festival_FestivalOfIce_TravelingMerchant</samp>
  −
|-
  −
| [[Feast of the Winter Star]]
  −
| <samp>Festival_FeastOfTheWinterStar_Pierre</samp>
  −
|-
  −
| [[Flower Dance]]
  −
| <samp>Festival_FlowerDance_Pierre</samp>
  −
|-
  −
| [[Luau]]
  −
| <samp>Festival_Luau_Pierre</samp>
  −
|-
  −
| [[Night Market]] (decoration boat)
  −
| <samp>Festival_NightMarket_DecorationBoat</samp>
  −
|-
  −
| [[Night Market]] (magic boat)
  −
| <samp>Festival_NightMarket_MagicBoat_Day1</samp><br /><samp>Festival_NightMarket_MagicBoat_Day2</samp><br /><samp>Festival_NightMarket_MagicBoat_Day3</samp>
  −
|-
  −
| [[Spirit's Eve]]
  −
| <samp>Festival_SpiritsEve_Pierre</samp>
  −
|-
  −
| [[Stardew Valley Fair]]
  −
| <samp>Festival_StardewValleyFair_StarTokens</samp>
  −
|}
  −
 
  −
And two special 'shops':
  −
{| class="wikitable sortable"
  −
|-
  −
! item
  −
! ID
  −
|-
  −
| [[Catalogue]]
  −
| <samp>Catalogue</samp>
  −
|-
  −
| [[Furniture Catalogue]]
  −
| <samp>Furniture Catalogue</samp>
  −
|}
      
===Dialogue changes===
 
===Dialogue changes===
translators
8,404

edits