Difference between revisions of "Dialogue"

From wiki
Jump to: navigation, search
(Added 8 Functions. Still more to come.)
(More Functions.)
Line 44: Line 44:
 
There are additional functions that Staxel offers to integrate the dialogue into the game.
 
There are additional functions that Staxel offers to integrate the dialogue into the game.
  
=== BranchNoVillagerWithPersonality ===
+
=== acceptQuest ===
 +
'''Usage: <code><<acceptQuest>></code>'''
 +
 
 +
 
 +
If the speaker has a quest, then give the quest to player. Also if the quest has a start item then give the player that item.
 +
 
 +
 
 +
=== branchAchievementNotCompleted ===
 +
'''Usage: <code><<branchAchievementNotCompleted staxel.achievement.PlantCrop PlantingWait>></code>'''
 +
 
 +
Parameter 1: Achievement code to look for.
 +
 
 +
Parameter 2: Title of the Node to move to.
 +
 
 +
 
 +
When this function is hit, will check if the selected achievement has been completed. If it is not completed, continue on normally. If it is, then move to the specified node. Useful for checking for completed actions, such as the uses in the tutorial.
 +
 
 +
 
 +
=== branchBuildingHasExisted===
 +
'''Usage: <code><<branchBuildingHasExisted staxel.totem.workplace.Patisserie Existed>></code>'''
 +
 
 +
Parameter 1: Totem code to search for.
 +
 
 +
Parameter 2: Title of the Node to move to.
 +
 
 +
 
 +
When this function is hit, will check if the building with the specified totem has existed at some point. If it didn't, continue on normally. If they did, then move to the specified node. This is useful for making sure you only talk about existing buildings. (Note: Building does need to have been built before. Just placing totem doesn't count.)
 +
 
 +
 
 +
=== branchPlayerCantAffordItem ===
 +
'''Usage: <code><<branchPlayerCantAffordItem item staxel.item.crafting.MugOSap 1 CantAfford>></code>'''
 +
 
 +
Parameter 1: Can be <code>item, tilePlacer or plant</code>. Use item for items. Use tilePlacer for TileObjects or Tiles. Use plant for Seeds.
 +
 
 +
Parameter 2: Item/Tile/Seed code. (e.g. staxel.crop.tomato)
 +
 
 +
Parameter 3: Title of the Node to move to.
 +
 
 +
 
 +
When this function is hit, will check if the player can afford the item. If they do, continue on normally. If they don't, then move to the specified node. This is useful for only giving an option if the player can afford it.
 +
 
 +
 
 +
=== branchPlayerDoesntHaveItemOfCategory===
 +
'''Usage: <code><<branchPlayerDoesntHaveItemOfCategory seed PlantingGive>></code>'''
 +
 
 +
Parameter 1: Category to look for.
 +
 
 +
Parameter 2: Title of the Node to move to.
 +
 
 +
 
 +
When this function is hit, will check if the player can afford has an item with a specific category. If they do, continue on normally. If they don't, then move to the specified node.
 +
 
 +
 
 +
=== branchPlayerDoesntHavePlayerItem ===
 +
'''Usage: <code><<branchPlayerDoesntHavePlayerItem staxel.item.FarmRegistrationLetter GoodBye>></code>'''
 +
 
 +
Parameter 1: Item code. (e.g. staxel.crop.tomato)
 +
 
 +
Parameter 2: Title of the Node to move to.
 +
 
 +
 
 +
When this function is hit, will check if the player can afford has an item of a specific code. If they do, continue on normally. If they don't, then move to the specified node.
 +
 
 +
 
 +
=== branchQuestActive ===
 +
'''Usage: <code><<branchQuestActive CheckCompletion>></code>'''
 +
 
 +
Parameter 1: Title of the Node to move to.
 +
 
 +
 
 +
When this function is hit, will check if the player has this person's specific quest. If the speaker has no quest, the player doesn't have the quest, or the player does have the quest but it's for the wrong day, continue on normally. Otherwise go to the node.
 +
 
 +
 
 +
=== branchQuestCompletable ===
 +
'''Usage: <code><<branchQuestCompletable CompleteQuest>></code>'''
 +
 
 +
Parameter 1: Title of the Node to move to.
 +
 
 +
 
 +
When this function is hit, will check if the player has completed this person's specific quest. If the speaker has no quest, the player does have the quest but it's for the wrong day, or if the quest is not complete-able then continue on normally. Otherwise go to the node.
 +
 
 +
 
 +
=== branchNoVillagerWithPersonality ===
 
