Hello!  This is the solution to "Everybody Loves a Parade" -- my first work
of interactive fiction.  After the solution is a self-indulgent commentary
on the genesis and development of "Parade".  (Later on, I'll get even more
self-indulgent when I leave off the quotation marks.)  I've also included
some hints for future TADS programmers which may or may not come in handy.
I apologize ahead of time for any unhandy hints.

Cody Sandifer (sandifer@crmse.sdsu.edu)



THE SOLUTION:

In general, studies in museums have shown that people are more likely to
turn right than left, so the order of the solutions might be backwards.
No, I am not  kidding about the studies.

The "endgame" puzzles are two or three pages down the line.



You can't find your way across the puddle in the laundromat...

I suppose that you already tried to jump the darn thing.  It won't work,
but it's fun to try anyway.  I included mop as a verb only because a
playtester suggested it -- there isn't a mop anywhere.  Perhaps you could
cover the puddle with something?  The something would have to be large in
an absorbent kind of way, making the puddle safe to walk upon.  It's on the
floor somewhere. In the pub.  If you can't find a container, you should do
some serious searching -- especially in the tank area.  You can probably
figure out the next step yourself.  What kind of machine hangs out in a
laundromat?  The date on the receptacle is a clue, albeit a lame one.  Put
the dollar coin in the vertical slot.  You're in the money!



You can't get the valuable rock in the rock museum...

Citizens of Chewton can install an alarm, but they're rather,
ahhh......stupid. The key isn't difficult to find once you take this fact
into account. I can't use invisiclues, so I'll just type in the answer
backwards: (.elbat eht rednu si yek ehT)  Don't bother holding the clue up
to a mirror -- you'll just get confused.  The letters are forwards even
though the words are backwards.



You can't get the bikers to leave the bar...

You could act on your violent desires, but that'll just get you poetically
smacked around.  They seem to be intent on completing their ritual --
remember the perfect note?  I bet you could find one.  If you're looking
for a tape recorder, don't bother.  I decided that there was way too much
random noise to allow players to tape everything audible.  Plus, you'd
probably get sick of hearing "Why would you want to tape that?" a million
times.  Oh yeah -- the note is in a lofty place.  Those choruses really
know their stuff. You haven't been to heaven, you say?  Take a good look at
the pebbles on the tank.  Then throw something at them.



You can't get the mechanic to pay any attention to you...

Even with the hints I programmed into the game?  Really?  Kick 'em twice.
If you don't, your thoughts will nag you 50 turns later.



You can't find anything to give the mechanic...

Take a good look at the objects in the pub.  Specifically, the (elbat
loop). Is this backwards thing annoying you?  I hate reading clues before
I'm ready, so I figured that this is a fair compromise.  If you're
dyslexic, I'm probably destroying whatever letter sense you've developed
through years of hard work.  Sorry.



You can't get the money from the juggler's hat...

This one is pretty tough, actually.  To get the cash, you'll need to
distract the juggler.  If you haven't already thrown something at the
juggler, you should try it out.  If you're still stuck, take a good look at
what she's juggling.  The balls are round.  Sound familiar?  Specifically,
throw another round item at the juggler.  If I haven't screwed up, there's
only one other round item in the game.  It's the (kcor elbaulav).  If you
*still* can't get it to work, it's because the rock (darn, I just ruined
it) doesn't look enough like the balls.  What's special about the balls? 
You got it:  (egnaro er'yeht).  You can turn the rock (egnaro) by painting
it twice.  I'm not sure that this would work in real life, which is why I
added the bit about the paint "doing funny things sometimes" if you ask the
salesman about the paint.



You can't figure out what to do with the corn dogs...

Whatever you do, don't eat them.  I left the obnoxious hunger daemon out of
the game.  If you chow down, the game will be unwinnable.  So, what to do? 
As any good American will tell you, it's nice to have money.   ($8 worth,
in this game) I provided a heavy-handed hint in the description of the
cart.  Try selling them.  If that doesn't work, it's because you're not
dressed appropriately.  Would you buy a corn dog from a weirdo on the
street?  Even one as good-looking as you are?  A salesperson should at
least *look* official.  You'll need the smock in the uniform shop.  The
corn dogs should be in the cart  before you try selling them.



