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 storytelling...is 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.