Fix the "freebie cage" and kill_dragon() bugs.

These two bugs have been at the top of my fix-it list for
quite a while. Picking up the cage should check your strength
limit correctly (even though the bird is a FREEBIE object);
and when kill_dragon() merges the two "secret canyon" rooms
into one, the objects in one room need to get merged with the
other. Platt's code tried but failed to get this right.
Turn on the EMDASH macro in this branch.

Em dashes will now be rendered as U+2014 "EM DASH".
Search-and-replace ";  " with "; ".

Platt had the idiosyncratic style of putting two spaces after
each semicolon, as well as after each sentence-ending punctuation
mark. I don't mind them after periods and exclamation marks, but
two spaces after a semicolon just looks weird to me.
Fix two movement-related oddities in Platt's code.

In the cobble crawl, typing NULL or NOWHERE would move you
to the cave entrance. This seems like an accidental glitch;
I've now removed it in my master "cleanup" branch.

At top of small pit, typing DOWN (while toting the gold
nugget) should have the same effect as typing PIT or STEPS,
but it doesn't, thanks to another apparent oversight by Platt.
This is now fixed. Also, typing JUMP should take precedence
over the gold-nugget response, and simply kill you.

I've also coalesced a lot of movementv() calls into
movementv2() and movementv3(), just for kicks.
Add a new directory for Long, McDonald, et al.'s "Adventure 6".

This is a shell archive of "Adventure 6" (MCDO0551), exactly as
downloaded from
http://miriam-english.org/files/ai-attic/Programs/Classic/Adventure/Adventure.2/advent.shr

The lineage of this version is:
  WOOD0350 begat LONG0500, a.k.a. "Adventure 5" (David Long, circa 1980).
  LONG0500 begat ANON0551, a.k.a. "Advenutre 6" (anonymous, circa 1985).
  McDonald ported ANON0551 to portable Fortran 77 circa 1990.
This pedigree is further explained in McDonald's original
documentation; see "advent.doc" in the extracted archive.
Extract the "Adventure 6" archive.
Get MCDO0551 building on Linux.

Amazingly, McDonald's provided makefile (using "f77") works
practically out of the box on case-insensitive systems. However,
we need to fix a couple of capitalization issues to work on
Unix/Linux. As long as we're doing that, let's make it look
similar to the one in PLAT0550/.

Although the Makefiles look superficially similar, Long's
game was developed completely independently of Platt's.
The ADVDAT file contains messages a la Woods' original game;
Long's "asetup" program munges these messages into a binary
file ADVTXT which is consumed by "adv551" at run time.
(If you think these names are totally backwards: I agree.)

The file "iors.f" was used to work around f77 implementations
that didn't provide IAND, IOR, and IEOR out of the box.
Since it's not strictly necessary to build the game, I'm
removing it.
Add a README for MCDO0551.

Also remove some no-longer-relevant comments from PLAT0550/README.
(I eventually gave up on Arnautov's acdc tool and wrote ODWY0550 from
scratch.)
Fix reversal of directions NW and SW.

This bug (a typo on my part) was visible in the
"fog-filled room" maze.
Expand the README for "Adventure 6" (MCDO0551).
Refactor "message words"; dispose of the message[] array.

Each message-word ("swim", "trees", "dig", etc.) now has an
enumerator (SWIM, TREES, DIG, etc.), just like the other
types of words. This gets us one step closer to being able
to put all the words into one big enumeration. Also, as a
short-term benefit, I was able to dispose of the message[]
array once and for all.
Add an exclamation mark, and remove extra spaces.

Two of Woods' helpful messages have four spaces after the
period. I'm normalizing them to match the two spaces used
in all other messages.

The message for two or more unfriendly dwarves in the room
with you is strangely apathetic, compared to the message for
only one dwarf. (I guess after the first dwarf, they start
getting old.) I've jazzed it up with an exclamation mark,
essentially restoring one of Knuth's grammar tweaks.

Of course, the original messages remain untouched in the
"original-bugs" branch.
Decouple object-words from zero-based array indices.

ObjectWord enumerators are used for their numerical values
in two places: the objs[] array and the "cond" field of the
travel table. Subtract MIN_OBJ from the index in each case;
this will enable us to shift the ObjectWord enumerators up
so that we can fold all of the *Words into one big enumeration.
De-overlap the *Word enums; SOUTH no longer equals KEYS.

Most of the necessary changes were squashed into my previous
commit. However, one sneaky thing Knuth did was the assignment

    obj = *word2;

This looks nonsensical at first, but in fact it's punning on
the fact that *word2 is '\0' iff there are no more words on
the line, and 0 happens to be NOTHING, and we follow this line
with a test that only cares if obj is NOTHING or non-NOTHING;
the exact value of obj doesn't matter.

I've fixed this by inlining more of the logic, and will clean
it up a little more in my next commit too.
Refactor to remove some gotos.

Eventually, I'd like to dispose of Knuth's pseudo-global "k"
altogether. I'm getting closer...

I just noticed that my refactoring in the last several commits
quietly fixed a major bug that I introduced into Knuth's code
by leaving out an apparently redundant sanity-check in this
codepath. Knuth's CWEB code carefully checks that the class
of k is WordType_Action before doing the FEEFIE case. Since I
left that check out, the controlled codepath would run whenever
k's "meaning" was numerically equal to FEEFIE (i.e., 24).
Prior to my refactorings, WATER equaled FEEFIE, and typing
the command "SAY WATER" would crash the game. After the
refactorings, the check truly is redundant, and SAY WATER
correctly prints the response

    Okay, "water".
Cosmetic improvement to vbccz output: fewer Inform warnings.

Given's vbccz prints all integer constants as 0+5, 0-5 in a
vain attempt to avoid Inform compiler warnings about the
ambiguity of "foo 5 -5" (which is interpreted as "foo 5-5").
I think a better solution is to wrap all literals in
parentheses: (5), (-5).

You might ask whether this raises a new ambiguity between
"foo (bar)" (two arguments) and "foo(bar)" (one argument
containing a function call). However, function calls are
never allowed in assembly contexts, so we're safe.

This change silences 64 of the 162 Inform warnings produced
during the compilation of ODWY0350. The rest are coming from
unused local variables.
Remove unused code.

No change in behavior.
Merge branch 'master'

This fixes the "SAY WATER" bug, which was *not* an original bug.
I believe I have canceled out all other behavioral changes from
the master branch that would have been introduced into ODWY0350
by this merge (namely revisions 8a0b6be5 and 9761febf).