Posts in Unity
Upcoming Training: Unity Game Dev + Practical AI on iOS

We're super excited to announce that we're running another Live Online Training with O'Reilly Media! We'll be teaching game development with Unity, live online, on January 17 and 18 (6PM to 9PM, AEDT).

Later, in February, we're also running another Live Online Training covering Practical AI on iOS. This session will give you a solid introduction to Apple's CoreML and Vision frameworks, and runs February 27 (5AM to 7AM, AEDT).

Want to know more? Tweet us, or email us!

Small Towns, Small Screens: Night in the Woods is coming to mobile

Night in the Woods is coming to iOS in 2018!

We're thrilled to announce that we've partnered with Infinite Fall and Finji in porting Night in the Woods to iOS. We've been working on it for a while now, and we're incredibly excited to say that it's coming in 2018.

Porting a game like NITW to mobile devices is interesting for two reasons. First, a mobile phone often has much less memory than PCs or consoles, and a less powerful graphics chip, so we need to do all kinds of things to make the game fit. Second, bringing any game that was designed for controllers or keyboards to a touchscreen means you've got to completely re-design the game to account for stuff like the player's hands covering up the screen, and the fact that you can't physically feel your controls.

You might have seen Jon posting about his work over the last several months on a tool for compressing sprites. This tool is part of the set of technologies we've been developing to support the port, and we'll be sharing more about it in the near future.

ezgif-3-a33a80bea7.gif

NITW also uses Yarn Spinner, our open source tool for creating and managing interactive dialogue in games. We're thrilled with the community response to Yarn Spinner, and improvements that result from our porting work will be merged into the main project.

If you're going to GCAP 2017, come and see Jon talk about the port in more detail at 3PM on Tuesday, October 24th (TODAY!), where he'll also be sharing tips and tricks on how to make your game the best possible experience on iOS devices.

For more info, be sure to follow us on Twitter, at @thesecretlab, @parisba and @desplesda. We share lots of interesting behind the scenes stuff!

Talk more soon. This is going to be fun. For questions or inquiries, please email lab@secretlab.com.au

Doing things the hard way

This year, we gave a talk at GDC called “Making Night in the Woods Better with Open Source”. In it, we talked about how Night in the Woods, which came out last month and you should totally go buy, used the open source process in its development.

Unlike most of our other talks, we did something a little ridiculous with this one - we built an entire presentation system, from scratch, into Night in the Woods. We’re actually pretty proud of this, and so we put together a video showing how it was done. Check it out!

The talk from GDC is also available online, and we've embedded it below:

Yarn Spinner Localisation

Earlier this year, we were approached by the rad folks at Infinite Fall with a very interesting challenge: could we please add support for localisation in Yarn Spinner, the dialogue system we wrote, for Night in the Woods?

Yarn Spinner was written to be a more advanced interpreter for the Yarn language, a Twine-inspired tool for writing interactive dialogue. Yarn Spinner lets you write your game's dialogue in a very natural way, with minimal technical syntax and a strong focus on getting your words into the game.

Because Yarn Spinner has such a strong focus on minimising the amount of stuff you have to write on top of your dialogue, we have to be careful whenever adding new features to the language. Our goal is always to reduce the amount of stuff you have to think about when writing. However, any kind of localisation system requires you to add additional information, in the form of a key that links a line's original text that of a translated version.

We created what we think is a pretty neat solution to this: hashtags. To localise a line of text, you add a hashtag that contains a short tag, like this:

However, Night in the Woods has a lot of dialogue. Like, buckets of it. Tagging each and every line would be hugely laborious. Fortunately, we already have a tool that's very good at quickly and thoroughly processing large amounts of Yarn dialogue: Yarn Spinner itself!

We therefore put together a little tool that can extremely quickly (like, 2 seconds quickly) tag every single line of dialogue that needs it. The tool only counts text that needs localisation - that is, anything that a player will see. It ignores all other stuff, like if statements and other behind the scenes stuff, as well as any line that already has a tag, which allows you to run the tool on files that have been partially tagged. In other words, it's a tool you can feed your dialogue through without worrying about anything it's doing.

Once you have some tagged dialogue, you can then generate a file that contains every line's text, as well as its localisation tag. The tool generates a CSV spreadsheet, which is the easiest format for most people to read.

Once you have the spreadsheet, you can send it off to your translators. In our case, we sent it off to a translation team in Italy, who converted the entire text of the Night in the Woods demo into Italian. They then sent back a spreadsheet that contained the Italian versions of all of the lines. We then dropped this into the Night in the Woods demo, and presto: localised!

The code for the localisation tool has already been merged into the development branch of Yarn Spinner, and we'll be putting out more info on how to use it soon. We can't wait to see more games in more languages using Yarn Spinner. Stay tuned for more!

Yarn Spinner

Complicated stories don't have to be complicated to build. We've already seen how Twine has made it easier than ever to create interactive fiction. Another tool, Yarn, has taken inspiration from Twine, and made it awesomely simple to craft interactive fiction.

This is where we come in. We also love telling stories, so we're absolutely delighted to introduce Yarn Spinner, an open source implementation of the Yarn language that's designed to make dialogue in your games a snap.

We built a tiny little demo game, which is set in space and available for you to play right now! It requires a keyboard to play it, and is compatible with most modern browsers.

What's Yarn?

Yarn is a very simple text based format, designed to let you write interactive, branching conversations with the greatest of ease. Here's a snippet:

    // Check to see if we've spoken to Sally already
    <<if $spoken_to_sally is 0>>
        // We haven't spoken to her - run the initial conversation
        Player: Hey, Sally.
        Sally: Oh! Hey.
        Sally: You kind of snuck up on me.
        Sally: Don't do that.
        
        // Remember that we've spoken to her
        <<set $spoken_to_sally to 1>>
    <<else>>
        // Run a different conversation
        Player: Hey.
        Sally: Hi.
    <<endif>>
    
    // Now present some options to let the player choose how they'll respond.
    [[Anything exciting happen on your watch?|Sally.Watch]]
    [[See you later.|Sally.Exit]]

Yarn's used in a number of cool games, including Night In The Woods and Knights and Bikes.

What's Yarn Spinner?

Yarn Spinner is a parser and runner for Yarn. It's written in C#, and is designed to be super simple to integrate into Unity games. You just drag and drop a few objects, drag in your Yarn file (which you've written using the excellent Yarn editor), and you've got dialogue running!

I'm already using Yarn's original parser. What does Yarn Spinner do differently?

Yarn Spinner adds a number of useful features:

  • Functions are now part of the language, and you can write your own in C#, where they'll be available to your scripts.
  • The expression parser is quite a bit more powerful, and can handle most things you throw at it.
  • Yarn Spinner is available as a separate .DLL file, which means that it's more separated from your Unity code.
  • Yarn Spinner adds more types of values to the language. Where you previously only had numbers, you now also get strings, booleans and null! Woo, programmer toys!

Is it Open Source?

Yes! The whole source code is available under the MIT license, which means that you can use it in commercial games if you want! The only requirement is attribution.

Where can I learn more?

Check out the Yarn Spinner page, here on our site, or the GitHub page to learn more.