! Limited enhancements to the twee file format\n\nWe can keep the existing v1.0 Twee file format essentially intact and still make some limited extensions to the available functionality. Any utilisation of the following suggestions must always remain optional: a basic Twee file should always just work.\n\n!! Passages\nWe can add new special passages to Twee without affecting the file format itself. As long as the contained data is kept in text format then anybody can use a text editor.\n\n!! Tags\nWe can create more special tags without changing the v1.0 file format.\n\nSee: [[Proposed New Special Pagssages, Twine.x tags]]
! Principles\n\nA general list of my personal principles regarding twine. Your's may differ and that's cool with me.\n\n!! Keep Twine simple for authors\n!!! New features must be optional for authors\nExisting Twine authors should not have to do anything different to achieve what they have always done. If they want new functionality then learning that should be easy.\n!!! New features should as invisible as possible\nThat means new features should not clutter and confuse the UI.\n!!!! ... without making them difficult for authors to find\nBut authors must be able to find features when they need them.\n!!! The 80/20 rule for User Interfaces: Tuning vs Preference\nWhen there an indication that MOST/80% of authors want things to behave a certain way then we can simplify the interface by TUNING the program to behave in the expected manner. Where possible, the other 20% should be served by a preference option.\nIn situations where behaviour preference is likely to be 50/50 then explicitly ask users when the situation first occurs.\n!!! Warn early, Error late\nIf the author does something stupid raise warnings in ways that do not interupt the free-flow of the author. But make these easy to track down and fix later.\nRaise errors (that stop the author and REQUIRE a response) as late as possible.\nWhy? Well creatives often work on a flow. Writers with spew out words when the muse is speaking. Programmers will spew out code. After initial ideas are out, only then do creatives go back and fix up issues; poor grammar, style corrections, syntax errors in code. I'd like Twine Authoring Environment to support this behaviour.\n\n!! Don't do anything stupid\n!!! No changes to File Formats without community input\nFile formats are what gives author's work longeitivity. Good file formats ensure that author's creative work will still be available hundreds of years from now.\nOnce we agree to a file format change, we're stuck with supporting (at a minimum importing) that file format forever. Because the impact of a file format change is practicably eternal changes to file formats should not be done in the spur of the moment.\n!!! No changes to UI without community input\nThis is less of a problem than file format changes, but in general users do not like a high rate of change to their familiar user interfaces. Why? Well because they need to re-learn the tool instead of focusing on getting stuff done.\nOf course user interface changes should happen when there is a clear need and where improvements can be made to author productivity - but some consideration of the impact of those changes must occur.\n\n!! Don't be evil\n!!! Do not enable [[TwineWorld]]\n!!! Mutually acceptable self-determination\nI am not the only one with big big plans for Twine. Other people are here for their own reasons and that's cool too. Provided we can each help each other towards our own goals we can work together just fine.\n!!! Engagement at the level of choice\nPeople will participate with the Twine developers and community at a level they choose. Community engagement will never be a condition of using Twine.\n!!!! Commercialisation\nDon't begrudge anybody the need to make a living or the right to make a buck. The core of the Twine Authoring Environment and the file formats .tws and Twee must remain free and open. However, there should be plenty of room around this for people to develop commercial opportunities for Twine; Optional plugins, StoryFormats, Publishing Platforms etc.\nHell, one day I might need Twine to give me an income too.\nI believe this to be a positive development: it shows faith in the Twine eco-system and people with a commercial interest in Twine tend to become more engaged and promote Twine to others.\nWe must be careful of the embrace, extend, extinguish attack on the File Formats though: We don't want the nastiness of "must have vendor specific extensions" - particularly where competition is locked out via IP law.\n(e.g. EPUB3 -> iBook2s vs KindleFire format.. yuck, it's like the browser wars of the 1990s all over again)\n!!! Coopertition betweens visions\nI have big plans for Twine that will help it achieve what I want for my own story needs. Others have different visions and unfortunately visionary people will inevitably clash. Treat others with respect and try to build a platform that allows for multiple visions while still keeping Twine Simple for Authors.\nIn extreme cases, a forking of the Twine Project might occur. While sad, it might be necessary. A [[Configurable Plugin System]] will allow most mutually exclusive visions can co-exist without being compromised into uselessness.
! References Manager plugin\n\nSomething to help out the academic paper / essay / report author with their job.\n\nZotero / EndNote integration would be nice, but even a simple thing would help immeasurably.\n
V20120914 - Support for [[custom label support in the back macro|macro back labels]] - built in\nV20120902 - Initial version.
<<display "RealStart">>
!Useful Links\n<<back>> 201303Et\n\n* [[Tweecode Google Group|https://groups.google.com/forum/?fromgroups=#!forum/tweecode]] - the main gathering place to talk things twine\n* [[Offical Twine Website|http://gimcrackd.com/etc/src/]] - old. Reference is good. Get the alpha program from the google group\n* [[My Twine Tutorials|http://eturnerx.blogspot.co.nz/search/label/tweecode]] - I'll can do more if you ask nicely\n* [[TwineQuest|http://github.com/tweecode/TwineQuest/]] - A system for adventure game stories. Also for sharing code. There are high hopes this takes off.
! InterTwine v1\n<<back>> Et201204\n\nProposed by Philip Sutton; InterTwine is the idea that multiple source Twine files can be packaged and built into a single output.\n\nThis will enable collaboration between multiple authors on large documents in ways that respect the autonomy of individuals. It also delegates security and control of files (what is read only etc, who can read what) to underlying file system. It allows for version control to be tracked via things already built for that purpose: e.g. git.\n\nBeyond collaboration: InterTwine will allow authors to segment their work into portions that are more managable mentally - without losing an functionality they would have if everything remaining in a single file.\n\nIn accordance with my [[Principles]], InterTwine features will be as invisible as possible to authors that choose to not use them.\n\nInitial InterTwine features can make it into the v1.3.6 release.\n\n!! How does it work?\nSee [[What is StoryIncludes]]\n\n!! Diary\n!!! 20120902: Report on usage\nIt runs very smoothly. I now find I am developing more things directly in .twee format and InterTwine is a good way to allow me to split passages into different files. My current workflow often involves me working .twee files stored in Dropbox using WriteRoom on an iPad with a wireless keyboard. It works very naturally using even the current very basic InterTwine features in this way. I already have ideas for improving the workflow of this setup.\n\n!!! 20120428: Initial implementation in alpha\nIt works with .tws & .twee files on local filesystem and via http/s. The need for MVC is even more apparent.\n
A StoryFormat / Target that scales for mobile, tablet, desktop.
!Encrypted Passage Storage\n<<back>> by Et 20120903\n\nCurrent v1.3.5 Twine StoryFormats use a tiddlywiki format that places passage into the output .html file in a plaintext format. It should be possible to a simple cypher to at least make the contents of passages no longer appear in the .html source in plaintext. Mostly should be done in the Tale object. In-memory passage objects should still be plaintext so no changes to the wikifier.\nShould also be able to encrypt the passage titles too: a simple override of Tale.get() should do it.
!!randomp\nOne macro used in "Cupric Acid" that is useful beyond that story is randomp. It is used to display phrases (or display a passage) in response to a random probability.\n* randomp 50 "love" 50 "hate"\n* randomp passage 20 "Goal time" passage 50 "Goalie Kick" passage 30 "Corner Kick"\n\nThe randomness is re-rolled each time the passage is displayed; there is no memory to this. It is used in "Cupric Acid" to add additional flavour as the user goes around and around certain passages.\nThe number are always whole positive whole numbers and are percentages. The numbers are not normalised so that the following example displays one of these adjectives only 60% of the time, the remaining 40% chance displays nothing at all:\n* randomp 20 "dusty" 20 "mouldy" 20 "old"\n\n\nMake the last number 999 to act "catchall" or "otherwise" or "default" clause. It doesn't have to be 999 but I just like using that to indicate this. \n* randomp 20 "beautiful" 30 "attractive" 999 "lovely"\nIt's entirely possible to calculate the actual number to use, but that means recalculating the final "catchall" number if other clauses are added, such as;\n* randomp 20 "beautiful" 30 "attractive" 10 "comely" 999 "lovely"\nversus\n* randomp 20 "beautiful" 30 "attractive" 50 "lovely"\n* randomp 20 "beautiful" 30 "attractive" 10 "comely" 40 "lovely"\nWhy do math when we can be lazy!\n\nSee the macro's [[.twee file|http://eturnerx.com/fot/files/macros/9999%20Macro%20Randomp.twee]] for more examples.
! What is StoryIncludes\n<<back>> Et201209\n\nStoryIncludes is a special passage that contains references to other Twine files to include in the output .html ..\n\nCurrently it just adds more "passages" from that file into the "bucket of passages" that are then thrown into the .html output.\n\nCertain special passages are automatically not brought into the "bucket of passages" from from linked to files:\nStart, StoryTitle, StorySubtitle, StoryAuthor\n\nThe syntax of the passage is line based. It's human readable enough, but hopefully in the future this will be managed using a special UI.\n\n!! Syntax\n!!! V1\nFilename1\nFilename2\nA line delimited list of filenames. It can be absolute or relative paths. Even URLs should work just fine.\n\nNOTE: all of the StoryInclude commands end with ...blank line or new keyword... It is not necessary to include a blank line between filenames. The blank line terminates StoryInclude commands only. (So a simple list of filenames is pretty unambigious really).\n\nStatus: Currently in my alpha builds of Twine\n\n!! Proposed Future Extensions\n!!! V1.01\nFilename\nEXCLUDE\npassagename1\npassagename2\n...blank line or new keyword...\n\nFollowing a filename with the keyword exclude on a newline allows the user to specifiy a list of passages (by name at first, id later) that should not be brought into the "bucket of passages"\nIt ends with either a blank line (so a new file can be specified) or a keyword with options to alter the current file.\n\n!!!V1.02\nFilename\nINCLUDE\npassagename1\npassagename2\n...blank line or new keyword...\n\nFollowing a filename with the keyword INCLUDE on a newline allows the user to specifiy a list of passages (by name at first, id later) that should be brought into the "bucket of passages"\nIt ends with either a blank line (so a new file can be specified) or a keyword with options to alter the current file.\n\n!!!V1.??\nFilename \nALIAS xxxx\n...blank line or new keyword...\n\nThe optional ALIAS keyword allows for giving the linked to file an internal name. We'll use this later to simplify linking "passageX in fileY" semantics.\nWe want this because it's very easy for a filename to change. By forcing links specific to a file to use and ALIAS then if the filename changes only the StoryIncludes entry need be updated.\nIt ends with either a blank line (so a new file can be specified) or a keyword with options to alter the current file.\n
!Responsive Story Format\n<<back>> 201209 Et [[permalink|http://eturnerx.com/fot/The%20Future%20of%20Twine.html#!NewFormats]]\n<<display "Responsive Short">>\n\nDo you want a story format that scales to the device that the user is on? Well this one is certainly a start. It is based on Sugarcane so does not support the infinite scroll of Jonah. That seems to suit mobile devices more though.\n\nI have also added jQuery support for those that want this - but it can be deleted (it's minified to two lines in the header) if you don't want the bloat. Unfortunately Twine uses the '$' familar to jQuery users so you'll have to use 'jquery' or the shortcut 'jq'.\n\nI am already using this StoryFormat on a few of my own projects so will be tweaking it to improve things over time.\n\n\n!!Installation\n* Only works on newer (post 1.3.5 versions including my alpha versions)\n* [[Download the file TwineResponsive.zip|http://eturnerx.com/fot/files/TwineResponsive_20120914.zip]] and unzip\n* Find your Twine Program folder (usually C:/Program Files/Twine/targets/)\n* Copy the folder Responsive from the zip file into the Twine targets folder\n* Restart Twine\n* Responsive can now be selected as the StoryFormat from the menu Story | Story Format\n* Rebuild your story\n\n!!Responsive Version History\n<<display "Responsive Version History">>
! Observations of the Twee file format\n\nThe present original Twee file format (v1.0) is beautiful in it's simplicity. It is divided into passages which have a passage title and a list of tags. The passage body is written in a sub-set of the TiddyWiki syntax.\n\nAs a text format, Twee has these advantages:\n# easy to learn\n# human readble\n# can be editted with any old text editor\n\n!! Passages\nTwine defines certain passagetitles as having special significance. There are: Start, StoryMenu, StoryAuthor, StoryTitle.\n\n!! Tags\nTwine also defines certain tags as having special significance. These are: bookmark, script and stylesheet.\nA recent 201204 addition I made to Twine (at the request of Philip Sutton) added the Twine.private to the official lexicon.\n\n<<display "Limited enhancements to the twee file format">>\n
!Geotrigger System\n<<back>> Et 20120903\nGeolocation triggers could provide information to a Twine story based upon where a mobile device is in the real world.\n\nMany mobile devices contain:\n* location services\n* electronic compass for heading\n* altimeter for height/depth\n* gyroscope for tilt\n* accelerometer for speed\nLocations services to detect where the device is. These are currently powered by GPS backed by a cache of WiFi access point locations, and are continuing to improve in accuracy. The other devices give height, heading speed and tilt information. These work together to improve pinpoint where the device is on the planet.\n\nThis can be used to create interactive tours - and/or location based interactive fiction. Things like a murder mystery or "Views of the Old Town" type things with tons of supporting info.\n\nThere might need to be some architectural changes to stories that use these; how often does the location change, does it automagically do the changes or have the user manually trigger it. Both should be possible. Something like [[on event do - watcher macros]]
<<display "Responsive Story Format">>
! Increasing output build options - beyond .html\n<<back>> Et201204\n\nPrintable PDFs? EPUB3? Hell, why not.\nIOS / Android apps? yup!\nUndum data files... sure thing.\nLaTex for typesetting? Other formats for the same thing?\n[[AXMA Story Maker|http://sm.axmasoft.com/en/]] .sm format\nA StoryFormat plugin for output to Arduino: Both LCD library (16x2 or specified) and TV library. Could use the <<choice>> macros and/or insist on a verb/noun system\n\nWhy the heck not!
! Deprecating the Twine .tws file format\n<<back>> Et201204\n\n!! The problem\nThe TWS format is not particularly human readable, or necessarily easy to edit by humans. As a binary format build using the Python pickle() system there can be problems transforming .tws into other tools. This why I would like to proposal that .tws eventually is phased out as the preferred format for twine.\n* .tws / Pickle has noted security problems where a tainted file can run arbitary python code.\n* Pickle relies very heavily on the current (201204) Twine UI class hierarchy.\n** That class hierarchy is not MVC compliant and is holding back UI innovation\n* Twee commandline cannot easily get .tws support\n\n!! What does deprecation mean?\n* We must always support opening .tws files forever\n* Hopefully we support saving to .tws files forever\n* .tws is not the default save file format for new files\n\n!! Proposal\n<<dipsplay "Deprecation of .tws implementation">>\n
Found in the Story Menu. Just tick the box and it'll rebuild the output .html file whenever a source file in the current folder changes.\nMy reasons for this are somewhat selfish; I use .twee files with WriteRoom on an iPad saving into a DropBox. Now Twine can sense when I have changed a file and give me a brand new .html file. Yay!
The Future Of Twine
!!macro back labels\nThere's been numerous requests to be able to customise the text used in "back" macros. I hear your calls and so made one.\n* back label "a one time alternative label"\n* back labeldefault "sets default text for all future back labels"\n\nA [[demo file|http://eturnerx.com/fot/files/macros/9999%20Macro%20back%20supporting%20labels%20TEST.html]] shows this in action. And yes! Unicode. There also the [[.tws file|http://eturnerx.com/fot/files/macros/9999%20Macro%20back%20supporting%20labels%20TEST.tws]] used to make the demo.\nBut what you really want is the [[macro's .twee file|http://eturnerx.com/fot/files/macros/9999%20Macro%20back%20supporting%20labels.twee]]\n\nNOTE: This macro is already included in the Responsive storyformat
HOW? Move everything into .twee files.\n(See [[Limited enhancements to the twee file format]])\n\nThe current .tws file contains passages, information to layout the storymap and information for building the .html output (storyformat and filename of the output).\n\n* We can move StoryMapLayout information into a passage called "StoryMapLayout"\n* Information about building the story can go into "StoryBuildOptions".\n* We can put window geometry and current storymap viewer into "StoryWindowOptions".\n* Information about plugins / extensions that might need supporting go into "StoryExtensions"\n** An example would be special tags\n\nWe then tag these special passages with Twine.system it can be easily understood that these special passages are not part of the story.\nThis information can then safely be recorded into a Twee file. Yay!\nDoing this will allow deprecation of the .tws file format.\n\nKeeping .tws support (and moving to MVC, giving .tws support to twee commandline tools) will necessitate writing a custom set of Picklers/Unpicklers.\nThe idea will be to have TiddlyWiki class responsible for opening and saving files (so they have to be able to read them) and then having the StoryMap constructed from a TiddlyWiki.\n\nWe can then more cleanly build Multi-file editing in a single story map by extending TiddlyWiki to be multi-file aware. This makes [[InterTwine v1]] much nicer. MVC also enables: [[StoryMap and different modes]].
! PassageEditor: Right click link..\n<<back>> Et201204\n\nIn the passageeditor, whenever a link is rightclicked...\nActually this should also work in macro-code whenever a passagetitle is detected: such as display macros\n\n!! Edit link\nAn option to edit the link brings up the link creation dialog box where current link settings can be changed.\n(Assuming of course the new link dialog box has been created)\n\n!! Goto to passage\nA new passageeditor opens with the passage referred to in it.\n\nRight clicking a broken link should give the option to create that passage. And/or suggestions for fixing the link (Dice Algorithm based similarity?)\n\n
! TwineWorld\n<<back>>\n\nWhen I was first thinking of the possibilities for Twine my day-dreams took a Xanadu SilverShed/SilverShack (I forget which is correct) turn.\n\n!! zOMG It's Perfect!\nImagine a place - a website - everything is bright and shiny. Creatives gather and share their ideas. And the ideas come thick and fast because TwineWorld helps you get things done. Better than anything ever before.\nReaders come to purchase finished works. Authors might even make a living here.\nThis is THE hip place to be. You can follow what others (authors and readers) are doing like Facebook, share, engage, connect and all from the convenience of anywhere you happen to be on the planet. Excellent. I could monetise that. I have the skills, connections and resources to build TwineWorld if I wanted to.\n\n!! Then comes the nightmare:\nWithin this utopia along comes governments, censors, lobby groups, do-gooders and shareholders who impose their values on which content is acceptable and what is not. Works are digitally "burnt" when no longer politically palattable. DMCA notices burn legitimate derivative works. Politically charged works are removed. Dissenters are quietly barred from entry. But the party goes on somewhere between obliviousness and a hope that their works will not be next. The corporate owners of TwineWorld remove works because they don't want to offend powerful people.\nSerious and challenging works of literature may not necessarily thrive in this space because all that is acceptable are works that offend no-one with enough clout to matter.\nBy becoming a focal point for creative people producing creative content, TwineWorld also becomes the one-single target for coersive control. A few law changes, an influential lobby, an opinionated shareholder and things get bad real quick.\n\n!! Then there's the distrust\n!!! Submarine Creativity\nCan you imagine a wildly famous person trusting their current work-in-progress to such a service? All it takes is one errant employee of TwineWorld or a single point of hacking and ... leak. I can't imagine too many creatives (especially when they need to make a living off their work) agreeing to work in such circumstances.\n \n\n!!! Digital Story Telling\nTwine has a growing usage as a Digital Story Telling platform. These stories are often intensely personally and intended for a very limited audience (sometimes of just the author). Digital storytelling is sometimes used as art therapy so it can be used with some very vulnerable people. The level of distrust they have can be saddening but it cannot be discounted. Not all digital storytelling workshops are held in places with good internet access.\nWe need to give people practicable assurances that their stories are not leaving their machines, that THEY maintain total control over where THEIR files are stored and how THEIR files are transmitted. \n\n\n!! The Practical\nThe premiere version of Twine should always remain cross platfrom, standalone, able to run totally network-disconnected. This means creating content and generating files for publishing should be work in a network-disconnected environment.\n\nThe data should be stored in files located where the user chooses with no footprint left in other places (concession: recent file list). Therefore users have the ability to control their data just like any other file. The files can be on a USB they hide, a dropbox for sharing, an encrypted virtual drive steganography embedded into a wedding video. The point is that the user should be able to decide and use the tools they are already familiar with for managing the storage and transmission of their data.\n\nHTML: This limits the usage of FileIO and localStorage. localStorage is not user controlled and is opaque unless you're a webdev. FileIO still insists on choosing where to put the user's files. Sure, the user could move said files but why should the file even touch a storage system the user did not choose. Then...AJAX.. not even network-disconnected without storing requests locally so no.\n\nWriting a TwineWorld style server as FOSS is still a problem. Eventually a few of these services gain market traction and so become de facto TwineWorlds.\n\n\n!! And so\nI'm not opposed to the building of TwineWorld by somebody else. I'd even see the entrance of parties wanting to build TwineWorld as a sign of a healthy Twine ecosystem. I'll even FOSScooperate with TwineWorld-like services where this advances the standalone version of Twine.\n\nBut; ask me to build TwineWorld? Nope. YMMV
! My Contributions to Twine\n<<back>> Et201303\n\n!! v1.3.6\n* Various minor bug-fixes and stability improvements\n* The [[Twine.private|Proposed New Special Pagssages, Twine.* tags]] tag\n* Unicode support (not perfect, but usable for now)\n* [[InterTwine v1]] architected and coding the implementation (idea and name is from Philip Sutton) - BASIC\n* Hashbang based permalinking\n* Silently .. end silently macro can be nested\n* StoryFormats menu loads dynamically by scanning targets folder\n* File | Open recent menu removes non-existant files with and gives a message\n* Closing the last story should not close the program\n* Twee support for [[InterTwine v1]]\n* Compiling Python to an win32.exe and getting it to run\n* Windows .exe based installer (32-bit)\n* [[InterTwine v1]]: set default dir to umbrella twine file's dir on build\n* Passage tagged Twine.system are not put into output .html\n* (redacted) Tooltips when passage widget hovered over in the story map\n* Open last worked on file when Twine opens\n* Show warning on build if no Start passage exists\n* Twine.* tags stripped from output\n* [[AutoBuild feature]] rebuilds the output .html when a source file in the same folder changes\n* The StorySettings [[Special Passage|Proposed New Special Pagssages, Twine.x tags]] with basic text obfuscation for the [[Responsive Story Format]]\n* Fixes to the remember macro -> support localStorage with cookie fallback\n\n!! Other\n* [[Responsive Story Format]] - <<display "Responsive Short">>\n* Macro: randomp for adding serendiptious flavour to text\n* Macro: ability to change text on the back macro\n* Macro: br - easier line breaks;\n* A tutorial on how to [[write loops in Twine's tweecode|http://eturnerx.blogspot.com/2012/11/twine-howto-loops.html]]\n* A tutorial on how to [[write macros in Twine|http://eturnerx.blogspot.com/2012/12/how-to-create-custom-macros-in-twine.html]]\n* A coded proposal for the [[TwineQuest|http://github.com/tweecode/TwineQuest]] framework.
* [[Home|RealStart]]\n* [[TODO|Stormrose's TODO list]]\n* [[Contrib|My Contributions to Twine]]\n* [[InterTwine|InterTwine v1]]\n* [[New Formats|NewFormats]]\n* [[Macros|Custom Macros]]\n* [[Links|Useful Links]]
! Exporting muliple output files from different starting passages\n<<back>> Et2001204\n\nPassages are basically just document fragments right?\nWell, what if we use Twine to update those fragments and then produce multiple output documents at the same time?\n\nEach outputfile has a nomintated start passage, storyFormat etc.\nThe output is pruned to include only needed passages.\n\nThis means, that all from the same Twine we can produce upto date versions of massively interlinked and documents with a high degree of text-repetition.\n\ne.g. In a time about a problem... there can be passages about the problems, the evidence and the solutions. One start-point is the full she-bang of everything. Another start-point just includes the solutions so implementers know what to do. Another start-point can be just about a single issue.\n\n!! Thinking forward\n<% TODO: auto link list generation ... own passage %>\nCan we generate a list of links with a query? Say for the example about we could have a start passage of stuff for "Henry" by tagging any passage with "forHentry". Then Henry and Peter can get tasks assignments and/or information relevant to just them.\n
!Generative Fiction System\n<<back>> by Et 20120903\n\nTwine is built for interactive fiction and can do game book stuff. It would be good to add in some suport for Generative Fiction. Don't make a complete GF system, but some macros to make small amounts of GF possible.\n\nI am personally working on some GF macros for use in the story "Cupric Acid". I will develop these as I go and share them as they become mature. That story has a number of custom macros, including an over-ridden passage writing method to handle the game part of the story. There is also a macro 'person' that gives increasingly derogatory names for other people as the player becomes increasingly frustrated. There is probably no easy way to generalise this type of macro - so they will need to be custom written on a story-by-story basis.\n\n<<display "macro randomp">>\n\nInstallation instructions for macros are available on the [[Custom Macros]] page.
! The pluarity principle\n<<back>>\n\nThe idea of this is the the Twine eco-system will eventually become rich enough to support many tools from many providers all working and exchanging data via the Twee file format.\n\nCentral to this is that the Twine developers group places great care in guardianship of the Twine file format and may eventually seek to put it through a standards process. Later.
! Principles for v1.3.6 release\n<<back>> Et201204\n\n# No changes to file format\n# No significant changes to UI\n
body { background-color: #fff; color: #000; }\na.brokenLink { background-color: #fff; color: #666; text-decoration: line-through; }
! Proposed New Special Pagssages, Twine.x tags\n\n!! [[InterTwine v1]]\n/% TODO: make an implementation passage for this %/\nA special passage that contains information about other files used by the current Twine. This passage will be called "StoryIncludes"\n\n!! StorySettings\nA special passage that can contain settings useful to the way the story is built. This is a way of communicating those settings to the StoryFormat. It could be used to set "stretch-text vs click-text" mode or a variety of other uses.\nThe passage is line-based (like StoryIncludes). There is a key and a label per line seperated by a : colon. My versions of Twine, and the [[Responsive Story Format]] understand the following keys:\n!!! Obfuscate\nTells Twine (and Responsive) to use obfuscation of the outputted HTML file to make reading ahead more difficult. The only value recognised is "SWAP" which refers to the pair-swapping method used. This is NOT high-grade encruption - and it is not meant to be. Anybody with a reasonable programming knowledge or who is able to use a web browser developer tools will be able to access your plaintext. This feature is to discourage peek ahead ONLY.\nObfuscate: SWAP\n\n!!! ObfuscateKey\nThe value here contains at text string that is used for pair swapping to obfuscate the HTML output. Do not use a \s backslash character.\nObfuscateKey: Text;And (N0mb3r5}with{some)Pun.ctu!ation\n\n\n!! [[Deprecating the Twine .tws file format]]\n<<display "Deprecation of .tws implementation">>\n\n!! Tags\n!!! Twine.x tags and Story.x tags\nI propose that Twine.x tags exist only in the Twine Authoring Environment and are stripped from story (.html) output.\nStory.x tags should be tags that have special meaning that are passed into output files - the Story.x implies a standardisation that is signficant to the code running the reader.\nFor the sake of simplicity and backward compatibility the existing special tags: bookmark, script and stylesheet are left as is. We may create Story.x aliases for these if we want.\n\n!!! Twine.private\nA passage with this tag is not placed into any output file (.html). The passage is otherwise saved into Twine .tws / Twee files.\n\n!!! Twine.system\nThis tag indicates a special passage that has some signifcance to a Twee compatible tool. They can be used for any text data whatsoever.\nFor example: in the proposal to deprecate .tws above, the new passages would be marked with Twine.system so that other Twine compatible authoring tools would know that this passage is not part of the story's text.\nThe contents of a Twine.system tagged passage should not be displayed in a storymap.\nAn authoring programme cannot assume that the contents are kept upto data by other authoring programs, so must be well prepared for errors and data that is no longer in sync.\n\n!!! Twine.forceintooutput\nThis tag indicates that this passage must be included in the output .html. This is used if trim unnecessary passages is used and some passages end up missing. Any file using this probably (and trim features) probably needs marking as trim aware.\n
! Document Story Format\n<<back>> Et201204\n\nThis story format is to suit the needs of formal document authors (as opposed to interactive fiction authors).\n\nThe key difference is:\n* Going to a passage via a link automatically prepends the current passagetitle as in <h1> to the passage output. A back macro is added directly under the heading too.\n* Going to a passage using the display macro does not output the automatic heading or back macro.\n\nWhy is this good? Well it allows the document author to have nice headings and navigation without much bother. And they still have the power to pull passages into other passages without the pollution.\n\nI could use this. Maybe Phillip Sutton could too?\n\nStart with Sugarcane as the base?
! Index\n<<back>>\n\nA list (in no particular order) of articles in this twine.\n\n!! Releases\n[[Principles for v1.3.6 release]]\n[[Responsive Story Format]] - <<display "Responsive Short">>\n[[My Contributions to Twine]]\n\n[[Stormrose's TODO list]]\n[[TestBuild, Alpha, Beta, Release]]\n\n!! The Authoring Environment\n[[StoryMap and editting multiple files at once]]\n[[Editorial revision control]]\n[[StoryMap and different modes]]\n[[PassageEditor WYSIWYG and moving to HTML]]\n[[Configurable Plugin System]]\n[[The Story Pane]]\n[[The Issues Pane]]\n[[The variables Pane]] - idea stolen from AXMA\n[[Spell check, grammar check, style check plugins]]\n[[PassageEditor: Move selected text and link]]\n[[PassageEditor: Right click link..]]\n\n!! Beyond Twine.exe / python\n[[Plurality Principle]]\n[[Twine as Node.js, XUL or WebBrowser hosted]] -also metro app\n[[Twine as an Eclipse package]]\n\n!! Collaboration\n[[InterTwine v1]]\n\n!! Input / Output\n!!! Authoring\n[[Observations of the Twee file format]]\n[[Deprecating the Twine .tws file format]]\n[[Limited enhancements to the twee file format]]\n[[Proposed New Special Pagssages, Twine.x tags]]\n[[Future twee2 file format thoughts]]\n[[Increasing data source options for import and export]]\n[[Increasing file format options for import and export]]\n!!! Reading\n[[Improving storyformats]]\n[[Increasing output build options - beyond .html]]\n[[FreeNet plugin]]\n\n!! Ideas\nRandom things\n[[Exporting muliple output files from different starting passages]]\n[[TODO list plugin]]\n[[References Manager plugin]]\n!!! StoryFormat\n[[The automatic glossary]]\n[[StoryFormat display zones system]]\n[[on event do - watcher macros]]\n[[Geotrigger system]]\n[[Generative fiction system]]\n[[Passage Storage to JSON]]\n[[Publish to CMS - MediaWiki, Wordpress]]\n[[Encrypted passage storage]]\n!!! Story Formats\n[[Responsive Story Format]] - done\n[[Document Story Format]]\n[[Powerpoint Story Format]]\n!!! System changes\n[[Perma-id and linking]]\n[[The email collaboration plugin]]\n\n!! Philosophy\nMy [[Principles]]. Do ya feel me? Can we agree enough to work together?\nThe nightmare I call [[TwineWorld]].\n[[Plurality Principle]]\n[[The Twine Eco-system, community]]\n\n!!! External links\n[[Transliterature|http://transliterature.org/]] - Theodor H. Nelson. That crazy guy again :)\n[[AXMA Story Maker|http://sm.axmasoft.com/en/]] A Twine-alike with modified syntax.
!The Automatic Glossary\n<<back>> by Et 20120903\n\nCreate a thingy that picks up keywords (maybe with a subtle highlight?) displayed in passages and creates glossary popups automatically. This would be useful for more technical and/or educational uses.\n\n!!Implementation Idea\nPerhaps a Special Passage (which by extension probably means a storypanel - but only when it is activated - and probably this is a plugin?) The passage StoryGlossary in a set format.\n\nword or phrase (tab) defintion.\sn\n\sn\nnext word or phrase (tab) another definition\sn\n\nNote the blank line delimiter between definitions. This will initially require support in the StoryFormat header.html files first. The special syntax in the passage is not horrible, but best handled by special UI like a pane.
! The Future of Twine\nThe perspective of one Twine person. Late updated 20130323\n\n!! What?\nTwine is an Interactive Fiction authoring environment that outputs to a single stand-alone .html file. I have been working with this Twine for my own stories and have been contributing off and on to its development. This is my blog about all things DEV and Twine.\n\nStart with the [[index|Document Map]]\nMy stories are [[here|http://eturnerx.com/files/stories/]]\nUseful files are [[here|http://eturnerx.com/fot/files/]]\n\n!! Purpose\nThere is a huge opportunity for Twine to become the premiere authoring environment for hypertexts. We start primarily with a focus on the needs of hypertext fiction.\nThis document is a dumping ground for the incomplete thoughts of one Twine developer, author and reader. It never pretends to be comprehensive, complete or authoritative.\nTwine has a lot of places to go, and priorities will shift and the needs will change as we learn more about what Twine is being used for.\n\n!! House keeping\nPlease contact the author with comments, suggestions etc. Anything you say (particularly when informed by your own experience or first-hand accounts of the experience of others) will be taken seriously.\nemail: eturnerx@gmail.com\nThe StoryFormat for this website was created during the Internship programme of the [[Bachelor of Computer Graphic Design|http://cgd.waikato.ac.nz]] at the University of Waikato.\n* Web Design and Illustration - [[Jaimie Hutton|http://www.jaimiehutton.com/]]\n* Art Direction - [[Patrick Ryan|http://www.kingofcute.co.nz/]]
! PassageEditor: Move selected text and link\n<<back>> Et201204\n\nOnce a block of text is selected in the passageeditor, a control should be available (right click, floating?) that:\n\n1. New passage with text > and display\n2. New passage with text > and link\n3. New passage with text > do nothing\n(Could be a submenu etc.)\n\nBehaviour:\nA dialog box asks for a new passagetitle.\nA new passage is created using the passagetitle and selected text.\nThe newly created passage is goes into the story map.\nThe selected text is deleted from the current passage.\n1. A display macro points to the new passage\n2. A link points to the new passage\n3. Nothing is left in the current passage referring to the new passage\nThen the new passage is opened in a passage editor and that becomes the current passageeditor window\n
! Stormrose's TODO list\n<<back>> Et20120902\nMy collection of things I'm going to do on Twine. If it's here and not in the ideas list then I'm 85% committed to seeing this happen. In my own time.\nSee what I've done: [[My Contributions to Twine]]\n\n\n!! In progress\nThings I'm working on right now!\n\n\n!! Urgent.\nShow stopping bugs. Feature Requests from VVIPs (me!).\n* If I close a passage with a blank link - like [link text|] - the editor doesn't let me open it again. One time I had a huge passage and I let a blank link in it (because I hadn't still decided what it was going to link to) and I almost had to delete it and lose all the text in it. I guess now I could export a proofing copy to retrieve the passage content, but back then I had to open the Twine project with the notepad and manually delete the blank link. - Reported by David Marchand [[here|https://groups.google.com/forum/?fromgroups=#!topic/tweecode/8hYb9W9NsIo]]\n* HarmlessTrouble reports a Unicode error when building an empty story in Responsive. [[here|https://groups.google.com/d/msg/tweecode/8hYb9W9NsIo/VLTdkRIxImEJ]]\n\n!! High\nCurrent focus. Bugs with workarounds.\n* BUG: Allow " in titles; [[https://groups.google.com/forum/?fromgroups#!topic/tweecode/8hYb9W9NsIo]]\n* Fixes to tooltips - something that actually works\n* win_x64 installer\n* Dragging a .tws or .twee file into a StoryMap should open that file (in a new window)\n* Twine should remember window (positions, sizes) and storymap (position, zoom, layout mode:snap to grid) between sessions (by file)\n* EXCLUDE support for InterTwine\n* INCLUDE support for InterTwine\n* Ensure that PassageEditor windows that are minimised are raised when the passagewidget is triggered\n* TiddlyWiki comments stripped from Tiddler output\n* Twee as a File|Open format and Save format\n** Story Settings and Window settings into Twee\n** StoryMap settings into Twee\n** Extend TiddlyWiki to preserve orderings in .twee files\n*** Default orderings.. Story Stuff at top. Twine.System at bottom. Passages in order of occurance of link.\n* .tws as an export/import format (for what?)\n\n\n!! Medium\nNice things to do. Usually longer term things.\n* Make AutoBuild StoryIncludes aware\n* Make AutoBuild a preference option\n* Recursive opening of InterTwine files\n* Broken link checking for InterTwine files\n* Drag function in passage window moves text, none left behind\n* Paste using mouse onto the storymap should place newly created passage under the mouse (or nearby)\n* Pasting text into the storymap should create a new passage and open the passage editor\n* MVC architecture\n** Custom unpickler for .tws files into TiddlyWiki\n** A multi-file aware version of TiddlyWiki\n* Title field contents in the passageeditor are in a weird spot\n* Better file extension checking for Save/Export dialogs\n* File format extension to support perma-ids (post 1.3.6)\n** Permalinks based on perma-ids\n** Tiddly-history to use perma-ids\n** Passage link/macro syntax to allow perma-ids (alt to passagenames)\n* PassageName syntax to support "PassageX in FileY"\n** ALIAS support for InterTwine\n* Multi-file editing in a single storymap\n* Relative pathnames for build targets\n* More deterministic pathname stuff for InterTwine\n** use os.path more intelligently to work out if path is relative or absolute\n* Broken links sub-menu sort in alpha ascending\n* Drop-down to "New Passage" icon to list broken links\n* Put StoryTitle StorySubtitle StoryAuthor into a pane\n* StoryIncludes pane\n* Variables pane\n** List variables, lower pane shows passages that have current variable\n* Issues pane\n** List issues: duplicate passage names, broken links etc that might need attention. Allow going to that.\n* Search pane\n* Macro to give a hashbang permalink (from within the output file)\n* Passage pane: a passage editor in a pane for the currently selected story in the map (dbl-click still opens the editor in a window)\n\n\n!! Low\nGood ideas if I get time, motivation or are just bored and want to try something out. If stakeholder desires warrant it then things can move from here upwards.\n* Output compressor for HTML/CSS/JS in Python\n* Periodically cleanup the app.stories[] array\n* TO "Start" button on toolbar to center StoryMap view on Start Passage\n* TO toolbar button gets a dropdown with all passages.\n* TO toolbar button gets recently touched passage history at top of dropbox\n* TO toolbar button allows pinning passages into the dropdown\n* Plugin system for File|save/Export\n* Exports -> a submenu that is automatically generated\n* Investigate codepage support to improve Unicode support in the Passage Editor\n* Smarter handling on open file if the build file path does not exist\n** Can we guess?\n* Build / Rebuild is maybe confusing. Consider change to Build / Change build target..\n** default build target is always [filename].html (strip the .tws or .txt or .tw or .twee)\n* WYSIWYG PassageEditor enhancements. \n** Default to wrapping with html block\n** Understand TiddlyWiki subset we use\n** Allow tiddlywiki commands within HTML code\n** Edit source mode\n* A build link creation/editing UI\n** give a list of passage - if long use an autocomplete dropdown that has some smarts! (Dice similarity)\n* New Story Wizard.. (at least ask for Title, Subtitle, Author, destination, format, build dest) Optional and cancellable.\n* New story map re-arrangers...\n* Right-click link in passageeditor gives menu.. option to follow link\n* Drag and drop passages between Twine Story windows\n* Right-click passagewidget "center to here" option\n* Trim un-used passages from the output\n** Twine.forceintooutput tag for passages that must be there!\n** The data file needs to be marked that it was created with trim outputs set or old files are going to break.\n* Bookmark to localStorage\n* Click to get link: hashbang passagetitle perma-link\n* Click to get link: #chunked history link for Jonah (bookmark for Jonah) [[See|https://groups.google.com/d/msg/tweecode/wICyx1mz4-I/eKIkaD9n8OYJ]]\n* Highlighting a passagewidget also highlights shortest path back to Start (if any)\nx\n\n!! Not prioritised\nIdeas from others/myself I'm not sure where to put yet and these are really just loose ideas.\n* Some kind of sentinel auto build mode: When any file in the StoryIncludes changes it auto rebuilds the .html. This would suit my .twee/lightroom/dropbox way of working because I could just leave Twine.exe running at home.\n* Make is possible for authors to hook the Tale.display function. Currently doing this throws errors.\n* Make responsive switchable between Jonah and sugarcane style (append or replace) passage display.\n* hash bang permalinks should handle spaces. BUG\n\n\n!!! From Philip Sutton\n* Fixes to tooltips - no more flashing! (hard - needs a custom popup library)\n* Mind-map mode for Storymap (needs MVC first)\n* Print the Storymap\n* More collaboration features\n* disintegrate Sugarcane/Jonah to allow authors to construct own formats\n* Internal anchors (link into a passage - probably scrollTo if already on screen?)\n* Recent files list length to be a preference option\n* Zooming the storymap should leave the currently highlight passagewidget as the center\n* Consider optional short-title, title for passages\n** Does synopsis and perma-id fix this?
!Custom Macros\n<<back>> by Et 20130323 [[permalink to this page|http://eturnerx.com/fot/The%20Future%20of%20Twine.html#!CustomMacros]]\nI make custom macros for my own stories and sometimes by request. It does take some familiarity with the codebase to make these. But most are not too difficult.\n\nI am slowly transitioning my macros over to the [[TwineQuest|http://github.com/tweecode/TwineQuest]] site. \nMacros on there are more up to date. Of course, there is no automatic guarantee that all my macros will got there.\n\nThe old link to my macros is [[this permalink|http://eturnerx.com/fot/files/macros/]]\nThe TwineQuest version\n\n!!Installing Custom Macros\nIn official v1.3.5 Twine: \n* Create a new passage, paste in the code, then tag the passage as "script".\n\nIn my builds of Twine (recent alphas and beyond) either:\n* Create a new passage, paste in the code, then tag the passage as "script"\n-or-\n# Copy the macro's .twee file into the same folder as your story file\n# Add an entry to the [[StoryIncludes passage|What is StoryIncludes]] with the macro's filename\nThe second method is preferred because an update/bugfix to the macro file can occur just by copying in a new .twee file.\n\n* [[br macro|https://github.com/tweecode/TwineQuest/wiki/Macro-br]] - easier to code linebreaks\n\n<<display "macro back labels">>\n<<display "macro randomp">>
!The Story Pane\n<<back>> by Et 20120903\n\nA dockable pane that neatly encapsulates many options that are story wide. There are currently a ton of small Story* passages that just clutter up the storymap. (StoryTitle, StorySubtitle, StoryAuthor etc.) These can be added (or left blank) in a single place which would make the story map much cleaner.\nIf there is room (probably) then the build options could also go here too.\n[[StoryIncludes|What is StoryIncludes]] should not be in this pane -> but should be addable from the StoryPane? (Link to file?) because handling the [[InterTwine|InterTwine v1]] options should have it's own initially hidden pane.
<<display "Custom Macros">>
! StoryMap and different modes\n<<back>> Et201204\n\nStory map is a graph of squares. There are other ways to visualise this.\n\nA mind map.\n\nLinear editor squares. (Current passage in middle, incoming links in squares above, outing passages in editor zones below. The author can move up and down. Also: include shortest synopsis paths from Start (or nominated startpoint) to the parent passage. Or... Current passage in middle, incoming to the left, outgoing to the right. Clicking a passage moves to the middle. Sibling passages as tabs?\n