Changes

Line 1: Line 1:  
← [[Modding:Index|Index]]
 
← [[Modding:Index|Index]]
  −
'''Work in progress.'''
      
This page explains how the files associated with the [[Movie Theater]], what each of them do, and how they are formatted. This is an advanced guide for mod developers.
 
This page explains how the files associated with the [[Movie Theater]], what each of them do, and how they are formatted. This is an advanced guide for mod developers.
    
== Movie data ==
 
== Movie data ==
<samp>Data/Movies.xnb</samp> contains the data for all movies, including their names, descriptions, genre tags, scenes, and dialogue and narration spoken within the film. For reference, below is the raw data of "The Brave Little Sapling":
+
<samp>Data\Movies.xnb</samp> contains the data for all movies, including their names, descriptions, genre tags, scenes, and dialogue and narration spoken within the film. For reference, below is the raw data of "The Brave Little Sapling":
    
{{collapse|Data|content=<syntaxhighlight lang="json">
 
{{collapse|Data|content=<syntaxhighlight lang="json">
Line 180: Line 178:     
== Movie reactions ==
 
== Movie reactions ==
 +
<samp>Data\MoviesReactions.xnb</samp> contains every NPC's taste in movies and their dialogue in response to them. For reference, below is the raw data for [[Penny]]'s reactions:
 +
 +
{{collapse|Data|content=<syntaxhighlight lang="json">
 +
[
 +
  {
 +
    "NPCName": "Penny",
 +
    "Reactions": [
 +
      {
 +
        "Tag": "*",
 +
        "Response": "love",
 +
        "Whitelist": [
 +
          "Pam"
 +
        ],
 +
        "SpecialResponses": {
 +
          "BeforeMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "Watching a movie with mom sure brings me back!"
 +
          },
 +
          "DuringMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "/message \"(Pam and Penny are watching intently!)\"",
 +
            "Text": ""
 +
          },
 +
          "AfterMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "It's great to be able to do things as a family again!"
 +
          }
 +
        },
 +
        "ID": "reaction_0"
 +
      },
 +
      {
 +
        "Tag": "spring_movie_0",
 +
        "Response": "love",
 +
        "Whitelist": [],
 +
        "SpecialResponses": {
 +
          "BeforeMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "I'm looking forward to this! Jas and Vincent have been talking about it non-stop."
 +
          },
 +
          "DuringMovie": {
 +
            "ResponsePoint": "sprout_leave",
 +
            "Script": "/shake Penny 3000/pause 500/message \"Penny seems to be holding back some tears...\"",
 +
            "Text": "Wow, it must be really hard leaving his family like that...$s"
 +
          },
 +
          "AfterMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "Thanks for taking me to this, I can't wait to tell the kids how good it was!"
 +
          }
 +
        },
 +
        "ID": "reaction_1"
 +
      },
 +
      {
 +
        "Tag": "spring_movie_0",
 +
        "Response": "love",
 +
        "Whitelist": [],
 +
        "SpecialResponses": null,
 +
        "ID": "reaction_2"
 +
      },
 +
      {
 +
        "Tag": "family",
 +
        "Response": "like",
 +
        "Whitelist": [],
 +
        "SpecialResponses": {
 +
          "BeforeMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "Oh, '{0}'! This looks wholesome and fun!"
 +
          },
 +
          "DuringMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "/message \"(Penny is smiling)\"",
 +
            "Text": ""
 +
          },
 +
          "AfterMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "I should totally bring the kids to see this sometime!"
 +
          }
 +
        },
 +
        "ID": "reaction_3"
 +
      },
 +
      {
 +
        "Tag": "comedy",
 +
        "Response": "like",
 +
        "Whitelist": [],
 +
        "SpecialResponses": {
 +
          "BeforeMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "I'm excited, I'm in the mood for a good laugh!"
 +
          },
 +
          "DuringMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "Did they just...?! Hahahaha!"
 +
          },
 +
          "AfterMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "Whew, I've got a cramp from all that laughing...!"
 +
          }
 +
        },
 +
        "ID": "reaction_4"
 +
      },
 +
      {
 +
        "Tag": "horror",
 +
        "Response": "dislike",
 +
        "Whitelist": [],
 +
        "SpecialResponses": {
 +
          "BeforeMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "I'm a little nervous... I don't usually watch scary movies.$s"
 +
          },
 +
          "DuringMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "/shake Penny 3000/pause 500/emote Penny 28",
 +
            "Text": "I can't look...$s"
 +
          },
 +
          "AfterMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "I hope I don't have nightmares tonight!$s"
 +
          }
 +
        },
 +
        "ID": "reaction_5"
 +
      },
 +
      {
 +
        "Tag": "love",
 +
        "Response": "like",
 +
        "Whitelist": [],
 +
        "SpecialResponses": {
 +
          "BeforeMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "Oooh, I've been dying to see this!"
 +
          },
 +
          "DuringMovie": null,
 +
          "AfterMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "Amazing! I hope they make another one!"
 +
          }
 +
        },
 +
        "ID": "reaction_6"
 +
      },
 +
      {
 +
        "Tag": "like",
 +
        "Response": "like",
 +
        "Whitelist": [],
 +
        "SpecialResponses": {
 +
          "BeforeMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "Hey, I've heard some good things about this one!"
 +
          },
 +
          "DuringMovie": null,
 +
          "AfterMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "That was great! Thanks for seeing this with me!"
 +
          }
 +
        },
 +
        "ID": "reaction_7"
 +
      },
 +
      {
 +
        "Tag": "dislike",
 +
        "Response": "like",
 +
        "Whitelist": [],
 +
        "SpecialResponses": {
 +
          "BeforeMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "I can't say I would've picked this one myself, but I'll try to keep an open mind..."
 +
          },
 +
          "DuringMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "..."
 +
          },
 +
          "AfterMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "Sorry if I ruined the movie for you, it just wasn't really my favorite..."
 +
          }
 +
        },
 +
        "ID": "reaction_8"
 +
      },
 +
      {
 +
        "Tag": "seen_love",
 +
        "Response": "like",
 +
        "Whitelist": [],
 +
        "SpecialResponses": {
 +
          "BeforeMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "Ooh, '{0}'! I saw this one with {2}!"
 +
          },
 +
          "DuringMovie": null,
 +
          "AfterMovie": null
 +
        },
 +
        "ID": "reaction_9"
 +
      },
 +
      {
 +
        "Tag": "seen_like",
 +
        "Response": "like",
 +
        "Whitelist": [],
 +
        "SpecialResponses": {
 +
          "BeforeMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "I saw this with {2}, it was pretty good!"
 +
          },
 +
          "DuringMovie": null,
 +
          "AfterMovie": null
 +
        },
 +
        "ID": "reaction_10"
 +
      },
 +
      {
 +
        "Tag": "seen_dislike",
 +
        "Response": "like",
 +
        "Whitelist": [],
 +
        "SpecialResponses": {
 +
          "BeforeMovie": {
 +
            "ResponsePoint": null,
 +
            "Script": "",
 +
            "Text": "Hmm, I think {2} took me to see this..."
 +
          },
 +
          "DuringMovie": null,
 +
          "AfterMovie": null
 +
        },
 +
        "ID": "reaction_11"
 +
      }
 +
    ]
 +
  },
 +
  ...
 +
]
 +