'''Usage: <code><<branchNoVillagerWithPersonality staxel.village.personality.Tomboy NoTomboy>></code>'''
 
'''Usage: <code><<branchNoVillagerWithPersonality staxel.village.personality.Tomboy NoTomboy>></code>'''
  
 
Parameter 1: Code of the personality to search for. (e.g staxel.village.personality)
 
Parameter 1: Code of the personality to search for. (e.g staxel.village.personality)
  
Parameter 2: Title of the Node to move to if failed
+
Parameter 2: Title of the Node to move to.
 +
 
 +
 
 +
When this function is hit, it will search to see if a villager with the specified personality exists in the world. If they do, continue on normally. If they don't, then move to the specified node. This is useful for when you want to talk about another type of villager that may or may not be in the village.
 +
 
 +
 
 +
=== branchNoVillagerWithName===
 +
'''Usage: <code><<branchNoVillagerWithName Leif TellRumour>></code>'''
 +
 
 +
Parameter 1: Name of person to look for.
 +
 
 +
Parameter 2: Title of the Node to move to.
 +
 
 +
 
 +
When this function is hit, it will search to see if a villager with the specified name exists in the world. If they do, continue on normally. If they don't, then move to the specified node. This is useful for when you want to talk about another specific villager that may or may not be in the village.
 +
 
 +
 
 +
=== cancelQuest ===
 +
'''Usage: <code><<completeQuest>></code>'''
 +
 
 +
 
 +
If the player has a quest for the current speaker, then cancel that quest. Otherwise do nothing.
 +
 
 +
 
 +
=== completeQuest ===
 +
'''Usage: <code><<completeQuest>></code>'''
 +
 
 +
 
 +
If the speaker has a quest, and it is completable then set the quest complete. Also give the quest reward.
 +
 
 +
 
 +
=== emote ===
 +
'''Usage: <code><<emote staxel.emote.ScratchHead>></code>'''
 +
 
 +
Parameter 1: Emote code to play.
  
  
When this function is hit, it will search to see if a villager with the specified personality exists in the world. If they do, continue on normally. If they don't, then move to the specified node. This is useful for when you want to talk about another villager that may or may not be in the village.
+
Play a specified emote and wait until it is finished.
  
  
Line 93: Line 209:
  
 
Give the amount of petals specified to the player if the player does not have the amount or more. (If player has less than 1000 petals, give 1000 petals)
 
Give the amount of petals specified to the player if the player does not have the amount or more. (If player has less than 1000 petals, give 1000 petals)
 +
 +
 +
=== lockPlayerInConversation / releasePlayerFromConversation ===
 +
'''Usage: <code><<lockPlayerInConversation>></code>'''
 +
 +
 +
LockPlayerInConversation forces the player to enter into conversation mode. Conversation mode does several things;
 +
* Stop the player from moving.
 +
* Brings in the black bars
 +
* Focuses player focus onto the NPC
 +
 +
 +
