One of the outcomes of my failed attempt at commercial IF was the design and development of FyreVM, a Glulx implementation with an alternate I/O library, originally labelled Channel IO.
The idea behind Channel IO was that the author could tag various types of text and add these to a list. That list of text and types would be received by the user interface and rendered accordingly. So the text type ‘score’ would be placed traditionally in the upper right of the header. The text type ‘location’ would be bold and precede the text type ‘main’.
This was helpful, but it doesn’t allow for much nuance. You still have this ‘main’ channel constructed by a stream of ‘print’ statements in Inform 7 (with I6 libraries really handling much of what is underneath the covers).
So it occurs to me, each type of text needs more than a singular identifier, especially if we remove that streaming set of print statements from the logic of a new platform.
In my vision for a new IF platform, text output would be packaged with intelligent meta data.
This is just a swag, but it might look something like:
{
“text”: “The Kitchen”,
“tags”: “enhanced,locationTitle”
}
or
{
“text”: “Upon reviewing the kitchen, you see”,
“tags”: “locationPreamble,openEnded,noPunctuation”
}
Using this type of text emission, we would then have a list of text objects used to construct the final output using rules. These rules would determine what goes where, what is enhanced, what is concatenated, and what requires punctuation or quotes. Conversations can be developed by having tags for “conversationStarted” or “conversationInterupted” or “conversationSubjectChanged”. Non PC activity could be tagged as “openingAction” or “closingAction”.
Obviously this is all theory and design at the moment, but I do believe that this could wield powerful control over how an IF story presents text.