What I Want to Remember About This Day

We should never forget that the 9/11 terrorists attacked Americans. Not specific Americans but all Americans, whatever their race, creed, or color. They wanted to destroy our way of life and our political system. They wanted to make us afraid of the things that we should not fear, the things that have made America great—diversity, inclusiveness, and tolerance.

We should not help them complete what they started. We should protect ourselves without destroying our country from within. We should stop dividing ourselves based on the differences that have always been our greatest strength.

September 11th, 2001
Posted in Uncategorized | Tagged | Leave a comment

JavaFX vs. Swing

Here is a quick JavaFX application that I threw together showing how SWAT-FX would look (nothing is functional, the verb outline is hard coded).

And here is the same screen in SWAT 1.3, written using the Swing, JavaFX’s predecessor.

I still haven’t tried to bring over any of the SWAT 1.3 Java code but I am optimistic that my migration approach is going to work. At the very least it will look better.

Posted in Side Projects | Tagged | Leave a comment

Storytron 2.0 Directions

Now that I’ve decided to turn Storytron into a tool for story generation, what are the next steps? What’s the next best thing to do?

There are a lot of ideas floating around in my head. Here are a few that I wrote down the other day.

  1. Code documentation
  2. Code cleanup/refactoring
  3. Goals, plans, and scripts – what are they, relevance, how to implement?
  4. Temporarily removing the “interactivity” from Storytron storytelling
  5. Total actor agency – what is the best way to accomplish it
  6. Older story generator code and current procedural generation frameworks

Obviously items #1 and #2 apply to the current SWAT 1.x code, the only code currently out there that runs (let’s forget about the encounter and face editors for right now). Learning how this code works, how it’s put together, and cleaning up some of the messier sections (okay, all of it) has always been at to do item on my list. I’ve also toyed with the idea of refactoring JavaFX into the existing Swing/Java code base to spiff up the user interface and make it easier to create new editors and things like that.

I’ve read some Oracle documentation about how to integrate JavaFX into an existing Java application (link) but it doesn’t seem particularly easy or maintainable. So I thought why attempt to put lipstick on a pig? Why not start from scratch, from a Hello World JavaFX application, and go from there?

Of course if you’ve got code that works, no matter how badly architected or buggy, throwing it all away and starting from scratch is anathema (link). I am not talking about doing that, which is what Crawford is doing with his Delta-tron project (link).

The current SWAT code is Java and the code in a JavaFX application is Java. So what I’m going to do is get a JavaFX Hello World application up and running and then cut and paste the Java code that I need from SWAT 1.3 into SWAT-FX. I can migrate just the code I need one step at a time, understands and refactor it along the way, as well as doing what modifications I need make to get it running in the SWAT-FX application.

So what basic functions should the SWAT-FX application be able to do?

  • Read in a storyworld XML
  • Create a Deikto structure from the XML
  • Display the verbs, actors, props, and stages that it created (number of or list)
  • Run the storyworld to termination without user intervention
  • Display the Storybook and Log

There are two assumptions that I’m making based on the list above.

  • Any storyworlds that used by SWAT-FX will have to be created with SWAT 1.3
  • All actors will have total agency; the story will start and end without user intervention

Which brings me to items #4 and #5 from my original list (removing interactivity and total actor agency). I believe it is possible to create storyworlds in SWAT 1.3 which start, run, and end without any user interaction. I believe I started doing it with Siboot for Storytron back in 2010 but I never got the whole thing completely working. I believe it can be done with Fate verbs and alarms. I believe that with Fate verbs, consequences, alarms, and some scripting it can be jury rigged.

Which leaves items #3 and #6 in my original list (goals/plans/scripts and old code/new frameworks). The goals/plans/scripts part comes from the title of Roger Schank’s book “Goals, Plans, Scripts, and Understanding” (link). I recently acquired a copy, which I had read many, many years ago back in the late 1980’s when I was trying to figure out how to write my own text adventures. Though I didn’t apply Schank’s concepts back then his ideas have always stuck with me (Schank was James Meehan’s graduate advisor on Tale-Spin).

Shank’s ideas, older story generation code like Tale-Spin, Minstral, and Universe, newer procedural generation frameworks like Tracery, Improv, and Curveship make me ask myself some meta-questions. What is story? What is narrative? What is point-of-view? I’ve struggled with the same questions in my own writing. How do some of the current tools out there like Inform 7, Twine, and Ink been used programmatically to answer these questions and what implementation details can we learn (and steal) from them?

So there you have it, three areas to investigate.

  1. Old SWAT 1.3 Java code combined with new SWAT-FX user interface
  2. Figuring out how to create non-interactive stories with SWAT 1.3
  3. What can old code/new frameworks teach us about story and narrative

