Yarn Spinner 3 is now available!
Buy Now
LogoLogo
HomepageDiscordItchPatreonAsset Store
Yarn Spinner 3.0
Yarn Spinner 3.0
  • ⭐Start Here
    • Yarn Spinner 3
  • Beginner's Guide
  • About Yarn Spinner
  • Crediting Yarn Spinner
  • FAQ
  • Writing Yarn Scripts
    • ⭐First Steps with Scripting
    • Yarn Spinner Editor
      • Writing Yarn in VS Code
      • Previewing Your Dialogue
      • Writing Together
    • Scripting Fundamentals
      • Nodes and Lines
      • Options
      • Jump Command
      • Detour Command
      • Variables
      • Flow Control
      • Once
      • Smart Variables
      • Enums
      • Commands
      • Functions
      • Line Groups
    • Advanced Scripting
      • Node Groups
      • Storylets and Saliency Primer
      • Saliency
      • Tags and Metadata
      • Markup
      • Shadow Lines
  • Yarn Spinner for Unity
    • ⭐First Steps with Unity
    • Installation for Unity
      • Unity Quick Start
    • Yarn Spinner in Unity Scenes
      • Unity Projects + Yarn Spinner
    • Your First Yarn Spinner Game
    • Commands and Functions
    • Localisation and Assets
      • In-built Localisation
      • Unity Localisation
    • Samples
      • Welcome
      • Feature Tour
      • Theming Default Presenters
      • Create a Phone Chat View
      • Make Options Timeout
      • Voice Over and Localisation
      • Background Chatter
      • Inline Events
      • Replacement Markup
      • Storylets and Saliency
        • Basic Storylets and Saliency
        • Advanced Saliency
        • Custom Saliency Strategies
    • Unity Add-Ons
      • Speech Bubbles
        • Installing Speech Bubbles
        • Using Speech Bubbles
        • Speech Bubble Examples
      • Dialogue Wheel
        • Installing Dialogue Wheel
        • Using Six-Segment Wheel
        • Using Auto-Layout Wheel
        • Dialogue Wheel Examples
  • Components
    • Dialogue Runners and Systems
    • Dialogue Presenters
      • Line Presenter
      • Options Presenter
      • Line Advancer
      • Custom Dialogue Presenters
    • Variable Storage
      • In-Memory Variable Storage
      • Variable Storage
      • Custom Variable Storage Components
    • Line Provider
      • Built-in Localised Line Provider
      • Unity Localised Line Provider
    • Asynchronous Programming
  • Changelog
    • Upgrading from Yarn Spinner 2
  • Yarn Spinner for Other Engines
    • Godot
      • Overview
      • 📦Installation for Godot
      • 📥Importing Yarn Files
        • Yarn Projects
        • Yarn Scripts
      • 🧱Components
        • Dialogue Runner
        • Dialogue Presenters
          • Line Presenter
          • Options Presenter
          • Creating Custom Dialogue Views
        • Variable Storage
          • In-Memory Variable Storage
          • Custom Variable Storage Components
        • Line Provider
          • Text Line Provider
        • Markup Palette
      • 🤖Commands and Functions
      • 🗺️Localization
      • Advanced Guides
        • Implementing Custom Variable Storage
    • Unreal
      • 🧑🏼‍🏫Unreal Beta Quickstart
    • Bevy
      • ⚡Bevy Quick Start
      • 📥Compiling Yarn Files into Yarn Projects
      • 🧱Components
        • Dialogue Runner and a High Level Overview
        • Dialogue Views
        • Variable Storage
        • Assets
      • 🤖Custom Commands and Functions
        • Commands
        • Functions
      • 🗺️Localisations
      • 💡Frequently Asked Questions / "How Do I...?"
      • 🎁Bevy Samples
  • API
    • C#
      • Yarn.Utility Namespace
        • CRC32
          • GetChecksum(byte[])
          • GetChecksum(string)
          • GetChecksumString(string)
      • Yarn Namespace
        • Command
          • Text
        • CommandHandler
        • ConstantTypeProperty
          • Description
          • Type
          • Value
        • Dialogue
          • DefaultStartNodeName
          • Dialogue(Yarn.IVariableStorage)
          • Continue()
          • GetHeaders(string)
          • GetHeaderValue(string,string)
          • GetSaliencyOptionsForNodeGroup(string)
          • GetStringIDForNode(string)
          • GetTagsForNode(string)
          • HasSalientContent(string)
          • IsNodeGroup(string)
          • NodeExists(string)
          • SetNode(string)
          • SetProgram(Program)
          • SetSelectedOption(int)
          • Stop()
          • TryGetSmartVariable<T>(string,T)
          • UnloadAll()
          • CommandHandler
          • ContentSaliencyStrategy
          • CurrentNode
          • DialogueCompleteHandler
          • IsActive
          • Library
          • LineHandler
          • LogDebugMessage
          • LogErrorMessage
          • NodeCompleteHandler
          • NodeNames
          • NodeStartHandler
          • OptionsHandler
          • PrepareForLinesHandler
          • VariableStorage
        • DialogueCompleteHandler
        • DialogueException
        • EnumBase
          • EnumBase()
          • Description
          • Name
          • Parent
        • EnumType
          • EnumType(string,string,TypeBase)
          • Description
          • EnumCases
          • Name
          • Parent
          • RawType
        • FunctionType
          • FunctionType(IType,IType[])
          • Equals(IType)
          • GetParameterAt(int)
          • ToString()
          • Description
          • Name
          • Parameters
          • Parent
          • ReturnType
          • TypeMembers
          • VariadicParameterType
        • Header
          • KeyFieldNumber
          • ValueFieldNumber
          • Header()
          • Header(Header)
          • CalculateSize()
          • Clone()
          • Equals(object)
          • Equals(Header)
          • GetHashCode()
          • MergeFrom(pb::CodedInputStream)
          • MergeFrom(Header)
          • ToString()
          • WriteTo(pb::CodedOutputStream)
          • Descriptor
          • Key
          • Parser
          • Value
        • IMarkupParser
          • ParseMarkup(string,string)
        • ISmartVariableEvaluator
          • TryGetSmartVariable<T>(string,T)
        • IType
          • Description
          • Name
          • Parent
          • TypeMembers
        • ITypeMember
          • Type
        • IVariableAccess
          • GetVariableKind(string)
          • TryGetValue<T>(string,T?)
          • Program
          • SmartVariableEvaluator
        • IVariableStorage
          • Clear()
          • SetValue(string,bool)
          • SetValue(string,float)
          • SetValue(string,string)
        • IYarnValue
          • ConvertTo<T>()
        • Library
          • DeregisterFunction(string)
          • FunctionExists(string)
          • GenerateUniqueVisitedVariableForNode(string)
          • GetFunction(string)
          • ImportLibrary(Library)
          • RegisterFunction(string,Delegate)
          • RegisterFunction<TResult>(string,Func<TResult>)
          • RegisterFunction<T1, TResult>(string,Func<T1, TResult>)
          • RegisterFunction<T1, T2, TResult>(string,Func<T1, T2, TResult>)
          • RegisterFunction<T1, T2, T3, TResult>(string,Func<T1, T2, T3, TResult>)
          • RegisterFunction<T1, T2, T3, T4, TResult>(string,Func<T1, T2, T3, T4, TResult>)
          • RegisterFunction<T1, T2, T3, T4, T5, TResult>(string,Func<T1, T2, T3, T4, T5, TResult>)
        • Line
          • Line(string,string[])
          • ID
          • Substitutions
        • LineHandler
        • Logger
        • MemoryVariableStore
          • Clear()
          • GetVariableKind(string)
          • SetValue(string,bool)
          • SetValue(string,float)
          • SetValue(string,string)
          • TryGetValue<T>(string,T?)
          • Program
          • SmartVariableEvaluator
        • Node
          • NodeGroupHeader
          • ToString()
          • ContentSaliencyConditionComplexityScore
          • ContentSaliencyConditionVariables
          • Headers
          • Instructions
          • IsNodeGroupHub
          • Name
          • NodeGroup
          • Tags
          • TrackingVariableName
        • NodeCompleteHandler
        • NodeStartHandler
        • OptionSet
          • Options
          • Option
            • ID
            • IsAvailable
            • Line
        • OptionsHandler
        • PrepareForLinesHandler
        • Program
          • GetVariableKind(string)
          • LineIDsForNode(string)
          • ToString()
          • TryGetInitialValue<T>(string,T)
          • InitialValues
          • Name
          • Nodes
        • TypeBase
          • Equals(object)
          • Equals(TypeBase)
          • GetHashCode()
          • IsAncestorOf(TypeBase)
          • IsConvertibleTo(TypeBase)
          • ToString()
          • ConvertibleToTypes
          • Description
          • Methods
          • Name
          • Parent
          • TypeMembers
        • Types
          • Any
          • Boolean
          • Number
          • String
          • TypeMappings
        • VariableKind
          • Smart
          • Stored
          • Unknown
      • Yarn.Saliency Namespace
        • BestLeastRecentlyViewedSaliencyStrategy
          • BestLeastRecentlyViewedSaliencyStrategy(IVariableStorage)
          • ContentWasSelected(ContentSaliencyOption)
          • QueryBestContent(IEnumerable<ContentSaliencyOption>)
        • BestSaliencyStrategy
          • ContentWasSelected(ContentSaliencyOption)
          • QueryBestContent(IEnumerable<ContentSaliencyOption>)
        • ContentSaliencyContentType
          • Line
          • Node
        • ContentSaliencyOption
          • ContentSaliencyOption(string)
          • ComplexityScore
          • ContentID
          • ContentType
          • FailingConditionValueCount
          • PassingConditionValueCount
          • ViewCountKey
        • EnumerableRandomExtension
          • RandomElement<T>(IEnumerable<T>)
        • FirstSaliencyStrategy
          • ContentWasSelected(ContentSaliencyOption)
          • QueryBestContent(IEnumerable<ContentSaliencyOption>)
        • IContentSaliencyStrategy
          • ContentWasSelected(ContentSaliencyOption)
          • QueryBestContent(IEnumerable<ContentSaliencyOption>)
        • RandomBestLeastRecentlyViewedSaliencyStrategy
          • RandomBestLeastRecentlyViewedSaliencyStrategy(IVariableStorage)
          • ContentWasSelected(ContentSaliencyOption)
          • QueryBestContent(IEnumerable<ContentSaliencyOption>)
      • Yarn.Markup Namespace
        • BuiltInMarkupReplacer
          • ProcessReplacementMarker(MarkupAttribute,StringBuilder,List<MarkupAttribute>,string)
        • IAttributeMarkerProcessor
          • ProcessReplacementMarker(MarkupAttribute,System.Text.StringBuilder,List<MarkupAttribute>,string)
        • LineParser
          • CharacterAttribute
          • CharacterAttributeNameProperty
          • NoMarkupAttribute
          • ReplacementMarkerContents
          • TrimWhitespaceProperty
          • DeregisterMarkerProcessor(string)
          • Dispose()
          • ExpandSubstitutions(string,IList<string>)
          • ParseString(string,string,bool)
          • RegisterMarkerProcessor(string,IAttributeMarkerProcessor)
          • MarkupDiagnostic
            • MarkupDiagnostic(string,int)
            • Equals(object)
            • Equals(MarkupDiagnostic)
            • GetHashCode()
            • M:Yarn.Markup.LineParser.MarkupDiagnostic.op_Equality(Yarn.Markup.LineParser.MarkupDiagnostic,Yarn.Markup.LineParser.MarkupDiagnostic)
            • M:Yarn.Markup.LineParser.MarkupDiagnostic.op_Inequality(Yarn.Markup.LineParser.MarkupDiagnostic,Yarn.Markup.LineParser.MarkupDiagnostic)
            • Column
            • Message
        • MarkupAttribute
          • Shift(int)
          • ToString()
          • TryGetProperty(string,bool)
          • TryGetProperty(string,int)
          • TryGetProperty(string,float)
          • TryGetProperty(string,string?)
          • TryGetProperty(string,MarkupValue)
          • Length
          • Name
          • Position
          • Properties
        • MarkupParseException
        • MarkupParseResult
          • MarkupParseResult(string,List<MarkupAttribute>)
          • DeleteRange(MarkupAttribute)
          • TextForAttribute(MarkupAttribute)
          • TryGetAttributeWithName(string,MarkupAttribute)
          • Attributes
          • Text
        • MarkupProperty
          • Name
          • Value
        • MarkupValue
          • ToString()
          • ToString(IFormatProvider)
          • BoolValue
          • FloatValue
          • IntegerValue
          • StringValue
          • Type
        • MarkupValueType
          • Bool
          • Float
          • Integer
          • String
        • TagType
          • Close
          • CloseAll
          • Open
          • SelfClosing
      • Yarn.Compiler Namespace
        • CompilationJob
          • CompilationType
          • Declarations
          • Files
          • Library
          • CreateFromFiles(IEnumerable<string>,Library?)
          • CreateFromFiles(string[])
          • CreateFromString(string,string,Library?,int)
          • CancellationToken
          • LanguageVersion
          • TypeDeclarations
          • VariableDeclarations
          • File
            • FileName
            • Source
          • Type
            • DeclarationsOnly
            • FullCompilation
            • StringsOnly
            • TypeCheck
        • CompilationResult
          • GetDescriptionForVariable(string)
          • GetLabelsForNode(string)
          • GetStringForKey(string)
          • ContainsErrors
          • ContainsImplicitStringTags
          • DebugInfo
          • Declarations
          • Diagnostics
          • FileTags
          • Program
          • ProjectDebugInfo
          • StringTable
          • UserDefinedTypes
        • Compiler
          • Compile(CompilationJob)
          • FlattenParseTree(IParseTree)
          • GetDocumentComments(CommonTokenStream,ParserRuleContext,bool)
          • GetLineIDForNodeName(string)
        • Declaration
          • ExternalDeclaration
          • CreateVariable(string,IType,IConvertible,string?)
          • ToString()
          • DefaultValue
          • Dependencies
          • Dependents
          • Description
          • InitialValueParserContext
          • IsImplicit
          • IsInlineExpansion
          • IsVariable
          • Name
          • Range
          • SourceFileLine
          • SourceFileName
          • SourceNodeName
          • Type
        • DeclarationBuilder
          • WithDefaultValue(System.IConvertible)
          • WithDescription(string?)
          • WithImplicit(bool)
          • WithName(string)
          • WithRange(Yarn.Compiler.Range)
          • WithSourceFileName(string)
          • WithSourceNodeName(string)
          • WithType(IType)
          • Declaration
        • Diagnostic
          • Diagnostic(string,IToken,string,DiagnosticSeverity)
          • Diagnostic(string,ParserRuleContext?,string,DiagnosticSeverity)
          • Diagnostic(string,string,DiagnosticSeverity)
          • Diagnostic(string,DiagnosticSeverity)
          • Diagnostic(string,Range,string,DiagnosticSeverity)
          • Equals(object)
          • GetHashCode()
          • ToString()
          • Column
          • Context
          • FileName
          • Line
          • Message
          • Range
          • Severity
          • DiagnosticSeverity
            • Error
            • Info
            • Warning
        • EnumTypeBuilder
          • FromEnum<TEnum>(string?)
        • FileParseResult
          • FileParseResult(string,IParseTree,CommonTokenStream)
          • Equals(object)
          • GetHashCode()
          • Name
          • Tokens
          • Tree
        • FunctionTypeBuilder
          • FromFunctionType(System.Type)
          • WithParameter(IType)
          • WithReturnType(IType)
          • WithVariadicParameterType(IType?)
          • FunctionType
        • IndentAwareLexer
          • IndentAwareLexer(ICharStream,TextWriter,TextWriter)
          • IsInWhenClause()
          • NextToken()
          • SetInWhenClause(bool)
          • Warnings
          • LexerWarning
            • Message
            • Token
        • NodeDebugInfo
          • NodeDebugInfo(string?,string)
          • GetLineInfo(int)
          • FileName
          • IsImplicit
          • NodeName
          • Range
          • LineInfo
            • FileName
            • NodeName
            • Position
        • Position
          • Equals(object)
          • GetHashCode()
          • M:Yarn.Compiler.Position.op_GreaterThanOrEqual(Yarn.Compiler.Position,Yarn.Compiler.Position)
          • M:Yarn.Compiler.Position.op_LessThanOrEqual(Yarn.Compiler.Position,Yarn.Compiler.Position)
          • ToString()
          • Character
          • IsValid
          • Line
        • Project
          • CurrentProjectFileVersion
          • WorkspaceRootPlaceholder
          • YarnSpinnerProjectVersion2
          • YarnSpinnerProjectVersion3
          • Project()
          • Project(string,string?)
          • GetJson()
          • IsMatchingPath(string)
          • IsValidVersionNumber(int)
          • LoadFromFile(string,string?)
          • SaveToFile(string)
          • AllowLanguagePreviewFeatures
          • BaseLanguage
          • CompilerOptions
          • Definitions
          • DefinitionsFiles
          • DefinitionsPath
          • ExcludeFilePatterns
          • ExtensionData
          • FileVersion
          • Localisation
          • Path
          • SourceFilePatterns
          • SourceFiles
          • WorkspaceRootPath
          • LocalizationInfo
            • Assets
            • Strings
        • ProjectDebugInfo
          • GetNodeDebugInfo(string)
          • Nodes
        • Range
          • Range()
          • Range(int,int,int,int)
          • Equals(object)
          • GetHashCode()
          • ToString()
          • End
          • IsValid
          • Start
        • StringInfo
          • fileName
          • isImplicitTag
          • lineNumber
          • metadata
          • nodeName
          • shadowLineID
          • text
          • ToString()
        • Utility
          • AddTagsToLines(string,ICollection<string>?)
          • DetermineNodeConnections(string[])
          • ExtractStringBlocks(IEnumerable<Node>,ProjectDebugInfo)
          • GenerateYarnFileWithDeclarations(IEnumerable<Yarn.Compiler.Declaration>,string,IEnumerable<string>?,IDictionary<string, string>?)
          • GetCompiledCodeAsString(Program,Library?,CompilationResult?)
          • GetYarnValue(IConvertible)
          • ParseSource(string)
          • TagLines(string,ICollection<string>?)
          • TryGetNodeTitle(string?,YarnSpinnerParser.NodeContext,string?,string?,string?,string?)
      • Yarn.Compiler.Upgrader Namespace
        • LanguageUpgrader
          • Upgrade(UpgradeJob)
        • TextReplacement
          • Comment
          • OriginalText
          • ReplacementText
          • Start
          • StartLine
          • OriginalLength
          • ReplacementLength
        • UpgradeJob
          • Files
          • UpgradeType
          • UpgradeJob(UpgradeType,IEnumerable<CompilationJob.File>)
        • UpgradeResult
          • Files
          • Diagnostics
          • OutputFile
            • Diagnostics
            • IsNewFile
            • OriginalSource
            • Path
            • Replacements
            • UpgradedSource
        • UpgradeType
          • Version1to2
      • Yarn.Unity Namespace
        • ActionMarkupHandler
          • OnCharacterWillAppear(int,MarkupParseResult,CancellationToken)
          • OnLineDisplayBegin(MarkupParseResult,TMP_Text)
          • OnLineDisplayComplete()
          • OnLineWillDismiss()
          • OnPrepareForLine(MarkupParseResult,TMP_Text)
        • ActionRegistrationExtension
          • AddCommandHandler(IActionRegistration,string,System.Action)
          • AddCommandHandler(IActionRegistration,string,System.Func<IEnumerator>)
          • AddCommandHandler(IActionRegistration,string,System.Func<Coroutine>)
          • AddCommandHandler(IActionRegistration,string,System.Func<YarnTask>)
          • AddCommandHandler<T1>(IActionRegistration,string,System.Action<T1>)
          • AddCommandHandler<T1>(IActionRegistration,string,System.Func<T1, IEnumerator>)
          • AddCommandHandler<T1>(IActionRegistration,string,System.Func<T1, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1>(IActionRegistration,string,System.Func<T1, Coroutine>)
          • AddCommandHandler<T1>(IActionRegistration,string,System.Func<T1, YarnTask>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(IActionRegistration,string,System.Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, IEnumerator>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, Coroutine>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, YarnTask>)
          • AddCommandHandler<T1, T2>(IActionRegistration,string,System.Action<T1, T2>)
          • AddCommandHandler<T1, T2>(IActionRegistration,string,System.Func<T1, T2, IEnumerator>)
          • AddCommandHandler<T1, T2>(IActionRegistration,string,System.Func<T1, T2, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2>(IActionRegistration,string,System.Func<T1, T2, Coroutine>)
          • AddCommandHandler<T1, T2>(IActionRegistration,string,System.Func<T1, T2, YarnTask>)
          • AddCommandHandler<T1, T2, T3>(IActionRegistration,string,System.Action<T1, T2, T3>)
          • AddCommandHandler<T1, T2, T3>(IActionRegistration,string,System.Func<T1, T2, T3, IEnumerator>)
          • AddCommandHandler<T1, T2, T3>(IActionRegistration,string,System.Func<T1, T2, T3, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2, T3>(IActionRegistration,string,System.Func<T1, T2, T3, Coroutine>)
          • AddCommandHandler<T1, T2, T3>(IActionRegistration,string,System.Func<T1, T2, T3, YarnTask>)
          • AddCommandHandler<T1, T2, T3, T4>(IActionRegistration,string,System.Action<T1, T2, T3, T4>)
          • AddCommandHandler<T1, T2, T3, T4>(IActionRegistration,string,System.Func<T1, T2, T3, T4, IEnumerator>)
          • AddCommandHandler<T1, T2, T3, T4>(IActionRegistration,string,System.Func<T1, T2, T3, T4, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2, T3, T4>(IActionRegistration,string,System.Func<T1, T2, T3, T4, Coroutine>)
          • AddCommandHandler<T1, T2, T3, T4>(IActionRegistration,string,System.Func<T1, T2, T3, T4, YarnTask>)
          • AddCommandHandler<T1, T2, T3, T4, T5>(IActionRegistration,string,System.Action<T1, T2, T3, T4, T5>)
          • AddCommandHandler<T1, T2, T3, T4, T5>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, IEnumerator>)
          • AddCommandHandler<T1, T2, T3, T4, T5>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2, T3, T4, T5>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, Coroutine>)
          • AddCommandHandler<T1, T2, T3, T4, T5>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, YarnTask>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6>(IActionRegistration,string,System.Action<T1, T2, T3, T4, T5, T6>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, IEnumerator>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, Coroutine>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, YarnTask>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7>(IActionRegistration,string,System.Action<T1, T2, T3, T4, T5, T6, T7>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, IEnumerator>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, Coroutine>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, YarnTask>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8>(IActionRegistration,string,System.Action<T1, T2, T3, T4, T5, T6, T7, T8>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, IEnumerator>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, Coroutine>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, YarnTask>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9>(IActionRegistration,string,System.Action<T1, T2, T3, T4, T5, T6, T7, T8, T9>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, IEnumerator>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, System.Threading.Tasks.Task>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, Coroutine>)
          • AddCommandHandler<T1, T2, T3, T4, T5, T6, T7, T8, T9>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, YarnTask>)
          • AddFunction<TResult>(IActionRegistration,string,System.Func<TResult>)
          • AddFunction<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>)
          • AddFunction<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>)
          • AddFunction<T1, TResult>(IActionRegistration,string,System.Func<T1, TResult>)
          • AddFunction<T1, T2, TResult>(IActionRegistration,string,System.Func<T1, T2, TResult>)
          • AddFunction<T1, T2, T3, TResult>(IActionRegistration,string,System.Func<T1, T2, T3, TResult>)
          • AddFunction<T1, T2, T3, T4, TResult>(IActionRegistration,string,System.Func<T1, T2, T3, T4, TResult>)
          • AddFunction<T1, T2, T3, T4, T5, TResult>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, TResult>)
          • AddFunction<T1, T2, T3, T4, T5, T6, TResult>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, TResult>)
          • AddFunction<T1, T2, T3, T4, T5, T6, T7, TResult>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, TResult>)
          • AddFunction<T1, T2, T3, T4, T5, T6, T7, T8, TResult>(IActionRegistration,string,System.Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult>)
        • Actions
          • Actions(IActionRegistration,Library)
          • AddCommandHandler(string,Delegate)
          • AddCommandHandler(string,Func<object>)
          • AddCommandHandler(string,MethodInfo)
          • AddFunction(string,Delegate)
          • AddRegistrationMethod(ActionRegistrationMethod)
          • RegisterActions()
          • RegisterFunctionDeclaration(string,Type,Type[])
          • RemoveCommandHandler(string)
          • RemoveFunction(string)
          • SetupForProject(YarnProject)
          • ActionRegistrar
          • Commands
          • Library
        • BuiltinLocalisedLineProvider
          • DeregisterMarkerProcessor(string)
          • GetLocalizedLineAsync(Line,CancellationToken)
          • PrepareForLinesAsync(IEnumerable<string>,CancellationToken)
          • RegisterMarkerProcessor(string,Markup.IAttributeMarkerProcessor)
          • AssetLocaleCode
          • LocaleCode
        • Culture
          • DisplayName
          • IsNeutralCulture
          • Name
          • NativeName
          • Culture(System.Globalization.CultureInfo)
        • Cultures
          • GetCulture(string)
          • GetCultures()
          • HasCulture(string)
          • TryGetCulture(string,Culture)
          • CurrentNeutralCulture
        • DialogueOption
          • DialogueOptionID
          • IsAvailable
          • Line
          • TextID
        • DialoguePresenterBase
          • OnDialogueCompleteAsync()
          • OnDialogueStartedAsync()
          • RunLineAsync(LocalizedLine,LineCancellationToken)
          • RunOptionsAsync(DialogueOption[],CancellationToken)
        • DialogueReference
          • nodeName
          • project
          • DialogueReference()
          • DialogueReference(YarnProject,string)
          • IsValid
        • DialogueRunner
          • autoStart
          • onDialogueComplete
          • onDialogueStart
          • onNodeComplete
          • onNodeStart
          • onUnhandledCommand
          • runSelectedOptionAsLine
          • startNode
          • AddCommandHandler(string,Delegate)
          • AddCommandHandler(string,MethodInfo)
          • AddFunction(string,Delegate)
          • GetPauseDurationsInsideLine(Markup.MarkupParseResult)
          • LoadStateFromPersistentStorage(string)
          • RegisterFunctionDeclaration(string,Type,Type[])
          • RemoveCommandHandler(string)
          • RemoveFunction(string)
          • RequestHurryUpLine()
          • RequestNextLine()
          • SaveStateToPersistentStorage(string)
          • SetProject(YarnProject)
          • SplitCommandText(string)
          • StartDialogue(string)
          • Stop()
          • Dialogue
          • DialoguePresenters
          • DialogueTask
          • DialogueViews
          • IsDialogueRunning
          • IsInPlaymode
          • LineProvider
          • NoOptionSelected
          • VariableStorage
          • YarnProject
        • Effects
          • FadeAlpha(CanvasGroup,float,float,float,CancellationToken)
          • FadeAlpha(CanvasGroup,float,float,float,CoroutineInterruptToken?)
          • FadeAlphaAsync(CanvasGroup,float,float,float,CancellationToken)
          • PausableTypewriter(TextMeshProUGUI,float,Action?,Action?,Action?,Stack<(int position, float duration)>?,CoroutineInterruptToken?)
          • Typewriter(TextMeshProUGUI,float,Action,CoroutineInterruptToken?)
          • CoroutineInterruptToken
            • Complete()
            • Interrupt()
            • Start()
            • CanInterrupt
            • WasInterrupted
        • GeneratedVariableStorageExtensions
          • GetEnumValueOrDefault<T>(IGeneratedVariableStorage,string)
          • GetValueOrDefault<T>(IGeneratedVariableStorage,string)
          • SetValue<T>(IGeneratedVariableStorage,string,T)
        • IActionMarkupHandler
          • OnCharacterWillAppear(int,MarkupParseResult,CancellationToken)
          • OnLineDisplayBegin(MarkupParseResult,TMP_Text)
          • OnLineDisplayComplete()
          • OnLineWillDismiss()
          • OnPrepareForLine(MarkupParseResult,TMP_Text)
        • IActionRegistration
          • AddCommandHandler(string,Delegate)
          • AddCommandHandler(string,MethodInfo)
          • AddFunction(string,Delegate)
          • RegisterFunctionDeclaration(string,Type,Type[])
          • RemoveCommandHandler(string)
          • RemoveFunction(string)
        • IAssetProvider
          • GetAssetsOfType<T>()
          • TryGetAsset<T>(T?)
        • ICommand
          • Name
        • IGeneratedVariableStorage
        • ILineProvider
          • DeregisterMarkerProcessor(string)
          • GetLocalizedLineAsync(Line,CancellationToken)
          • PrepareForLinesAsync(IEnumerable<string>,CancellationToken)
          • RegisterMarkerProcessor(string,Yarn.Markup.IAttributeMarkerProcessor)
          • LocaleCode
          • YarnProject
        • InMemoryVariableStorage
          • showDebug
          • Clear()
          • Contains(string)
          • GetAllVariables()
          • GetDebugList()
          • SetAllVariables(Dictionary<string, float>,Dictionary<string, string>,Dictionary<string, bool>,bool)
          • SetValue(string,bool)
          • SetValue(string,float)
          • SetValue(string,string)
          • TryGetValue<T>(string,T)
        • IYarnTask
          • Forget()
          • IsCompleted()
          • IsCompletedSuccessfully()
        • LineAdvancer
          • advanceRequestsBeforeCancellingLine
          • multiAdvanceIsCancel
          • OnCharacterWillAppear(int,MarkupParseResult,CancellationToken)
          • OnDialogueCompleteAsync()
          • OnDialogueStartedAsync()
          • OnLineDisplayBegin(MarkupParseResult,TMP_Text)
          • OnLineDisplayComplete()
          • OnLineWillDismiss()
          • OnPrepareForLine(MarkupParseResult,TMP_Text)
          • RequestDialogueCancellation()
          • RequestLineHurryUp()
          • RequestNextLine()
          • RunLineAsync(LocalizedLine,LineCancellationToken)
          • RunOptionsAsync(DialogueOption[],CancellationToken)
          • InputMode
            • InputActions
            • KeyCodes
            • LegacyInputAxes
            • None
        • LineCancellationToken
          • HurryUpToken
          • NextLineToken
          • IsHurryUpRequested
          • IsNextLineRequested
        • LineMetadata
          • LineMetadata()
          • AddMetadata(string,IEnumerable<string>)
          • GetLineIDs()
          • GetMetadata(string)
          • GetShadowLineSource(string)
        • LinePresenter
          • autoAdvance
          • autoAdvanceDelay
          • canvasGroup
          • characterNameContainer
          • characterNameText
          • fadeDownDuration
          • fadeUpDuration
          • lineText
          • showCharacterNameInLineView
          • temporalProcessors
          • typewriterEffectSpeed
          • useFadeEffect
          • useTypewriterEffect
          • OnDialogueCompleteAsync()
          • OnDialogueStartedAsync()
          • RunLineAsync(LocalizedLine,LineCancellationToken)
          • RunOptionsAsync(DialogueOption[],CancellationToken)
        • LinePresenterButtonHandler
          • OnCharacterWillAppear(int,MarkupParseResult,CancellationToken)
          • OnLineDisplayBegin(MarkupParseResult,TMP_Text)
          • OnLineDisplayComplete()
          • OnLineWillDismiss()
          • OnPrepareForLine(MarkupParseResult,TMP_Text)
        • LineProviderBehaviour
          • DeregisterMarkerProcessor(string)
          • GetLocalizedLineAsync(Line,CancellationToken)
          • PrepareForLinesAsync(IEnumerable<string>,CancellationToken)
          • RegisterMarkerProcessor(string,IAttributeMarkerProcessor)
          • Start()
          • LocaleCode
          • YarnProject
        • Localization
          • AddLocalizedString(string,string)
          • AddLocalizedStrings(IEnumerable<KeyValuePair<string, string>>)
          • AddLocalizedStrings(IEnumerable<StringTableEntry>)
          • Clear()
          • ContainsLocalizedObject<T>(string)
          • ContainsLocalizedString(string)
          • GetLineIDs()
          • GetLocalizedObjectAsync<T>(string)
          • GetLocalizedString(string)
          • UsesAddressableAssets
          • LocalizationTableEntry
            • localizedAsset
            • localizedAssetReference
            • localizedString
        • LocalizationType
          • Unity
          • YarnInternal
        • LocalizedLine
          • Asset
          • InvalidLine
          • Metadata
          • RawText
          • Substitutions
          • TextID
          • CharacterName
          • Text
          • TextWithoutCharacterName
        • MarkupPalette
          • BasicMarkers
          • CustomMarkers
          • ColorForMarker(string,Color)
          • PaletteForMarker(string,CustomMarker)
          • BasicMarker
            • Boldened
            • Color
            • CustomColor
            • Italicised
            • Marker
            • Strikedthrough
            • Underlined
          • CustomMarker
            • End
            • Marker
            • MarkerOffset
            • Start
        • OptionItem
          • completionToken
          • OnOptionSelected
          • InvokeOptionSelected()
          • OnDeselect(BaseEventData)
          • OnPointerClick(PointerEventData)
          • OnPointerEnter(PointerEventData)
          • OnSelect(BaseEventData)
          • OnSubmit(BaseEventData)
          • IsHighlighted
          • Option
        • OptionsPresenter
          • fadeDownDuration
          • fadeUpDuration
          • showUnavailableOptions
          • useFadeEffect
          • OnDialogueCompleteAsync()
          • OnDialogueStartedAsync()
          • RunLineAsync(LocalizedLine,LineCancellationToken)
          • RunOptionsAsync(DialogueOption[],CancellationToken)
        • PauseEventProcessor
          • OnCharacterWillAppear(int,MarkupParseResult,CancellationToken)
          • OnLineDisplayBegin(MarkupParseResult,TMP_Text)
          • OnLineDisplayComplete()
          • OnLineWillDismiss()
          • OnPrepareForLine(MarkupParseResult,TMP_Text)
        • RegistrationType
          • Compilation
          • Runtime
        • ReplacementMarkupHandler
          • NoDiagnostics
          • ProcessReplacementMarker(MarkupAttribute,StringBuilder,List<MarkupAttribute>,string)
        • SerializableDictionary
          • Storage<T>
            • data
        • SerializableDictionary<TKey, TValue>
          • SerializableDictionary()
          • SerializableDictionary(IDictionary<TKey, TValue>)
        • SerializableDictionary<TKey, TValue, TValueStorage>
          • SerializableDictionary()
          • SerializableDictionary(IDictionary<TKey, TValue>)
        • SerializableDictionaryBase
          • Storage
        • SerializableDictionaryBase<TKey, TValue, TValueStorage>
          • SerializableDictionaryBase()
          • SerializableDictionaryBase(IDictionary<TKey, TValue>)
          • Add(TKey,TValue)
          • Add(KeyValuePair<TKey, TValue>)
          • Add(object,object)
          • Clear()
          • Contains(KeyValuePair<TKey, TValue>)
          • Contains(object)
          • ContainsKey(TKey)
          • CopyFrom(IDictionary<TKey, TValue>)
          • CopyTo(Array,int)
          • CopyTo(KeyValuePair<TKey, TValue>[],int)
          • GetEnumerator()
          • GetObjectData(SerializationInfo,StreamingContext)
          • OnAfterDeserialize()
          • OnBeforeSerialize()
          • OnDeserialization(object)
          • Remove(TKey)
          • Remove(KeyValuePair<TKey, TValue>)
          • Remove(object)
          • TryGetValue(TKey,TValue)
          • Count
          • IsFixedSize
          • IsReadOnly
          • IsSynchronized
          • this[TKey key]
          • this[object key]
          • Keys
          • SyncRoot
          • Values
        • StringTableEntry
          • Comment
          • File
          • ID
          • Language
          • LineNumber
          • Lock
          • Node
          • Text
          • StringTableEntry(StringTableEntry)
          • CreateCSV(IEnumerable<StringTableEntry>)
          • Equals(object)
          • GetHashCode()
          • ParseFromCSV(string)
          • ToString()
        • StyleMarkerProcessor
          • lineProvider
          • ProcessReplacementMarker(MarkupAttribute,StringBuilder,List<MarkupAttribute>,string)
        • UnityEventString
        • VariableStorageBehaviour
          • AddChangeListener<T>(string,Action<T>)
          • Clear()
          • Contains(string)
          • GetAllVariables()
          • GetVariableKind(string)
          • SetAllVariables(FloatDictionary,StringDictionary,BoolDictionary,bool)
          • SetValue(string,bool)
          • SetValue(string,float)
          • SetValue(string,string)
          • TryGetValue<T>(string,T?)
          • Program
          • SmartVariableEvaluator
        • VoiceOverPresenter
          • audioSource
          • dialogueRunner
          • endLineWhenVoiceoverComplete
          • fadeOutTimeOnLineFinish
          • waitTimeAfterLineComplete
          • waitTimeBeforeLineStart
          • OnDialogueCompleteAsync()
          • OnDialogueStartedAsync()
          • RunLineAsync(LocalizedLine,LineCancellationToken)
          • RunOptionsAsync(DialogueOption[],CancellationToken)
        • YarnActionAttribute
          • Name
        • YarnCommandAttribute
        • YarnFunctionAttribute
        • YarnProject
          • baseLocalization
          • compiledYarnProgram
          • lineMetadata
          • localizations
          • localizationType
          • GetHeaders(string)
          • GetLineIDsForNodes(IEnumerable<string>)
          • GetLocalization(string)
          • InitialValues
          • NodeNames
          • Program
          • ShadowTableDictionary
          • ShadowTableEntry
            • shadowMetadata
            • sourceLineID
        • YarnTask
          • Delay(int,CancellationToken)
          • Delay(TimeSpan,CancellationToken)
          • Forget()
          • FromResult<T>(T)
          • GetAwaiter()
          • IsCompleted()
          • IsCompletedSuccessfully()
          • SuppressCancellationThrow()
          • ToCoroutine(Func<YarnTask>)
          • WaitForAsyncOperation(AsyncOperationHandle,CancellationToken)
          • WaitForAsyncOperation<T>(AsyncOperationHandle<T>,CancellationToken)
          • WaitUntil(System.Func<bool>,System.Threading.CancellationToken)
          • WaitUntilCanceled(System.Threading.CancellationToken)
          • WhenAll(IEnumerable<YarnTask>)
          • WhenAll(YarnTask[])
          • WhenAll<T>(IEnumerable<YarnTask<T>>)
          • WhenAll<T>(YarnTask<T>[])
          • Yield()
          • CompletedTask
        • YarnTask<T>
          • Forget()
          • FromResult(T)
          • GetAwaiter()
          • IsCompleted()
          • IsCompletedSuccessfully()
        • YarnTaskCompletionSource
          • TrySetCanceled()
          • TrySetException(System.Exception)
          • TrySetResult()
          • Task
        • YarnTaskCompletionSource<T>
          • TrySetCanceled()
          • TrySetException(System.Exception)
          • TrySetResult(T)
          • Task
        • YarnTaskExtensions
          • WaitForCoroutine(MonoBehaviour,IEnumerator)
          • WaitForCoroutine(MonoBehaviour,Coroutine)
      • Yarn.Unity.Legacy Namespace
        • DialogueAdvanceInput
          • continueAction
          • continueActionButtonName
          • continueActionKeyCode
          • continueActionOnButtonRelease
          • continueActionReference
          • continueActionType
          • dialogueView
          • enableActionOnStart
          • Action
          • ContinueActionType
            • InputSystemAction
            • InputSystemActionFromAsset
            • KeyCode
            • None
            • VirtualButton
          • ContinueButtonActionType
            • Down
            • Up
        • DialogueViewBase
          • requestInterrupt
          • DialogueComplete()
          • DialogueStarted()
          • DismissLine(Action)
          • InterruptLine(LocalizedLine,Action)
          • OnDialogueCompleteAsync()
          • OnDialogueStartedAsync()
          • RunLine(LocalizedLine,Action)
          • RunLineAsync(LocalizedLine,LineCancellationToken)
          • RunOptions(DialogueOption[],Action<int>)
          • RunOptionsAsync(DialogueOption[],CancellationToken)
          • UserRequestedViewAdvancement()
        • LineView
          • autoAdvance
          • canvasGroup
          • characterNameContainer
          • characterNameText
          • continueButton
          • fadeInTime
          • fadeOutTime
          • holdTime
          • lineText
          • onCharacterTyped
          • onPauseEnded
          • onPauseStarted
          • palette
          • showCharacterNameInLineView
          • typewriterEffectSpeed
          • useFadeEffect
          • useTypewriterEffect
          • AddLineBreaks(Markup.MarkupParseResult)
          • DialogueComplete()
          • DismissLine(Action)
          • InterruptLine(LocalizedLine,Action)
          • OnContinueClicked()
          • PaletteMarkedUpText(Markup.MarkupParseResult,MarkupPalette,bool)
          • RunLine(LocalizedLine,Action)
          • UserRequestedViewAdvancement()
        • OptionsListView
          • DialogueComplete()
          • OnEnable()
          • Reset()
          • RunLine(LocalizedLine,Action)
          • RunOptions(DialogueOption[],Action<int>)
          • Start()
        • OptionView
          • OnOptionSelected
          • palette
          • InvokeOptionSelected()
          • OnPointerClick(PointerEventData)
          • OnPointerEnter(PointerEventData)
          • OnSubmit(BaseEventData)
          • Option
      • Yarn.Unity.Samples Namespace
        • SampleRenderDetector
      • Yarn.Unity.UnityLocalization Namespace
        • LineMetadata
          • nodeName
          • tags
          • ShadowLineSource
        • UnityLocalisedLineProvider
          • DeregisterMarkerProcessor(string)
          • GetLocalizedLineAsync(Line,CancellationToken)
          • PrepareForLinesAsync(IEnumerable<string>,CancellationToken)
          • RegisterMarkerProcessor(string,IAttributeMarkerProcessor)
          • LocaleCode
    • Rust
      • bevy_yarnspinner
      • bevy_yarnspinner_example_dialogue_view
      • yarnspinner
