Twine Changelog

What's new in Twine 2.2.1

Jan 25, 2018
  • Bug fixes:
  • Last modified dates on stories in the desktop app are maintained correctly.
  • Publishing stories with colored tags now works correctly.
  • Publishing stories correctly prefers an HTML version of the story, instead of a ZIP archive (used with iOS only).

New in Twine 2.2.0 (Jan 25, 2018)

  • Features:
  • Passages can now be wide, tall, or just plain large.
  • Tags can be assigned colors, which show up as a vertical stripe on a passage in the story map. Every tag doesn't need to have a color.
  • You can now press the plus and minus keys to change the zoom level of the story map.
  • A Turkish localization has been added thanks to H. Utku Maden.
  • A number of extraneous libraries have been removed, so the overall file size of the app has been decreased, and it should load faster.
  • The built-in SugarCube story format has been updated to 2.21.0.
  • The built-in Harlowe story format has been updated to 2.1.0.
  • Bug fixes:
  • When you zoom in and out, Twine does a better job of keeping the window centered where you were looking.
  • The zoom level you last set for a story is now remembered by Twine.
  • If for some reason a story format can't be loaded, you can still delete it.
  • The desktop app is more tolerant of story files that it has trouble importing at startup – it keeps going, so you at least can get to the story list.
  • If the desktop app does run into problems on startup, it shows the error message it should; previously, it would show a blank white page.

New in Twine 2.1.3 (Aug 2, 2017)

  • Bug fixes:
  • An issue causing passages to disappear, be positioned incorrectly, or otherwise become corrupted has been fixed.
  • Problems causing the search and replace dialog to not work correctly have been fixed.

New in Twine 2.1.2 (Aug 2, 2017)

  • Features:
  • Increased the display density of passages at the medium zoom level.
  • The story list can now be sorted in reverse chronological and alphabetical order (thanks Thomas Michael Edwards).
  • Mac users can now create passages in the story editor with force touch (thanks Michael Savich).
  • You can now widen the passage, JavaScript, and stylesheet editor windows.
  • Revised syntax colors in the JavaScript and stylesheet editors to be more readable.
  • Includes SugarCube 2.16.0.
  • Includes Harlowe 1.2.4 and 2.0.1.
  • Bug fixes:
  • When a new story format is added, stories that used an older version are automatically brought up-to-date. This bug would manifest as having no format initially selected in the Story Format dialog.
  • You cannot remove the default story format anymore. (Choose another one as default first.)
  • Issues with non-English localizations where stories would not save correctly, or would not save to the correct folder, have been fixed.
  • External links now do not cause a broken-link arrow to be drawn in the story editor.
  • Special characters (that have meaning in regular expressions) now are handled correctly when searching and replacing.
  • Fixed a bug where publishing a story from the story list wouldn't work.
  • Fixed a bug where clicking the modal dialog background would not save passage title changes.
  • Fixed a bug where clicking the modal dialog background would be treated as a confirmation in deletion modal dialogs.
  • It's now not possible to scroll the main window when a modal dialog is open.

New in Twine 2.1.1 (Aug 2, 2017)

  • Features:
  • Added Czech, German, Italian, and Portuguese localizations.
  • Updated SugarCube to version 2.14.0.
  • Outdated story formats are now removed automatically.
  • Bug fixes:
  • Improved numerous issues with touch-based devices and Internet Explorer 11 in the story editor.
  • Fixed issues with the quick search field in the story editor.
  • Fixed a bug where sometimes text would disappear in the desktop application.
  • Fixed a bug where the story directory sometimes would not be unlocked when quitting the desktop application.

