The friendly tool for writing game dialogue, in and for Godot
Getting Started | Documentation | Tutorial | Follow me 🐦!
--- **Wol** is a tool for creating interactive dialogue for games. Its based on [YarnSpinner](https://yarnspinner.dev/) and it's Yarn language. Write your conversations in *Yarn*, a simple programming language that's designed to be easy for writers to learn, while also powerful enough to handle whatever you need. Yarn's similar in style to [Twine](http://twinery.org), so if you already know that, you'll be right at home! If you don't, that's cool - Yarn's syntax is extremely minimal, and there's not much there to learn. ## Getting Started This repo contains the source code for the Wol compiler. If you want to use it in a game engine other than Godot, you should get the appropriate package for your game engine. Check out [YarnSpinner-Unity](https://github.com/YarnSpinnerTool/YarnSpinner-Unity) for a Unity version of this project. ### Download from AssetLib Unfortunately, this option isn't available yet. Stay tuned! ### Clone this repository / [download the zip](https://github.com/bram-dingelstad/Wol/archive/refs/heads/main.zip) 1. Extract the repository in a folder of your choice. 2. Import the project in Godot. 3. Run the scene to get a taste of Wol! 4. Move the addons folder to your Godot project. 5. Enable the plugin in your Project Settings. 6. Setup the Wol node using the [documentation](README.md#Documentation) or [tutorial](README.md#Tutorial)! ## Roadmap There are few things that need to be ironed out to be 100% feature compatible with the original YarnSpinner. - [ ] Integration with Godot's translation/localization system. - [ ] Full support for [format functions](https://yarnspinner.dev/docs/syntax/#format-functions). - [ ] In-editor dialogue editor with preview. - [ ] Fully extend the documentation of this project. - [ ] Document the `Option` object. - [ ] Write the method descriptions for the `Wol` node. - [ ] Write a basic "Hello World"-esque tutorial. - [ ] Write a more advanced "Custom `Wol` Node" tutorial. - [ ] Perhaps write a little bit about the internals 🤷 (?). - [ ] Provide helpful anchors in the documentation. - [x] Porting to usable signals in Godot. - [x] Providing helpful errors when failing to compile. - [x] Having a working repository with example code. ## Getting Help There are several places to get help with Wol, and stay up to date with what's happening. * [Follow me on Twitter](https://twitter.com/bram_dingelstad) or [@ me](https://twitter.com/intent/tweet?text=Hey%20@bram_dingelstad,%20I%20need%20help%20using%20%23Wol%21)! * Open an issue on [Github](https://github.com/bram-dingelstad/Wol/issues)! ## License Wol is available under the [MIT License](LICENSE.md). This means that you can use it in any commercial or noncommercial project. The only requirement is that you need to include attribution in your game's docs. A credit would be very, very nice, too, but isn't required. If you'd like to know more about what this license lets you do, tldrlegal.com have a [very nice write up about the MIT license](https://tldrlegal.com/license/mit-license) that you might find useful. ## Made by Bram Dingelstad, kyperbelt & Secret Lab Yarn Spinner was originally created by [Secret Lab](http://secretlab.com.au), an Australian game dev studio. [Say hi to them for me!](https://twitter.com/thesecretlab)! Started on Godot by [kyperbelt](https://github.com/kyperbelt/GDYarn) (thank you so much for the initial work!) and completed by Bram Dingelstad. [Say hi to me as well!](https://bram.dingelstad.works/) ## Help Me Make Wol & Secret Lab's Yarn Spinner! Wol & Yarn Spinner needs your help to be as awesome as it can be! You don't have to be a coder to help out - we'd love to have your help in improving this or YarnSpinner's [documentation](https://yarnspinner.dev/docs/tutorial), in spreading the word, and in finding bugs. * Yarn Spinner's development is powered by our wonderful Patreon supporters. [Become a patron](https://patreon.com/secretlab), and help us make Yarn Spinner be amazing. * The [issues page](https://github.com/bram-dingelstad/Wol/issues) contains a list of things we'd love your help in improving. * Join Secret Lab's discussion on Slack by joining the [narrative game development](http://lab.to/narrativegamedev) channel. * Follow [Bram Dingelstad](https://twitter.com/bram_dingelstad) & [Yarn Spinner](http://twitter.com/YarnSpinnerTool). # Documentation ## `Wol` _Inherits from [Node](https://docs.godotengine.org/en/stable/classes/class_node.html)_ Node for all interaction with Wol. ### Description Godot's Nodes as building blocks work really well. That's why this plugin gives you access to a simple node that does all the heavy lifting for you. It has several properties that you can change either in-editor or using GDScript (or any other compatible language) and signals you can use to listen to events coming from your dialogue. ### Properties | Type | Property | Default value | |--------------|-----------|------------| | [String](https://docs.godotengine.org/en/lastest/classes/class_string.html#class-string) | path | `''` | | [String](https://docs.godotengine.org/en/lastest/classes/class_string.html#class-string) | starting_node | `'Start'` | | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | auto_start | `false` | | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | auto_show_options | `false` | | [bool](https://docs.godotengine.org/en/stable/classes/class_bool.html) | auto_substitute | `true` | | [Dictionary](https://docs.godotengine.org/en/stable/classes/class_dictionary.html) | variable_storage | `{}` | ### Methods | Return value | Method name | |--------------|-----------| | void | select_option ( [int](https://docs.godotengine.org/en/stable/classes/class_int.html#class-int) id ) | | void | start ( [String](https://docs.godotengine.org/en/lastest/classes/class_string.html#class-string) starting_node = 'Start' ) | | void | pause ( ) | | void | resume ( ) | ### Signals * started ( ) Emitted when the dialogue is started. * finished ( ) Emitted when the dialogue is came to a stop, either through running out of dialogue or by using the `<