Channels ▼


Interactive Storytelling

Making it Accessible

DDJ: What have been the problems you've had to solve in this latest attack on interactive storytelling?

CC: Well, I defined the basic engine technology 14 years ago and [since then] I've come up with all sorts of embellishments, so I understand the engine technology very clearly. The most difficult has been the design of SWAT. How do we make this technology accessible to nontechnical people? That has proved to be a murderously difficult problem. See, this is absolutely fundamental: You can't design anything interactive unless you can program. Period. But artists shouldn't have to learn Java. We need a programming language that any idiot with five years of schooling can learn. I've created this scripting language [SWAT] that...for the purpose of interactive a big step forward, but it's nowhere near good enough.

DDJ: So what features make SWAT particularly good for nontechnical people?

CC: There is no typing. It's all point-and-click editing. That guarantees you can't make a mistake. There can't be any syntax errors.

DDJ: In SWAT, the storybuilder constructs what, in another language, would be algorithmic statements by picking items from pop-up lists, and the scripts the storybuilder builds are basically trees, and you're making these choices because they make it a superior environment for amateur programmers?

CC: I will not claim that it is superior to conventional algorithmic notation. We simply won't know that until people start using it. I'm playing a hunch here. Perhaps the most useful observation is that we don't have to be locked into algebraic notation.

DDJ: How else does SWAT accommodate nontechnical types?

CC: The storybuilder does not get to create types. I create the types. And every [datatype] is color-coded: Booleans are black, actors are blue, quantifiers are purple. I think this is useful for amateur programmers. Another thing: Runtime errors are survivable. It happens by virtue of the design of the system that runtime errors only occur when we are considering an action or changing something, and when that happens, we say it poisons that calculation. This invokes a system called "Poison" that logs it for future reference. "Rehearsal," our testing feature, plays the storyworld one way, adjusts a random number, does a thousand passes, and then presents you with a statistical analysis. You had this many poisoned events. Looping cycles. Thread killers.

DDJ: But the system doesn't crash?

CC: A great many calculations can be skipped over without undue harm. It makes the system more boring in that fewer things can happen, but it guarantees that the system doesn't crash. Oh, another major issue is data typing. The real innovation is a data type we came up with that we call a bipolar number, or B-number. Bipolar numbers are numbers that range from -1 to +1, and for the variable they describe, 0 represents average, +1 the highest conceivable value, and -1 the lowest value. The advantage of this is that it eliminates all scaling issues. When I hit upon this, it took a long time sorting out how to make it work, and it is weird. But it's especially advantageous for clearly subjective quantities like how faithless or honest someone is. That's another thing: Every variable is defined with two words representing the lower extreme and the upper extreme. People get confused thinking about zero honesty.

DDJ: Of course ordinary arithmetic doesn't work with B-numbers.

CC: We have [developed] bounded arithmetic. Mathematically I can prove [the bounded B-number operators] are analogous to their linear counterparts.

Related Reading

More Insights

Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.