[Date Prev][Date Next][Thread Prev][Thread Next][Author Index][Date Index][Thread Index]

My use of ZigZag (was: Re: Edit Window functions)



(cc:ed to ZigZag list)

Dear Marlene,

I'm sorry I haven't responded to this earlier. You know what that's
like: First I didn't have time, then I got sick, then I was occupied
with preparations for my course, then I forgot about it. :(

Marlene Mallicoat wrote:
> Are you actually using gzz for your classwork?  (I think I remember that
> way back when you came into the ZigZag group, you wanted something for
> teaching purposes.)  I would love to see whatever applitudes you have come
> up with.

Yes, I do use GZZ; one of the reasons why I've invested a lot of work in
GZigZag was to make it work the way I needed it in the course. The
course, called "Interactive Storytelling I & II", is what my school
calls a "self-organized course": from students for students. (We're
allowed to take up to two of these as part of our general education.)
Interactive storytelling means a computer program telling a story and
giving the player the opportunity to interact with that story (usually
by making decisions for one character in the story), thus changing its
course and outcome. This course has been running for five weeks now
(plus two weeks of Easter vacation ;) ); the first part is twelve weeks
in whole, and I will re-teach it in fall (in five weeks, giving twice as
many lessons each week), and then the second part, which is twelve weeks
too. And, we are indeed using GZigZag.

I had worked with Andrew Pam's ZigZag prototype before, and (in fall
1999) sent a mail to Ted complaining about it not being open source/free
software. ;) I'd even done some work on a ZigZag implementation of my
own. However, in Summer 2000, I had been following zzdev silently only
for the past months, and not continued my ZZ work. The reason that I got
back to it was that I needed a good environment for the programming
system I was developing for my course, the zaubertrank
("TSAU-ber-trunk"). I had programmed a prototype without ZigZag before,
which is nice in many ways, but has a serious deficiency in structuring
the different kinds of data in a program, so as to make them accessible
to the user easily. So one thing I considered to solve that problem was
to use the ZigZag paradigm. And then there was an eMail by Tuomas on the
mailing list announcing that there might be formatted text applitude
very soon, and I thought: Great, formatted text is exactly what I need,
so it will be easy to implement the zaubertrank based on GZigZag-- and I
decided to make it a GZigZag applitude. (I was wrong, by the way: at
that point in time, the zaubertrank was far from easily implemented, and
in fall I ended up writing the formatted text framework which Tuomas
based Nile on, too.)

The zaubertrank's concept, by the way, is to make programming a
point-and-click activity of assembling *natural language statements*.
There's some (not updated) stuff related to that on
http://www.zaubertrank.org .

The other applitude which we are currently using in my course is a very
simple way to structure "interactive stories". At the moment we're
dealing only with hard-wired connections between lexias, not with more
sophisticated ways to have the computer react to the player. The
structure for this which we started out with was as follows:

Say this is a murder mystery and we are playing the detective. The case
we're working on is closed, but we still suspect someone to be the
killer. Say they try to leave the country, and we have arranged to be in
the same airplane as them. However, our plan is to watch the suspected
murderer without being seen ourselves. But we aren't lucky:
unexpectedly, they get the seat next to us! (This is from a story we
conceived in my course.) Now we have two choices: either continue to
question the suspected murderer, or to tell them the case is closed
etc., trying to make them feel safe, in the hope they'll make a mistake.

We use two dimensions: d.1 and d.2. Well, in fact so far I haven't
talked about dimensions in the course at all. We're talking about
"left/right", "up/down", "in/out", and that's it. (That's because so far
the need for more dimensions hasn't arisen yet.) Now, we have three
"action cells": "Killer sits down next to us," "we continue to question
them," and "we tell them the case is closed." When we add how the story
goes on in each case, we write that into the same cell, separated by a
slash: "we continue to question them/they ironically say that there are
much better ways to question somebody."

To connect the action cells, we use two "connection cells" (or "relation
cells"). The cells are structured in what you could call an inverse
corner list:

   Action cell 1
        |
       (*) -- Action cell 2
        |
       (*) -- Action cell 3

The asterisks denote connection cells. This scheme allows not only
multiple reactions to a single action, like corner lists do, but it also
allows multiple actions leading up to the same reaction, by having
multiple connection cells on the d.1 rank, thus multiple connection
cells connecting to the action cell at the tail (posend) of the rank.

Today, I have introduced a slightly different way of structuring that
data; at least for me it's only slightly different. The difference is
that we don't write the player's action and the way the computer
continues the story into the same cell. Instead, we now have two kinds
of action cells: "Green" ones (for what the player does) and "red" ones
(for how the computer continues the story). Coloring cells is of course
not currently possible in GZigZag, but I'll probably have to write an
extension that makes it possible... So now we have:

   Computer action cell
             |
            (*) -- Player action cell 1
             |
            (*) -- Player action cell 2

and:

     Player action cell
             |
            (*) -- Computer action cell

and if we want even:

     Player action cell
             |
            (*) -- Computer action cell 1
             |
            (*) -- Computer action cell 2

(In that case, though, we need to program the computer somehow to decide
whether to take option 1 or 2, but that's something we'll start with
soon.) For theoretical reasons in interactive storytelling and
interactivity (see Chris Crawford's book "Understanding Interactivity";
the first chapters are online at http://www.erasmatazz.com/ ), this
scheme, which places player and computer in kind of the same position,
is to be prefered about the one we've used before.

However, there were some very immediate and very practical benefits from
this, too. Often, people in my course have confused the player's
decisions with the computer's/storyteller's decisions. That is, they
would give the player a choice over something their character can't
influence at all (in our example, e.g. a choice "the killer is impressed
by the detective" vs. "the killer doesn't care"). This was quite hard to
separate from them. The "new system" has helped a LOT here: today they
just "got it." So this relatively simple change in the structure of the
applitude has made a great leap in comprehension possible-- that was a
very interesting lesson for *me*.

So that's about what we're doing in regard to GZigZag. I hope that I'll
get a chance at the HT'01 workshop to talk a bit about our experiences,
because I think that they could be very interesting for the ZigZag community.

- Benja