I make stateful media that has an emphasis on narration-based agency.
I believe the worst thing you can do to an audience is break their suspension of disbelief. To help myself avoid this, I eschew story-based agency.
…well, this is the ideal version of what I’m working towards, at any rate. I’d like this post to be a dialog about my progress and ideas, so instead of offering a sanitized “data dump” that densely summarizes my ideas, I’ve compiled here all of my replies to various reactions to my ParserComp 2022 entry, Cost of Living. I’ve edited down the replies and tried to apply a cohesive flow to them, but I probably didn’t do a great job.
Here is a link to Cost of Living in case you want to read that before continuing to read this.
And a link to the IFDB entry.
Before I jump into this, here’s a response where I explain my framing of “stateful” versus “stateless” media.
Web application development (e.g., REST architecture, microservices, React’s state management, etc.) is what helped me abandon decades worth of imprecise partitions (e.g., dynamic, interactive, digital, ergodic, etc.). For my considerations, if a medium can change state, then that medium is stateful, and otherwise, that medium is stateless. Please note, however, that aside from my framing being yet another “same difference”, this framing supports a deeper theory on “interaction” within stateless media.
And for some vague context, here’s my developer note that I left on Cost of Living.
The first time I tried to adapt Robert Sheckley’s Cost of Living to interactive fiction was about two years ago. I’d just completed a second game with — yet another — innovative but custom-made system. The next horizon for me was to adapt a literary short story. My excitement was at an all-time high.
What I did manage to finish was terrible. It stunk! I felt frustrated and disappointed with myself. If you’ve ever tried to adapt a short story to interactive fiction, then this admission might not surprise you.
This is my second attempt. But this time?
This time I demolished everything I knew about interactive storytelling, cleared the rubble, and reconstructed on top of everything I learned about literature in the past two years.
This is just a glimpse of what I built. I hope you like it.
Cost of Living is my debut project. So far, I’ve received a range of responses, from confusion to curiosity and from love to hate.
Here’s a few quotes from the responses:
I found the mechanism really fun, and it made me want to read the original story.
Sorry we had to disqualify your game! I did play it, and it is lovely, but it’s not a parser game.
I’m quite befuddled and flabbergasted and foozewonkled by this. That, and I really like it.
Cost of Living opens a new path in creating parser games. I can ensure you.
That said, I missed much of the point of the game, perhaps because the idea is very new.
I love the lateral thinking, but still kind of felt like this was so much homework, not an interactive experience.
In theory these are fixable problems – though they’re also generally the hardest problems in any kind of writing – and at any rate there’s value, and honor, in a failed experiment.
As you see, my entry to ParserComp 2022 was disqualified. But don’t worry, as I’ve said a few times — that’s fine! I was going for something different, and I wasn’t sure if it was. At least now, I have some general consensus.
This is me trying to convince the organizers and participants that I’m making an honest effort with my submission.
If you don’t mind, I’d like to share a few details about my approach. My hope is to shed light onto the reason I submitted my experiment to ParserComp.
My tech stack uses parts of https://naturalnode.github.io/natural/. Here is the blurb about the library:
“Natural” is a general natural language facility for nodejs. Tokenizing, stemming, classification, phonetics, tf-idf, WordNet, string similarity, and some inflections are currently supported.
Since I’m leveraging a parser (and the title of this jam is ParserComp), I did not think to ask for further clarifications. This was my fault and I apologize.
My “stateful narration” approach was directly inspired by the original parser experiment, Weizenbaum’s ELIZA. You might need to squint to see the inspiration, but I assure you, it’s there.
Finally, my experiment does have a world model with state that changes over time. A storyteller can add, modify, and echo the state of the world model; an audience can only add and modify its state. I think the contention I’m experiencing originates from the domain of my world model. My approach implements a social reality world model, whereas the classical approach implements a physical reality world model.
Some people did see a semblance to ELIZA. But I’m pretty sure most people are convinced that I’m trying to trick them. So this is me beating a dead horse (and sounding pompous in the process).
I promise that I had no intention of usurping the classical expectation of parser-based interactive fiction (e.g., Colossal Cave Adventure and Zork). I deeply respect this particular format, as I have been playing it and all other forms of interactive storytelling for the last three decades. I have extensively studied the subject for the past four years, and consider myself a scholar on the matter (I have several planned papers I will be extracting from the over 500 pages of notes I have taken throughout the 70 scholarly books and papers I’ve read on the matter).
For me, this competition is the first stop on my way to making a Hollywood-style studio system. Astute readers might have picked up on this from the credits of my submission; stateless writer (novelist), stateful writer (script writer), artistic engineer (director). In other words, my system splits apart the herculean triune author, and allows its writers to be writers, designers to be designers, and its engineers to be engineers. I have also built a rapid and repeatable process; I adapted Cost of Living in about two and a half weeks. I want to create an avenue for our community to become wealthy from interactive storytelling. I want put together a team that will create a work that is as recognizable to the “everyman” as Hamlet, Don Quixote, Citizen Kane, and Mario & Luigi.
Cost of Living is nothing more than a conceptual demonstration that aims to test the strength of the core of my vision. It is an artifact from the past two years of my research. My most important take away for this competition was its feedback, particularly from the rating system and the wonderful community that everyone built here. For this reason, I have to ask if there is a possibility that I may be an honorary submission (with participant approval, of course). If possible, could you please reinstatement my submission, graciously allow me to receive ratings and feedback, and then re-disqualify my submission before announcing the winner? It would mean the world to me right now!
I made myself sound sorry enough that I was allowed back into the competition. Thank you again to the organizers for allowing me to receive reviews and ratings!
However, you probably notice that I committed another mistake — I submitted a demo to a competition. I’ll come back to this in a later response. But real quick, a word on those 500 pages of notes.
I can also share something about my notes for the competition. Earlier, I humblebragged about my 500 pages of unedited notes. Well, turns out that hundreds of pages of unedited notes makes a lousy reference for a competition. Editing them will take months! What am I to do?
Random sampling to the rescue! That’s right, I randomly sampled my notes. I did not think this would work, but it wasn’t half as bad as I anticipated. After rolling some random numbers from random.org, I extracted 10% of my notes (along with a few must-have notes) to build a reference set for this competition. After a few editorial passes, I sculpted a functional set of notes. I’m rather pleased with the results and I’ll probably do this again for a few more competitions until I get a set of notes that I consider really special.
So, on we continue.
After mentioning my interest in academic articles about interactive fiction, I was recommended to read a dissertation on parser-based interactive fiction.
The section “What isn’t IF?” helped me process my debut reaction to my entry into ParserComp. I am relieved to see my approach is not a chat client (obviously), not a chat bot (world model, i.e., object tree), not a MUD (obviously), not a Façade clone (obviously), and not Hypertext Fiction (obviously). However, according to Douglass and the Interactive Fiction community, my approach is an Abuse.
The exemplary Abuse is Plotkin’s Tetris implementation using Nelson’s Inform. As Douglass points out, Plotkin’s Tetris is a consequence of a Turing Complete system. In other words, Plotkin’s Tetris is an instance of Searle’s Chinese Room with Nelson’s Inform acting as the translator. I can’t remember which thread, but Searle’s thought experiment was evoked to state a wait-and-see approach to Twine games with a parser-like aesthetic. In that same thread, Johnson’s Gruescript was accepted into ParserComp. This was after Johnson stated the following:
All I did was take out the actual parser, which is, for the most part, what people who don’t like parser games actually don’t like about them.
I definitely got a chuckle that participants can submit to ParserComp an entry without a parser!
Now that the waters are sufficiently murky, Douglass provides his filter:
A work may be command line based, non-temporal, single-user, manage an object-tree, have a parser, and still not be IF.
So what’s left? If mechanics don’t make an Interactive Fiction, then what’s left?
In short (and according to my experiences in this competition), Interactive Fiction must be dynamically and aesthetically derivative of Colossal Cave Adventure. Anything short of a clone is an Abuse. Perhaps ParserComp should adopt Douglass’ enumeration? At the very least, I have.
At this point, my lousy attitude stopped any further endearment to myself. And my burgeoning lack of tact grants me a lack of tact in a later review. I deserved it.
So now I was starting to get feedback. Understandably, there was confusion, which I was trying (poorly) to demystify.
Also, rest assured, the gist does differ between the stateless and stateful versions of Cost of Living.
Later on, I get spicy when a reviewer spoils the difference. You’ll see. Hopefully, there’s no hard feelings.
I start to use nonsensical gibberish to pique interest. Nobody is buying what I’m selling. The smileys don’t help my case.
However, in the meantime, I’ll share a vague academic-sounding buzzword without any context. The architecture of Cost of Living is what I call Metaleptic Conversational Interstitials. Evocative? Pretentious? Unnecessary? I’ll let someone else decide.
And more fluff.
My nascent approach to stateful media has a lot of room for growth. I consider myself in the awkward period of 18th-century novels where authors were exploring and discovering the techniques and tropes we now take for granted. I promise you that I agonized over how to transition into and among the metaleptic interstitials, but I ran out of the time I allotted to myself. I had to move forward to implement my other theories and models.
Here’s a folk-academic buzzword for the “interactive experience” that I’m striving to achieve: Noematic Interaction. (Ostentatious? Definitely. Can I help myself? Never.)
Reactions start to turn south, but I press on with explanations. As a reprieve, I try to drag in a cool gadget.
As you fairly point out, this new format rests upon the skills of a stateful author. I am happy to admit I’m a terrible author, regardless of statefulness or statelessness. I sunk 200+ hours into conversation research just to have you grant me a ¯_(ツ)_/¯. And I’m so proud of that, considering this is my first try.
However, the stateful writing process for Cost of Living was done entirely in Markdown. So maybe I can entice a great author to partner with me if I purchase them one of these?
How cool is this?!
but since it’s a very experimental system I get to blame the author anyway, neener neener.
And I’ll cheerily shift the blame to somewhere else (shoo! get!). This was a size trade-off. Instead something like this 50MB English dictionary, I chose a 500kB alternative. I realize that 50MB is tiny in the streaming era, but for a web site? I just couldn’t bring myself to do that to anyone.
Here, I’m picking apart my tech stack. I have no reason to believe I can’t iron out all the kinks; however, the topic of a limited word space comes up again later.
I finally get my most critical review for “Cost of Living, by Dorian Presser”. The author wasn’t as constructive as I hoped, but I appreciate his honesty. As I said earlier, my near-belligerent attitude certainly warrants an attempt to knock me down a few pegs. My response is amateurishly salty. And I rebuke the author for not including a spoiler blur.
But some good came of my whining. I spilled the beans about my vision for the future of interactive fiction. I’m not going to quote my response like I have been, and instead will place it into it’s own section.
Thank for the detailed review. It’s amazing! I was excited to read it and it did not disappoint. Many fair and constructive points. So, thank you, again, Mike! Since this review has the same stance as hawkbyte’s review, I’ll try not to repeat myself too much, except for now. I accept that I’m a terrible critic and author. I certainly could have made better “specific thematic and narrative choices”, but didn’t because I misunderstood the competition format. All things considered, I saw my choices as an acceptable risk.
And speaking of the topic of competition formats, please let me start by apologizing for entering a demo into this competition. This is the first time I’ve released a work and also my first engagement with an online community. I was not aware about the difference between a jam and a competition, and itch doesn’t help with the distinction. I want to acknowledge all the immense effort the other participants have spent on this competition. Thank you! I also want to thank you, Mike, for all the time you spend reading and reviewing all of the community’s works. And, of course, I extend a thank you to everyone else that also reads and reviews the community’s works. Thank you! As I said before, we probably wouldn’t be here without you.
So now with that preamble out of the way, please allow me to constructively reply to some pertinent points of your review.
However, the reason I was being kind of a jerk and pushing back here is that I’d first tried to type “disaffected”, which I thought was a good explanation for Billy’s mood, only to be told to check my spelling, and then hit the same rejection message after trying two or three more options."
Your response of “disaffected” is perfect, and is exactly the type of response that I envision my audience to use with my works. My primary design directive is to avoid breaking an audience’s suspension of disbelief. The current technology I’m using is necessarily scoped to its original purpose — and while I plan to expand it — unfortunately during your read-through, I did break your suspension of disbelief. I want to deeply apologize that you invested into a response that the current system rejects. I’m asking my audience to empathize and sympathize, which takes non-trivial mental effort. After your third attempt, not only was your suspension of disbelief lost, but so was your trust. I completely understand why you nuked my demo in this review. Your sentiments are exactly how I feel when I’m playing a classical parser-based game. Honestly, this is why I stopped playing them. The constant frustration of being told that I’m wrong became too much for me to bear as I got older and faced the constant frustration of ‘no’ that’s ever-present in our typical lives. (I often wonder how “frustration mechanics” became acceptable in the interactive fiction community. Is this Stockholm Syndrome? Anyways, I’m digressing.) However, with my approach, expanding the range of input is a tractable problem. But that doesn’t take away from what you intuit, which is that natural language is “really, really hard”. So I definitely have more work on my hands other than filling out a word bank. Honestly, I can use all the help I can get!
Without any solid textual prompting […] Again, there’s no basis for this turn towards the more overtly dystopic […] with no indication there are downsides to living longer
For a solid textual prompt, please let me refer you to the opening line of Sheckley’s stateless story.
Carrin decided that he could trace his present mood to Miller’s suicide last week.
In the almost 2,000 words of your review, you never attempt to answer this question: why did Miller commit suicide? Neither you nor Sheckley answer this question.
There’s clearly innovative thinking that went into presenting this story in this way.
Yes, thank you for noticing! However, my biggest innovation is my theories and models that are behind this particular instance.
As I’ve stated elsewhere, I’ve abandon story-based agency. Instead, my approach uses narration-based agency. Here’s some crude “model-based” definitions to help disambiguate what I mean by “narration-based agency”:
story = ordered sequence of the events plot = unordered human-curated subsequence of the story narration = "human element" of the plot
Another way to look at this is through the 5W1H journalistic questions:
story = who, what, when, where plot-narration = why, how
So far, my intentions have slipped by unnoticed. But they’re there. And not in the Rothko-esque “airy abstraction” sense. I copy-pasted a template across the last five interstitials. It’s literally there. My particular exploration with Cost of Living was that an audience’s input alters the conversation (i.e., narration-based agency) but does not alter Mr. Sheckley’s stateless short story (i.e., story-based agency). And from where does this alteration originate? Within the foreshadowing of the stateless story! Specifically, the audience’s input will lead the conversational characters to conjecture about an upcoming passage, where this conjecture is based upon the foreshadow of the current passage. Here’s the template I copy-pasted across the interstitials:
~~~foreshadow N-1) compare audience compares their prediction against the storyteller's solution ~~~ ^^^convo LABEL_N-1_1.isHowIFeel LABEL_N-1_2.isHowIFeel audience compares their prediction against the storyteller's solution ^^^ ^^^convo LABEL_N-1_1.isHowIFeel LABEL_N-1_2.isNotHowIFeel audience compares their prediction against the storyteller's solution ^^^ ^^^convo LABEL_N-1_1.isNotHowIFeel LABEL_N-1_2.isHowIFeel audience compares their prediction against the storyteller's solution ^^^ ^^^convo LABEL_N-1_1.isNotHowIFeel LABEL_N-1_2.isNotHowIFeel audience compares their prediction against the storyteller's solution ^^^ ~~~foreshadow N) observe audience observes the storyteller's foreshadow ~~~ ^^^convo audience observes the storyteller's foreshadow Audience: $LABEL_N_1 ^^^ ^^^convo LABEL_N_1.isHowIFeel Storyteller: @LABEL_N_1 ^^^ ^^^convo LABEL_N_1.isNotHowIFeel||LABEL_N_1.hasNoAffect Storyteller: LABEL_N_1 ^^^ ^^^convo audience observes the storyteller's foreshadow ^^^ ~~~foreshadow N) empathize audience empathizes (generates expectations) with storyteller's foreshadow 1) cultural traditions - we don't realize how much of what we consider universal behavior is actually culturally prescribed 2) genetic heritage - we all have certain constraints 3) ability to analyze and synthesize - if we haven't practiced and developed our thinking skills, we tend to fall back on old habits 4) new information influx - it is hard to make sense of observations when the situation keeps changing ~~~ ^^^convo audience empathizes (generates expectations) with storyteller's foreshadow Audience: $LABEL_N_2 ^^^ ^^^convo LABEL_N_2.isHowIFeel Storyteller: LABEL_N_2 ^^^ ^^^convo LABEL_N_2.isNotHowIFeel Storyteller: @LABEL_N_2 ^^^ ^^^convo audience empathizes (generates expectations) with storyteller's foreshadow ^^^ ~~~foreshadow N) predict (why) audience predicts a later event based upon storyteller's prior foreshadow ~~~ ^^^convo audience predicts a later event based upon storyteller's prior foreshadow ^^^ ^^^convo LABEL_N_1.isHowIFeel LABEL_N_2.isHowIFeel audience predicts a later event based upon storyteller's prior foreshadow ^^^ ^^^convo LABEL_N_1.isHowIFeel LABEL_N_2.isNotHowIFeel audience predicts a later event based upon storyteller's prior foreshadow ^^^ ^^^convo LABEL_N_1.isNotHowIFeel LABEL_N_2.isHowIFeel audience predicts a later event based upon storyteller's prior foreshadow ^^^ ^^^convo LABEL_N_1.isNotHowIFeel LABEL_N_2.isNotHowIFeel audience predicts a later event based upon storyteller's prior foreshadow ^^^
This is one of a few literary loops I’m exploring.
So to echo your sentiment, my approach has a LOT of missed opportunity. Again, I do not pretend I’m a literary critic or author — I’m terrible at both. However, despite all my shortcomings, my end goal is to have an audience “noematically interact” with the storyteller’s literary writing process. Barthes proclaims “the death of the author”, which is about an audience’s imagined storyteller. Well, with my approach, I proclaim “the birth of the audience”, which is about a storyteller’s imagined audience. I want to provide a storyteller with an approximation of an audience as that audience makes their way across the entropy of unknown to known that occurs during the progression of a literary work. Even further, I want to provide a storyteller with an approximation of an audience’s affective state (via sentiment analysis) as they read a literary work. This opens up an avenue for a storyteller and an audience to have a deeper connection. In fact, my hope was to have stateful storytellers that are interested in writing “puzzleless” autobiographical works, or other works of literature, join me in exploring this exciting new space in interactive fiction!
And that’s it for now. Hopefully, I haven’t turned too many people away with my rough edges.
I still want to discuss my approach with anyone that’s interested. And I genuinely do love and welcome any and all reactions, good or bad. I can’t promise I’ll always have the perfect response, but I’ll always try to understand why I said the wrong thing and I will be quick to apologize and to make amends. I know, I know, “an ounce of prevention is worth more than a pound of cure”, but I’m doing the best I can. And I always try to get better.
I’ll end here by echoing myself:
My hope was to have stateful storytellers that are interested in writing “puzzleless” autobiographical works, or other works of literature, join me in exploring this exciting new space in interactive fiction!