You can't find a way to get the smock...

Did you read the description carefully when you tried to get the smock?
(You'll never get the tailor's attention, so don't bother.  Not even by
dancing.) There are a number of actions in the game that your conscience
won't allow you to do.  This is one of them.  Is there a way around your
conscience?  Maybe if you (knurd tog).



You can't figure out what to do with the whiskey...

Try drinking the whiskey again.  Be sure to read the reaction carefully. (I
really did try to hint at most of the solutions in the game.)  "Straight"
implies that you might be able to drink the whiskey with something else. A
(ados) will do the trick, although you'll need money to buy one first. Once
you get drunk, try acting slightly immoral.  You know -- steal some stuff. 
At one point, I considered running a "guilt" daemon late in the game to
make the player feel bad.  I never got around to it, though.



You can't get the goddam (or goddamn, according to my progressive
spellchecker) apple without the old man checking out your action...

You can try to take, kick, and throw stuff at the apple.  You can try to
hassle the old man.  None of it will work.  The only way to get rid of the
old man is to satisfy his craving.  Buy him a little boy!  (Just kidding.
The dirty old man isn't Michael Jackson.)  You'll have to scrounge up 8
bucks first.  Once you get the (nig), let him have it.



I've satisfied the mechanic's requirement.  What do I do now?

Did you tell him about the parade?  He's in need of a good convincing. At
this point, you should be painfully aware of your (redneg).  Use it to your
advantage.  (It's probably too late to warn you, but I disallowed [kcuf] as
an option.  Aside from 40 goddams and 20 hells, I decided to keep the game
relatively clean.)








HOW PARADE GOT ITSELF MADE


Before I start, I want to apologize if you find this overly self-indulgent.
Personally, I enjoy behind-the-scenes analyses of movies, books, and other
kinds of arty things.  I thought others might feel the same way, so I put
my thoughts to paper.  If anything else, I'll be glad to have this record
for whenever I get motivated to write another game.  Here goes!

After a long break, I got back into playing interactive fiction games late
in 1996.  Flames of Perdition was a whole mess of fun, but I was impressed
that games such as Wedding and Uncle Zebulon's Will were playable,
entertaining, and (most importantly of all) SHORT!  I didn't want to spend
an entire year on a game (or two, or three -- you know who you are).  I
figured that I could bust out a game in three weeks.  And -- you know what
-- I *did* bust out a game in three weeks.  Version 1, anyway.

Before I began programming, I read the manual, drew a map, and penciled in
objects and puzzles.  (Not that the outline was in its the final form, mind
you. Looking over my notes, I originally included a golf course at the
eastern end of the parade and a couple of additional puzzles:  (1) stealing
money from an organ grinder monkey, and (2) escaping from the van
(initially) by popping a balloon with the lighter.   In case you were
wondering, I got sick of programming and canned the extra puzzles.)

The introduction was the very first thing I wrote, which is probably why
it's so damn long.  One playtester complained about its length, but I
decided to leave it as-is.

Up next was the daily typing ritual.  Over Christmas break, I programmed
for three weeks straight -- sometimes, up to 10 hours/day.  (I'm a college
student, which was how I found the time.  I originally had four or five
college references in the game, although I've since deleted most of them.
There's probably some truth to the advice about "writing what you know",
but i-f games with collegiate themes bug the hell out of me.  Kissing the
Buddha's Feet is a prominent exception.)  

As a TADS beginner, I spent most of the original 3 weeks figuring out how
to implement the puzzles in TADS.  I averaged about a puzzle a day. 
Although most experienced programmers advise against it, my working room
descriptions were short lists of objects and actors (you know, like the old
Scott Adams type of games).  I wrote most of the room descriptions the day
before I shipped out Version 1 to playtesters.  Since Parade was a
relatively small game, it worked out OK.  I would advise against it for
larger games.


Here are some concerns I had early on:


Since Parade takes place in the real world (sorta), I had to restrict the
player's movement with something other than cave-ins and giant Balrogs.
That's how I thought of the train.  Eventually, I walled the player in
with the parade itself. 

The whole money thing was a real pain.  I'm just now learning how to program
indistinguishable objects, so an entire inventory of droppable money (both
coins *and* bills) was out of the question.  That's how I came up with an
undroppable wad of cash that incremented only in whole dollar amounts.

Due the lack of female leads in i-f, I knew from the start that I wanted
the player to be a woman.  Also, I thought it would be tremendously funny
to provoke a gender re-evaluation halfway through the game.


Before initial playtesting:


Heaven and hell didn't exist.  (If you didn't find hell, you can get there
by trying some of the "fun stuff" that I outlined.)

The bikers (arbitrarily, I now realize) left the pub after 4 visits.  This
mystified most playtesters, since there was no sign of their departure other
than a brief "The table's free!" comment when the player re-entered the
pub.  The apple could be found by searching the pool table -- it had fallen
into one of the pockets.  Also, in contrast to the rest of the characters,
the bikers had no personality to speak of.  "Rocks" was how one playtester
described them.

I didn't nudge the player with thoughts about getting the mechanic's
attention.


After initial playtesting:


I gave the bikers personalities and made it obvious when they left the pub.
After exiting a second time, the bikers pushed the player aside and wandered
into the crowd.  To find the apple, you still had to search the pool table.

I added a ton of inspectable objects, new verbs, and minor bug fixes.  Some
major bug fixes, too.  If you dropped the apple in the initial version, you
could never pick it back up.  "But you already have the apple!"  Oops.
Also, you could get the old man wasted with the gin without ever trying to
pick up the apple.  Since the player has to be aware of his/her sex before
confronting the apple-munching mechanic, this made the game impossible to
win.

I still didn't include the nudging "thoughts" about getting the mechanic's
attention.  As a result, some players (still) had no idea why the hell
getting the apple was so damn important.  Since getting the apple is the
motivation for the whole plot, I thought it best to pound the player with
hints if s/he didn't smack the mechanic a few times.  (In retrospect, I now
see the dangers in programming a highly linear game where leaving a single
puzzle unsolved can screw up everything.)