ReleasePlayerFromConversation removes conversation mode from the player. Allowing them to move off and end the conversation. A [[#typewriterMode|<<typewriterMode off true true>>]] should be placed with this command.
 +
 +
 +
=== pickRandomLine ===
 +
'''Usage:
 +
<pre><<pickRandomLine>>
 +
 +
This is line 1.
 +
 +
This is line 2.
 +
 +
<<flushRandomLine>></pre>'''
 +
 +
 +
Choose a single line, from a number of text only lines, randomly up either up to the end of the node or up to the command <<flushRandomLine>>. Used to select either a random section of text so that it doesn't repeat the same text too often.
 +
 +
 +
=== pickRandomPath ===
 +
'''Usage:
 +
<pre><<pickRandomPath>>
 +
 +
<<NodeName1>>
 +
 +
<<NodeName2>>
 +
 +
<<flushRandomPath>></pre>'''
 +
 +
 +
Choose a single line, from a number of node names, randomly up either up to the end of the node or up to the command <<flushRandomPath>>. Used to select a random node to go to so the same section of text isn't repeated often. Less clutter than [[#pickRandomPath]] when dealing with larger conversations.
  
  
Line 98: Line 255:
 
'''Usage: <code><<moveTo TavernEntrance>></code>'''
 
'''Usage: <code><<moveTo TavernEntrance>></code>'''
  
Parameter 1: Waypoint Kind to find. Can be <code>Any, ChillSpot, Tutorial Spawn, NearShippingDock, NearCatalogue, Fields, Totem, Pathing, MayorsOffice, Shop, TavernEntrance, BarArea, TownSquare, ShopEntrance</code>
+
Parameter 1: Waypoint Kind to find. Can be one of: <code>Any, ChillSpot, Tutorial Spawn, NearShippingDock, NearCatalogue, Fields, Totem, Pathing, MayorsOffice, Shop, TavernEntrance, BarArea, TownSquare, ShopEntrance</code>
  
  
 
Move the NPC to the nearest node of the kind specified.
 
Move the NPC to the nearest node of the kind specified.
 
  
  
Line 108: Line 264:
 
'''Usage: <code><<leadTo TavernEntrance>></code>'''
 
'''Usage: <code><<leadTo TavernEntrance>></code>'''
  
Parameter 1: Waypoint Kind to find. Can be <code>Any, ChillSpot, Tutorial Spawn, NearShippingDock, NearCatalogue, Fields, Totem, Pathing, MayorsOffice, Shop, TavernEntrance, BarArea, TownSquare, ShopEntrance</code>
+
Parameter 1: Waypoint Kind to find. Can be one of: <code>Any, ChillSpot, Tutorial Spawn, NearShippingDock, NearCatalogue, Fields, Totem, Pathing, MayorsOffice, Shop, TavernEntrance, BarArea, TownSquare, ShopEntrance</code>
  
  
 
Move the NPC to the nearest node of the kind specified. Stops if too far from player.
 
Move the NPC to the nearest node of the kind specified. Stops if too far from player.
 +
 +
 +
=== removePlayerItem ===
 +
'''Usage: <code><<removePlayerItem staxel.item.FarmRegistrationLetter>></code>'''
 +
 +
Parameter 1: Item code to remove.
 +
 +
 +
Remove the item specified if the player has it. Do nothing if there is no item.
 +
 +
 +
=== resumeProgress ===
 +
'''Usage: <code><<resumeProgress>>>></code>'''
 +
 +
 +
Resume the last node that was saved for the current player. If there is no saved value or if saved value is the "Start" node then continue on the current node.
 +
 +
 +
=== saveProgress ===
 +
'''Usage: <code><<saveProgress>> or <<saveProgress NodeA>></code>'''
 +
 +
Parameter 1: The title of the node to save. (Skipping means the last node is saved.)
 +
 +
 +
This saves the current node to a variable which is then stored. Useful for when a conversation needs to be completed. (e.g. It is used in the tutorial to save the last location Farm Fan was in.)
  
  
Line 119: Line 300:
  
 
Make the next set of options be in a random order.
 
Make the next set of options be in a random order.
 +
 +
 +
=== typewriterMode ===
 +
'''Usage: <code><<typewriterMode on>> or <<typewriterMode off true true>></code>'''
 +
 +
Parameter 1: Turn on or off typewriter mode.
 +
 +
Parameter 2: (If Parameter 1 is off) Clear the message so it doesn't stay around. (Set to False to keep messages after this value)
 +
 +
Paremeter 3: (If Parameter 1 is off and Parameter 2 is True) Setting to True lets the current node immediately end without the need to click. (e.g Ending conversation immediately.)
 +
 +
Setting the typewriter to on makes it so text is filtered out a single character at a time instead of the entire message appearing at once. Should be turned off at the end of a conversation (i.e. <<typewriterMode off true true>>) before [[#lockPlayerInConversation / releasePlayerFromConversation|releasing from conversation]].

Revision as of 08:41, 15 June 2017

In Staxel, there are two files which are used to specify all villager dialogue in game. These files are the *.dialogue files which point to an associated .json file that was created using Yarn.


*.dialogue File

Creating a *.dialogue File

Creating this file is very simple with only two properties. The full file looks like;

{
  "code" : "mods.modname.village.character.dialogue.CecileFond",
  "dialogue" : "staxel/village/character/dialogue/CecileFond.json"
}

Both properties are self-explanatory. Make sure the dialogue property points to a file that is created by Yarn otherwise some issues can arise.


Config Options

"code"

Valid options (String): A unique string which dialogue what this object is.

Default Value: No default value is specified. Always need to provide your own.


A string containing the unique identifier of this dialogue. This is commonly only used in Dialogue Pools.


"dialogue"

Valid options (String): A string which contains the path to a Yarn .json file.

Default Value: Null or nothing specified.


A string containing the path of the item the blob will be referring to.


The Yarn *.json file

Yarn is the program which creates the dialogue files for Staxel. It utilises it's own scripting language which can make choices and also use conditional statements in order to provide the right dialogue. They also include an editor which helps visualise these files.

Look at the documentation around Yarn, particularly sections such as this. Do not Yarn is changing frequently and documentation might not line up with the implementation used in Staxel.

Additional Functions

There are additional functions that Staxel offers to integrate the dialogue into the game.

acceptQuest

Usage: <<acceptQuest>>


If the speaker has a quest, then give the quest to player. Also if the quest has a start item then give the player that item.


branchAchievementNotCompleted

Usage: <<branchAchievementNotCompleted staxel.achievement.PlantCrop PlantingWait>>

Parameter 1: Achievement code to look for.

Parameter 2: Title of the Node to move to.


When this function is hit, will check if the selected achievement has been completed. If it is not completed, continue on normally. If it is, then move to the specified node. Useful for checking for completed actions, such as the uses in the tutorial.


branchBuildingHasExisted

Usage: <<branchBuildingHasExisted staxel.totem.workplace.Patisserie Existed>>

Parameter 1: Totem code to search for.

Parameter 2: Title of the Node to move to.


When this function is hit, will check if the building with the specified totem has existed at some point. If it didn't, continue on normally. If they did, then move to the specified node. This is useful for making sure you only talk about existing buildings. (Note: Building does need to have been built before. Just placing totem doesn't count.)


branchPlayerCantAffordItem

Usage: <<branchPlayerCantAffordItem item staxel.item.crafting.MugOSap 1 CantAfford>>

Parameter 1: Can be item, tilePlacer or plant. Use item for items. Use tilePlacer for TileObjects or Tiles. Use plant for Seeds.

Parameter 2: Item/Tile/Seed code. (e.g. staxel.crop.tomato)

Parameter 3: Title of the Node to move to.


When this function is hit, will check if the player can afford the item. If they do, continue on normally. If they don't, then move to the specified node. This is useful for only giving an option if the player can afford it.


branchPlayerDoesntHaveItemOfCategory

Usage: <<branchPlayerDoesntHaveItemOfCategory seed PlantingGive>>

Parameter 1: Category to look for.

Parameter 2: Title of the Node to move to.


When this function is hit, will check if the player can afford has an item with a specific category. If they do, continue on normally. If they don't, then move to the specified node.


branchPlayerDoesntHavePlayerItem

Usage: <<branchPlayerDoesntHavePlayerItem staxel.item.FarmRegistrationLetter GoodBye>>

Parameter 1: Item code. (e.g. staxel.crop.tomato)

Parameter 2: Title of the Node to move to.


When this function is hit, will check if the player can afford has an item of a specific code. If they do, continue on normally. If they don't, then move to the specified node.


branchQuestActive

Usage: <<branchQuestActive CheckCompletion>>

Parameter 1: Title of the Node to move to.


When this function is hit, will check if the player has this person's specific quest. If the speaker has no quest, the player doesn't have the quest, or the player does have the quest but it's for the wrong day, continue on normally. Otherwise go to the node.


branchQuestCompletable

Usage: <<branchQuestCompletable CompleteQuest>>

Parameter 1: Title of the Node to move to.


When this function is hit, will check if the player has completed this person's specific quest. If the speaker has no quest, the player does have the quest but it's for the wrong day, or if the quest is not complete-able then continue on normally. Otherwise go to the node.


branchNoVillagerWithPersonality

Usage: <<branchNoVillagerWithPersonality staxel.village.personality.Tomboy NoTomboy>>

Parameter 1: Code of the personality to search for. (e.g staxel.village.personality)

Parameter 2: Title of the Node to move to.


When this function is hit, it will search to see if a villager with the specified personality exists in the world. If they do, continue on normally. If they don't, then move to the specified node. This is useful for when you want to talk about another type of villager that may or may not be in the village.


branchNoVillagerWithName

Usage: <<branchNoVillagerWithName Leif TellRumour>>

Parameter 1: Name of person to look for.

Parameter 2: Title of the Node to move to.


When this function is hit, it will search to see if a villager with the specified name exists in the world. If they do, continue on normally. If they don't, then move to the specified node. This is useful for when you want to talk about another specific villager that may or may not be in the village.


cancelQuest

Usage: <<completeQuest>>


If the player has a quest for the current speaker, then cancel that quest. Otherwise do nothing.


completeQuest

Usage: <<completeQuest>>


If the speaker has a quest, and it is completable then set the quest complete. Also give the quest reward.


emote

Usage: <<emote staxel.emote.ScratchHead>>

Parameter 1: Emote code to play.


Play a specified emote and wait until it is finished.


giveItemToPlayerIfDoesntHave

Usage: <<giveItemToPlayerIfDoesntHave item staxel.item.tool.Hoe>>

Parameter 1: Can be item, tilePlacer or plant. Use item for items. Use tilePlacer for TileObjects or Tiles. Use plant for Seeds.

Parameter 2: Item/Tile/Seed code. (e.g. staxel.crop.tomato)


Give an item to the player if they do not have the item already. The first parameter is the item type while the second is the code of the item to spawn.


giveItemToPlayerIfCantAfford

Usage: <<giveItemToPlayerIfDoesntHave item staxel.item.tool.Hoe>>

Parameter 1: Can be item, tilePlacer or plant. Use item for items. Use tilePlacer for TileObjects or Tiles. Use plant for Seeds.

Parameter 2: Item/Tile/Seed code.


Give an item to the player if they can't afford to buy that item. The first parameter is the item type while the second is the code of the item to spawn.


givePlayerPetals

Usage: <<givePlayerPetalsIfInsufficient 42>>

Parameter 1: Amount of Petals to give.


Give the amount of petals specified to the player.


givePlayerPetalsIfInsufficient

Usage: <<givePlayerPetalsIfInsufficient 42>>

Parameter 1: Amount of Petals to check for. Amount of Petals to give.


Give the amount of petals specified to the player if the player does not have the amount or more. (If player has less than 1000 petals, give 1000 petals)


lockPlayerInConversation / releasePlayerFromConversation

Usage: <<lockPlayerInConversation>>


LockPlayerInConversation forces the player to enter into conversation mode. Conversation mode does several things;

  • Stop the player from moving.
  • Brings in the black bars
  • Focuses player focus onto the NPC


ReleasePlayerFromConversation removes conversation mode from the player. Allowing them to move off and end the conversation. A <<typewriterMode off true true>> should be placed with this command.


pickRandomLine

Usage:

<<pickRandomLine>>

This is line 1.

This is line 2.

<<flushRandomLine>>


Choose a single line, from a number of text only lines, randomly up either up to the end of the node or up to the command <<flushRandomLine>>. Used to select either a random section of text so that it doesn't repeat the same text too often.


pickRandomPath

Usage:

<<pickRandomPath>>

<<NodeName1>>

<<NodeName2>>

<<flushRandomPath>>


Choose a single line, from a number of node names, randomly up either up to the end of the node or up to the command <<flushRandomPath>>. Used to select a random node to go to so the same section of text isn't repeated often. Less clutter than #pickRandomPath when dealing with larger conversations.


moveTo

Usage: <<moveTo TavernEntrance>>

Parameter 1: Waypoint Kind to find. Can be one of: Any, ChillSpot, Tutorial Spawn, NearShippingDock, NearCatalogue, Fields, Totem, Pathing, MayorsOffice, Shop, TavernEntrance, BarArea, TownSquare, ShopEntrance


Move the NPC to the nearest node of the kind specified.


leadTo

Usage: <<leadTo TavernEntrance>>

Parameter 1: Waypoint Kind to find. Can be one of: Any, ChillSpot, Tutorial Spawn, NearShippingDock, NearCatalogue, Fields, Totem, Pathing, MayorsOffice, Shop, TavernEntrance, BarArea, TownSquare, ShopEntrance


Move the NPC to the nearest node of the kind specified. Stops if too far from player.


removePlayerItem

Usage: <<removePlayerItem staxel.item.FarmRegistrationLetter>>

Parameter 1: Item code to remove.


Remove the item specified if the player has it. Do nothing if there is no item.


resumeProgress

Usage: <<resumeProgress>>>>


Resume the last node that was saved for the current player. If there is no saved value or if saved value is the "Start" node then continue on the current node.


saveProgress

Usage: <<saveProgress>> or <<saveProgress NodeA>>

Parameter 1: The title of the node to save. (Skipping means the last node is saved.)


This saves the current node to a variable which is then stored. Useful for when a conversation needs to be completed. (e.g. It is used in the tutorial to save the last location Farm Fan was in.)


shuffleNextOptions

Usage: <<shuffleNextOptions>>


Make the next set of options be in a random order.


typewriterMode

Usage: <<typewriterMode on>> or <<typewriterMode off true true>>

Parameter 1: Turn on or off typewriter mode.

Parameter 2: (If Parameter 1 is off) Clear the message so it doesn't stay around. (Set to False to keep messages after this value)

Paremeter 3: (If Parameter 1 is off and Parameter 2 is True) Setting to True lets the current node immediately end without the need to click. (e.g Ending conversation immediately.)

Setting the typewriter to on makes it so text is filtered out a single character at a time instead of the entire message appearing at once. Should be turned off at the end of a conversation (i.e. <<typewriterMode off true true>>) before releasing from conversation.