Exploring each of these ideas will probably lead to other ideas and experiments.

Posted in Side Projects | Tagged | Leave a comment

LudoNarraCon 2019

Complete LudoNarraCon 2019 playlist

Posted in Other, Software Development | Tagged , | Leave a comment

Storytron Fall 2019 Update

I have changed my mind and decided to continue working on improving the Storytron software. However, the direction I am going to go in has changed.

Storytron was originally supposed to be a platform and business for interactive storytelling. It was an exciting, quixotic venture that failed. My open source efforts over the past year were in service of that original goal. Now Storytron has a new mission — to become a game-agnostic tool for experimenting with procedural narrative design for dramatic storytelling.

Over the years I have read about procedural generation in one form or another as it relates to game development. I recently read two books, Procedural Generation in Game Design and Procedural Storytelling in Game Design, that got me thinking about this technique again.

There are many games, too many to mention here, that use procedural generation in their creation, and this has given rise to numerous approaches, techniques, and frameworks. Online groups, conferences, and events like ProcJam, NaNoGenMo, Narrascope, IntFiction, and others provide numerous opportunities for conversation and cross-pollination. There is also a rich history of procedural story generation going back to the 1970’s with programs like Meehan’s Tale-Spin, Turner’s Minstral, and Leibowitz’s Universe (I plan on exploring some of these early programs in future posts to see what can be learned).

With this new direction I will temporarily “forget” about the interactive side of Storytron and focusing on its story-creating capabilities. The software already has many of the building blocks necessary to calculate dramatic situations as well as a scripting language and utilities to tweak and refine the final product. I imagine reading the final result will be a cross between watching a short play and reading a short story or poem.

Here are two examples of procedurally generated stories. The first is from Micro-Talespin, a recreation of Meehan’s original program (the Micro-Talespin source code can be found here).

JOE WAS NEAR THE CAVE.
JOE KNEW THAT JOE WAS NEAR THE CAVE.
IRVING WAS NEAR THE OAK-TREE.
IRVING KNEW THAT IRVING WAS NEAR THE OAK-TREE.
JOE KNEW THAT IRVING WAS NEAR THE OAK-TREE.
THE WATER WAS NEAR THE RIVER.
JOE KNEW THAT THE WATER WAS NEAR THE RIVER.
THE HONEY WAS NEAR THE ELM-TREE.
IRVING KNEW THAT THE HONEY WAS NEAR THE ELM-TREE.
THE WORM WAS NEAR THE GROUND.
JOE KNEW THAT THE WORM WAS NEAR THE GROUND.
IRVING KNEW THAT JOE WAS NEAR THE CAVE.
THE FISH WAS NEAR THE RIVER.
IRVING KNEW THAT THE FISH WAS NEAR THE RIVER.
One day, 
JOE WAS THIRSTY .
JOE WANTED NOT TO BE THIRSTY .
JOE WANTED TO BE NEAR THE WATER.
JOE WENT TO THE RIVER.
JOE WAS NEAR THE RIVER.
JOE DRANK THE WATER.
JOE WAS NOT THIRSTY .
The end.

And here is the output from my 2010 attempt to re-imagine the game “Trust & Betrayal: The Legacy of Siboot” using Storytron.

Felsym is dead! The fourth Shepherd of Kira has died and one of his seven acolytes must take his place as the spiritual leader of Laminian civilization.
Vetvel what are you going to do?
you depart for Kendra’s House from Temple of Siboot
you arrive at Kendra’s House from Temple of Siboot
you wait
Kendra greets you formally
Kendra rejects Vetvel
Kendra doesn’t believe that Vetvel’s trust towards her is almost non-existent
Kendra says her trust towards Vetvel is almost non-existent
Skordokott greets you warmly
Skordokott is skeptical Vetvel
Skordokott believes that Vetvel’s trust towards him is moderate
Skordokott says his trust towards Vetvel is moderate
you depart for Wiki’s House from Kendra’s House
you arrive at Wiki’s House from Kendra’s House
you wait

This log from the second example shows the detailed calculations that are saved for each event in the story, events that can be manipulated by the scripting language.

I admit that neither of these examples is great literature or particularly entertaining. Both are light years away from anything written by Shakespeare, Marlowe, Mamet, or Stoppard. But they are a start. Once a dramatic non-interactive story can be created using Storytron, adding in the player interaction should be as easy as flipping a PC/NPC switch on a specific actor (though I bet that is probably easier written then done).

I realize that my approach will be considered heresy by some since interactivity is considered to be the computer’s competitive advantage. Process, they will say, should take precedence over data. Any attempt to marginalize interactivity, they will say, reduces the chances of “true” interactive storytelling.

