You're sat in front of your computer, in front of a new TWINE project. You've never made one before, and you've already decided to start by writing a meta-game about making a TWINE project. You're pretty sure this is a totally original idea, never done before. You are very smart.
You tap away, and come up with a pretty basic first passage.
[[- Maybe you should read a tutorial next?|Tutorial]]
[[- Perhaps it's better to figure out the interface first, see what options there are and such?|Interface]]
[[- Ehh, you should just skip all that and keep writing!|otherpass]]
[[- That's enough for now, you can come back to this later.|Distracted]](set: num-type $score to 0)[]
(if: $learnedVariables is true)[(set: $score to it+1)]
(if: $learnedExternalLinks is true)[(set: $score to it+1)]
(if: $learnedTimedTransitions is true)[(set: $score to it+1)]
You've spent as long as you care to on preparation; it's time to write.
(if: $score is 0)[You start hitting those keys, and before too long, you've come out with a finished project. It feels a bit flat, though; the game was meant to be a meta exploration of the things you learned while making it, but you're not really sure you learned much at all. $forgotStuff[Or, at least, you didn't remember everything you learned. ]Ah well, getting something finished is it's own reward, the next one will be better!](if: ($score <= 2) and ($score >= 1))[You spend a couple of hours on your project, going back and forth and changing things here and then, adding a couple of little touches with the tricks you learned. Eventually, remembering that "perfect" is the enemy of "finished", you decide you've done enough. And you have! It's a neat proof of concept with a nice little twist. Good job.](if: $score is 3)[(t8n:"fade")+(t8n-delay:2s)[You've laid good foundations - now's the time to build on them. It takes you a few hours, and there are a few mistakes along the way, but you persevere, include everything you're learned, and feel pretty proud of what you've achieved when you hit publish. This isn't going to light the world on fire, but it is a cool little finished game with exactly the meta twist you wanted. You are now, officially, a games developer. Well done!
[[- ...|ThankYou]]]]
(else:)[[[- ...|ThankYou]]]You open a web browser, bring up your favourite search engine, and search for "TWINE Tutorial".
The first result that comes up looks kinda good... but it's also for TWIN$spellingFixed[E] 2.1. You're in TWINE 2.5.
[[- It's doubtful anything major has changed, this one will do.|OldTutorial]]
[[- Better to find a current one, who knows what new features are available?|NewTutorial]]
$interfaceExplored[[[- Maybe the Harlowe documentation is more useful right now?|HarloweDocs]]] (else:)[[[- Maybe you should check out the TWINE interface first?|Interface]]]
[[- Actually, you're not in the mood just now; you stop for the evening.|Distracted]]
(if: $spellingFixed is false)[[[- ...hang on, "TWIN" 2.1? Whoops. Better fix that.|Typo]]]You click to open the tutorial. It's called "$learnedExternalLinks[(link:"A Total Beginner's Guide to Twine 2.1")[(open-url: 'https://www.adamhammond.com/twineguide/')]](else:)[A Total Beginner's Guide to Twine 2.1]". Despite the name, it actually seems to start with the assumption you already know what TWINE is, where to get it, how to install it, and how to create a story. Luckily for you, you've already done all that.
The page is split into 4 sections. Passages and Links explains the very basic structure of a TWINE game (interlinked Passages) and how to create Links between them. You think about what you've done so far, and try making a couple of links from your original page, giving the player options to link to other passages or go find a tutorial.
The next couple of sections are about changing how the game looks, and adding sound, images and videos; useful stuff, but not what you're here for.
The final section is on variables and programming. Ah-ha! This is what you're after. For now, you add a test variable to the intro passage. You can mess about with this later. (set: $learnedVariables to true)
[[- OK, seems like a good time to get writing some passages.|otherpass]]
[[- Although, more preparation is good; maybe you should learn more first?|Tutorial]]
$spellingFixed[[[- Ooh, hang on; can you use this to do something clever with that typo you fixed before?|MessWithVars]]]You are in a twisty maze of Google links, all alike.
[[- Keep looking, there's definitely a good Twine 2.5-specific tutorial out there.|NewTutorial]]
[[- OK, this is a waste of time, the TWINE 2.1 tutorial will have to do.|OldTutorial]](set: $spellingFixed to true)
OK, this is an easy fix. You just go in, retype the word, aaaand, done.
[[- You test the story so far, to check your fix.|Tutorial]]
(if: $learnedVariables is true)[Although, actually, come to think of it... what if you try leaning into the meta nature? What if you leave the typo in, and you can add an option for the player to fix the typo, changing which gets shown based on a variable?
[[- Let's give that a go.|MessWithVars]]](set: $spellingFixed to false)
(set: $learnedVariables to false)
(set: $learnedExternalLinks to false)
(set: $learnedTimedTransitions to false)
(set: $interfaceExplored to false)
(set: $forgotStuff to false)OK, yeah, that works. Now, there's a variable for if the player has fixed the typo. When they first go to the page, it's set to False, and the page includes the typo... But also gives them an option to notice and fix it. Then, when they go back to the page, the typo's gone! Nice little meta nod.
That could be a fun general mechanic, actually; have passages change in subtle ways based on what the player has "learned" in that playthrough. You'll keep that in mind for the future.
For now...
$learnedExternalLinks[You update references to external sites to link to those actual sites, and add in a few timed transitions, if the player has read the HARLOWE instructions well enough to come across those.]
[[- You were thinking about reading a tutorial....|Tutorial]]
[[- Let's get down to some actual writing!|otherpass]]
[[- You should probably take a break for now, this has taken a while.|Distracted]]
(set: $interfaceExplored to true)You have a quick look round, but there doesn't seem much to see. The TWINE interface weirdly has two menubars, a stock Windows one and a custom ribbon-style one just below. You wonder why they didn't just go all-in on the ribbon interface.
The Twine > Preferences section is terribly bare-bones. You were hoping to find a way to set where your stories get saved instead of the default, but no luck, it's just a few look-and-feel options like whether it uses a light or dark theme, and what size font gets used.
There's also the Twine > Story Formats section, and... You don't really know what this means, but apparently your stories default to Harlowe 3.3.3 format.
[[- There's a link to Harlowe documentation, perhaps that's worth reading?|HarloweDocs]]
[[- This is confusing, maybe a tutorial is worth finding?|Tutorial]]
[[- Forget all this, let's learn by doing, and get writing!|otherpass]]You click the link to $learnedExternalLinks[(link:"the Harlowe 3.3.3 manual")[(open-url: 'https://twine2.neocities.org/')]](else:)[the Harlowe 3.3.3 manual].
The page you're faced with is... intimidating. As far as you can tell, the entire manual is one long page, in 3 columns. The left column is an index, a dozen screens long, detailing every single instruction available. The middle column includes details for everything you can do, probably hundreds of pages deep, while the right column is some type of example window.
Interestingly, for the massive amount of information this is offering on every possible instruction you can use, most of them have little in the way of practical examples, and when they do, it isn't clear what the example is meant to be showing you. On a whim, you press the "example" button for the very first bit of code the screen shows you. The output includes what appearsto be an error message.
You're sure useful information is here, but figuring out what you need to know, and how to understand it, is going to be difficult.
[[- OK, let's hammer away on this page, see if something clicks.|HarlowePersevere]]
[[- For now, you decide to find a more beginner-friendly tutorial.|Tutorial]]
[[- This is taking too long, you decide to just actually write something.|otherpass]]
(set: $learnedExternalLinks to true)
(set: $learnedTimedTransitions to true)
Going through this is a pain. You find yourself wishing for some kind of collapsible tree menu instead of the massive scrolling column, or a glossary of basic terms. What's a "Changer"? What are "patterns"?
You do figure out a couple of things. By using a link "changer" attached to a goto-url "command", you can have a link open an external webpage. (This is different to a link-goto command, which... does the same thing as the regular syntax for linking passages, just differently? Whatever.)
You also think you've figured out how to use transition changers to have text appear after a certain amount of time.
[[- Maybe now's a good time to find a friendlier TWINE tutorial.|Tutorial]]
[[- Time to try writing something!|otherpass]]
[[- This was really tiring; you should stop working on this for the evening.|Distracted]]You close your project for the night, and decide to come back to it later on.
$learnedTimedTransitions[(char-style: via (t8n-delay:pos*1000)+(t8n:'fade'))[...]
(t8n:"fade")+(t8n-delay:4s)[It's 3 weeks later. You got a bit distracted. Whoops. Umm, how do you even do this again?
[[- You reopen your project, and have a look back at the first passage to remind yourself how links work.|Intro]]]](else:)[...
It's 3 weeks later. You got a bit distracted. Whoops. Umm, how do you even do this again?
[[- You reopen your project, and have a look back at the first passage to remind yourself how links work.|Intro]]]
(set: $learnedVariables to false)
(set: $learnedExternalLinks to false)
(set: $learnedTimedTransitions to false)
(set: $forgotStuff to true)
(set: $spellingFixed to false)(set: $learnedVariables to false)(set: $learnedExternalLinks to false)(set: $learnedTimedTransitions to false)(set: $interfaceExplored to false)Thank you for playing my first little TWINE game. It's not much but, dammit, it's finished. Guess I'm choosing the middle ending IRL!
[[- If you want to play again, everything's reset, so click here to start again!|Intro]]
Thank you,
Adrian (link:"@TatraT815 on twitter")[(open-url: 'https://twitter.com/TatraT815')]You need a cover image, but your game doesn't lend itself to this.
[[- You make a seperate in-game passage, and use a screenshot of that.|Intro]]
[[- This is too much work, forget it.|Intro]]