I wrote a bunch more atmospheric texts.  (e.g. "The paint salesman rolls
his eyes.") Originally, there were 5-7 per noisy room.  I ended up with
10-15 per room.


Somewhere around final playtesting:   (some modifications just before, some
just after)


I included plurals.  ("The clowns doesn't appear appetizing" really started
to annoy me.)

I changed the bikers into a puzzle.  Getting them to leave was no longer
arbitrary.  (At this point,  the afterlife already existed -- but purely
for fun.  Only those players who threw something at the tank could find
it.  Finally, I realized that I could tie heaven to the bikers by giving
them musical tendencies.)

I made the apple fall to the floor.  At first, I left the apple on the table
when the bikers left -- until someone pointed out that you don't need to
bend over to pick up an apple off the surface of a pool table.  So, I made
the apple fall off the table and wedge itself.  No complaints about apples
rolling on sawdust, please.

I modified the smock slightly.  Many playtesters pointed out that wearing
the (originally tight) smock was a valid solution to the wedged apple
puzzle. I got around this by (1) making the smock loose and (2) generating
an appropriate message when the player goes for the apple while wearing the
smock.  Unfair? Maybe so.

I added in a few other comedy bits (esp. the Giant Sack).

I downsized the Mound of Quartz room description.  The original Mound of
Quartz room description included the information that now pops up when you
inspect the upper class.  It was overwhelming (still is, maybe), which is
why I backgrounded the unnecessary detail.  Also, I moved the ATM machine
from the Mound of Quartz to the Minimall Entrance to make the Quartz room
description more manageable.

Likewise, because I was unhappy with my writing, I erased or relocated most
of the original Uniform Shop room description.  The wind, ghost, and
ominously looming objects are brand new.  (Not even seen by the final
playtesters, actually.  I bet that's how typos creep in.)

On one playtester's suggestion, I disallowed the use of "all" with nearly
every verb:  all but 'get', 'put', 'take', and 'drop'.  The playtester had
used "smell all" as a way to get  a quick list of every inspectable object.
He had even solved the perfect note puzzle this way.  (Note, however, that
the use of "examine all" allowed early playtesters to figure out which
items I accidentally omitted from room descriptions.  In Version 1, I had
forgotten to include the bulletin board (Rock Museum) and desk (Garage).)

Most playtesters still didn't like the late revelation of the player's sex.
(Which can come *really* late now that getting the bikers to leave is a
puzzle.)  After wavering back and forth for a couple of weeks, I decided
not to give in to peer pressure. 

On the suggestion of playtesters, I added in a few more things for the
player to do when drunk (jumping over the puddle and reading the porno mag,
in particular).

I included standard TADS instructions (with a few minor changes to
interactions with characters) just because I could.

Hell was created for my own amusement.  Since there's a heaven, why not?


Closing comments:

The playtesting and revising of games takes a *lot* of time.  Version 1
(130k) came out in January.  The first public version of Parade (Version
2.1 @ 264k) will be out (hopefully) in March.  I must have played my own
game 30 damn times.  At least.

Finally, writing this game was a lot of fun!  Give it a try!  To this end,
here are a few hints for those who want to give TADS a try.  I highly
recommend it.  (To help persuade you, keep in mind that, before TADS, my
last bout with programming was a beginning Pascal course in 1986.)  


TADS ADVICE FOR FUTURE PROGRAMMERS:


If you think it'll help, I'd be glad to share code with anyone interested
in programming.  Otherwise, here are some helpful hints for hopeful
programmers:


1.  The Synonym and -> shortcuts save a lot of typing.  Use 'em whenever
possible.

2.  Programming doVerbPrep(actor,iobj) stuff is a real pain (as in "cover
puddle with sawdust", where "puddle" is the important object for the verb).
Redirect the ioVerbPrep action to the doVerbPrep like it says in the Book
of the Parser.  Otherwise, the doVerbPrep never gets accessed.  (Can you
say 2 wasted hours?  I can.)

3.  Take care of important details as you stumble across them.  Don't wait
until later!  For example, I programmed the responses to the improper use
of the paint machine (while the safety door was open, etc.) because I knew
that I would forget later on.  Your playtesters will get cranky if you don't
anticipate these details.  Speaking of which...

4.  Use playtesters.  They're nuts, but they're a big help.  Like I said,
Version 1 was only 130k.

5.  Use the plurals.t module on ftp.gmd.de if you want to incorporate
plurals. (Don't forget bugs.t, too!)

6.  Be sure that you don't modify a class property (the container class
verDoLookin property, e.g.) more than once.  Unfortunately, the compiler
doesn't warn you when this happens; it just keeps the latest modification.

7.  In a related topic, be sure to check ADV.T before you modify a class
property.  You might wipe out something important.  (By the way, both ADV.T
and STD.T are worth a good look before you start.)

8.  Unless you modify ADV.T, TADS allows players to "put" things that they
aren't carrying.  This can lead to serious bugs if you forget to block the
"put" verb for inaccessible items (a wedged apple, for instance).  If you
don't believe me, put the bush from Unnkulian I in the bucket.  Or, put the
gold bar and anchor from Unnkulian II on the went board.  My solution was
to forbid the player from "putting" anything that he or she isn't carrying;
Inform does the same thing.  (I should know, since I stole Inform's default
"put" response.)

9.  If you replace the default ldesc (long description) of a surface or
container object, any attempt to look in or search the container/surface
will call up the response "There's nothing on/in the surface/container."
Silly, I know.  Bugs.t repairs this oversight.

10.  If you want to trigger a daemon more than once, don't forget to reset
its counter to zero.

11.  Watch James Cagney movies.  Public Enemy, Strawberry Blonde, and White
Heat are good places to start.

12.  If you replace one object with another (a live monkey with a dead one,
for example), don't forget to setit(new_object).  This way, the pronoun
"it" will refer to the new object.

13.  Create separate files (verbs.t, modifications.t, actors.t, paint_shop.t,
etc.) from the very beginning.  This makes it *much* easier to locate code
for future revisions.

14.  It's your own damn game.  Do whatever the hell you want.

15.  Read the manual and download lots of source code.  If that doesn't
work, don't be afraid to look like an idiot on rec.arts.i-f.  I'll be glad
to keep you company.