</syntaxhighlight>}}
 +
 +
===Format===
 +
Each block of data within the file begins with an <samp>NPCName</samp> key, which is the name of the NPC to whom the rest of the data in the block will apply. This is followed by a list with the key <samp>Reactions</samp>. Each block within this list is the data for an NPC's response to a specific type of movie.
 +
 +
The data within each block is formatted as follows:
 +
 +
{| class="wikitable"
 +
|-
 +
! key format
 +
! description
 +
|-
 +
| <samp>Tag</samp>
 +
| Which category of movie this response is for. In decreasing order of specificity, this can be:
 +
* <samp>*</samp>, in which case the response will always be applicable, unless there are other restrictions applied by <samp>Whitelist</samp>
 +
* a genre of movie, as listed in the <samp>Tags</samp> field of a film's data
 +
* the NPC's reaction to a movie, one of <samp>love</samp>, <samp>like</samp>, or <samp>dislike</samp>. Can be prefixed with <samp>seen_</samp>, in which case the reaction will only apply if the NPC has seen the film before.
 +
* a specific movie's identifier, as listed at the header of its block. (i.e. <samp>spring_movie_0</samp> for "The Brave Little Sapling")
 +
|-
 +
| <samp>Response</samp>
 +
| One of <samp>love</samp>, <samp>like</samp>, or <samp>dislike</samp>. Used to calculate Friendship points gained with the NPC. A loved movie earns 200 Friendship points with the NPC, a liked movie earns 100 Friendship points, and a disliked movie neither earns nor costs friendship points with the NPC.
 +
|-
 +
| <samp>Whitelist</samp>
 +
| A list of NPC names. If not empty, the response will only be applicable if, in addition to the movie matching <samp>Tag</samp>, one of the listed NPCs is also present within the theater. Currently only used for Penny, who has a special reaction to watching a movie if her mother [[Pam]] is present.
 +
|-
 +
| <samp>SpecialResponses</samp>
 +
| Contains the dialogue spoken by an NPC during the film in a series of blocks. (See below.) Can be left null.
 +
|-
 +
| <samp>ID</samp>
 +
| A unique identifier in the form of <samp>reaction_{{t|index}}</samp>, where {{t|index}} is, counting from 0, what number block this is within the <samp>Reactions</samp> list.
 +
|-
 +
|}
 +
 +