New in Twine 2.1.0 (Apr 20, 2017)

  • Features:
  • Streamlined look and feel.
  • The starting passage now shows a green rocket icon in the passage instead of being slightly bolder.
  • Passages with broken links now show an arrow ending in an X instead of an icon in the passage.
  • Added dark theme for late-night hypertexting.
  • Loading large stories is considerably faster.
  • It's now possible to have multiple versions of story formats installed.
  • Harlowe 2.0.0 is now available. Please visit the documentation for details on changes. By default, newly-created stories will use this format, but this can be changed in the Formats option in the story list. Stories that used Harlowe 1.x will continue to do so after the upgrade.
  • SugarCube 2.1.12 is now available. Please visit the documentation for details on changes. As with Harlowe, stories that previously used SugarCube will continue to do so. If you had installed SugarCube manually under Twine 2.0, this version of Twine will try to update stories that used it to use the built-in version, but you may need to set it manually.
  • You can now use the Chromium web debugger on stories you test inside Twine by right-clicking the window and choosing Inspect from the contextual menu.
  • You can now directly drag a story file onto the story list to import it.
  • The story format version is now recorded in a published story file.
  • You can now drag the story map by holding down the middle button of the mouse instead of the space bar.
  • You can zoom into the story map with the mouse wheel.
  • When dragging passages when snap-to-grid is turned on, the passages will reflect this.
  • If you import a story with the same name as an existing one, then Twine will prompt you if you'd like to replace it.
  • Danish, Italian, and Portuguese localizations have been added.
  • Bug fixes:
  • Passages that link to themselves display a clearer arrow in the story map.
  • The gauge showing the remaining local storage space in the online version now works correctly.
  • It's no longer possible for passages to get pushed offscreen.
  • Renaming a story in the desktop app no longer creates duplicate files.
  • A typo in the German localization has been corrected.