Powered by GitBook
On this page
  • Writing Yarn with Try Yarn Spinner
  • Visit Try Yarn Spinner at https://try.yarnspinner.dev
  • Create a Start node with a line of dialogue
  • Play your Yarn Script
  • Add a two more nodes
  • Add a Jump Command
  • Play your Yarn Spinner Script again
  • Introducing Options
  • Play your Yarn Spinner Script yet again
  • What did we just do?

Was this helpful?

Edit on GitHub
Export as PDF

Beginner's Guide

If you're totally new to Yarn Spinner, this is the place to start.

PreviousYarn Spinner 3NextAbout Yarn Spinner

Last updated 1 month ago

Was this helpful?

Writing Yarn with Try Yarn Spinner

When you first start learning Yarn, you can use Try Yarn Spinner, our introductory, browser- based tool for writing Yarn Spinner Scripts. No installation necessary!

As you learn to write dialogue and game scripts with Yarn, you'll eventually need to use our editor, which is a Visual Studio Code Extension. Before you get to that stage, the best place to experiment with, and explore Yarn Spinner, is Try Yarn Spinner. We strongly recommend that you learn piece by piece.

1

Visit Try Yarn Spinner at https://try.yarnspinner.dev

In Yarn, everything you write is text and structured around nodes and lines.

In Try Yarn Spinner, the first node to run is always called Start, so we’ll write that now.

In your own games or narratives outside of Try Yarn Spinner, the first node can be named whatever you like.

2

Create a Start node with a line of dialogue

Copy and paste, or write, this Yarn Spinner script into Try Yarn Spinner, and hit the Run button in the top-right.



 Hi, I'm the narrator for the documentation!

This is a node. A node must always start with a header containing a single key and value pair to set the node's title. The key is title and the value is Start . They are separated by a : . Node titles must start with a letter, and can only contain letters, numbers and underscores.

The header ends with a line containing only --- and the body of the node follows. The body is where the lines are kept.

There is a single line here: Narrator: Hi, I'm the narrator for the documentation! A line can contain whatever you want, and doesn't have to begin with a character name.

Finally, the node ends with a line containing only ===.

3

Play your Yarn Script

Use the Run button in the top right-hand corner of Try Yarn Spinner to run your Yarn Spinner Script. You can play through it in the right pane. There isn't much to play right now!

4

Add a two more nodes

In the left-hand pane of Try Yarn Spinner, add a new node by copy and pasting, or writing, the following snippet of Yarn Spinner script. Place it below the previous node.

title: Adventure
---
Narrator: We're going to go on an adventure!
===

title: Cave
---
Narrator: Let's look inside the spooky cave...
===

You may want to Run the Yarn Spinner Script to see what happens. You'll probably notice that nothing has changed!

That's because there is currently no path to these nodes from the Start node. To add a path, you'll need to use the jump command.

5

Add a Jump Command

Update the contents of the Start node, and add a jump command, like this:

title: Start
---
Narrator: Hi, I'm the narrator for the documentation!

===

All commands in Yarn Spinner are surrounded by << and >>. A jump command contains the jump keyword, and then the title of the node you want to jump to.

So, this particular jump command will jump to the node titled Adventure.

6

Play your Yarn Spinner Script again

Use the Run button in the top right-hand corner of Try Yarn Spinner to run your Yarn Spinner Script again. Your story is now slightly more interesting!

You'll notice that when the line containing the jump command arrives, the story continues in the node that was jumped to so you'll now also see the line Narrator: We're going to go on an adventure!

Our story isn't particularly amazing, but we still have another node that's not being used...

7

Introducing Options

We're going to introduce one final concept in this Beginner's Guide: Options.

Update your Adventure node to look like the following:

The lines the start with -> are known as options. Options provide a choice to the player and always begin with a ->.

title: Adventure
---
Narrator: We're going to go on an adventure!
-> OK! Let's go!
    <<jump Cave>>
-> I don't want to go on an adventure...
    Narrator: Oh, OK then.
===

All options at the same level, in the same node, are presented at the same time. So the options we added here will be presented together. Lines indented after an option will only be run if that option is chosen.

Any lines that are not options but occur after options will only be run if one of the options does not jump away to another node.

8

Play your Yarn Spinner Script yet again

Use the Run button to once again run your script.

You'll notice that when you choose the line OK! Let's go! the action will jump to the node entitle Cave. Great, right?

What did we just do?

We just wrote a simple Yarn Spinner script consisting of one node (titled Start), with one line inside that node, delivering a greeting from a narrator.

Then we added two more nodes, a jump command, and some options, with jumps occuring depending on the option chosen.

And that's the very basics of Yarn Spinner Scripting! Dive into the Fundamentals of Writing Yarn Scripts next.