For unknown reasons, in the vanilla game code, when the <samp>Tag</samp> field is <samp>love</samp> or <samp>dislike</samp>, the <samp>Response</samp>field will always be <samp>like</samp>.
 +
 +
==== Special responses ====
 +
Each <samp>SpecialResponses</samp> block contains 3 blocks, beginning with <samp>BeforeMovie</samp>, <samp>DuringMovie</samp>, and <samp>AfterMovie</samp>, in that order. Any of these blocks may be left null. By default, the dialogue within these blocks triggers when talking to the NPC in the movie theater lobby, at a random point during the movie, and after the movie is finished, respectively. The data within each block is as follows:
 +
 +
{| class="wikitable"
 +
|-
 +
! key format
 +
! description
 +
|-
 +
| <samp>ResponsePoint</samp>
 +
| If not null, this dialogue will trigger at the given response point instead of its regular timing. See [[Modding:Movie_theater_data#Scenes]] for an explanation of response points.
 +
|-
 +
| <samp>Script</samp>
 +
| A script which runs prior to <samp>Text</samp> being displayed. Written in the same format as [[Modding:Event_data#Event_scripts]].
 +
|-
 +
| <samp>Text</samp>
 +
| The dialogue spoken by the NPC.
 +
|}
 +
 +
If multiple response blocks are applicable to the movie, the game uses the first non-null <samp>Response</samp>, <samp>BeforeMovie</samp>, <samp>DuringMovie</samp>, and <samp>AfterMovie</samp> fields it can find. Said data does not necessarily have to come from the same response block. If the game cannot find applicable <samp>DuringMovie</samp> dialogue, it will use default text from <samp>Strings\Characters.xnb</samp>. If the game cannot find applicable <samp>BeforeMovie</samp> or <samp>AfterMovie</samp> dialogue, the NPC will show as being able to be spoken to, but interacting with them will have no effect.
    
== Concession data ==
 
== Concession data ==
 +
<samp>Data\Concessions.xnb</samp> contains the data for the food purchased at the concessions stand, stored as a list of blocks. For reference, below is the raw data of the file:
 +
 +
{{collapse|Data|content=<syntaxhighlight lang="json">
 +
[
 +
  {
 +
    "ID": 0,
 +
    "Name": "Cotton Candy",
 +
    "DisplayName": "Cotton Candy",
 +
    "Description": "A large pink cloud of spun sugar.",
 +
    "Price": 50,
 +
    "ItemTags": [
 +
      "Sweet",
 +
      "Candy"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 1,
 +
    "Name": "Jasmine Tea",
 +
    "DisplayName": "Jasmine Tea",
 +
    "Description": "Green tea flavored with aromatic jasmine flowers.",
 +
    "Price": 50,
 +
    "ItemTags": [
 +
      "Drink",
 +
      "Hot",
 +
      "Healthy"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 2,
 +
    "Name": "Joja Cola",
 +
    "DisplayName": "Joja Cola",
 +
    "Description": "An extra-large cup of Joja's flagship soda.",
 +
    "Price": 40,
 +
    "ItemTags": [
 +
      "Drink",
 +
      "Cold",
 +
      "Joja"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 3,
 +
    "Name": "Sour Slimes",
 +
    "DisplayName": "Sour Slimes",
 +
    "Description": "Tiny gummy slimes of assorted colors. They're sprinkled with an extremely sour powder.",
 +
    "Price": 80,
 +
    "ItemTags": [
 +
      "Sour",
 +
      "Candy"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 4,
 +
    "Name": "Personal Pizza",
 +
    "DisplayName": "Personal Pizza",
 +
    "Description": "A pizza small enough to enjoy as a snack.",
 +
    "Price": 150,
 +
    "ItemTags": [
 +
      "Hot",
 +
      "Fatty"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 5,
 +
    "Name": "Nachos",
 +
    "DisplayName": "Nachos",
 +
    "Description": "Gooey, spicy cheese on top of freshly fried tortilla chips.",
 +
    "Price": 100,
 +
    "ItemTags": [
 +
      "Hot",
 +
      "Salty",
 +
      "Fatty"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 6,
 +
    "Name": "Salmon Burger",
 +
    "DisplayName": "Salmon Burger",
 +
    "Description": "A thick slab of salmon on a lightly toasted sesame seed bun.",
 +
    "Price": 150,
 +
    "ItemTags": [
 +
      "Sandwich",
 +
      "Burger"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 7,
 +
    "Name": "Ice Cream Sandwich",
 +
    "DisplayName": "Ice Cream Sandwich",
 +
    "Description": "Vanilla ice cream sandwiched between two chocolate cookies.",
 +
    "Price": 150,
 +
    "ItemTags": [
 +
      "Sandwich",
 +
      "Sweet",
 +
      "Cold"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 8,
 +
    "Name": "Popcorn",
 +
    "DisplayName": "Popcorn",
 +
    "Description": "Popped kernels of corn, dusted lightly with salt and drizzled with butter.",
 +
    "Price": 120,
 +
    "ItemTags": [
 +
      "Hot",
 +
      "Salty"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 9,
 +
    "Name": "Fries",
 +
    "DisplayName": "Fries",
 +
    "Description": "Thin slices of potato, deep fried and then lightly salted.",
 +
    "Price": 100,
 +
    "ItemTags": [
 +
      "Hot",
 +
      "Salty",
 +
      "Fatty"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 10,
 +
    "Name": "Chocolate Popcorn",
 +
    "DisplayName": "Chocolate Popcorn",
 +
    "Description": "It's normal popcorn... but with a chocolate coating.",
 +
    "Price": 130,
 +
    "ItemTags": [
 +
      "Hot",
 +
      "Sweet"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 11,
 +
    "Name": "Black Licorice",
 +
    "DisplayName": "Black Licorice",
 +
    "Description": "A chewy candy with an intense, pungent flavor.",
 +
    "Price": 25,
 +
    "ItemTags": null
 +
  },
 +
  {
 +
    "ID": 12,
 +
    "Name": "Star Cookie",
 +
    "DisplayName": "Star Cookie",
 +
    "Description": "A star-shaped shortbread cookie with rainbow sprinkles.",
 +
    "Price": 150,
 +
    "ItemTags": [
 +
      "Sweet"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 13,
 +
    "Name": "Jawbreaker",
 +
    "DisplayName": "Jawbreaker",
 +
    "Description": "It's a big, hard candy that lasts the whole movie!",
 +
    "Price": 250,
 +
    "ItemTags": [
 +
      "Sweet",
 +
      "Candy"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 14,
 +
    "Name": "Salted Peanuts",
 +
    "DisplayName": "Salted Peanuts",
 +
    "Description": "A classic salty treat.",
 +
    "Price": 120,
 +
    "ItemTags": [
 +
      "Salty"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 15,
 +
    "Name": "Hummus Snack Pack",
 +
    "DisplayName": "Hummus Snack Pack",
 +
    "Description": "It's crunchy and healthy.",
 +
    "Price": 90,
 +
    "ItemTags": [
 +
      "Healthy"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 16,
 +
    "Name": "Kale Smoothie",
 +
    "DisplayName": "Kale Smoothie",
 +
    "Description": "It's loaded with vitamins and fiber.",
 +
    "Price": 120,
 +
    "ItemTags": [
 +
      "Drink",
 +
      "Healthy"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 17,
 +
    "Name": "Apple Slices",
 +
    "DisplayName": "Apple Slices",
 +
    "Description": "Crunchy and sweet little slices.",
 +
    "Price": 100,
 +
    "ItemTags": [
 +
      "Sweet",
 +
      "Healthy"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 18,
 +
    "Name": "Panzanella Salad",
 +
    "DisplayName": "Panzanella Salad",
 +
    "Description": "A summer salad of bread and tomatoes.",
 +
    "Price": 200,
 +
    "ItemTags": [
 +
      "Gourmet",
 +
      "Healthy"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 19,
 +
    "Name": "Truffle Popcorn",
 +
    "DisplayName": "Truffle Popcorn",
 +
    "Description": "Heirloom popcorn sprinkled with truffle salt.",
 +
    "Price": 180,
 +
    "ItemTags": [
 +
      "Gourmet",
 +
      "Salty"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 20,
 +
    "Name": "Cappuccino Mousse Cake",
 +
    "DisplayName": "Cappuccino Mousse Cake",
 +
    "Description": "A small chocolate cake glazed with a cappuccinio mousse.",
 +
    "Price": 220,
 +
    "ItemTags": [
 +
      "Sweet",
 +
      "Gourmet"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 21,
 +
    "Name": "JojaCorn",
 +
    "DisplayName": "JojaCorn",
 +
    "Description": "Joja's patented corn food, slathered in plenty of \"b'utter sauce\".",
 +
    "Price": 10,
 +
    "ItemTags": [
 +
      "Joja"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 22,
 +
    "Name": "Stardrop Sorbet",
 +
    "DisplayName": "Stardrop Sorbet",
 +
    "Description": "A single drop of stardrop essence tranforms this sorbet into an extraordinary treat.",
 +
    "Price": 1250,
 +
    "ItemTags": [
 +
      "Sweet",
 +
      "Gourmet"
 +
    ]
 +
  },
 +
  {
 +
    "ID": 23,
 +
    "Name": "Rock Candy",
 +
    "DisplayName": "Rock Candy",
 +
    "Description": "Flavored sugar crystals attached to a convenient stick.",
 +
    "Price": 90,
 +
    "ItemTags": [
 +
      "Sweet",
 +
      "Candy"
 +
    ]
 +
  }
 +
]
 +
</syntaxhighlight>}}
 +
 +
===Format===
 +
Each block within the list corresponds to a single concession. The data for each block is as follows:
 +
 +
{| class="wikitable"
 +
|-
 +
! key format
 +
! description
 +
|-
 +
| <samp>ID</samp>
 +
| Counting from 0, what number concession this is in the list.
 +
|-
 +
| <samp>Name</samp>
 +
| The internal name of the concession.
 +
|-
 +
| <samp>DisplayName</samp>
 +
| The name of the concession which is displayed to the player in-game.
 +
|-
 +
| <samp>Description</samp>
 +
| The description of the concession.
 +
|-
 +
| <samp>Price</samp>
 +
| The price of the concession in {{price|}}.
 +
|-
 +
| <samp>ItemTags</samp>
 +
| A list of tags which describe the concession, used to determine an NPC's reaction to it. Can be any arbitrary string; the ones currently used in the game are: <samp>Sweet</samp>, <samp>Candy</samp>, <samp>Drink</samp>, <samp>Hot</samp>, <samp>Healthy</samp>, <samp>Cold</samp>, <samp>Joja</samp>, <samp>Sour</samp>, <samp>Fatty</samp>, <samp>Salty</samp>, <samp>Sandwich</samp>, <samp>Burger</samp>, and <samp>Gourmet</samp>.
 +
|}
 +
 +
== Concession tastes ==
 +
<samp>Data\ConcessionTastes.xnb</samp> contains the data that determines an NPC's opinion of a concession. For reference, below is the raw data of the file:
 +
 +
{{collapse|Data|content=<syntaxhighlight lang="json">
 +
[
 +
  {
 +
    "Name": "Penny",
 +
    "LovedTags": [
 +
      "Cotton Candy"
 +
    ],
 +
    "LikedTags": [
 +
      "Sweet"
 +
    ],
 +
    "DislikedTags": [
 +
      "Sour"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Pam",
 +
    "LovedTags": [
 +
      "Nachos"
 +
    ],
 +
    "LikedTags": [
 +
      "Salty",
 +
      "Fatty",
 +
      "Joja"
 +
    ],
 +
    "DislikedTags": [
 +
      "Healthy",
 +
      "Gourmet"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "George",
 +
    "LovedTags": [
 +
      "Black Licorice"
 +
    ],
 +
    "LikedTags": [
 +
      "Salty"
 +
    ],
 +
    "DislikedTags": [
 +
      "Sweet",
 +
      "Healthy"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Alex",
 +
    "LovedTags": [
 +
      "Salmon Burger"
 +
    ],
 +
    "LikedTags": [
 +
      "Salty",
 +
      "Hot"
 +
    ],
 +
    "DislikedTags": [
 +
      "Candy"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Evelyn",
 +
    "LovedTags": [
 +
      "Cappuccino Mousse Cake",
 +
      "Star Cookie"
 +
    ],
 +
    "LikedTags": [
 +
      "Sweet"
 +
    ],
 +
    "DislikedTags": [
 +
      "Salty",
 +
      "Hot"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Pierre",
 +
    "LovedTags": [
 +
      "Personal Pizza"
 +
    ],
 +
    "LikedTags": [
 +
      "Hot"
 +
    ],
 +
    "DislikedTags": [
 +
      "Joja"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Abigail",
 +
    "LovedTags": [
 +
      "Rock Candy"
 +
    ],
 +
    "LikedTags": [
 +
      "Candy",
 +
      "Sweet"
 +
    ],
 +
    "DislikedTags": [
 +
      "Healthy"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Caroline",
 +
    "LovedTags": [
 +
      "Truffle Popcorn",
 +
      "Jasmine Tea"
 +
    ],
 +
    "LikedTags": [
 +
      "Healthy"
 +
    ],
 +
    "DislikedTags": [
 +
      "Fatty",
 +
      "Candy"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Harvey",
 +
    "LovedTags": [
 +
      "Apple Slices",
 +
      "Jasmine Tea"
 +
    ],
 +
    "LikedTags": [
 +
      "Healthy",
 +
      "Gourmet"
 +
    ],
 +
    "DislikedTags": [
 +
      "Sweet",
 +
      "Fatty",
 +
      "Salty"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Gus",
 +
    "LovedTags": [
 +
      "Gourmet"
 +
    ],
 +
    "LikedTags": [
 +
      "Sandwich"
 +
    ],
 +
    "DislikedTags": [
 +
      "Healthy",
 +
      "Candy"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Lewis",
 +
    "LovedTags": [
 +
      "Jasmine Tea"
 +
    ],
 +
    "LikedTags": [
 +
      "Sweet",
 +
      "Popcorn"
 +
    ],
 +
    "DislikedTags": [
 +
      "Candy"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Jodi",
 +
    "LovedTags": [
 +
      "Chocolate Popcorn"
 +
    ],
 +
    "LikedTags": [
 +
      "Fatty",
 +
      "Hot",
 +
      "Salty"
 +
    ],
 +
    "DislikedTags": [
 +
      "Candy",
 +
      "Truffle Popcorn",
 +
      "Healthy"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Sam",
 +
    "LovedTags": [
 +
      "Personal Pizza"
 +
    ],
 +
    "LikedTags": [
 +
      "Joja Cola",
 +
      "Candy"
 +
    ],
 +
    "DislikedTags": [
 +
      "Healthy",
 +
      "Gourmet"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Vincent",
 +
    "LovedTags": [
 +
      "Jawbreaker"
 +
    ],
 +
    "LikedTags": [
 +
      "Sweet",
 +
      "Candy"
 +
    ],
 +
    "DislikedTags": [
 +
      "Healthy",
 +
      "Gourmet"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Kent",
 +
    "LovedTags": [
 +
      "Popcorn"
 +
    ],
 +
    "LikedTags": [
 +
      "Salty"
 +
    ],
 +
    "DislikedTags": [
 +
      "Candy"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Clint",
 +
    "LovedTags": [
 +
      "Fries"
 +
    ],
 +
    "LikedTags": [
 +
      "Fatty"
 +
    ],
 +
    "DislikedTags": [
 +
      "Healthy"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Emily",
 +
    "LovedTags": [
 +
      "Kale Smoothie"
 +
    ],
 +
    "LikedTags": [
 +
      "Healthy",
 +
      "Gourmet"
 +
    ],
 +
    "DislikedTags": [
 +
      "Fatty",
 +
      "Salty"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Haley",
 +
    "LovedTags": [
 +
      "Cappuccino Mousse Cake"
 +
    ],
 +
    "LikedTags": [
 +
      "Sweet"
 +
    ],
 +
    "DislikedTags": [
 +
      "Fatty",
 +
      "Salty"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Maru",
 +
    "LovedTags": [
 +
      "Star Cookie"
 +
    ],
 +
    "LikedTags": [
 +
      "Fatty",
 +
      "Sweet"
 +
    ],
 +
    "DislikedTags": [
 +
      "Cold"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Sebastian",
 +
    "LovedTags": [
 +
      "Jasmine Tea"
 +
    ],
 +
    "LikedTags": [
 +
      "Apple Slices",
 +
      "Salty",
 +
      "Hot"
 +
    ],
 +
    "DislikedTags": [
 +
      "Gourmet",
 +
      "Kale Smoothie"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Robin",
 +
    "LovedTags": [
 +
      "Salted Peanuts"
 +
    ],
 +
    "LikedTags": [
 +
      "Salty",
 +
      "Fatty"
 +
    ],
 +
    "DislikedTags": [
 +
      "Candy"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Demetrius",
 +
    "LovedTags": [
 +
      "Popcorn"
 +
    ],
 +
    "LikedTags": [
 +
      "Sweet"
 +
    ],
 +
    "DislikedTags": [
 +
      "Healthy"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Linus",
 +
    "LovedTags": [
 +
      "Salmon Burger"
 +
    ],
 +
    "LikedTags": [
 +
      "Healthy",
 +
      "Gourmet"
 +
    ],
 +
    "DislikedTags": [
 +
      "Joja"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Dwarf",
 +
    "LovedTags": [
 +
      "Rock Candy"
 +
    ],
 +
    "LikedTags": [
 +
      "Candy"
 +
    ],
 +
    "DislikedTags": [
 +
      "Hot",
 +
      "Healthy",
 +
      "Gourmet",
 +
      "Salty",
 +
      "Fatty"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Krobus",
 +
    "LovedTags": [
 +
      "Black Licorice"
 +
    ],
 +
    "LikedTags": [],
 +
    "DislikedTags": [
 +
      "Sweet",
 +
      "Stardrop Sorbet"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Wizard",
 +
    "LovedTags": [
 +
      "Black Licorice",
 +
      "Star Cookie"
 +
    ],
 +
    "LikedTags": [
 +
      "Jasmine Tea",
 +
      "Candy"
 +
    ],
 +
    "DislikedTags": [
 +
      "Hot",
 +
      "Healthy",
 +
      "Gourmet",
 +
      "Salty",
 +
      "Fatty"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Marnie",
 +
    "LovedTags": [
 +
      "Ice Cream Sandwich"
 +
    ],
 +
    "LikedTags": [
 +
      "Sweet",
 +
      "Popcorn"
 +
    ],
 +
    "DislikedTags": [
 +
      "Salty"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Shane",
 +
    "LovedTags": [
 +
      "Personal Pizza",
 +
      "Nachos",
 +
      "Joja",
 +
      "Hummus Snack Pack"
 +
    ],
 +
    "LikedTags": [
 +
      "Fatty"
 +
    ],
 +
    "DislikedTags": [
 +
      "Gourmet",
 +
      "Apple Slices",
 +
      "Kale Smoothie"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Jas",
 +
    "LovedTags": [
 +
      "Sour Slimes"
 +
    ],
 +
    "LikedTags": [
 +
      "Sweet",
 +
      "Candy"
 +
    ],
 +
    "DislikedTags": [
 +
      "Healthy",
 +
      "Gourmet",
 +
      "Salty"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Leah",
 +
    "LovedTags": [
 +
      "Panzanella Salad"
 +
    ],
 +
    "LikedTags": [
 +
      "Healthy",
 +
      "Gourmet"
 +
    ],
 +
    "DislikedTags": [
 +
      "Fatty",
 +
      "Salty"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Sandy",
 +
    "LovedTags": [
 +
      "Cotton Candy"
 +
    ],
 +
    "LikedTags": [
 +
      "Gourmet",
 +
      "Sweet"
 +
    ],
 +
    "DislikedTags": [
 +
      "Candy"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Elliott",
 +
    "LovedTags": [
 +
      "Truffle Popcorn",
 +
      "Cappuccino Mousse Cake"
 +
    ],
 +
    "LikedTags": [
 +
      "Gourmet",
 +
      "Healthy"
 +
    ],
 +
    "DislikedTags": [
 +
      "Candy",
 +
      "Fatty",
 +
      "Salty"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "Willy",
 +
    "LovedTags": [
 +
      "Salmon Burger"
 +
    ],
 +
    "LikedTags": [
 +
      "Hot",
 +
      "Fatty",
 +
      "Salty"
 +
    ],
 +
    "DislikedTags": [
 +
      "Candy",
 +
      "Healthy",
 +
      "Gourmet"
 +
    ]
 +
  },
 +
  {
 +
    "Name": "*",
 +
    "LovedTags": [
 +
      "Stardrop Sorbet"
 +
    ],
 +
    "LikedTags": [],
 +
    "DislikedTags": [
 +
      "Black Licorice",
 +
      "Joja"
 +
    ]
 +
  }
 +
]
 +
</syntaxhighlight>}}
 +
 +
=== Format ===
 +
Each block within the list has the following data:
 +
 +
{| class="wikitable"
 +
|-
 +
! key format
 +
! description
 +
|-
 +
| <samp>Name</samp>
 +
| Who this block should apply to. Can be the name of an NPC or <samp>*</samp>, in which case the tastes will apply to every NPC.
 +
|-
 +
| <samp>LovedTags</samp></br><samp>LikedTags</samp></br><samp>DislikedTags</samp>
 +
| A list of concession tags that are loved, liked, or disliked. This can be an <samp>ItemTag</samp>, or the internal name of a specific concession. To determine an NPC's opinion of a concession, the game totals how many tags from each group apply, with <samp>LovedTags</samp> and <samp>LikedTags</samp> contributing a positive score and <samp>DislikedTags</samp> contributing a negative. Purchasing a loved snack earns 50 Friendship points with the NPC, a liked snack earns 25 Friendship points, and a disliked snack neither earns nor costs friendship points with the NPC.
 +
|}
   −
== Concession reactions ==
+
[[Category:Modding]]
translators
8,404

edits