Maybe. We’ll see.

Posted in Side Projects | Tagged | Leave a comment

James Veitch: This Is What Happens When You Reply To Spam Email & More Adventures In Replying to Spam

Posted in Other | Tagged | Leave a comment

Storytron Summer 2019 Update

The End

Crawford’s “un-quitting” has made me question my current plans to support and enhance the Storytron code.

While we currently have permission to host the Storytron source code I now realize that this permission could be revoked at any time. There are probably some unresolved copyright issues around the entire code base that I did not think of last year or feel that I had to worry about until now.

Because of these ambiguities I am suspending all of my current Storytron 1.0 work except where noted below.

The Tutorial

An initial Gossip storyworld has been uploaded to its own repository and I have started work on a tutorial wiki that explains the internal workings of this storyworld. I am going to continue working on this tutorial until I feel it adequately illustrates how its companion storyworld is constructed and operates. I make no promises but I will do my best.

The pages from the original Storytron Author’s Guide have been moved to the SWAT wiki. The original Storytron Tutorial can be found here. Both of the original sites are mirrored at this wiki.

The Other Editors

I will not be attempting to integrate the Encounter Editor or the Face Editor into the SWAT application at this time.

The Repositories

One new repository, Siboot, has been uploaded. This was the second attempt to re-imagine the game Trust & Betrayal: The Legacy of Siboot using Storytron technology (the first attempt can be found here).

All existing repositories will remain online for future spelunking and forking.

The Publications

The Storytron Google Group will remain online as a historical archive though I plan on disabling the ability of existing members to post on July 1st. I suggest that people still interested in interactive storytelling check out the Interactive Fiction Community Forum.

This Storytron publication on Medium will remain online as well.

The Patreon

I have paused the July billing cycle so existing patrons should not get charged for the month of July. I plan on messaging existing patrons individually to thank them for their support and tell them to withdraw their current pledges.

Our Patreon online balance currently stands at $263.35. I plan on using this money to renew our existing URLs and mailboxes for an extended period of time. I will donate whatever remains after that to the Interactive Fiction Technology Foundation.

The Future

First, I would like to thank all of you for your support, advice, and suggestions over the past year.

I do not know what I will work on next related to interactive storytelling. I might revisit my original StoryCalc idea. My NarraScope adventure two weeks ago renewed my interest in Inform 7 and its open sourcing excites me. I am also part of Spirit AI’s Character Engine beta and I am very interested in figuring out how it works.

If you want to follow what I do next please continue following this site or subscribe to my personal site’s RSS feed.

Posted in Side Projects | Tagged , , | Leave a comment

Trust & Betrayal: The Legacy of Crawford

Chris Crawford emailed me and two other people a proposal he has been working on regarding the next generation of software for interactive storytelling, asking for feedback. It sounds pretty similar to Storytron.

crawford-2019-new-hope

My reply.

There is already a community out there dedicated to interactive storytelling (I met many of the them two weeks ago at NarraScope). This group has created many tools over the years, tools that Storytron could learn from. The code for many of them is available. Some, like Twine, are already open source while others, like Inform 7, soon will be.

I have no faith in the waterfall, top-down approach that you are proposing, especially with you in charge. Your attitude of “I will write,” “I shall require,” and “I will not authorize” is the antithesis of open source (but it does not surprise me). You might attract a younger following based on past history and charisma, but setting yourself up as arbiter of what is right and what is wrong will drive away more people than you realize.

The six components you outline already exist in the open sourced Storytron software, however crude or complex their current implementation might be. Your efforts would be better spent helping us make this existing software better rather than fragmenting our efforts pursuing some boondoggle. If you can’t code anymore you could help with the wikis. Or you could submit some redesigns for the existing editors or designs for new editors to the Google Group. But any work would be as an individual contributor because, when it comes to the open sourced Storytron, you are not in charge.

Best of luck. I am going to focus my efforts on making Storytron.org better.

Posted in Side Projects | Tagged , | 1 Comment

Other Forms of Gossip

Once the Gossip tutorial is up and running it might be interesting to attempt to implement the same storyworld using some of the other interactive fiction storytelling tools out there. Tools like:

This is not a complete list by any means, just a few that immediately sprung to mind. The first three are parser-based, the next four are hyperlink/choice-based, and the last two are ones that recently caught my fancy (I’m extremely interested in Spirit AI’s Character Engine based on the people involved though I have no idea how to use it right now).

For additional information about other IF/IS engines out there check out the Other Development Systems section on the IntFiction board or this comprehensive list that someone has curated.

But the big question of course is why attempt this? I can only come up with two questions that could be answered by this attempt at replication.

  • What makes Storytron unique?
  • What can Storytron learn from other tools?

For twenty-six years Chris Crawford tried to launch an interactive storytelling revolution and failed. What he came up with several unique but complex pieces of software (SWAT, Encounter Editor, Face Editor), several unfinished storyworlds (Balance of Power 2K, Prom Night, Le Morte D’Arthur), and a ton of now out-of-date documentation.

The world didn’t stand still and wait for Chris. New tools were created and existing tools got better based on user feedback.. SWAT, the Encounter Editors, and Face Editor languished, demanding a high learning curve similar to GIMP, Blender, or Photoshop, while providing minimal “bang for the buck.” Chris himself was also noticeably intolerant of other tools and approaches and frequently took a “I know best approach” to the rest of the industry even in the face of unimpeachable evidence that his approach was failing. All of this resulted in some powerful tools that had a zero adoption rate within the IF/IS population at large.

But I still think that Storytron has some unique concepts that other tools haven’t implemented (I realized this after a conversation with Chris Conley this past weekend at NarraScope). But if other tools can implement Storytron’s unique concepts then why continue working on Storytron at all? Why not build off of those tools which have more robust infrastructures and larger user bases?

If there are parts of Storytron that are unique and it still has a place in the IF/IS world, the question becomes “What can we learn from other tools?” Is there anything that another tool has done to make an user’s life easier that we can borrow for Storytron?

I don’t think we have a monopoly on all the good ideas.

Posted in Side Projects | Tagged , | Leave a comment

Could Siboot Be Revived?

On his site Chris Crawford posted the above question about his previous attempt to re-imagine the 1987 version of Trust & Betrayal: The Legacy of Siboot using Storytron technology. (I like to think his 2014-2018 project was inspired by my work back in 2009-2010. 😉)

“Having to abandon work on Siboot was one of the most painful decisions of my life. I had realized that I had lost the cognitive abilities necessary to continue work (that is, the ability to keep many different variables in my mind at once) as early as 2015. But I struggled on for another year, then tried several alternatives in an effort to salvage the project, before finally giving up a year ago. Even then, I returned to the project every few months, trying to see if I couldn’t get the old brain cranked up to the high pitch it needs to function on this project. Every time, I failed. So here I am again, wondering if there isn’t SOME way to get this thing working.”

I thought something similar back in 2017 but my short answer to his current question is “No, not with the current technology.” Right now SWAT can’t even reproduce the seamless experience of 1987 Siboot. Only with integrated encounter and face editors could an reboot succeed.

I think the idea of finishing Siboot at this time is wishful thinking on Chris’ part, a balm to his ego. It certainly could be attempted. Chris could issue another rallying cry, recruit some acolytes, and then attempt to lead them towards a release of something (I myself signed up for his previous quest in 2014) .

But my opinion is that this new team wouldn’t get any closer to a release than the original Siboot team did. But let’s be a pollyanna—what if this quixotic venture did get to version 1.0? What then? I think Chris’ own words are prophetic.

Suppose that I could indeed finish Siboot to my own satisfaction. What would happen?

First, few people would appreciate it. They would judge it by the only standards with which they are familiar: the standards of current game design. They would conclude that Siboot is a lousy game — and they would be right.

Siboot was never intended to be a game; it’s interactive storytelling. The emphasis is on character interaction, and it already offers interesting dramatic character interaction. But people aren’t looking for interesting dramatic character interaction; they’re looking for the things that make great games: challenge, a smooth learning curve, impressive graphics, catchy little tunes to accompany their play. Above all, a game must be winnable. Yet stories aren’t necessarily about winning and losing; they’re about drama. 

No matter how good Siboot turned out to be, it would not create the splash I had hoped for. It would not go viral and trigger lots of tweets and viral videos on YouTube. It would certainly attract a small comradeship of people who recognize its importance. Everybody else would be unimpressed. 

Yikes, this doesn’t bode well for Storytron! But putting on some rose-colored glasses let’s press on along this optimistic trail that we’ve started down.

The only hope for Storytron (and a future Siboot) is the integration of encounter and face editors into the SWAT application. Chris has tons of knowledge about interactive storytelling and extensive experience with the Storytron source code. He should learn how to use GitHub, roll up his sleeves, and contribute to the Storytron.org project in some significant way. If he doesn’t feel up to coding he could help out with the Gossip tutorial or work on one of the wikis.

While I would welcome Chris’ contributions I wonder how this would work out when he is not the sole person in charge. Having been a lone wolf for so many years and used to being in control I wonder if he could “demote” himself and function as just an individual contributor on an open-source project. What would happen when he was asked to make a change to one of his pull requests or, heaven forbid, had one of his pull requests rejected.

Posted in Other, Side Projects | Tagged , | Leave a comment