Pages

Always do the most Dramatic thing

Storyteller reason of being relies on our human ability to "read" stories out of a sequence of images, but we don't always come up with the same stories even with the same images. A comic writer works a great deal to make sure readers "see" the story he intends: adding more frames if a frame transition leaves too much to imagination, write captions to disambiguate an image, or redraw whole frames to picture things clearer. This is the equivalent of cinema's editing.


In Storyteller there is no editing is possible because the player is creating the story on the fly. This means all stories that can possibly be built with the game need to be clear and unambiguous from the get go. But there's another issue: while building the story, the player needs to be able to *predict* what is going to happen when he drops the next actor into the frame, or solving levels would become a blind process of trial and error. So where comic writers only need to make their stories clear, I also need to make the comic creation process clear!

Since there's many ways to interpret a sequence of images, I picked a set of principles that guide what's going to happen next. This is one of them:

Core Principle: "Always choose the most dramatic interpretation."


What I like about this principle is that it's easy to intuit... if something in the story can be dramatic, it will be the most dramatic it can be, so if while playing you wonder "if I put Adam there will he die or kill himself?" the answer becomes obvious.

To illustrate the principle at work:


Adam could have died a natural death, but since he is heartbroken and can commit suicide, the simulator picks the suicide over natural death. But let's take it further:


If you look closely, you will realize that Adam is living exactly the same situation as before, so he should have killed himself. However, the presence of a jealous Tim allows there to be murder, and the simulator will always pick murder over suicide.

Another example:


In this case, why did Tim *steal* the money in the second frame? He's just alone with a chest, he could have found the money lying around or put out a successful business, but again, what is the most dramatic interpretation?

Somebody Dies

Death is super popular in stories. Situations like dying elders, loss of loved ones, vanquishing a rival and the power of dealing death are fascinating as well as dreadful, and a major ingredient of Storyteller.

Implementing death seemed simple enough at first, "If a character is alive on frame 1 and there's a tomb on frame 2, he died!":


Of course, as with everything else in Storyteller, the final rules turned out to be trickier than this. If there is more than one candidate, the simulator has no idea who to choose without help:


But there is a way for the simulator to solve the problem itself, if somebody shows up alive later:


So nobody could have died if everybody shows up alive later...


... unless one of them can come back to life!


Too simple? Throw in a little complication:



Now, Why not just implement a "kill character" button?

There's no such option because Storyteller always makes sure your stories make sense, and that freedom would allow players to create these situations:


The current implementation of death is flexible enough to support any kind of death situation while still being simple enough to understand and as a bonus, you can't create these conflicts.

Programming Heartbreak

Storyteller's story simulator has no mysterious numbers or obscure algorithms. Each rule in the game strives to be simple, logical and easy to remember. This is because I want players to spend their time figuring out sophisticated stories, not trying to reverse engineer an opaque system.

But this means I need to reduce complicated human interactions into small logical rules. This is made more difficult by the fact that they need to be as culturally universal as possible!

Right now, one of the most complex concepts in the game is heartbreak. Here are some simple cases:





Most of these are obvious, but take a look at this one, taken from an older version of the game:



Adam is, at the same time, falling for Eve and being heartbroken out of her being with Tim. This rule never felt right... people don't do this! But I could not figure it out until recently, after a discussion about it with my non-game designer girlfriend where we reached this conclusion:

If you fall in love with someone who is in a relationship, you would get disappointed but not heartbroken because you never actually failed to get his/her love. However, if you stuck around for a while (aka "vulturing") with the hopes you might get a chance and then your target of love picks somebody else, you are invested enough to be heartbroken.


I am happy with this solution, but it might happen that there's more subtlety to it!

Gameplay Video - April 2013


Gameplay Video - WORK IN PROGRESS, NOTHING IS FINAL QUALITY!


Since I've been busy with a Game Jam, a broken computer and Storyteller's upgrade to Haxe, I decided to post an updated video of Storyteller's gameplay, this time with me explaining a few things.

This might be the last video in a while, as I am working on a surprise that would be spoiled by videos... however, I will keep posting cool stuff about the game that will get increasingly cool as we move forward in development.

Enjoy!
- Daniel.

PS: remember to subscribe to Twitter!

Cheating on Literature



Storyteller is strange kind of puzzle game, in that it involves surprising human abilities like finding meaning in sequential images, interpreting text and telling complicated stories with only a few elements.

Needless to say, I am standing on the shoulder of giants whose insights made Storyteller possible. A few influential books in the picture above:

Morphology of the Folktale by Propp: The author gathered a massive compendium of russian folktales and came up with a generative structure that purportedly allows you to reduce any of those stories to a bunch of symbols. A core idea of this deconstruction is the "dramatis personae", stating that only a bunch of possible functional roles exist, like a villain or a mentor, regardless of which character is playing that part at any moment. This simplification is represented in Storyteller in that different characters can play the same functional role, and even change roles during the story!

Understanding Comics + Making Comics by Scott McCloud: these books are an absolute must for those curious into how the human mind derives meaning out of a deliberate sequence of images (like comics). The first Storyteller prototype dates to 2008, and since then, I failed several attempts to make a full game out of it, until I came upon these books which showed me a crucial concept: players will fill the gaps between frames, even wide gaps of meaning and even across time and space! If you look closely at the video, you will realize Storyteller is hiding something extremely important in those gaps, but it turns out players can derive meaning even without it.

The Great American Bathroom Book + Masterpieces of World Literature: One page summaries of literary classic's plots. At this time of my life, I am not willing to sit down to read such a vast amount of lengthy classics, but I did want to know what Anna Karenina is all about. Many levels in Storyteller are based on these classics.

Early Writings on Visual Language by Neil Cohn: This book is what naturally follows reading Scott McCloud. Neil Cohn has taken on the brutally ambitious endeavor of proving that juxtaposed sequential image arts (like comics) are founded on a "visual language" that we parse like we do written word. He goes beyond (and sometimes refutes) Understanding Comics and he even proposes a Chomskian syntactic structure to analyze comic strips!

Porting Storyteller to Haxe: Part 2


Warning: Technical post ahead!

The past week has been a bit busy with talks, mail catchup and other accidentals, but I still made progress and wanted to share how it feels to rewrite Storyteller in Haxe so far...

Porting to Haxe, Part 1


Warning: Technical blog post this time!

Recently, Adobe made a couple of worrisome announcements like cancelling a VM overhaul and moving a crucial engineer to HTML5. Storyteller is being made in Actionscript targeted at AIR, struggling to get the most quality out of the runtime. I don't like the risk of Adobe slowing down on it, so I decided to try for an alternative: Haxe.

Haxe is a programming language that fixes some of the issues in Actionscript, has a better compiler and is multiplatform, allowing developers to target not just the flash VM, but also native Windows, Mac, Android, iOS and Linux.

So I decided to make the experiment of porting a subset of Storyteller to verify that it actually works. I certainly hope it does, since Storyteller would be benefited in several ways:

  • Full Linux support - Adobe decided to stop supporting Linux several AIR versions ago.
  • A slightly better platform - Haxe and Actionscript are very much like each other, but Haxe avoids local variable hoisting problems (with which I shot myself in the foot repeatedly), is more strongly typed and is generally more helpful when finding problems in the code. As a bonus, the speed of its compiler will drastically reduce my compile/run cycles.
  • Language and libraries evolve fast and frequently. They are also Open Source.
  • The rewrite of most the Storyteller code is already paying off as now I know how things should work. I expect massive positive side effects like a significant speedup of the story solving algorithm, which would feel great.

Soon: GDC postmortem and Haxe: Part 2!