New in Twine 2.0.11 (Mar 9, 2016)

  • Features:
  • Includes new localizations for German and Finnish.
  • Updates the included version of Harlowe to 1.2.2.
  • Updates the included version of Snowman to 1.3.0.
  • Updates the included version of SugarCube to 1.3.4.
  • Bug fixes:
  • Resolves several problems in 2.0.10 with Linux.
  • Improves link drawing of certain setter links.
  • Harlowe 1.2.2 changes:
  • Updated the syntax highlighter: placing the cursor on a syntactic token (such as a variable, or an entire hook) will underline the full expanse of that token.
  • Fixed a bug where the (textstyle:) options “shudder”, “rumble” and “fade-in-out”, as well as all of (transition:)'s options, didn't work at all.
  • Fixed a long-standing bug where (mouseover:) affected elements didn't have a visual indicator that they could be moused-over (a dotted underline).
  • Fixed the (move:) macro corrupting past turns (breaking the in-game undo functionality) when it deletes array or datamap items.
  • Fixed the ⇐== (left-align) markup token erasing the next syntactic structure to follow it.
  • Fixed a bug where attempting to print datamaps using (print:) produced a Javascript error.
  • Fixed a long-standing bug where spreading … datasets did not, in fact, arrange their values in sort order, but instead in parameter order.
  • Fixed a long-standing bug where a string containing an unmatched `)` inside a macro would abruptly terminate the macro.
  • Giving an empty string to a macro that affects or alters all occurrences of the string in the passage text, such as (replace:) or (click:), will now result in an error (because it otherwise won't affect any part of the passage).

New in Twine 2.0.10 (Nov 21, 2015)

  • Includes Harlowe 1.2.1, which fixes a problem with (else:) invocations.

New in Twine 2.0.8 (Jul 7, 2015)

  • A bug where < and > characters would be garbled in stories in the native app version has been fixed.
  • Harlowe 1.1.1 is included.

New in Twine 2.0.6 (Jun 23, 2015)

  • EDITOR:
  • Bug fixes:
  • Properly includes SugarCube in local app versions.
  • Fixes a bug in 2.0.5 where clicking links in testing/play versions of stories did not work.
  • Known Bugs:
  • When testing or playing a SugarCube story in an app version, sidebar links do not work. (Resolved on development branch)
  • STORY FORMATS:
  • Updates the remote URL of SugarCube to the latest.
  • Updates the included version of SugarCube in local app versions to 1.0.23.
  • Updates the included version of Snowman to 1.0.2.

New in Twine 1.4.2 (Jun 4, 2014)

  • BUG FIXES - Development program:
  • Fatal errors:
  • Now, building games in non-English locales should no longer get an encoding error caused by the built file's timestamp. Thanks to mth for assistance and Cab for the report.
  • StoryIncludes:
  • The Story___ passages are no longer forbidden from being included via StoryIncludes.
  • The StoryIncludes passage is no longer broken on OS X.
  • Importing:
  • Fixed buggy HTML importing for passages that have > symbols in their titles.
  • It is now possible to import from HTML files that use the SugarCube custom header. :
  • Fixed imported images having the wrong MIME-type if their filename extensions were in all-caps (such as “tree.JPG”).
  • Altered the MIME-type of imported fonts in ttf and otf format to “application/x-font-…” instead of “application/font-…”. Also, unrecognised files are now “application/octet-stream”. This shouldn't really change anything, but may improve browser support.
  • Story Map:
  • The position of passages created by right-clicking and selecting “New Passage Here” should be fixed.
  • Fixed passage names with full stops no longer failing to have incoming link arrows.
  • Selecting “New Passage” when a Start passage is missing no longer creates the “Start” passage, since it could be irritating for “partial .tws files” that are being used in a large StoryIncludes project.
  • Passage editor:
  • Passages with very long names no longer have the left half of their name scrolled out of the title text box when you initially edit them.
  • The passage editor now has a uniform tab width (set to 4 spaces).
  • Fixed a bug where HTML wouldn't be highlighted if its tag names or attribute names contained hyphens (e.g. )
  • BUG FIXES - Game engine:
  • General:
  • Built HTML files now have a UTF-8 byte-order mark. This should cause Dropbox to correctly transmit them with UTF-8 encoding instead of ASCII. Hooray!!:
  • Fixed certain page elements (such as StoryTitle and StoryAuthor) not being drawn at the start of a test play build that begins at a non-Start passage.
  • Fixed the image preloader code, which didn't detect whitespace correctly, and thus prevented preloading images in HTML tags that had a space between “src” and ”=”.
  • Syntax:
  • You should now be able to put a ] character inside the link syntax (e.g. [[|Passage name]]) and put a quoted ”>>” inside the macro syntax (e.g. > ).
  • Shorthand : variable default was causing $vars provided as arguments to mess up horridly. This should fix this.
  • Raw HTML entities (such as or < or somesuch) are now correctly preserved, rather than being converted to their symbols during the build process.
  • Generated HTML:
  • Previously, charspans (that's the element wrapped around individual text characters for the purposes of CSS effects) had the classes “char” and a second one representing the char contents - for instance, “v” for lowercase v. But, having a single-character classname for charspans is causing some collisions with certain Firefox extensions. Now, the character is stored in a data-char attribute, so CSS can still potentially select it by, e.g. .char[data-char=v].
  • Also, charspans are no longer generated if the story's text or stylesheets do not contain the ”.char” or ”[data-char]” selectors anywhere.
  • and elements inside passages now work again. Previously, they did nothing.
  • Default CSS:
  • Fixed Sugarcane StoryMenu items having cursor:pointer even if they aren't links.
  • Nested s no longer have a CSS margin-top.
  • Responsive: Fixed the bug where a blank rectangle would remain if the bookmark link was disabled in StorySettings.
  • Macros/Functions:
  • Using Passage() instead of passage() in your code will no longer silently fail instead of producing an error message.
  • «choice», «button» and «textinput» no longer incorrectly convert Twine operators in the text of the provided link to Javascript operators (e.g. «choice [[not]]» becoming «choice [[!]]»).
  • The undocumented clone() function has been updated to hopefully allow certain native objects to be cloned more effectively.
  • A number of macro error messages are a little clearer - displaying “$” instead of state.history[0].variables.” when referring to the macro invocation.
  • Fixed a bug where certain objects were being passed by reference when used in a setter link - e.g. [[Link][$a = $obj]] caused $a and $obj to point to the same object, with changes to one altering the other. :
  • Fixed a bug where object literals as shorthand «display» arguments wouldn't work at all.
  • Fixed a bug where multi-line string or object literals in «set» or «print» macros, etc., would not have Twine operators converted by Wikifier.parse() correctly.
  • History/Back Button:
  • Game history: Added a test for iOS Safari's private browsing mode, which does not disable sessionStorage but does reduce its quota to 0 - making it hard to tell if it's actually usable. This causes the “couldn't save the state” alert to not pop up if you're playing in private mode.
  • The story state serialisation functions have been rewritten to allow basic Javascript functions stored in Twine variables to be decompiled and stored. Previously, using the Sugarcane back button or a bookmark would cause function variables to lose their value. (Of course, this relies on function decompilation, so bound functions and native functions' serialisation will silently fail. And, when recompiling them, their original scope is lost.)
  • Internals/Scripts:
  • Added Array.prototype.forEach(), Object.create() and Array.isArray() polyfills to the engine, allowing IE 8-compliant scripts to use them.
  • The engine now records the previous value of window.onerror, and restores it once the message has been displayed once.
  • NEW FEATURES:
  • Development program:
  • General:
  • Added StoryInit, a special passage in which to put Twine macros that you want to run before every play - including Test Plays of specific passages. This is generally a more ideal place to put your initial «set» macros instead of the Start passage. Thanks to T. M. Edwards for pioneering this feature.
  • Error checking:
  • Added a very basic passage code error-checking system. When closing a passage, Twine will now report a few possible errors: not matching an «if» macro with an «endif», using ”=” instead of “is” in the «if» macro, misspelling "http://" in a link, and putting HTML tags in a script passage. (Less obvious errors can only be identified by your browser's Javascript engine, and will, as usual, only be identified at runtime.):
  • Also, when closing a passage, Twine will now offer to create new passages for each red link in the passage text. This potentially saves you having to create them yourself.
  • Also, when closing a passage, Twine will now offer to import all images, linked from URLs, into the story, and update the [img] references to match. Importing images is recommended because it saves you the bother of hosting the image files, keeps the story from breaking if your image hosting site is down, and allows you to host the HTML file on sites such as http://philome.la, which only allow single HTML files to be uploaded.
  • All of the above checks and helpers can be run from the “Verify All Passages” menu item in the Build menu, or the “Verify Passage” item in the passage editor's Passage menu.
  • StoryIncludes:
  • Twine now tries to keep track of passages that aren't present in the file, but are included via the StoryIncludes feature (henceforth, “included passages”). Links to included passages are now mauve, and passages that link to included passages now have a mauve marker drawn on them in the Story Map.
  • Story Metadata:
  • Added a “metadata” option to the Story Menu, which lets you edit some data that is included in the final HTML file.
  • The “identity” specifies a noun to use for game interface dialog boxes (the restart confirmation, the error dialog, etc.) If left blank, then “game” will be used.
  • The “description” provides text to use for a HTML description element, which is often used by search engines etc. to provide a summary of the page. I've noticed that often Google will, at a loss to find the game content, display odd bits of the storeArea div as a page description in its search results, which is most definitely not a good look. Maybe this will fix things.
  • StorySettings:
  • Added a StorySetting which, when set, disables most of the CSS used for each built-in story format, leaving only the core positioning stuff. You can then write clearer CSS on top of this bare slate. You can also trigger this within an individual stylesheet by adding the comment “blank stylesheet” to it. (The intent of this is to allow people to copy-paste full “stylesheets” into their stories without having to manually change the StorySettings.):
  • Added a “URL hash” StorySetting which causes the bookmark link's URL hash to be present in the address bar at all times, allowing people to obtain the bookmark URL even if the sidebar is absent. (But note that the bookmark() function, described below, lets you script an alternative means of retrieving the bookmark.) Since the URL hash tends to be fairly unpleasant-looking, and a majority of Twine games don't rely too heavily on bookmarking, this option is off by default.
  • StorySettings is now edited through a proper UI dialog, instead of just a passage with name:value pairs interleaved with instructions.
  • Removed the “ObfuscateKey” StorySetting, on the basis that very few people were using it. Now, all obfuscation uses ROT13. (HTML files made in previous versions can still be imported regardless of obfuscation setting.)
  • Preferences:
  • Flat Design(TM) mode is available in the preferences.
  • Added a preference option for connector arrows being visible or not.
  • Menus:
  • Changed the “View Last Build” menu option into “Rebuild and View”, which builds the story before showing it.
  • Added a Help menu to the passage editor, linking to a few wiki articles concerning passages.
  • Importing:
  • .twee files may now have a “preface” - lines of text preceding the first declared passage - which is now ignored by the Twee Import feature.
  • Story Formats:
  • Custom story formats can now supply a Python file, “header.py”, which lets various parts of the Twine development program be customised to match the features of the story format. See the base header.py class, which your header.py file should subclass, for details.
  • GAME ENGINE:
  • Syntax:
  • You can now use the inline syntax as a shorthand for the HTML tag.
  • @@.robot;This is a robot-class span@@ is equivalent to This is a robot-class span.
  • You can also use it alongside style attributes: @@.robot;text-decoration:underline;This is a robot-class span with an underline@@:
  • One bothersome fact about Twine up to now is that there's no real “bridge” between the basic Twine link's functionality and raw HTML. There was no convenient way to make a raw link trigger a passage change. So, I've added a “data-passage” HTML attribute that you can put on HTML , , and tags.
  • Some text is equivalent to [[Some text|Distant woods]], but allows you to add extra HTML attributes to the link, like “style”.
  • is equivalent to [img[Trees]] - thus, you can now refer to imported images in HTML. (If you wish to make an image that links to a passage, put the inside an element.)
  • is how you can make an image map area link to a passage.
  • You can also attach data-passage to any other kind of tag to make it serve as a link, too: This looks like ordinary text.
  • To simulate setter-links, you can also add a “data-setter” property, too. Collect teeth. Note that it does nothing without a data-passage attribute as well.
  • It should now be possible to supply variables to the image syntax, as an image passage name or URL - for instance, [img[$pictureName]].
  • Removed the quote-by-line syntax, on the basis that a good number of people don't really want indenting that often, and would rather have greater-than signs as bullet points. The rest can rely on the indented block syntax ( < < < ) or HTML tags.
  • Generated HTML:
  • Passage links no longer have ID attributes that reveal the name of the passage they go to, allowing anyone to “cheat” by right clicking them and selecting “Inspect Element”. This has been the case for every previous version of Twine, but not anymore!
  • Jonah: rewind links now have the class “toolbar-rewind” instead of “toolbar-rewind to here”.
  • Default CSS:
  • Mobile Sugarcane layout: I've added a somewhat rudimentary media query to Sugarcane that converts the sidebar to a vertical header, using a minimum of alterations, when viewed on a 640px-width display. Hopefully this won't break custom CSS too much.
  • Having added the above, Sugarcane's sidebar now has position: fixed again.
  • Jonah: added bottom padding to #passages, so that the present passage isn't always uncomfortably flush with the bottom of the window.
  • Tweaked some of Responsive's CSS to, for instance, make links in StoryAuthor or StorySubtitle correctly coloured.
  • Stylesheets:
  • CSS @import declarations are now hoisted to the top of the element, thus causing them to work regardless of which stylesheet passage they're included in. So, if you've had problems with them, this may be the answer.
  • Error reporting:
  • Altered the “interrupt” error message to print the Javascript stack trace if it's available (currently only in Chrome). If you see such a message, do present a picture of it to Leon if you can.
  • Macros/Functions:
  • either() may now accept a single array as a sole argument, and will pick a value from within that array. This allows you to a bunch of either() arguments in an array variable, and call either() with it in many places: «set $a to [“Red”,”Blue”,”Green”]» «print either($a) + ” and ” + either($a)»
  • visitedTag() may now accept a string of space-delimited tags, as an alternative to several strings or an array.
  • Added random(), a function seen in Twine 2 and SugarCube. Given two numbers (such as random(3,12)) it returns a random integer between them, inclusive. While I generally recommend continuing to use either() for choosing between a small set of numbers, I recommend random() for long ranges, as an alternative to the cumbersome Math.random().
  • Added a rot13() function that returns the given string in ROT13 encoding.
  • Added a bookmark() function, which provides the bookmark hash for the current passage, the same as that used by the built-in “bookmark” links.
  • Internals/Scripts:
  • Fixed a bug where Jonah would crash when restarting a story.
  • To save a little startup time, image passages are no longer obfuscated if the “obfuscate” option is set.
  • Changed all the element onclick references to addEventListener()/attachEvent() calls.

New in Twine 1.4.1 (Jan 15, 2014)

  • BUG FIXES:
  • Development program:
  • Potentially fixed the Windows VC++ runtime problem. If you haven't installed the VC++ 9 redistributable, the Twine installer should now correctly contain it.
  • Fixed «endnobr» consuming the three characters that come after it.
  • Fixed external link syntax highlighting.
  • Fixed syntax highlighting for shorthand «print» macros.
  • Fixed unmatched «endif» and «endsilently» macros not being syntax-highlighted red.
  • Removed the “Delete Passage” menu item in the Story menu, due to an identical entry being in the Edit menu.
  • External links and variable links are no longer considered broken links in the IDE.
  • Fixed annotation passages being drawn too dark in smooth drawing mode.
  • Fixed the monospace font using the normal font's size instead of its own.
  • The StorySettings passage is no longer converted to all-lowercase at build time. This should make HTML exporting/importing more symmetrical.
  • Improved speed of HTML importing.
  • Fixed an error when trying to replace a passage with one from animported file.
  • Fixed importing from HTML sometimes failing to read passages correctly.
  • Now, the “no Start passage” warning is suppressed if a StoryIncludes passage is present.
  • Game engine:
  • Fixed passages with names containing quote marks being unrecognised by links.
  • Fixed HTML tables in passages not being constructed correctly.
  • Altered Sugarcane's browser state-saving to avoid a crash in Firefox caused by having lots of variables in your story.
  • Fixed TiddlyWiki emdashes not being rendered correctly.
  • Fixed the «nobr» macro inserting zero-width space characters into contained macro tags, thus breaking them.
  • Fixed bug preventing custom macros from being usable in StoryMenu etc.
  • Fixed the [img] syntax used in CSS stylesheets inserting a terminating semicolon, preventing further attributes from being used on the same line.
  • Added “vertical-align:bottom” to images to compensate for a line-height difference between XHTML Transitional and HTML5. Why is there a line-height difference? The person who can answer that is not on this Earth, but in Heaven.
  • Fixed the «nobr» macro not working if any text follows it.
  • Fixed «choice». Now, clicking a «choice» disables all .choice links in the passage, not just itself. This returns it to 1.3.5 behaviour.
  • Fixed variables used as array indexes not being parsed correctly.
  • Restored the left positioning of the Sugarcane sidebar.
  • Added support for “javascript:” and “data:” URIs in external links.
  • You can now use external links in the simple link syntax, such as [[http://example.net]].
  • Possibly broken pretty-links (as in, links with a separate link text and destination) are now no longer assumed to be external URIs unless they contain a protocol (like “http:”), or the symbols . / \ or #. This should make link debugging a bit easier.
  • Fixed the shorthand «display» macro tag's title sometimes being incorrectly parsed as its first argument.
  • Shorthand «display»: Attempting to access a parameter() that wasn't supplied will no longer throw an error, on the newly considered basis that it would make “variadic passages” (passages that can take multiple optional variables) difficult.
  • Fixed a bug where backslashes would be incorrectly converted to arbitrary letters if passage obfuscation was being used.
  • «back» now works better when Undo is off in Sugarcane. Previously it would mess up the variable state in cases when link variables were in use.
  • «back» and «return» now work when restoring a Jonah state via bookmark.
  • «back» also now works when clicked in a past Jonah passage - previously it would act as if it was in the present passage.
  • «back» now works in the StoryMenu, StoryAuthor, StoryTitle and StorySubtitle passages.
  • «choice» now produces an error message if it's used in the StoryMenu, StoryAuthor, StoryTitle and StorySubtitle passage.
  • Fixed Jonah scrolling in IE 8.
  • Now, only the StoryTitle passage's text content will be used for the window title, instead of its raw code.
  • Now, if a story has no StoryTitle, or the StoryTitle has no text content, it will default to the name of the .tws file used to build it, instead of just “Untitled Story”.
  • Fixed a bug where putting “Lookup:” in the StorySettings could potentially crash the game. * Added a sanity check in case a script overrides History.prototype.display() but doesn't pass enough arguments (since in 1.4 it takes 4 arguments instead of 3).
  • Fixed HTML structures in passages not being rendered correctly.
  • ADDITIONS:
  • Development program:
  • IDE tag colours now vary between shades of orange based on the hash of the tags, to help differentiate dissimilarly tagged passages from a distance.
  • Added a Preferences option for showing the faint connector arrows for image and stylesheet passages.
  • Passages displayed via the shorthand «display» syntax now result in connector arrows being drawn.
  • Game engine:
  • The StoryMenu now auto-updates when you change passages!! The code is re-executed and re-rendered into the element. This means you could, say, «print» a variable inside it, and it would update automatically. (This change also applies to StoryAuthor, StoryTitle and StorySubtitle).
  • Added the tags() function, which takes one or more strings and returns an array of the tags of the given passage (or the current passage if no name is supplied).
  • Added passage(), which simply holds the name of the current passage (If a passage is being «display»ed by another, passage() is the name of the “topmost” passage.)
  • Added turns(), which provides the number of turns that have elapsed in the current game.
  • Added visitedTag(), which returns the number of times passages with the given tag have been visited. Provide multiple tags to only search for passages that contain both.
  • Added 'header' and 'footer' elements to Jonah's .passage elements, to provide a bit more symmetry with Sugarcane's DOM layout.
  • The CSS selector ”:link” in stylesheets is now converted to [class*=Link] at runtime. This is to provide backwards-compatibility for people who used “a:link” to refer to Twine links (which is no longer usable as internal links no longer have href attributes). It's a mean sight of a hack, but so be it - I shan't be adding back the “javascript:void(0)” href no matter what you say.
  • Added the “visitedLink” class, which is applied to passage links that link to already visited passages. ”:visited” is converted to ”.visitedLink” much like the above. This provides a surprising amount of power - you can give .visitedLink “display:none”, for instance, to make links to all visited passages disappear automatically.
  • Re-implemented «textinput». It creates an text element which, when a element is pressed, sets the variable to its string contents. It may also have an additional parameter, a link expressed in link syntax, which is used to create a next to it. Examples: , .
  • The previous 1.3.6 «textinput» behaviour of triggering the passage change via pressing the Enter key has been removed for now.
  • Added «radio». Its arguments are a variable, and a number of strings for each option. When a is pressed, the label of the selected radio button is put into the variable. Example: . If you have multiple «radio» macros that refer to the same variable, they're treated as part of the same set.
  • Added «checkbox». It's similar to «radio», having identical syntax - but it sets the variable to an array value containing all of the checked boxes' labels as strings. Example: .
  • Added «button», a macro that takes a link as its argument and creates a element. Use it for passages which use «radio» or «checkbox», or a «textinput» set. Example: