Meaningful shortnames for RSPEAK messages.
authorEric S. Raymond <esr@thyrsus.com>
Thu, 15 Jun 2017 11:35:03 +0000 (07:35 -0400)
committerEric S. Raymond <esr@thyrsus.com>
Thu, 15 Jun 2017 11:35:03 +0000 (07:35 -0400)
actions.c
adventure.yaml
main.c
misc.c
saveresume.c
score.c

index 18a77145227395849f2482cfbc49e6d2ffc7802f..5000f1eb0f738cd0ff369cba0af05d1bdd119705 100644 (file)
--- a/actions.c
+++ b/actions.c
@@ -42,7 +42,7 @@ static int attack(FILE *input, long verb, token_t obj)
        }
     }
     if (obj == BIRD) {
-       spk=ARB_137;
+       spk=UNHAPPY_BIRD;
        if (game.closed)
        {
            RSPEAK(spk);
@@ -50,7 +50,7 @@ static int attack(FILE *input, long verb, token_t obj)
        }
        DSTROY(BIRD);
        game.prop[BIRD]=0;
-       spk=ARB_45;
+       spk=BIRD_DEAD;
     }
     if (obj == VEND) {
        PSPEAK(VEND,game.prop[VEND]+2);
@@ -58,17 +58,17 @@ static int attack(FILE *input, long verb, token_t obj)
        return GO_CLEAROBJ;
     }
 
-    if (obj == 0)spk=ARB_44;
-    if (obj == CLAM || obj == OYSTER)spk=ARB_150;
-    if (obj == SNAKE)spk=ARB_46;
-    if (obj == DWARF)spk=ARB_49;
+    if (obj == 0)spk=NO_TARGET;
+    if (obj == CLAM || obj == OYSTER)spk=SHELL_IMPERVIOUS;
+    if (obj == SNAKE)spk=SNAKE_WARNING;
+    if (obj == DWARF)spk=BARE_HANDS_QUERY;
     if (obj == DWARF && game.closed) return GO_DWARFWAKE;
-    if (obj == DRAGON)spk=ARB_167;
-    if (obj == TROLL)spk=ARB_157;
-    if (obj == OGRE)spk=ARB_203;
+    if (obj == DRAGON)spk=ALREADY_DEAD;
+    if (obj == TROLL)spk=ROCKY_TROLL;
+    if (obj == OGRE)spk=OGRE_DOFGE;
     if (obj == OGRE && i > 0) {
        RSPEAK(spk);
-       RSPEAK(ARB_6);
+       RSPEAK(KNIFE_THROWN);
        DSTROY(OGRE);
        int k=0;
        for (i=1; i < PIRATE; i++) {
@@ -82,13 +82,13 @@ static int attack(FILE *input, long verb, token_t obj)
        RSPEAK(spk);
        return GO_CLEAROBJ;
     }
-    if (obj == BEAR)spk=ARB_165+(game.prop[BEAR]+1)/2;
+    if (obj == BEAR)spk=BEAR_HANDS+(game.prop[BEAR]+1)/2;
     if (obj != DRAGON || game.prop[DRAGON] != 0) {RSPEAK(spk); return GO_CLEAROBJ;}
     /*  Fun stuff for dragon.  If he insists on attacking it, win!
      *  Set game.prop to dead, move dragon to central loc (still
      *  fixed), move rug there (not fixed), and move him there,
      *  too.  Then do a null motion to get new description. */
-    RSPEAK(ARB_49);
+    RSPEAK(BARE_HANDS_QUERY);
     GETIN(input,&WD1,&WD1X,&WD2,&WD2X);
     if (WD1 != MAKEWD(25) && WD1 != MAKEWD(250519))
        return GO_CHECKFOO;
@@ -115,15 +115,15 @@ static int bigwords(long foo)
  *  word zips the eggs back to the giant room (unless already there). */
 {
     int k=VOCAB(foo,3);
-    int spk=ARB_42;
+    int spk=NOTHING_HAPPENS;
     if (game.foobar != 1-k) {
-       if (game.foobar != 0)spk=ARB_151;
+       if (game.foobar != 0)spk=START_OVER;
        RSPEAK(spk);
        return GO_CLEAROBJ;
     } else {
        game.foobar=k;
        if (k != 4) {
-           RSPEAK(ARB_54);
+           RSPEAK(OK_MAN);
            return GO_CLEAROBJ;
        }
        game.foobar=0;
@@ -150,10 +150,10 @@ static int bivalve(token_t verb, token_t obj)
 {
     int spk, k=0;
     if (obj == OYSTER)k=1;
-    spk=ARB_124+k;
-    if (TOTING(obj))spk=ARB_120+k;
-    if (!TOTING(TRIDNT))spk=ARB_122+k;
-    if (verb == LOCK)spk=ARB_61;
+    spk=PEARL_FALLS+k;
+    if (TOTING(obj))spk=DROP_CLAM+k;
+    if (!TOTING(TRIDNT))spk=CLAM_OPENER+k;
+    if (verb == LOCK)spk=HUH_MAN;
     if (spk == 124) {
        DSTROY(CLAM);
        DROP(OYSTER,game.loc);
@@ -168,7 +168,7 @@ static int blast(void)
 {
     if (game.prop[ROD2] < 0 || !game.closed)
     {
-       RSPEAK(ARB_67);
+       RSPEAK(REQUIRES_DYNAMITE);
        return GO_CLEAROBJ;
     }
     game.bonus=133;
@@ -185,15 +185,15 @@ static int vbreak(token_t verb, token_t obj)
 /*  Break.  Only works for mirror in repository and, of course, the vase. */
 {
     int spk = ACTSPK[verb];
-    if (obj == MIRROR)spk=ARB_148;
+    if (obj == MIRROR)spk=TOO_FAR;
     if (obj == VASE && game.prop[VASE] == 0) {
        if (TOTING(VASE))DROP(VASE,game.loc);
        game.prop[VASE]=2;
        game.fixed[VASE]= -1;
-       spk=ARB_198;
+       spk=BREAK_VASE;
     } else {
        if (obj == MIRROR && game.closed) {
-           RSPEAK(ARB_197);
+           RSPEAK(BREAK_MIRROR);
            return GO_DWARFWAKE;
        }
     }
@@ -206,7 +206,7 @@ static int brief(void)
 {
     game.abbnum=10000;
     game.detail=3;
-    RSPEAK(ARB_156);
+    RSPEAK(BRIEF_CONFIRM);
     return GO_CLEAROBJ;
 }
 
@@ -225,18 +225,18 @@ static int carry(token_t verb, token_t obj)
        obj=game.atloc[game.loc];
     }
 
-    if (TOTING(obj)) {RSPEAK(ARB_24); return GO_CLEAROBJ;}
-    spk=ARB_25;
-    if (obj == PLANT && game.prop[PLANT] <= 0)spk=ARB_115;
-    if (obj == BEAR && game.prop[BEAR] == 1)spk=ARB_169;
-    if (obj == CHAIN && game.prop[BEAR] != 0)spk=ARB_170;
-    if (obj == URN)spk=ARB_215;
-    if (obj == CAVITY)spk=ARB_217;
-    if (obj == BLOOD)spk=ARB_239;
-    if (obj == RUG && game.prop[RUG] == 2)spk=ARB_222;
-    if (obj == SIGN)spk=ARB_196;
+    if (TOTING(obj)) {RSPEAK(ALREADY_CARRYING); return GO_CLEAROBJ;}
+    spk=YOU_JOKING;
+    if (obj == PLANT && game.prop[PLANT] <= 0)spk=DEEP_ROOTS;
+    if (obj == BEAR && game.prop[BEAR] == 1)spk=BEAR_CHAINED;
+    if (obj == CHAIN && game.prop[BEAR] != 0)spk=STILL_LOCKED;
+    if (obj == URN)spk=URN_NOBUDGE;
+    if (obj == CAVITY)spk=DOUGHNUT_HOLES;
+    if (obj == BLOOD)spk=FEW_DROPS;
+    if (obj == RUG && game.prop[RUG] == 2)spk=RUG_HOVERS;
+    if (obj == SIGN)spk=HAND_PASSTHROUGH;
     if (obj == MESSAG) {
-       RSPEAK(ARB_190);
+       RSPEAK(REMOVE_MESSAGE);
        DSTROY(MESSAG);
        return GO_CLEAROBJ;
     }
@@ -248,15 +248,15 @@ static int carry(token_t verb, token_t obj)
        if (!HERE(BOTTLE) || LIQUID() != obj) {
            if (TOTING(BOTTLE) && game.prop[BOTTLE] == 1)
                return(fill(verb, BOTTLE));
-           if (game.prop[BOTTLE] != 1)spk=ARB_105;
-           if (!TOTING(BOTTLE))spk=ARB_104;
+           if (game.prop[BOTTLE] != 1)spk=BOTTLE_FULL;
+           if (!TOTING(BOTTLE))spk=NO_CONTAINER;
            RSPEAK(spk);
            return GO_CLEAROBJ;
        }
        obj = BOTTLE;
     }
 
-    spk=ARB_92;
+    spk=CARRY_LIMIT;
     if (game.holdng >= INVLIMIT) {
        RSPEAK(spk);
        return GO_CLEAROBJ;
@@ -264,11 +264,11 @@ static int carry(token_t verb, token_t obj)
     else if (obj == BIRD && game.prop[BIRD] != 1 && -1-game.prop[BIRD] != 1) {
        if (game.prop[BIRD] == 2) {
            DSTROY(BIRD);
-           RSPEAK(ARB_238);
+           RSPEAK(BIRD_CRAP);
            return GO_CLEAROBJ;
        }
-       if (!TOTING(CAGE))spk=ARB_27;
-       if (TOTING(ROD))spk=ARB_26;
+       if (!TOTING(CAGE))spk=CANNOT_CARRY;
+       if (TOTING(ROD))spk=BIRD_EVADES;
        if (spk/2 == 13) {      /* FIXME: Arithmetic on message number */
            RSPEAK(spk);
            return GO_CLEAROBJ;
@@ -284,7 +284,7 @@ static int carry(token_t verb, token_t obj)
        game.prop[obj]=0;
        game.prop[CAVITY]=1;
     }
-    RSPEAK(ARB_54);
+    RSPEAK(OK_MAN);
     return GO_CLEAROBJ;
 }
 
@@ -293,19 +293,19 @@ static int chain(token_t verb)
 {
     int spk;
     if (verb != LOCK) {
-       spk=ARB_171;
-       if (game.prop[BEAR] == 0)spk=ARB_41;
-       if (game.prop[CHAIN] == 0)spk=ARB_37;
-       if (spk != ARB_171) {RSPEAK(spk); return GO_CLEAROBJ;}
+       spk=CHAIN_UNLOCKED;
+       if (game.prop[BEAR] == 0)spk=BEAR_BLOCKS;
+       if (game.prop[CHAIN] == 0)spk=ALREADY_UNLOCKED;
+       if (spk != CHAIN_UNLOCKED) {RSPEAK(spk); return GO_CLEAROBJ;}
        game.prop[CHAIN]=0;
        game.fixed[CHAIN]=0;
        if (game.prop[BEAR] != 3)game.prop[BEAR]=2;
        game.fixed[BEAR]=2-game.prop[BEAR];
     } else {
-       spk=ARB_172;
-       if (game.prop[CHAIN] != 0)spk=ARB_34;
-       if (game.loc != PLAC[CHAIN])spk=ARB_173;
-       if (spk != ARB_172) {RSPEAK(spk); return GO_CLEAROBJ;}
+       spk=CHAIN_LOCKED;
+       if (game.prop[CHAIN] != 0)spk=ALREADY_LOCKED;
+       if (game.loc != PLAC[CHAIN])spk=NO_LOCKSITE;
+       if (spk != CHAIN_LOCKED) {RSPEAK(spk); return GO_CLEAROBJ;}
        game.prop[CHAIN]=2;
        if (TOTING(CHAIN))DROP(CHAIN,game.loc);
        game.fixed[CHAIN]= -1;
@@ -324,21 +324,21 @@ static int discard(token_t verb, token_t obj, bool just_do_it)
         if (TOTING(ROD2) && obj == ROD && !TOTING(ROD))obj=ROD2;
         if (!TOTING(obj)) {RSPEAK(spk); return GO_CLEAROBJ;}
         if (obj == BIRD && HERE(SNAKE)) {
-            RSPEAK(ARB_30);
+            RSPEAK(BIRD_ATTACKS);
             if (game.closed) return GO_DWARFWAKE;
             DSTROY(SNAKE);
             /* Set game.prop for use by travel options */
             game.prop[SNAKE]=1;
 
         } else if ((GSTONE(obj) && AT(CAVITY) && game.prop[CAVITY] != 0)) {
-            RSPEAK(ARB_218);
+            RSPEAK(GEM_FITS);
             game.prop[obj]=1;
             game.prop[CAVITY]=0;
             if (HERE(RUG) && ((obj == EMRALD && game.prop[RUG] != 2) || (obj == RUBY &&
                                                                         game.prop[RUG] == 2))) {
-                spk=ARB_219;
-                if (TOTING(RUG))spk=ARB_220;
-                if (obj == RUBY)spk=ARB_221;
+                spk=RUG_RISES;
+                if (TOTING(RUG))spk=RUG_WIGGLES;
+                if (obj == RUBY)spk=RUG_SETTLES;
                 RSPEAK(spk);
                 if (spk != 220) {
                     int k = 2-game.prop[RUG];
@@ -353,12 +353,12 @@ static int discard(token_t verb, token_t obj, bool just_do_it)
             PSPEAK(BATTER,0);
             return GO_CLEAROBJ;
         } else if (obj == BIRD && AT(DRAGON) && game.prop[DRAGON] == 0) {
-            RSPEAK(ARB_154);
+            RSPEAK(BIRD_BURNT);
             DSTROY(BIRD);
             game.prop[BIRD]=0;
             return GO_CLEAROBJ;
         } else if (obj == BEAR && AT(TROLL)) {
-            RSPEAK(ARB_163);
+            RSPEAK(TROLL_SCAMPERS);
             MOVE(TROLL,0);
             MOVE(TROLL+NOBJECTS,0);
             MOVE(TROLL2,PLAC[TROLL]);
@@ -366,7 +366,7 @@ static int discard(token_t verb, token_t obj, bool just_do_it)
             JUGGLE(CHASM);
             game.prop[TROLL]=2;
         } else if (obj != VASE || game.loc == PLAC[PILLOW]) {
-            RSPEAK(ARB_54);
+            RSPEAK(OK_MAN);
         } else {
             game.prop[VASE]=2;
             if (AT(PILLOW))game.prop[VASE]=0;
@@ -394,17 +394,17 @@ static int drink(token_t verb, token_t obj)
     if (obj == 0 && LIQLOC(game.loc) != WATER && (LIQUID() != WATER || !HERE(BOTTLE)))
        return GO_UNKNOWN;
     if (obj != BLOOD) {
-       if (obj != 0 && obj != WATER)spk=ARB_110;
+       if (obj != 0 && obj != WATER)spk=RIDICULOUS_ATTEMPT;
        if (spk != 110 && LIQUID() == WATER && HERE(BOTTLE)) {
            game.prop[BOTTLE]=1;
            game.place[WATER]=0;
-           spk=ARB_74;
+           spk=BOTTLE_EMPTY;
        }
     } else {
        DSTROY(BLOOD);
        game.prop[DRAGON]=2;
        OBJSND[BIRD]=OBJSND[BIRD]+3;
-       spk=ARB_240;
+       spk=HEAD_BUZZES;
     }
     RSPEAK(spk);
     return GO_CLEAROBJ;
@@ -419,15 +419,15 @@ static int eat(token_t verb, token_t obj)
        if (!HERE(FOOD))
            return GO_UNKNOWN;
        DSTROY(FOOD);
-       spk=ARB_72;
+       spk=THANKS_DELICIOUS;
     } else {
        if (obj == FOOD) {
            DSTROY(FOOD);
-           spk=ARB_72;
+           spk=THANKS_DELICIOUS;
        }
        if (obj == BIRD || obj == SNAKE || obj == CLAM || obj == OYSTER || obj ==
           DWARF || obj == DRAGON || obj == TROLL || obj == BEAR || obj ==
-          OGRE)spk=ARB_71;
+          OGRE)spk=LOST_APPETITE;
     }
     RSPEAK(spk);
     return GO_CLEAROBJ;
@@ -445,15 +445,15 @@ static int extinguish(token_t verb, int obj)
 
     if (obj == URN) {
        game.prop[URN]=game.prop[URN]/2;
-       spk=ARB_210;
+       spk=URN_DARK;
     }
     else if (obj == LAMP) {
        game.prop[LAMP]=0;
-       RSPEAK(ARB_40);
-       spk = DARK(game.loc) ? ARB_16 : ARB_0;
+       RSPEAK(LAMP_OFF);
+       spk = DARK(game.loc) ? PITCH_DARK : ARB_0;
     }
     else if (obj == DRAGON || obj == VOLCAN)
-       spk=ARB_146;
+       spk=BEYOND_POWER;
     RSPEAK(spk);
     return GO_CLEAROBJ;
 }
@@ -464,41 +464,41 @@ static int feed(token_t verb, token_t obj)
 {
     int spk = ACTSPK[verb];
     if (obj == BIRD) {
-       RSPEAK(ARB_100);
+       RSPEAK(BIRD_PINING);
        return GO_CLEAROBJ;
     }
     else if (obj == SNAKE || obj == DRAGON || obj == TROLL) {
-       spk=ARB_102;
-       if (obj == DRAGON && game.prop[DRAGON] != 0)spk=ARB_110;
-       if (obj == TROLL)spk=ARB_182;
+       spk=NOTHING_EDIBLE;
+       if (obj == DRAGON && game.prop[DRAGON] != 0)spk=RIDICULOUS_ATTEMPT;
+       if (obj == TROLL)spk=TROLL_VICES;
        if (obj == SNAKE && !game.closed && HERE(BIRD)) {
            DSTROY(BIRD);
            game.prop[BIRD]=0;
-           spk = ARB_101;
+           spk = BIRD_DEVOURED;
        }
     }
     else if (obj == DWARF) {
        if (HERE(FOOD)) {
            game.dflag += 2;
-           spk = ARB_103;
+           spk = REALLY_MAD;
        }
     }
     else if (obj == BEAR) {
-       if (game.prop[BEAR] == 0)spk=ARB_102;
-       if (game.prop[BEAR] == 3)spk=ARB_110;
+       if (game.prop[BEAR] == 0)spk=NOTHING_EDIBLE;
+       if (game.prop[BEAR] == 3)spk=RIDICULOUS_ATTEMPT;
        if (HERE(FOOD)) {
            DSTROY(FOOD);
            game.prop[BEAR]=1;
            game.fixed[AXE]=0;
            game.prop[AXE]=0;
-           spk=ARB_168;
+           spk=BEAR_TAMED;
        }
     }
     else if (obj == OGRE) {
        if (HERE(FOOD))
-           spk=ARB_202;
+           spk=OGRE_FULL;
     } else {
-       spk=ARB_14;
+       spk=AM_GAME;
     }
     RSPEAK(spk);
     return GO_CLEAROBJ;
@@ -511,27 +511,27 @@ int fill(token_t verb, token_t obj)
     int k;
     int spk = ACTSPK[verb];
     if (obj == VASE) {
-       spk=ARB_29;
-       if (LIQLOC(game.loc) == 0)spk=ARB_144;
+       spk=ARENT_CARRYING;
+       if (LIQLOC(game.loc) == 0)spk=FILL_INVALID;
        if (LIQLOC(game.loc) == 0 || !TOTING(VASE)) {
            RSPEAK(spk);
            return GO_CLEAROBJ;
        }
-       RSPEAK(ARB_145);
+       RSPEAK(SHATTER_VASE);
        game.prop[VASE]=2;
        game.fixed[VASE]= -1;
        return(discard(verb, obj, true));
     }
     else if (obj == URN) {
-       spk=ARB_213;
+       spk=FULL_URN;
        if (game.prop[URN] != 0) {RSPEAK(spk); return GO_CLEAROBJ;}
-       spk=ARB_144;
+       spk=FILL_INVALID;
        k=LIQUID();
        if (k == 0 || !HERE(BOTTLE)) {RSPEAK(spk); return GO_CLEAROBJ;}
        game.place[k]=0;
        game.prop[BOTTLE]=1;
        if (k == OIL)game.prop[URN]=1;
-       spk=ARB_211+game.prop[URN];
+       spk=WATER_URN+game.prop[URN];
        RSPEAK(spk);
        return GO_CLEAROBJ;
     }
@@ -541,20 +541,20 @@ int fill(token_t verb, token_t obj)
     }
     else if (obj == 0 && !HERE(BOTTLE))
        return GO_UNKNOWN;
-    spk=ARB_107;
+    spk=BOTTLED_WATER;
     if (LIQLOC(game.loc) == 0)
-       spk=ARB_106;
+       spk=NO_LIQUID;
     if (HERE(URN) && game.prop[URN] != 0)
-       spk=ARB_214;
+       spk=URN_NOPOUR;
     if (LIQUID() != 0)
-       spk=ARB_105;
+       spk=BOTTLE_FULL;
     if (spk == 107) {
        game.prop[BOTTLE]=MOD(COND[game.loc],4)/2*2;
        k=LIQUID();
        if (TOTING(BOTTLE))
            game.place[k]= -1;
        if (k == OIL)
-           spk=ARB_108;
+           spk=BOTTLED_OIL;
     }
     RSPEAK(spk);
     return GO_CLEAROBJ;
@@ -568,9 +568,9 @@ static int find(token_t verb, token_t obj)
        (LIQUID() == obj && AT(BOTTLE)) ||
        obj == LIQLOC(game.loc) ||
        (obj == DWARF && ATDWRF(game.loc) > 0))
-       spk=ARB_94;
-    if (game.closed)spk=ARB_138;
-    if (TOTING(obj))spk=ARB_24;
+       spk=YOU_HAVEIT;
+    if (game.closed)spk=NEEDED_NEreplace;
+    if (TOTING(obj))spk=ALREADY_CARRYING;
     RSPEAK(spk);
     return GO_CLEAROBJ;
 }
@@ -580,8 +580,8 @@ static int fly(token_t verb, token_t obj)
 {
     int spk = ACTSPK[verb];
     if (obj == INTRANSITIVE) {
-       if (game.prop[RUG] != 2)spk=ARB_224;
-       if (!HERE(RUG))spk=ARB_225;
+       if (game.prop[RUG] != 2)spk=RUG_NOTHING2;
+       if (!HERE(RUG))spk=FLAP_ARMS;
        if (spk/2 == 112) {
            RSPEAK(spk);
            return GO_CLEAROBJ;
@@ -593,13 +593,13 @@ static int fly(token_t verb, token_t obj)
        RSPEAK(spk);
        return GO_CLEAROBJ;
     }
-    spk=ARB_223;
+    spk=RUG_NOTHING1;
     if (game.prop[RUG] != 2) {RSPEAK(spk); return GO_CLEAROBJ;}
     game.oldlc2=game.oldloc;
     game.oldloc=game.loc;
     game.newloc=game.place[RUG]+game.fixed[RUG]-game.loc;
-    spk=ARB_226;
-    if (game.prop[SAPPH] >= 0)spk=ARB_227;
+    spk=RUG_GOES;
+    if (game.prop[SAPPH] >= 0)spk=RUG_RETURNS;
     RSPEAK(spk);
     return GO_TERMINATE;
 }
@@ -608,19 +608,19 @@ static int inven(token_t obj)
 /* Inventory. If object, treat same as find.  Else report on current burden. */
 {
     int i;
-    int spk=ARB_98;
+    int spk=NO_CARRY;
     for (i=1; i<=NOBJECTS; i++) {
        if (i == BEAR || !TOTING(i))
            continue;
        if (spk == 98)
-           RSPEAK(ARB_99);
+           RSPEAK(NOW_HOLDING);
        game.blklin=false;
        PSPEAK(i,-1);
        game.blklin=true;
        spk=ARB_0;
     }
     if (TOTING(BEAR))
-       spk=ARB_141;
+       spk=TAME_BEAR;
     RSPEAK(spk);
     return GO_CLEAROBJ;
 }
@@ -636,10 +636,10 @@ int light(token_t verb, token_t obj)
     }
 
     if (obj == URN) {
-       spk=ARB_38;
+       spk=URN_EMPTY;
        if (game.prop[URN] == 0)
            {RSPEAK(spk); return GO_CLEAROBJ;}
-       spk=ARB_209;
+       spk=URN_LIT;
        game.prop[URN]=2;
        RSPEAK(spk);
        return GO_CLEAROBJ;
@@ -649,13 +649,13 @@ int light(token_t verb, token_t obj)
            RSPEAK(spk);
            return GO_CLEAROBJ;
        }
-       spk=ARB_184;
+       spk=LAMP_OUT;
        if (game.limit < 0) {
            RSPEAK(spk);
            return GO_CLEAROBJ;
        }
        game.prop[LAMP]=1;
-       RSPEAK(ARB_39);
+       RSPEAK(LAMP_ON);
        if (game.wzdark)
            return GO_TOP;
        else
@@ -667,7 +667,7 @@ static int listen(void)
 /*  Listen.  Intransitive only.  Print stuff based on objsnd/locsnd. */
 {
     int i, k;
-    int spk=ARB_228;
+    int spk=ALL_SILENT;
     k=LOCSND[game.loc];
     if (k != 0) {
        RSPEAK(labs(k));
@@ -692,7 +692,7 @@ static int lock(token_t verb, token_t obj)
 {
     int spk = ACTSPK[verb];
     if (obj == INTRANSITIVE) {
-       spk=ARB_28;
+       spk=NOTHING_LOCKED;
        if (HERE(CLAM))obj=CLAM;
        if (HERE(OYSTER))obj=OYSTER;
        if (AT(DOOR))obj=DOOR;
@@ -706,21 +706,21 @@ static int lock(token_t verb, token_t obj)
      *  and for chain. */
     if (obj == CLAM || obj == OYSTER)
        return bivalve(verb, obj);
-    if (obj == DOOR)spk=ARB_111;
-    if (obj == DOOR && game.prop[DOOR] == 1)spk=ARB_54;
-    if (obj == CAGE)spk=ARB_32;
-    if (obj == KEYS)spk=ARB_55;
+    if (obj == DOOR)spk=RUSTY_DOOR;
+    if (obj == DOOR && game.prop[DOOR] == 1)spk=OK_MAN;
+    if (obj == CAGE)spk=NO_LOCK;
+    if (obj == KEYS)spk=CANNOT_UNLOCK;
     if (obj == GRATE || obj == CHAIN) {
-       spk=ARB_31;
+       spk=NO_KEYS;
        if (HERE(KEYS)) {
            if (obj == CHAIN)
                return chain(verb);
            if (game.closng) {
-               spk=ARB_130;
+               spk=EXIT_CLOSED;
                if (!game.panic)game.clock2=15;
                game.panic=true;
            } else {
-               spk=ARB_34+game.prop[GRATE];    /* FIXME: Arithmetic on message number */
+               spk=ALREADY_LOCKED+game.prop[GRATE];    /* FIXME: Arithmetic on message number */
                game.prop[GRATE]=1;
                if (verb == LOCK)game.prop[GRATE]=0;
                spk=spk+2*game.prop[GRATE];
@@ -739,17 +739,17 @@ static int pour(token_t verb, token_t obj)
     if (obj == BOTTLE || obj == 0)obj=LIQUID();
     if (obj == 0) return GO_UNKNOWN;
     if (!TOTING(obj)) {RSPEAK(spk); return GO_CLEAROBJ;}
-    spk=ARB_78;
+    spk=CANT_POUR;
     if (obj != OIL && obj != WATER) {RSPEAK(spk); return GO_CLEAROBJ;}
     if (HERE(URN) && game.prop[URN] == 0)
        return fill(verb, URN);
     game.prop[BOTTLE]=1;
     game.place[obj]=0;
-    spk=ARB_77;
+    spk=GROUND_WET;
     if (!(AT(PLANT) || AT(DOOR)))
        {RSPEAK(spk); return GO_CLEAROBJ;}
     if (!AT(DOOR)) {
-       spk=ARB_112;
+       spk=SHAKING_LEAVES;
        if (obj != WATER) {RSPEAK(spk); return GO_CLEAROBJ;}
        PSPEAK(PLANT,game.prop[PLANT]+3);
        game.prop[PLANT]=MOD(game.prop[PLANT]+1,3);
@@ -758,7 +758,7 @@ static int pour(token_t verb, token_t obj)
     } else {
        game.prop[DOOR]=0;
        if (obj == OIL)game.prop[DOOR]=1;
-       spk=ARB_113+game.prop[DOOR];
+       spk=RUSTED_HINGES+game.prop[DOOR];
        RSPEAK(spk);
        return GO_CLEAROBJ;
     }
@@ -767,7 +767,7 @@ static int pour(token_t verb, token_t obj)
 static int quit(FILE *input)
 /*  Quit.  Intransitive only.  Verify intent and exit if that's what he wants. */
 {
-    if (YES(input,ARB_22,ARB_54,ARB_54))
+    if (YES(input,REALLY_QUIT,OK_MAN,OK_MAN))
        score(1);
     return GO_CLEAROBJ;
 }
@@ -787,7 +787,7 @@ static int read(FILE *input, token_t verb, token_t obj)
        
     if (DARK(game.loc)) {
        SETPRM(1,WD1,WD1X);
-       RSPEAK(ARB_256);
+       RSPEAK(NO_SEE);
        return GO_CLEAROBJ;
     }
     if (OBJTXT[obj] == 0 || game.prop[obj] < 0) {
@@ -795,7 +795,7 @@ static int read(FILE *input, token_t verb, token_t obj)
        return GO_CLEAROBJ;
     }
     if (obj == OYSTER && !game.clshnt) {
-       game.clshnt=YES(input,ARB_192,ARB_193,ARB_54);
+       game.clshnt=YES(input,CLUE_QUERY,WAYOUT_CLUE,OK_MAN);
        return GO_CLEAROBJ;
     }
     PSPEAK(obj,OBJTXT[obj]+game.prop[obj]);
@@ -806,7 +806,7 @@ static int reservoir(void)
 /*  Z'ZZZ (word gets recomputed at startup; different each game). */
 {
     if (!AT(RESER) && game.loc != game.fixed[RESER]-1) {
-       RSPEAK(ARB_75);
+       RSPEAK(RUB_NOGO);
        return GO_CLEAROBJ;
     } else {
        PSPEAK(RESER,game.prop[RESER]+1);
@@ -814,7 +814,7 @@ static int reservoir(void)
        if (AT(RESER)) return GO_CLEAROBJ;
        game.oldlc2=game.loc;
        game.newloc=0;
-       RSPEAK(ARB_241);
+       RSPEAK(NOT_BRIGHT);
        return GO_TERMINATE;
     }
 }
@@ -824,14 +824,14 @@ static int rub(token_t verb, token_t obj)
 {
     int spk = ACTSPK[verb];
     if (obj != LAMP)
-       spk=ARB_76;
+       spk=PECULIAR_NOTHING;
     if (obj == URN && game.prop[URN] == 2) {
        DSTROY(URN);
        DROP(AMBER,game.loc);
        game.prop[AMBER]=1;
        --game.tally;
        DROP(CAVITY,game.loc);
-       spk=ARB_216;
+       spk=URN_GENIES;
     }
     RSPEAK(spk);
     return GO_CLEAROBJ;
@@ -851,7 +851,7 @@ static int say(void)
        WD2=0;
        return GO_LOOKUP;
     }
-    RSPEAK(ARB_258);
+    RSPEAK(OKEY_DOKEY);
     return GO_CLEAROBJ;
 
 }
@@ -876,7 +876,7 @@ static int throw(FILE *cmdin, long verb, token_t obj)
        return GO_CLEAROBJ;
     }
     if (obj >= 50 && obj <= MAXTRS && AT(TROLL)) {
-        spk=ARB_159;
+        spk=TROLL_SATISFIED;
         /*  Snarf a treasure for the troll. */
         DROP(obj,0);
         MOVE(TROLL,0);
@@ -897,20 +897,20 @@ static int throw(FILE *cmdin, long verb, token_t obj)
     int i=ATDWRF(game.loc);
     if (i <= 0) {
         if (AT(DRAGON) && game.prop[DRAGON] == 0) {
-            spk=ARB_152;
+            spk=DRAGON_SCALES;
             return throw_support(spk);
         }
         if (AT(TROLL)) {
-            spk=ARB_158;
+            spk=TROLL_RETURNS;
             return throw_support(spk);
         }
         if (AT(OGRE)) {
-            spk=ARB_203;
+            spk=OGRE_DOFGE;
             return throw_support(spk);
         }
         if (HERE(BEAR) && game.prop[BEAR] == 0) {
             /* This'll teach him to throw the axe at the bear! */
-            spk=ARB_164;
+            spk=AXE_LOST;
             DROP(AXE,game.loc);
             game.fixed[AXE]= -1;
             game.prop[AXE]=1;
@@ -921,14 +921,14 @@ static int throw(FILE *cmdin, long verb, token_t obj)
     }
 
     if (randrange(NDWARVES+1) < game.dflag) {
-        spk=ARB_48;
+        spk=DWARF_DODGES;
         return throw_support(spk);
     }
     game.dseen[i]=false;
     game.dloc[i]=0;
-    spk=ARB_47;
+    spk=KILLED_DWARF;
     ++game.dkill;
-    if (game.dkill == 1)spk=ARB_149;
+    if (game.dkill == 1)spk=DWARF_SMOKE;
 
     return throw_support(spk);
 }
@@ -948,7 +948,7 @@ static int wake(token_t verb, token_t obj)
        RSPEAK(ACTSPK[verb]);
        return GO_CLEAROBJ;
     }
-    RSPEAK(ARB_199);
+    RSPEAK(PROD_DWARF);
     return GO_DWARFWAKE;
 }
 
@@ -956,19 +956,19 @@ static int wave(token_t verb, token_t obj)
 /* Wave.  No effect unless waving rod at fissure or at bird. */
 {
     int spk = ACTSPK[verb];
-    if ((!TOTING(obj)) && (obj != ROD || !TOTING(ROD2)))spk=ARB_29;
+    if ((!TOTING(obj)) && (obj != ROD || !TOTING(ROD2)))spk=ARENT_CARRYING;
     if (obj != ROD ||
        !TOTING(obj) ||
        (!HERE(BIRD) && (game.closng || !AT(FISSUR)))) {
        RSPEAK(spk);
        return GO_CLEAROBJ;
     }
-    if (HERE(BIRD))spk=ARB_206+MOD(game.prop[BIRD],2);
+    if (HERE(BIRD))spk=FREE_FLY+MOD(game.prop[BIRD],2);
     if (spk == 206 && game.loc == game.place[STEPS] && game.prop[JADE] < 0) {
        DROP(JADE,game.loc);
        game.prop[JADE]=0;
        --game.tally;
-       spk=ARB_208;
+       spk=NECKLACE_FLY;
        RSPEAK(spk);
        return GO_CLEAROBJ;
     } else {
@@ -1024,7 +1024,7 @@ int action(FILE *input, enum speechpart part, long verb, token_t obj)
        }
        else if (obj == KNIFE && game.knfloc == game.loc) {
            game.knfloc= -1;
-           spk=ARB_116;
+           spk=KNIVES_VANISH;
            RSPEAK(spk);
            return GO_CLEAROBJ;
        }
@@ -1036,7 +1036,7 @@ int action(FILE *input, enum speechpart part, long verb, token_t obj)
            /* FALL THROUGH */;
        else {
            SETPRM(1,WD1,WD1X);
-           RSPEAK(ARB_256);
+           RSPEAK(NO_SEE);
            return GO_CLEAROBJ;
        }
 
@@ -1058,7 +1058,7 @@ int action(FILE *input, enum speechpart part, long verb, token_t obj)
                    case  1: /* DROP  */ return GO_UNKNOWN; 
                    case  2: /* SAY   */ return GO_UNKNOWN; 
                    case  3: /* UNLOC */ return lock(verb, INTRANSITIVE);    
-                   case  4: /* NOTHI */ {RSPEAK(ARB_54); return(GO_CLEAROBJ);}
+                   case  4: /* NOTHI */ {RSPEAK(OK_MAN); return(GO_CLEAROBJ);}
                    case  5: /* LOCK  */ return lock(verb, INTRANSITIVE);    
                    case  6: /* LIGHT */ return light(verb, INTRANSITIVE);    
                    case  7: /* EXTIN */ return extinguish(verb, INTRANSITIVE);    
@@ -1099,7 +1099,7 @@ int action(FILE *input, enum speechpart part, long verb, token_t obj)
                case  1: /* DROP  */ return discard(verb, obj, false);    
                case  2: /* SAY   */ return say();    
                case  3: /* UNLOC */ return lock(verb, obj);    
-               case  4: /* NOTHI */ {RSPEAK(ARB_54); return(GO_CLEAROBJ);}
+               case  4: /* NOTHI */ {RSPEAK(OK_MAN); return(GO_CLEAROBJ);}
                case  5: /* LOCK  */ return lock(verb, obj);    
                case  6: /* LIGHT */ return light(verb, obj);    
                case  7: /* EXTI  */ return extinguish(verb, obj);    
@@ -1134,7 +1134,7 @@ int action(FILE *input, enum speechpart part, long verb, token_t obj)
        case unknown:
            /* Unknown verb, couldn't deduce object - might need hint */
            SETPRM(1,WD1,WD1X);
-           RSPEAK(ARB_255);
+           RSPEAK(WHAT_DO);
            return GO_CHECKHINT;
     default:
            BUG(99);
index 888ef5cc1ca618582f2401b19e0b88ede0c1dadd..03d5d3d5a583d7e6a5189b43c252a57c784236a5 100644 (file)
@@ -746,283 +746,283 @@ locations: !!omap
 
 arbitrary_messages:  !!omap
 - ARB_0: !!null
-- ARB_1: 'Somewhere nearby is Colossal Cave, where others have found fortunes in\ntreasure and gold, though it is rumored that some who enter are never\nseen again.  Magic is said to work in the cave.  I will be your eyes\nand hands.  Direct me with commands of 1 or 2 words.  I should warn\nyou that I look at only the first five letters of each word, so you''ll\nhave to enter "northeast" as "ne" to distinguish it from "north".\nYou can type "help" for some general hints.  For information on how\nto end your adventure, scoring, etc., type "info".\n\t\t\t      - - -\nThis program was originally developed by Willie Crowther.  Most of the\nfeatures of the current program were added by Don Woods.  Contact Don\nif you have any questions, comments, etc.'
-- ARB_2: 'A little dwarf with a big knife blocks your way.'
-- ARB_3: 'A little dwarf just walked around a corner, saw you, threw a little\naxe at you which missed, cursed, and ran away.'
-- ARB_4: 'There are %d threatening little dwarves in the room with you.'
-- ARB_5: 'There is a threatening little dwarf in the room with you!'
-- ARB_6: 'One sharp nasty knife is thrown at you!'
-- ARB_7: 'A hollow voice says "PLUGH".'
-- ARB_8: 'It gets you!'
-- ARB_9: 'It misses!'
-- ARB_10: 'I am unsure how you are facing.  Use compass points or nearby objects.'
-- ARB_11: 'I don''t know in from out here.  Use compass points or name something\nin the general direction you want to go.'
-- ARB_12: 'I don''t know how to apply that word here.'
-- ARB_13: 'You''re quite welcome.'
-- ARB_14: 'I''m game.  Would you care to explain how?'
-- ARB_15: 'Sorry, but I am not allowed to give more detail.  I will repeat the\nlong description of your location.'
-- ARB_16: 'It is now pitch dark.  If you proceed you will likely fall into a pit.'
-- ARB_17: 'If you prefer, simply type w rather than west.'
-- ARB_18: 'Are you trying to catch the bird?'
-- ARB_19: 'Something about you seems to be frightening the bird.  Perhaps you\nmight figure out what it is.'
-- ARB_20: 'Are you trying to somehow deal with the snake?'
-- ARB_21: 'You can''t kill the snake, or drive it away, or avoid it, or anything\nlike that.  There is a way to get by, but you don''t have the necessary\nresources right now.'
-- ARB_22: 'Do you really want to quit now?'
-- ARB_23: 'You fell into a pit and broke every bone in your body!'
-- ARB_24: 'You are already carrying it!'
-- ARB_25: 'You can''t be serious!'
-- ARB_26: 'The bird seemed unafraid at first, but as you approach it becomes\ndisturbed and you cannot catch it.'
-- ARB_27: 'You can catch the bird, but you cannot carry it.'
-- ARB_28: 'There is nothing here with a lock!'
-- ARB_29: 'You aren''t carrying it!'
-- ARB_30: 'The little bird attacks the green snake, and in an astounding flurry\ndrives the snake away.'
-- ARB_31: 'You have no keys!'
-- ARB_32: 'It has no lock.'
-- ARB_33: 'I don''t know how to lock or unlock such a thing.'
-- ARB_34: 'It was already locked.'
-- ARB_35: 'The grate is now locked.'
-- ARB_36: 'The grate is now unlocked.'
-- ARB_37: 'It was already unlocked.'
-- ARB_38: 'The urn is empty and will not light.'
-- ARB_39: 'Your lamp is now on.'
-- ARB_40: 'Your lamp is now off.'
-- ARB_41: 'There is no way to get past the bear to unlock the chain, which is\nprobably just as well.'
-- ARB_42: 'Nothing happens.'
-- ARB_43: 'Where?'
-- ARB_44: 'There is nothing here to attack.'
-- ARB_45: 'The little bird is now dead.  Its body disappears.'
-- ARB_46: 'Attacking the snake both doesn''t work and is very dangerous.'
-- ARB_47: 'You killed a little dwarf.'
-- ARB_48: 'You attack a little dwarf, but he dodges out of the way.'
-- ARB_49: 'With what?  Your bare hands?'
-- ARB_50: 'Good try, but that is an old worn-out magic word.'
-- ARB_51: 'I know of places, actions, and things.  Most of my vocabulary\ndescribes places and is used to move you there.  To move, try words\nlike forest, building, downstream, enter, east, west, north, south,\nup, or down.  I know about a few special objects, like a black rod\nhidden in the cave.  These objects can be manipulated using some of\nthe action words that I know.  Usually you will need to give both the\nobject and action words (in either order), but sometimes I can infer\nthe object from the verb alone.  Some objects also imply verbs; in\nparticular, "inventory" implies "take inventory", which causes me to\ngive you a list of what you''re carrying.  Some objects have unexpected\neffects; the effects are not always desirable!  Usually people having\ntrouble moving just need to try a few more words.  Usually people\ntrying unsuccessfully to manipulate an object are attempting something\nbeyond their (or my!) capabilities and should try a completely\ndifferent tack.  One point often confusing to beginners is that, when\nthere are several ways to go in a certain direction (e.g., if there\nare several holes in a wall), choosing that direction in effect\nchooses one of the ways at random; often, though, by specifying the\nplace you want to reach you can guarantee choosing the right path.\nAlso, to speed the game you can sometimes move long distances with a\nsingle word.  For example, "building" usually gets you to the building\nfrom anywhere above ground except when lost in the forest.  Also, note\nthat cave passages and forest paths turn a lot, so leaving one place\nheading north doesn''t guarantee entering the next from the south.\nHowever (another important point), except when you''ve used a "long\ndistance" word such as "building", there is always a way to go back\nwhere you just came from unless I warn you to the contrary, even\nthough the direction that takes you back might not be the reverse of\nwhat got you here.  Good luck, and have fun!'
-- ARB_52: 'There is no way to go that direction.'
-- ARB_53: 'Please stick to 1- and 2-word commands.'
-- ARB_54: 'OK'
-- ARB_55: 'You can''t unlock the keys.'
-- ARB_56: 'You have crawled around in some little holes and wound up back in the\nmain passage.'
-- ARB_57: 'I don''t know where the cave is, but hereabouts no stream can run on\nthe surface for long.  I would try the stream.'
-- ARB_58: 'I need more detailed instructions to do that.'
-- ARB_59: 'I can only tell you what you see as you move about and manipulate\nthings.  I cannot tell you where remote things are.'
-- ARB_60: 'The ogre snarls and shoves you back.'
-- ARB_61: 'Huh?'
-- ARB_62: 'Are you trying to get into the cave?'
-- ARB_63: 'The grate is very solid and has a hardened steel lock.  You cannot\nenter without a key, and there are no keys nearby.  I would recommend\nlooking elsewhere for the keys.'
-- ARB_64: 'The trees of the forest are large hardwood oak and maple, with an\noccasional grove of pine or spruce.  There is quite a bit of under-\ngrowth, largely birch and ash saplings plus nondescript bushes of\nvarious sorts.  This time of year visibility is quite restricted by\nall the leaves, but travel is quite easy if you detour around the\nspruce and berry bushes.'
-- ARB_65: 'Welcome to Adventure!!  Would you like instructions?'
-- ARB_66: 'Digging without a shovel is quite impractical.  Even with a shovel\nprogress is unlikely.'
-- ARB_67: 'Blasting requires dynamite.'
-- ARB_68: 'I''m as confused as you are.'
-- ARB_69: 'Mist is a white vapor, usually water, seen from time to time in\ncaverns.  It can be found anywhere but is frequently a sign of a deep\npit leading down to water.'
-- ARB_70: 'Your feet are now wet.'
-- ARB_71: 'I think I just lost my appetite.'
-- ARB_72: 'Thank you, it was delicious!'
-- ARB_73: 'You have taken a drink from the stream.  The water tastes strongly of\nminerals, but is not unpleasant.  It is extremely cold.'
-- ARB_74: 'The bottle of water is now empty.'
-- ARB_75: 'Rubbing the electric lamp is not particularly rewarding.  Anyway,\nnothing exciting happens.'
-- ARB_76: 'Peculiar.  Nothing unexpected happens.'
-- ARB_77: 'Your bottle is empty and the ground is wet.'
-- ARB_78: 'You can''t pour that.'
-- ARB_79: 'Watch it!'
-- ARB_80: 'Which way?'
-- ARB_81: 'Oh dear, you seem to have gotten yourself killed.  I might be able to\nhelp you out, but I''ve never really done this before.  Do you want me\nto try to reincarnate you?'
-- ARB_82: 'All right.  But don''t blame me if something goes wr......\n                    --- POOF!! ---\nYou are engulfed in a cloud of orange smoke.  Coughing and gasping,\nyou emerge from the smoke and find....'
-- ARB_83: 'You clumsy oaf, you''ve done it again!  I don''t know how long I can\nkeep this up.  Do you want me to try reincarnating you again?'
-- ARB_84: 'Okay, now where did I put my orange smoke?....  >POOF!<\nEverything disappears in a dense cloud of orange smoke.'
-- ARB_85: 'Now you''ve really done it!  I''m out of orange smoke!  You don''t expect\nme to do a decent reincarnation without any orange smoke, do you?'
-- ARB_86: 'Okay, if you''re so smart, do it yourself!  I''m leaving!'
-- ARB_87: !!null
-- ARB_88: !!null
-- ARB_89: !!null
-- ARB_90: '>>> messages 81 thru 90 are reserved for "obituaries". <<<'
-- ARB_91: 'Sorry, but I no longer seem to remember how it was you got here.'
-- ARB_92: 'You can''t carry anything more.  You''ll have to drop something first.'
-- ARB_93: 'You can''t go through a locked steel grate!'
-- ARB_94: 'I believe what you want is right here with you.'
-- ARB_95: 'You don''t fit through a two-inch slit!'
-- ARB_96: 'I respectfully suggest you go across the bridge instead of jumping.'
-- ARB_97: 'There is no way across the fissure.'
-- ARB_98: 'You''re not carrying anything.'
-- ARB_99: 'You are currently holding the following:'
-- ARB_100: 'It''s not hungry (it''s merely pinin'' for the fjords).  Besides, you\nhave no bird seed.'
-- ARB_101: 'The snake has now devoured your bird.'
-- ARB_102: 'There''s nothing here it wants to eat (except perhaps you).'
-- ARB_103: 'You fool, dwarves eat only coal!  Now you''ve made him *REALLY* mad!!'
-- ARB_104: 'You have nothing in which to carry it.'
-- ARB_105: 'Your bottle is already full.'
-- ARB_106: 'There is nothing here with which to fill the bottle.'
-- ARB_107: 'Your bottle is now full of water.'
-- ARB_108: 'Your bottle is now full of oil.'
-- ARB_109: 'You can''t fill that.'
-- ARB_110: 'Don''t be ridiculous!'
-- ARB_111: 'The door is extremely rusty and refuses to open.'
-- ARB_112: 'The plant indignantly shakes the oil off its leaves and asks, "Water?"'
-- ARB_113: 'The hinges are quite thoroughly rusted now and won''t budge.'
-- ARB_114: 'The oil has freed up the hinges so that the door will now move,\nalthough it requires some effort.'
-- ARB_115: 'The plant has exceptionally deep roots and cannot be pulled free.'
-- ARB_116: 'The dwarves'' knives vanish as they strike the walls of the cave.'
-- ARB_117: 'Something you''re carrying won''t fit through the tunnel with you.\nYou''d best take inventory and drop something.'
-- ARB_118: 'You can''t fit this five-foot clam through that little passage!'
-- ARB_119: 'You can''t fit this five-foot oyster through that little passage!'
-- ARB_120: 'I advise you to put down the clam before opening it.  >STRAIN!<'
-- ARB_121: 'I advise you to put down the oyster before opening it.  >WRENCH!<'
-- ARB_122: 'You don''t have anything strong enough to open the clam.'
-- ARB_123: 'You don''t have anything strong enough to open the oyster.'
-- ARB_124: 'A glistening pearl falls out of the clam and rolls away.  Goodness,\nthis must really be an oyster.  (I never was very good at identifying\nbivalves.)  Whatever it is, it has now snapped shut again.'
-- ARB_125: 'The oyster creaks open, revealing nothing but oyster inside.  It\npromptly snaps shut again.'
-- ARB_126: 'You have crawled around in some little holes and found your way\nblocked by a recent cave-in.  You are now back in the main passage.'
-- ARB_127: 'There are faint rustling noises from the darkness behind you.'
-- ARB_128: 'Out from the shadows behind you pounces a bearded pirate!  "Har, har,"\nhe chortles, "I''ll just take all this booty and hide it away with me\nchest deep in the maze!"  He snatches your treasure and vanishes into\nthe gloom.'
-- ARB_129: 'A sepulchral voice reverberating through the cave, says, "Cave closing\nsoon.  All adventurers exit immediately through main office."'
-- ARB_130: 'A mysterious recorded voice groans into life and announces:\n   "This exit is closed.  Please leave via main office."'
-- ARB_131: 'It looks as though you''re dead.  Well, seeing as how it''s so close to\nclosing time anyway, I think we''ll just call it a day.'
-- ARB_132: 'The sepulchral voice intones, "The cave is now closed."  As the echoes\nfade, there is a blinding flash of light (and a small puff of orange\nsmoke). . . .    As your eyes refocus, you look around and find...'
-- ARB_133: 'There is a loud explosion, and a twenty-foot hole appears in the far\nwall, burying the dwarves in the rubble.  You march through the hole\nand find yourself in the main office, where a cheering band of\nfriendly elves carry the conquering adventurer off into the sunset.'
-- ARB_134: 'There is a loud explosion, and a twenty-foot hole appears in the far\nwall, burying the snakes in the rubble.  A river of molten lava pours\nin through the hole, destroying everything in its path, including you!'
-- ARB_135: 'There is a loud explosion, and you are suddenly splashed across the\nwalls of the room.'
-- ARB_136: 'The resulting ruckus has awakened the dwarves.  There are now several\nthreatening little dwarves in the room with you!  Most of them throw\nknives at you!  All of them get you!'
-- ARB_137: 'Oh, leave the poor unhappy bird alone.'
-- ARB_138: 'I daresay whatever you want is around here somewhere.'
-- ARB_139: 'I don''t know the word "stop".  Use "quit" if you want to give up.'
-- ARB_140: 'You can''t get there from here.'
-- ARB_141: 'You are being followed by a very large, tame bear.'
-- ARB_142: 'For a summary of the most recent changes to the game, say "news".\nIf you want to end your adventure early, say "quit".  To suspend your\nadventure such that you can continue later, say "suspend" (or "pause"\nor "save").  To see how well you''re doing, say "score".  To get full\ncredit for a treasure, you must have left it safely in the building,\nthough you get partial credit just for locating it.  You lose points\nfor getting killed, or for quitting, though the former costs you more.\nThere are also points based on how much (if any) of the cave you''ve\nmanaged to explore; in particular, there is a large bonus just for\ngetting in (to distinguish the beginners from the rest of the pack),\nand there are other ways to determine whether you''ve been through some\nof the more harrowing sections.  If you think you''ve found all the\ntreasures, just keep exploring for a while.  If nothing interesting\nhappens, you haven''t found them all yet.  If something interesting\n*DOES* happen (incidentally, there *ARE* ways to hasten things along),\nit means you''re getting a bonus and have an opportunity to garner many\nmore points in the Master''s section.  I may occasionally offer hints\nif you seem to be having trouble.  If I do, I''ll warn you in advance\nhow much it will affect your score to accept the hints.  Finally, to\nsave time, you may specify "brief", which tells me never to repeat the\nfull description of a place unless you explicitly ask me to.'
-- ARB_143: 'Now let''s see you do it without suspending in mid-Adventure.'
-- ARB_144: 'There is nothing here with which to fill it.'
-- ARB_145: 'The sudden change in temperature has delicately shattered the vase.'
-- ARB_146: 'It is beyond your power to do that.'
-- ARB_147: 'I don''t know how.'
-- ARB_148: 'It is too far up for you to reach.'
-- ARB_149: 'You killed a little dwarf.  The body vanishes in a cloud of greasy\nblack smoke.'
-- ARB_150: 'The shell is very strong and is impervious to attack.'
-- ARB_151: 'What''s the matter, can''t you read?  Now you''d best start over.'
-- ARB_152: 'The axe bounces harmlessly off the dragon''s thick scales.'
-- ARB_153: 'The dragon looks rather nasty.  You''d best not try to get by.'
-- ARB_154: 'The little bird attacks the green dragon, and in an astounding flurry\ngets burnt to a cinder.  The ashes blow away.'
-- ARB_155: 'On what?'
-- ARB_156: 'Okay, from now on I''ll only describe a place in full the first time\nyou come to it.  To get the full description, say "look".'
-- ARB_157: 'Trolls are close relatives with the rocks and have skin as tough as\nthat of a rhinoceros.  The troll fends off your blows effortlessly.'
-- ARB_158: 'The troll deftly catches the axe, examines it carefully, and tosses it\nback, declaring, "Good workmanship, but it''s not valuable enough."'
-- ARB_159: 'The troll catches your treasure and scurries away out of sight.'
-- ARB_160: 'The troll refuses to let you cross.'
-- ARB_161: 'There is no longer any way across the chasm.'
-- ARB_162: 'Just as you reach the other side, the bridge buckles beneath the\nweight of the bear, which was still following you around.  You\nscrabble desperately for support, but as the bridge collapses you\nstumble back and fall into the chasm.'
-- ARB_163: 'The bear lumbers toward the troll, who lets out a startled shriek and\nscurries away.  The bear soon gives up the pursuit and wanders back.'
-- ARB_164: 'The axe misses and lands near the bear where you can''t get at it.'
-- ARB_165: 'With what?  Your bare hands?  Against *HIS* bear hands??'
-- ARB_166: 'The bear is confused; he only wants to be your friend.'
-- ARB_167: 'For crying out loud, the poor thing is already dead!'
-- ARB_168: 'The bear eagerly wolfs down your food, after which he seems to calm\ndown considerably and even becomes rather friendly.'
-- ARB_169: 'The bear is still chained to the wall.'
-- ARB_170: 'The chain is still locked.'
-- ARB_171: 'The chain is now unlocked.'
-- ARB_172: 'The chain is now locked.'
-- ARB_173: 'There is nothing here to which the chain can be locked.'
-- ARB_174: 'There is nothing here to eat.'
-- ARB_175: 'Do you want the hint?'
-- ARB_176: 'Do you need help getting out of the maze?'
-- ARB_177: 'You can make the passages look less alike by dropping things.'
-- ARB_178: 'Are you trying to explore beyond the plover room?'
-- ARB_179: 'There is a way to explore that region without having to worry about\nfalling into a pit.  None of the objects available is immediately\nuseful in discovering the secret.'
-- ARB_180: 'Do you need help getting out of here?'
-- ARB_181: 'Don''t go west.'
-- ARB_182: 'Gluttony is not one of the troll''s vices.  Avarice, however, is.'
-- ARB_183: 'Your lamp is getting dim.  You''d best start wrapping this up, unless\nyou can find some fresh batteries.  I seem to recall there''s a vending\nmachine in the maze.  Bring some coins with you.'
-- ARB_184: 'Your lamp has run out of power.'
-- ARB_185: 'Please answer the question.'
-- ARB_186: 'There are faint rustling noises from the darkness behind you.  As you\nturn toward them, the beam of your lamp falls across a bearded pirate.\nHe is carrying a large chest.  "Shiver me timbers!" he cries, "I''ve\nbeen spotted!  I''d best hie meself off to the maze to hide me chest!"\nWith that, he vanishes into the gloom.'
-- ARB_187: 'Your lamp is getting dim.  You''d best go back for those batteries.'
-- ARB_188: 'Your lamp is getting dim.  I''m taking the liberty of replacing the\nbatteries.'
-- ARB_189: 'Your lamp is getting dim, and you''re out of spare batteries.  You''d\nbest start wrapping this up.'
-- ARB_190: 'You sift your fingers through the dust, but succeed only in\nobliterating the cryptic message.'
-- ARB_191: 'Do you need help dealing with the ogre?'
-- ARB_192: 'Hmmm, this looks like a clue, which means it''ll cost you 10 points to\nread it.  Should I go ahead and read it anyway?'
-- ARB_193: 'It says, "There is a way out of this place.  Do you need any more\ninformation to escape?  Sorry, but this initial hint is all you get."'
-- ARB_194: 'There is nothing the presence of which will prevent you from defeating\nhim; thus it can''t hurt to fetch everything you possibly can.'
-- ARB_195: 'I''m afraid I don''t understand.'
-- ARB_196: 'Your hand passes through it as though it weren''t there.'
-- ARB_197: 'You strike the mirror a resounding blow, whereupon it shatters into a\nmyriad tiny fragments.'
-- ARB_198: 'You have taken the vase and hurled it delicately to the ground.'
-- ARB_199: 'You prod the nearest dwarf, who wakes up grumpily, takes one look at\nyou, curses, and grabs for his axe.'
-- ARB_200: 'Is this acceptable?'
-- ARB_201: 'This adventure is already over.  To start a new adventure, or to\nresume an earlier adventure, please run a fresh copy of the program.'
-- ARB_202: 'The ogre doesn''t appear to be hungry.'
-- ARB_203: 'The ogre, who despite his bulk is quite agile, easily dodges your\nattack.  He seems almost amused by your puny effort.'
-- ARB_204: 'The ogre, distracted by your rush, is struck by the knife.  With a\nblood-curdling yell he turns and bounds after the dwarves, who flee\nin panic.  You are left alone in the room.'
-- ARB_205: 'The ogre, distracted by your rush, is struck by the knife.  With a\nblood-curdling yell he turns and bounds after the dwarf, who flees\nin panic.  You are left alone in the room.'
-- ARB_206: 'The bird flies about agitatedly for a moment.'
-- ARB_207: 'The bird flies agitatedly about the cage.'
-- ARB_208: 'The bird flies about agitatedly for a moment, then disappears through\nthe crack.  It reappears shortly, carrying in its beak a jade\nnecklace, which it drops at your feet.'
-- ARB_209: 'The urn is now lit.'
-- ARB_210: 'The urn is now dark.'
-- ARB_211: 'You empty the bottle into the urn, which promptly ejects the water\nwith uncanny accuracy, squirting you directly between the eyes.'
-- ARB_212: 'Your bottle is now empty and the urn is full of oil.'
-- ARB_213: 'The urn is already full of oil.'
-- ARB_214: 'There''s no way to get the oil out of the urn.'
-- ARB_215: 'The urn is far too firmly embedded for your puny strength to budge it.'
-- ARB_216: 'As you rub the urn, there is a flash of light and a genie appears.\nHis aspect is stern as he advises: "One who wouldst traffic in\nprecious stones must first learn to recognize the signals thereof."\nHe wrests the urn from the stone, leaving a small cavity.  Turning to\nface you again, he fixes you with a steely eye and intones: "Caution!"\nGenie and urn vanish in a cloud of amber smoke.  The smoke condenses\nto form a rare amber gemstone, resting in the cavity in the rock.'
-- ARB_217: 'I suppose you collect doughnut holes, too?'
-- ARB_218: 'The gem fits easily into the cavity.'
-- ARB_219: 'The persian rug stiffens and rises a foot or so off the ground.'
-- ARB_220: 'The persian rug draped over your shoulder seems to wriggle for a\nmoment, but then subsides.'
-- ARB_221: 'The persian rug settles gently to the ground.'
-- ARB_222: 'The rug hovers stubbornly where it is.'
-- ARB_223: 'The rug does not appear inclined to cooperate.'
-- ARB_224: 'If you mean to use the persian rug, it does not appear inclined to\ncooperate.'
-- ARB_225: 'Though you flap your arms furiously, it is to no avail.'
-- ARB_226: 'You board the persian rug, which promptly whisks you across the chasm.\nYou have time for a fleeting glimpse of a two thousand foot drop to a\nmighty river; then you find yourself on the other side.'
-- ARB_227: 'The rug ferries you back across the chasm.'
-- ARB_228: 'All is silent.'
-- ARB_229: 'The stream is gurgling placidly.'
-- ARB_230: 'The wind whistles coldly past your ears.'
-- ARB_231: 'The stream splashes loudly into the pool.'
-- ARB_232: 'You are unable to make anything of the splashing noise.'
-- ARB_233: 'You can hear the murmuring of the beanstalks and the snoring of the\ndwarves.'
-- ARB_234: 'A loud hissing emanates from the snake pit.'
-- ARB_235: 'The air is filled with a dull rumbling sound.'
-- ARB_236: 'The roar is quite loud here.'
-- ARB_237: 'The roaring is so loud that it drowns out all other sound.'
-- ARB_238: 'The bird eyes you suspiciously and flutters away.  A moment later you\nfeel something wet land on your head, but upon looking up you can see\nno sign of the culprit.'
-- ARB_239: 'There are only a few drops--not enough to carry.'
-- ARB_240: 'Your head buzzes strangely for a moment.'
-- ARB_241: '(Uh, y''know, that wasn''t very bright.)'
-- ARB_242: 'It''s a pity you took so long about it.'
-- ARB_243: 'Are you wondering what to do here?'
-- ARB_244: 'This section is quite advanced.  Find the cave first.'
-- ARB_245: 'Upstream or downstream?'
-- ARB_246: 'Wizards are not to be disturbed by such as you.'
-- ARB_247: 'Would you like to be shown out of the forest?'
-- ARB_248: 'Go east ten times.  If that doesn''t get you out, then go south, then\nwest twice, then south.'
-- ARB_249: 'The waters are crashing loudly against the shore.'
-- ARB_250: '%d of them throw knives at you!'
-- ARB_251: '%d of them get you!'
-- ARB_252: 'One of them gets you!'
-- ARB_253: 'None of them hits you!'
-- ARB_254: 'Sorry, I don''t know the word "%s".'
-- ARB_255: 'What do you want to do with the %L?'
-- ARB_256: 'I see no %L here.'
-- ARB_257: '%C what?'
-- ARB_258: 'Okay, "%s".'
-- ARB_259: 'You have garnered %d out of a possible %d points, using %d turn%S.'
-- ARB_260: 'I can suspend your Adventure for you so that you can resume later, but\nit will cost you 5 points.'
-- ARB_261: 'I am prepared to give you a hint, but it will cost you %d point%S.'
-- ARB_262: 'You scored %d out of a possible %d, using %d turn%S.'
-- ARB_263: 'To achieve the next higher rating, you need %d more point%S.'
-- ARB_264: 'To achieve the next higher rating would be a neat trick!\nCongratulations!!'
-- ARB_265: 'You just went off my scale!!'
-- ARB_266: 'To resume your Adventure, start a new game and then say "RESUME".'
-- ARB_267: 'Table space used:\n%d of %d words of messages   %d of %d travel options\n%d of %d vocabulary words    %d of %d locations\n%d of %d objects             %d of %d action verbs\n%d of %d "random" messages   %d of %d "class" messages\n%d of %d hints               %d of %d turn threshholds'
-- ARB_268: 'To resume an earlier Adventure, you must abandon the current one.'
-- ARB_269: 'I''m sorry, but that Adventure was begun using Version%d.%d of the\nprogram, and this is Version%d.%d.  You must find the other version\nin order to resume that Adventure.'
-- ARB_270: 'A dark fog creeps in to surround you.  From somewhere in the fog you\nhear a stern voice.  "This Adventure has been tampered with!  You have\nbeen dabbling in magic, knowing not the havoc you might cause thereby.\nLeave at once, before you do irrevocable harm!"  The fog thickens,\nuntil at last you can see nothing at all.  Your vision then clears,\nand you find yourself back in The Real World.'
-- ARB_271: 'Guess again.'
-- ARB_272: 'You''re missing only one other treasure.  Do you need help finding it?'
-- ARB_273: 'Once you''ve found all the other treasures, it is no longer possible to\nlocate the one you''re now missing.'
-- ARB_274: 'Sorry, but the path twisted and turned so much that I can''t figure\nout which way to go to get back.'
-- ARB_275: 'Open Adventure is an author-approved open-source release of\nVersion 2.5 with, as yet, no gameplay changes.\nVersion 2.5 was essentially the same as Version II; the cave and the\nhazards therein are unchanged, and top score is still 430 points.\nThere are a few more hints, especially for some of the more obscure\npuzzles.  There are a few minor bugfixes and cosmetic changes.  You\ncan now save a game and resume it at once (formerly you had to wait a\nwhile first), but it now costs you a few points each time you save the\ngame.  Saved games are now stored in much smaller files than before.'
-- ARB_276: 'You don''t have to say "go" every time; just specify a direction or, if\nit''s nearby, name the place to which you wish to move.'
-- ARB_277: !!null
+- CAVE_NEARBY: 'Somewhere nearby is Colossal Cave, where others have found fortunes in\ntreasure and gold, though it is rumored that some who enter are never\nseen again.  Magic is said to work in the cave.  I will be your eyes\nand hands.  Direct me with commands of 1 or 2 words.  I should warn\nyou that I look at only the first five letters of each word, so you''ll\nhave to enter "northeast" as "ne" to distinguish it from "north".\nYou can type "help" for some general hints.  For information on how\nto end your adventure, scoring, etc., type "info".\n\t\t\t      - - -\nThis program was originally developed by Willie Crowther.  Most of the\nfeatures of the current program were added by Don Woods.  Contact Don\nif you have any questions, comments, etc.'
+- DWARF_BLOCK: 'A little dwarf with a big knife blocks your way.'
+- DWARF_RAN: 'A little dwarf just walked around a corner, saw you, threw a little\naxe at you which missed, cursed, and ran away.'
+- DWARF_PACK: 'There are %d threatening little dwarves in the room with you.'
+- DWARF_SINGLE: 'There is a threatening little dwarf in the room with you!'
+- KNIFE_THROWN: 'One sharp nasty knife is thrown at you!'
+- SAYS_PLUGH: 'A hollow voice says "PLUGH".'
+- GETS_YOU: 'It gets you!'
+- MISSES_YOU: 'It misses!'
+- UNSURE_FACING: 'I am unsure how you are facing.  Use compass points or nearby objects.'
+- NO_INOUT_HERE: 'I don''t know in from out here.  Use compass points or name something\nin the general direction you want to go.'
+- CANT_APPLY: 'I don''t know how to apply that word here.'
+- YOUR_WELCOME: 'You''re quite welcome.'
+- AM_GAME: 'I''m game.  Would you care to explain how?'
+- NO_MORE_DETAIL: 'Sorry, but I am not allowed to give more detail.  I will repeat the\nlong description of your location.'
+- PITCH_DARK: 'It is now pitch dark.  If you proceed you will likely fall into a pit.'
+- W_IS_WEST: 'If you prefer, simply type w rather than west.'
+- BIRD_QUERY: 'Are you trying to catch the bird?'
+- SKITTISH_BIRD: 'Something about you seems to be frightening the bird.  Perhaps you\nmight figure out what it is.'
+- SNAKE_QUERY: 'Are you trying to somehow deal with the snake?'
+- SNAKE_HINT: 'You can''t kill the snake, or drive it away, or avoid it, or anything\nlike that.  There is a way to get by, but you don''t have the necessary\nresources right now.'
+- REALLY_QUIT: 'Do you really want to quit now?'
+- PIT_FALL: 'You fell into a pit and broke every bone in your body!'
+- ALREADY_CARRYING: 'You are already carrying it!'
+- YOU_JOKING: 'You can''t be serious!'
+- BIRD_EVADES: 'The bird seemed unafraid at first, but as you approach it becomes\ndisturbed and you cannot catch it.'
+- CANNOT_CARRY: 'You can catch the bird, but you cannot carry it.'
+- NOTHING_LOCKED: 'There is nothing here with a lock!'
+- ARENT_CARRYING: 'You aren''t carrying it!'
+- BIRD_ATTACKS: 'The little bird attacks the green snake, and in an astounding flurry\ndrives the snake away.'
+- NO_KEYS: 'You have no keys!'
+- NO_LOCK: 'It has no lock.'
+- NOT_LOCKABLE: 'I don''t know how to lock or unlock such a thing.'
+- ALREADY_LOCKED: 'It was already locked.'
+- GRATE_LOCKED: 'The grate is now locked.'
+- GRATE_UNLOCKED: 'The grate is now unlocked.'
+- ALREADY_UNLOCKED: 'It was already unlocked.'
+- URN_EMPTY: 'The urn is empty and will not light.'
+- LAMP_ON: 'Your lamp is now on.'
+- LAMP_OFF: 'Your lamp is now off.'
+- BEAR_BLOCKS: 'There is no way to get past the bear to unlock the chain, which is\nprobably just as well.'
+- NOTHING_HAPPENS: 'Nothing happens.'
+- WHERE_QUERY: 'Where?'
+- NO_TARGET: 'There is nothing here to attack.'
+- BIRD_DEAD: 'The little bird is now dead.  Its body disappears.'
+- SNAKE_WARNING: 'Attacking the snake both doesn''t work and is very dangerous.'
+- KILLED_DWARF: 'You killed a little dwarf.'
+- DWARF_DODGES: 'You attack a little dwarf, but he dodges out of the way.'
+- BARE_HANDS_QUERY: 'With what?  Your bare hands?'
+- WORN_OUT: 'Good try, but that is an old worn-out magic word.'
+- VOCAB_DESCRIPTION: 'I know of places, actions, and things.  Most of my vocabulary\ndescribes places and is used to move you there.  To move, try words\nlike forest, building, downstream, enter, east, west, north, south,\nup, or down.  I know about a few special objects, like a black rod\nhidden in the cave.  These objects can be manipulated using some of\nthe action words that I know.  Usually you will need to give both the\nobject and action words (in either order), but sometimes I can infer\nthe object from the verb alone.  Some objects also imply verbs; in\nparticular, "inventory" implies "take inventory", which causes me to\ngive you a list of what you''re carrying.  Some objects have unexpected\neffects; the effects are not always desirable!  Usually people having\ntrouble moving just need to try a few more words.  Usually people\ntrying unsuccessfully to manipulate an object are attempting something\nbeyond their (or my!) capabilities and should try a completely\ndifferent tack.  One point often confusing to beginners is that, when\nthere are several ways to go in a certain direction (e.g., if there\nare several holes in a wall), choosing that direction in effect\nchooses one of the ways at random; often, though, by specifying the\nplace you want to reach you can guarantee choosing the right path.\nAlso, to speed the game you can sometimes move long distances with a\nsingle word.  For example, "building" usually gets you to the building\nfrom anywhere above ground except when lost in the forest.  Also, note\nthat cave passages and forest paths turn a lot, so leaving one place\nheading north doesn''t guarantee entering the next from the south.\nHowever (another important point), except when you''ve used a "long\ndistance" word such as "building", there is always a way to go back\nwhere you just came from unless I warn you to the contrary, even\nthough the direction that takes you back might not be the reverse of\nwhat got you here.  Good luck, and have fun!'
+- BAD_DIRECTION: 'There is no way to go that direction.'
+- TWO_WORDS: 'Please stick to 1- and 2-word commands.'
+- OK_MAN: 'OK'
+- CANNOT_UNLOCK: 'You can''t unlock the keys.'
+- FUTILE_CRAWL: 'You have crawled around in some little holes and wound up back in the\nmain passage.'
+- FOLLOW_STREAM: 'I don''t know where the cave is, but hereabouts no stream can run on\nthe surface for long.  I would try the stream.'
+- NEED_DETAIL: 'I need more detailed instructions to do that.'
+- NEreplace: 'I can only tell you what you see as you move about and manipulate\nthings.  I cannot tell you where remote things are.'
+- OGRE_SNARL: 'The ogre snarls and shoves you back.'
+- HUH_MAN: 'Huh?'
+- ENTRY_QUERY: 'Are you trying to get into the cave?'
+- HARD_GRATE: 'The grate is very solid and has a hardened steel lock.  You cannot\nenter without a key, and there are no keys nearby.  I would recommend\nlooking elsewhere for the keys.'
+- FOREST_LOOK: 'The trees of the forest are large hardwood oak and maple, with an\noccasional grove of pine or spruce.  There is quite a bit of under-\ngrowth, largely birch and ash saplings plus nondescript bushes of\nvarious sorts.  This time of year visibility is quite restricted by\nall the leaves, but travel is quite easy if you detour around the\nspruce and berry bushes.'
+- WELCOME_YOU: 'Welcome to Adventure!!  Would you like instructions?'
+- DIGGING_FUTILE: 'Digging without a shovel is quite impractical.  Even with a shovel\nprogress is unlikely.'
+- REQUIRES_DYNAMITE: 'Blasting requires dynamite.'
+- IM_CONFUSED: 'I''m as confused as you are.'
+- EXPLAIN_MIST: 'Mist is a white vapor, usually water, seen from time to time in\ncaverns.  It can be found anywhere but is frequently a sign of a deep\npit leading down to water.'
+- FEET_WET: 'Your feet are now wet.'
+- LOST_APPETITE: 'I think I just lost my appetite.'
+- THANKS_DELICIOUS: 'Thank you, it was delicious!'
+- STREAM_WATER: 'You have taken a drink from the stream.  The water tastes strongly of\nminerals, but is not unpleasant.  It is extremely cold.'
+- BOTTLE_EMPTY: 'The bottle of water is now empty.'
+- RUB_NOGO: 'Rubbing the electric lamp is not particularly rewarding.  Anyway,\nnothing exciting happens.'
+- PECULIAR_NOTHING: 'Peculiar.  Nothing unexpected happens.'
+- GROUND_WET: 'Your bottle is empty and the ground is wet.'
+- CANT_POUR: 'You can''t pour that.'
+- WATCH_IT: 'Watch it!'
+- WHICH_WAY: 'Which way?'
+- REINCARNATE_QUERY: 'Oh dear, you seem to have gotten yourself killed.  I might be able to\nhelp you out, but I''ve never really done this before.  Do you want me\nto try to reincarnate you?'
+- DONT_BLAME: 'All right.  But don''t blame me if something goes wr......\n                    --- POOF!! ---\nYou are engulfed in a cloud of orange smoke.  Coughing and gasping,\nyou emerge from the smoke and find....'
+- CLUMSY_OAF: 'You clumsy oaf, you''ve done it again!  I don''t know how long I can\nkeep this up.  Do you want me to try reincarnating you again?'
+- ORANGE_SMOKE: 'Okay, now where did I put my orange smoke?....  >POOF!<\nEverything disappears in a dense cloud of orange smoke.'
+- SMOKE_OUT: 'Now you''ve really done it!  I''m out of orange smoke!  You don''t expect\nme to do a decent reincarnation without any orange smoke, do you?'
+- DOIT_YOURSELF: 'Okay, if you''re so smart, do it yourself!  I''m leaving!'
+- GETS_YOU7: !!null
+- GETS_YOU8: !!null
+- GETS_YOU9: !!null
+- MISSES_YOU0: '>>> messages 81 thru 90 are reserved for "obituaries". <<<'
+- FORGOT_PATH: 'Sorry, but I no longer seem to remember how it was you got here.'
+- CARRY_LIMIT: 'You can''t carry anything more.  You''ll have to drop something first.'
+- GRATE_NOWAY: 'You can''t go through a locked steel grate!'
+- YOU_HAVEIT: 'I believe what you want is right here with you.'
+- DONT_FIT: 'You don''t fit through a two-inch slit!'
+- CROSS_BRIDGE: 'I respectfully suggest you go across the bridge instead of jumping.'
+- NO_CROSS: 'There is no way across the fissure.'
+- NO_CARRY: 'You''re not carrying anything.'
+- NOW_HOLDING: 'You are currently holding the following:'
+- BIRD_PINING: 'It''s not hungry (it''s merely pinin'' for the fjords).  Besides, you\nhave no bird seed.'
+- BIRD_DEVOURED: 'The snake has now devoured your bird.'
+- NOTHING_EDIBLE: 'There''s nothing here it wants to eat (except perhaps you).'
+- REALLY_MAD: 'You fool, dwarves eat only coal!  Now you''ve made him *REALLY* mad!!'
+- NO_CONTAINER: 'You have nothing in which to carry it.'
+- BOTTLE_FULL: 'Your bottle is already full.'
+- NO_LIQUID: 'There is nothing here with which to fill the bottle.'
+- BOTTLED_WATER: 'Your bottle is now full of water.'
+- BOTTLED_OIL: 'Your bottle is now full of oil.'
+- CANT_FILL: 'You can''t fill that.'
+- RIDICULOUS_ATTEMPT: 'Don''t be ridiculous!'
+- RUSTY_DOOR: 'The door is extremely rusty and refuses to open.'
+- SHAKING_LEAVES: 'The plant indignantly shakes the oil off its leaves and asks, "Water?"'
+- RUSTED_HINGES: 'The hinges are quite thoroughly rusted now and won''t budge.'
+- OILED_NINGES: 'The oil has freed up the hinges so that the door will now move,\nalthough it requires some effort.'
+- DEEP_ROOTS: 'The plant has exceptionally deep roots and cannot be pulled free.'
+- KNIVES_VANISH: 'The dwarves'' knives vanish as they strike the walls of the cave.'
+- MUST_DROP: 'Something you''re carrying won''t fit through the tunnel with you.\nYou''d best take inventory and drop something.'
+- CLAM_BLOCKER: 'You can''t fit this five-foot clam through that little passage!'
+- OYSTER_BLOCKER: 'You can''t fit this five-foot oyster through that little passage!'
+- DROP_CLAM: 'I advise you to put down the clam before opening it.  >STRAIN!<'
+- DROP_OYSTER: 'I advise you to put down the oyster before opening it.  >WRENCH!<'
+- CLAM_OPENER: 'You don''t have anything strong enough to open the clam.'
+- OYSTER_OPENER: 'You don''t have anything strong enough to open the oyster.'
+- PEARL_FALLS: 'A glistening pearl falls out of the clam and rolls away.  Goodness,\nthis must really be an oyster.  (I never was very good at identifying\nbivalves.)  Whatever it is, it has now snapped shut again.'
+- OYSTER_OPENS: 'The oyster creaks open, revealing nothing but oyster inside.  It\npromptly snaps shut again.'
+- WAY_BLOCKED: 'You have crawled around in some little holes and found your way\nblocked by a recent cave-in.  You are now back in the main passage.'
+- PIRATE_RUSTLES: 'There are faint rustling noises from the darkness behind you.'
+- PIRATE_POUNCES: 'Out from the shadows behind you pounces a bearded pirate!  "Har, har,"\nhe chortles, "I''ll just take all this booty and hide it away with me\nchest deep in the maze!"  He snatches your treasure and vanishes into\nthe gloom.'
+- CAVE_CLOSING: 'A sepulchral voice reverberating through the cave, says, "Cave closing\nsoon.  All adventurers exit immediately through main office."'
+- EXIT_CLOSED: 'A mysterious recorded voice groans into life and announces:\n   "This exit is closed.  Please leave via main office."'
+- DEATH_CLOSING: 'It looks as though you''re dead.  Well, seeing as how it''s so close to\nclosing time anyway, I think we''ll just call it a day.'
+- CAVE_CLOSED: 'The sepulchral voice intones, "The cave is now closed."  As the echoes\nfade, there is a blinding flash of light (and a small puff of orange\nsmoke). . . .    As your eyes refocus, you look around and find...'
+- VICTORY_MESSAGE: 'There is a loud explosion, and a twenty-foot hole appears in the far\nwall, burying the dwarves in the rubble.  You march through the hole\nand find yourself in the main office, where a cheering band of\nfriendly elves carry the conquering adventurer off into the sunset.'
+- DEFEAT_MESSAGE: 'There is a loud explosion, and a twenty-foot hole appears in the far\nwall, burying the snakes in the rubble.  A river of molten lava pours\nin through the hole, destroying everything in its path, including you!'
+- SPLATTER_MESSAGE: 'There is a loud explosion, and you are suddenly splashed across the\nwalls of the room.'
+- DWARVES_AWAKEN: 'The resulting ruckus has awakened the dwarves.  There are now several\nthreatening little dwarves in the room with you!  Most of them throw\nknives at you!  All of them get you!'
+- UNHAPPY_BIRD: 'Oh, leave the poor unhappy bird alone.'
+- NEEDED_NEreplace: 'I daresay whatever you want is around here somewhere.'
+- STOP_UNKNOWN: 'I don''t know the word "stop".  Use "quit" if you want to give up.'
+- NOT_CONNECTED: 'You can''t get there from here.'
+- TAME_BEAR: 'You are being followed by a very large, tame bear.'
+- QUICK_START: 'For a summary of the most recent changes to the game, say "news".\nIf you want to end your adventure early, say "quit".  To suspend your\nadventure such that you can continue later, say "suspend" (or "pause"\nor "save").  To see how well you''re doing, say "score".  To get full\ncredit for a treasure, you must have left it safely in the building,\nthough you get partial credit just for locating it.  You lose points\nfor getting killed, or for quitting, though the former costs you more.\nThere are also points based on how much (if any) of the cave you''ve\nmanaged to explore; in particular, there is a large bonus just for\ngetting in (to distinguish the beginners from the rest of the pack),\nand there are other ways to determine whether you''ve been through some\nof the more harrowing sections.  If you think you''ve found all the\ntreasures, just keep exploring for a while.  If nothing interesting\nhappens, you haven''t found them all yet.  If something interesting\n*DOES* happen (incidentally, there *ARE* ways to hasten things along),\nit means you''re getting a bonus and have an opportunity to garner many\nmore points in the Master''s section.  I may occasionally offer hints\nif you seem to be having trouble.  If I do, I''ll warn you in advance\nhow much it will affect your score to accept the hints.  Finally, to\nsave time, you may specify "brief", which tells me never to repeat the\nfull description of a place unless you explicitly ask me to.'
+- WITHOUT_SUSPENDS: 'Now let''s see you do it without suspending in mid-Adventure.'
+- FILL_INVALID: 'There is nothing here with which to fill it.'
+- SHATTER_VASE: 'The sudden change in temperature has delicately shattered the vase.'
+- BEYOND_POWER: 'It is beyond your power to do that.'
+- NOT_KNOWHOW: 'I don''t know how.'
+- TOO_FAR: 'It is too far up for you to reach.'
+- DWARF_SMOKE: 'You killed a little dwarf.  The body vanishes in a cloud of greasy\nblack smoke.'
+- SHELL_IMPERVIOUS: 'The shell is very strong and is impervious to attack.'
+- START_OVER: 'What''s the matter, can''t you read?  Now you''d best start over.'
+- DRAGON_SCALES: 'The axe bounces harmlessly off the dragon''s thick scales.'
+- NASTY_DRAGON: 'The dragon looks rather nasty.  You''d best not try to get by.'
+- BIRD_BURNT: 'The little bird attacks the green dragon, and in an astounding flurry\ngets burnt to a cinder.  The ashes blow away.'
+- ON_WHAT: 'On what?'
+- BRIEF_CONFIRM: 'Okay, from now on I''ll only describe a place in full the first time\nyou come to it.  To get the full description, say "look".'
+- ROCKY_TROLL: 'Trolls are close relatives with the rocks and have skin as tough as\nthat of a rhinoceros.  The troll fends off your blows effortlessly.'
+- TROLL_RETURNS: 'The troll deftly catches the axe, examines it carefully, and tosses it\nback, declaring, "Good workmanship, but it''s not valuable enough."'
+- TROLL_SATISFIED: 'The troll catches your treasure and scurries away out of sight.'
+- TROLL_BLOCKS: 'The troll refuses to let you cross.'
+- BRIDGE_GONE: 'There is no longer any way across the chasm.'
+- BRIDGE_COLLAPSE: 'Just as you reach the other side, the bridge buckles beneath the\nweight of the bear, which was still following you around.  You\nscrabble desperately for support, but as the bridge collapses you\nstumble back and fall into the chasm.'
+- TROLL_SCAMPERS: 'The bear lumbers toward the troll, who lets out a startled shriek and\nscurries away.  The bear soon gives up the pursuit and wanders back.'
+- AXE_LOST: 'The axe misses and lands near the bear where you can''t get at it.'
+- BEAR_HANDS: 'With what?  Your bare hands?  Against *HIS* bear hands??'
+- BEAR_CONFUSED: 'The bear is confused; he only wants to be your friend.'
+- ALREADY_DEAD: 'For crying out loud, the poor thing is already dead!'
+- BEAR_TAMED: 'The bear eagerly wolfs down your food, after which he seems to calm\ndown considerably and even becomes rather friendly.'
+- BEAR_CHAINED: 'The bear is still chained to the wall.'
+- STILL_LOCKED: 'The chain is still locked.'
+- CHAIN_UNLOCKED: 'The chain is now unlocked.'
+- CHAIN_LOCKED: 'The chain is now locked.'
+- NO_LOCKSITE: 'There is nothing here to which the chain can be locked.'
+- NO_EDIBLES: 'There is nothing here to eat.'
+- WANT_HINT: 'Do you want the hint?'
+- MAZE_HELP: 'Do you need help getting out of the maze?'
+- DROP_THINGS: 'You can make the passages look less alike by dropping things.'
+- PLOVER_QUERY: 'Are you trying to explore beyond the plover room?'
+- EXPLORE_HINT: 'There is a way to explore that region without having to worry about\nfalling into a pit.  None of the objects available is immediately\nuseful in discovering the secret.'
+- HELP_LEAVING: 'Do you need help getting out of here?'
+- NOGO_WEST: 'Don''t go west.'
+- TROLL_VICES: 'Gluttony is not one of the troll''s vices.  Avarice, however, is.'
+- LAMP_DIM: 'Your lamp is getting dim.  You''d best start wrapping this up, unless\nyou can find some fresh batteries.  I seem to recall there''s a vending\nmachine in the maze.  Bring some coins with you.'
+- LAMP_OUT: 'Your lamp has run out of power.'
+- PLEASE_ANSWER: 'Please answer the question.'
+- PIRATE_SPOTTED: 'There are faint rustling noises from the darkness behind you.  As you\nturn toward them, the beam of your lamp falls across a bearded pirate.\nHe is carrying a large chest.  "Shiver me timbers!" he cries, "I''ve\nbeen spotted!  I''d best hie meself off to the maze to hide me chest!"\nWith that, he vanishes into the gloom.'
+- GET_BATTERIES: 'Your lamp is getting dim.  You''d best go back for those batteries.'
+- REPLACE_BATTERIES: 'Your lamp is getting dim.  I''m taking the liberty of replacing the\nbatteries.'
+- MISSING_BATTERIES: 'Your lamp is getting dim, and you''re out of spare batteries.  You''d\nbest start wrapping this up.'
+- REMOVE_MESSAGE: 'You sift your fingers through the dust, but succeed only in\nobliterating the cryptic message.'
+- OGRE_QUERY: 'Do you need help dealing with the ogre?'
+- CLUE_QUERY: 'Hmmm, this looks like a clue, which means it''ll cost you 10 points to\nread it.  Should I go ahead and read it anyway?'
+- WAYOUT_CLUE: 'It says, "There is a way out of this place.  Do you need any more\ninformation to escape?  Sorry, but this initial hint is all you get."'
+- OGRE_CLUE: 'There is nothing the presence of which will prevent you from defeating\nhim; thus it can''t hurt to fetch everything you possibly can.'
+- DONT_UNDERSTAND: 'I''m afraid I don''t understand.'
+- HAND_PASSTHROUGH: 'Your hand passes through it as though it weren''t there.'
+- BREAK_MIRROR: 'You strike the mirror a resounding blow, whereupon it shatters into a\nmyriad tiny fragments.'
+- BREAK_VASE: 'You have taken the vase and hurled it delicately to the ground.'
+- PROD_DWARF: 'You prod the nearest dwarf, who wakes up grumpily, takes one look at\nyou, curses, and grabs for his axe.'
+- THIS_ACCEPTABLE: 'Is this acceptable?'
+- ALREADY_OVER: 'This adventure is already over.  To start a new adventure, or to\nresume an earlier adventure, please run a fresh copy of the program.'
+- OGRE_FULL: 'The ogre doesn''t appear to be hungry.'
+- OGRE_DOFGE: 'The ogre, who despite his bulk is quite agile, easily dodges your\nattack.  He seems almost amused by your puny effort.'
+- OGRE_PANIC1: 'The ogre, distracted by your rush, is struck by the knife.  With a\nblood-curdling yell he turns and bounds after the dwarves, who flee\nin panic.  You are left alone in the room.'
+- OGRE_PANIC2: 'The ogre, distracted by your rush, is struck by the knife.  With a\nblood-curdling yell he turns and bounds after the dwarf, who flees\nin panic.  You are left alone in the room.'
+- FREE_FLY: 'The bird flies about agitatedly for a moment.'
+- CAGE_FLY: 'The bird flies agitatedly about the cage.'
+- NECKLACE_FLY: 'The bird flies about agitatedly for a moment, then disappears through\nthe crack.  It reappears shortly, carrying in its beak a jade\nnecklace, which it drops at your feet.'
+- URN_LIT: 'The urn is now lit.'
+- URN_DARK: 'The urn is now dark.'
+- WATER_URN: 'You empty the bottle into the urn, which promptly ejects the water\nwith uncanny accuracy, squirting you directly between the eyes.'
+- OIL_URN: 'Your bottle is now empty and the urn is full of oil.'
+- FULL_URN: 'The urn is already full of oil.'
+- URN_NOPOUR: 'There''s no way to get the oil out of the urn.'
+- URN_NOBUDGE: 'The urn is far too firmly embedded for your puny strength to budge it.'
+- URN_GENIES: 'As you rub the urn, there is a flash of light and a genie appears.\nHis aspect is stern as he advises: "One who wouldst traffic in\nprecious stones must first learn to recognize the signals thereof."\nHe wrests the urn from the stone, leaving a small cavity.  Turning to\nface you again, he fixes you with a steely eye and intones: "Caution!"\nGenie and urn vanish in a cloud of amber smoke.  The smoke condenses\nto form a rare amber gemstone, resting in the cavity in the rock.'
+- DOUGHNUT_HOLES: 'I suppose you collect doughnut holes, too?'
+- GEM_FITS: 'The gem fits easily into the cavity.'
+- RUG_RISES: 'The persian rug stiffens and rises a foot or so off the ground.'
+- RUG_WIGGLES: 'The persian rug draped over your shoulder seems to wriggle for a\nmoment, but then subsides.'
+- RUG_SETTLES: 'The persian rug settles gently to the ground.'
+- RUG_HOVERS: 'The rug hovers stubbornly where it is.'
+- RUG_NOTHING1: 'The rug does not appear inclined to cooperate.'
+- RUG_NOTHING2: 'If you mean to use the persian rug, it does not appear inclined to\ncooperate.'
+- FLAP_ARMS: 'Though you flap your arms furiously, it is to no avail.'
+- RUG_GOES: 'You board the persian rug, which promptly whisks you across the chasm.\nYou have time for a fleeting glimpse of a two thousand foot drop to a\nmighty river; then you find yourself on the other side.'
+- RUG_RETURNS: 'The rug ferries you back across the chasm.'
+- ALL_SILENT: 'All is silent.'
+- STREAM_GURGLES: 'The stream is gurgling placidly.'
+- WIND_WHISTLES: 'The wind whistles coldly past your ears.'
+- STREAM_SPLASHES: 'The stream splashes loudly into the pool.'
+- NO_MEANING: 'You are unable to make anything of the splashing noise.'
+- MURMURING_SNORING: 'You can hear the murmuring of the beanstalks and the snoring of the\ndwarves.'
+- SNAKES_HISSING: 'A loud hissing emanates from the snake pit.'
+- DULL_RUMBLING: 'The air is filled with a dull rumbling sound.'
+- LOUD_ROAR: 'The roar is quite loud here.'
+- TOTAL_ROAR: 'The roaring is so loud that it drowns out all other sound.'
+- BIRD_CRAP: 'The bird eyes you suspiciously and flutters away.  A moment later you\nfeel something wet land on your head, but upon looking up you can see\nno sign of the culprit.'
+- FEW_DROPS: 'There are only a few drops--not enough to carry.'
+- HEAD_BUZZES: 'Your head buzzes strangely for a moment.'
+- NOT_BRIGHT: '(Uh, y''know, that wasn''t very bright.)'
+- TOOK_LONG: 'It''s a pity you took so long about it.'
+- WONDERING_QUERY: 'Are you wondering what to do here?'
+- ADVANCED_SECTION: 'This section is quite advanced.  Find the cave first.'
+- UPSTREAM_DOWNSTREAM: 'Upstream or downstream?'
+- WIZARDS_NODISTURB: 'Wizards are not to be disturbed by such as you.'
+- FOREST_QUERY: 'Would you like to be shown out of the forest?'
+- GO_EAST: 'Go east ten times.  If that doesn''t get you out, then go south, then\nwest twice, then south.'
+- WATERS_CRASHING: 'The waters are crashing loudly against the shore.'
+- THROWN_KNIVES: '%d of them throw knives at you!'
+- MULTIPLE_HITS: '%d of them get you!'
+- ONE_HIT: 'One of them gets you!'
+- NONE_HIT: 'None of them hits you!'
+- DONT_KNOW: 'Sorry, I don''t know the word "%s".'
+- WHAT_DO: 'What do you want to do with the %L?'
+- NO_SEE: 'I see no %L here.'
+- DO_WHAT: '%C what?'
+- OKEY_DOKEY: 'Okay, "%s".'
+- GARNERED_POINTS: 'You have garnered %d out of a possible %d points, using %d turn%S.'
+- SUSPEND_WARNING: 'I can suspend your Adventure for you so that you can resume later, but\nit will cost you 5 points.'
+- HINT_COST: 'I am prepared to give you a hint, but it will cost you %d point%S.'
+- TOTAL_SCORE: 'You scored %d out of a possible %d, using %d turn%S.'
+- NEXT_HIGHER: 'To achieve the next higher rating, you need %d more point%S.'
+- NO_HIGHER: 'To achieve the next higher rating would be a neat trick!\nCongratulations!!'
+- OFF_SCALE: 'You just went off my scale!!'
+- RESUME_HELP: 'To resume your Adventure, start a new game and then say "RESUME".'
+- TABLE_SPACE: 'Table space used:\n%d of %d words of messages   %d of %d travel options\n%d of %d vocabulary words    %d of %d locations\n%d of %d objects             %d of %d action verbs\n%d of %d "random" messages   %d of %d "class" messages\n%d of %d hints               %d of %d turn threshholds'
+- RESUME_ABANDON: 'To resume an earlier Adventure, you must abandon the current one.'
+- VERSION_SKEW: 'I''m sorry, but that Adventure was begun using Version%d.%d of the\nprogram, and this is Version%d.%d.  You must find the other version\nin order to resume that Adventure.'
+- DAVE_TAMPERING: 'A dark fog creeps in to surround you.  From somewhere in the fog you\nhear a stern voice.  "This Adventure has been tampered with!  You have\nbeen dabbling in magic, knowing not the havoc you might cause thereby.\nLeave at once, before you do irrevocable harm!"  The fog thickens,\nuntil at last you can see nothing at all.  Your vision then clears,\nand you find yourself back in The Real World.'
+- GUESS_AGAIN: 'Guess again.'
+- MISSING_ONE: 'You''re missing only one other treasure.  Do you need help finding it?'
+- NO_LOCATE: 'Once you''ve found all the other treasures, it is no longer possible to\nlocate the one you''re now missing.'
+- TWIST_TURN: 'Sorry, but the path twisted and turned so much that I can''t figure\nout which way to go to get back.'
+- ADVENTURE_NEWS: 'Open Adventure is an author-approved open-source release of\nVersion 2.5 with, as yet, no gameplay changes.\nVersion 2.5 was essentially the same as Version II; the cave and the\nhazards therein are unchanged, and top score is still 430 points.\nThere are a few more hints, especially for some of the more obscure\npuzzles.  There are a few minor bugfixes and cosmetic changes.  You\ncan now save a game and resume it at once (formerly you had to wait a\nwhile first), but it now costs you a few points each time you save the\ngame.  Saved games are now stored in much smaller files than before.'
+- GO_UNNEEDED: 'You don''t have to say "go" every time; just specify a direction or, if\nit''s nearby, name the place to which you wish to move.'
+- CANNOT_CARRY7: !!null
   
 class_messages: !!omap
 - CLS_0: !!null
diff --git a/main.c b/main.c
index 49dcbfe12402d34d93976e4492ecbb1ca66f906b..26f1f705303f8b6f58d1fca8b1ad06d0979e44a2 100644 (file)
--- a/main.c
+++ b/main.c
@@ -126,7 +126,7 @@ int main(int argc, char *argv[])
 
     /*  Start-up, dwarf stuff */
     game.zzword=RNDVOC(3,0);
-    game.novice=YES(stdin, ARB_65,ARB_1,ARB_0);
+    game.novice=YES(stdin, WELCOME_YOU,CAVE_NEARBY,ARB_0);
     game.newloc=1;
     game.loc=1;
     game.limit=330;
@@ -244,11 +244,11 @@ static void checkhints(FILE *cmdin)
     
                /* Fall through to hint display */
                game.hintlc[hint]=0;
-               if (!YES(cmdin,HINTS[hint][3],ARB_0,ARB_54))
+               if (!YES(cmdin,HINTS[hint][3],ARB_0,OK_MAN))
                    return;
                SETPRM(1,HINTS[hint][2],HINTS[hint][2]);
-               RSPEAK(ARB_261);
-               game.hinted[hint]=YES(cmdin,ARB_175,HINTS[hint][4],ARB_54);
+               RSPEAK(HINT_COST);
+               game.hinted[hint]=YES(cmdin,WANT_HINT,HINTS[hint][4],OK_MAN);
                if (game.hinted[hint] && game.limit > 30)
                    game.limit=game.limit+30*HINTS[hint][2];
            }
@@ -286,7 +286,7 @@ bool spotted_by_pirate(int i)
     }
     /* Force chest placement before player finds last treasure */
     if (game.tally == 1 && snarfed == 0 && game.place[CHEST] == 0 && HERE(LAMP) && game.prop[LAMP] == 1) {
-       RSPEAK(ARB_186);
+       RSPEAK(PIRATE_SPOTTED);
        movechest = true;
     }
     /* Do things in this order (chest move before robbery) so chest is listed
@@ -301,10 +301,10 @@ bool spotted_by_pirate(int i)
        /* You might get a hint of the pirate's presence even if the 
         * chest doesn't move... */
        if (game.odloc[PIRATE] != game.dloc[PIRATE] && PCT(20))
-           RSPEAK(ARB_127);
+           RSPEAK(PIRATE_RUSTLES);
     }
     if (robplayer) {
-       RSPEAK(ARB_128);
+       RSPEAK(PIRATE_POUNCES);
        for (int j=MINTRS; j<=MAXTRS; j++) {
            if (!(j == PYRAM && (game.loc == PLAC[PYRAM] || game.loc == PLAC[EMRALD]))) {
                if (AT(j) && game.fixed[j] == 0)
@@ -364,7 +364,7 @@ static bool dwarfmove(void)
                game.dloc[i]=DALTLC;
            game.odloc[i]=game.dloc[i];
        }
-       RSPEAK(ARB_3);
+       RSPEAK(DWARF_RAN);
        DROP(AXE,game.loc);
        return true;
     }
@@ -431,13 +431,13 @@ static bool dwarfmove(void)
     if (game.dtotal == 0)
        return true;
     SETPRM(1,game.dtotal,0);
-    RSPEAK(ARB_4+1/game.dtotal);       /* FIXME: Arithmetic on message number */
+    RSPEAK(DWARF_PACK+1/game.dtotal);  /* FIXME: Arithmetic on message number */
     if (attack == 0)
        return true;
     if (game.dflag == 2)game.dflag=3;
     SETPRM(1,attack,0);
     int k=6;
-    if (attack > 1)k=ARB_250;
+    if (attack > 1)k=THROWN_KNIVES;
     RSPEAK(k);
     SETPRM(1,stick,0);
     RSPEAK(k+1+2/(1+stick));   /* FIXME: Arithmetic on message number */
@@ -474,11 +474,11 @@ static void croak(FILE *cmdin)
     if (game.closng) {
        /*  He died during closing time.  No resurrection.  Tally up a
         *  death and exit. */
-       RSPEAK(ARB_131);
+       RSPEAK(DEATH_CLOSING);
        score(0);
     } else {
        /* FIXME: Arithmetic on message numbers */
-       if (!YES(cmdin,ARB_79+game.numdie*2,ARB_80+game.numdie*2,ARB_54))
+       if (!YES(cmdin,WATCH_IT+game.numdie*2,WHICH_WAY+game.numdie*2,OK_MAN))
            score(0);
        if (game.numdie == MAXDIE)
            score(0);
@@ -524,8 +524,8 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
        game.oldlc2=game.oldloc;
        game.oldloc=game.loc;
        k2=0;
-       if (motion == game.loc)k2=ARB_91;
-       if (CNDBIT(game.loc,NOBACK))k2=ARB_274;
+       if (motion == game.loc)k2=FORGOT_PATH;
+       if (CNDBIT(game.loc,NOBACK))k2=TWIST_TURN;
        if (k2 == 0) {
            for (;;) {
                scratchloc=MOD((labs(TRAVEL[kk])/1000),1000);
@@ -540,7 +540,7 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
                    }
                    kk=k2;
                    if (kk == 0) {
-                       RSPEAK(ARB_140);
+                       RSPEAK(NOT_CONNECTED);
                        return true;
                    }
                }
@@ -558,7 +558,7 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
        /*  Look.  Can't give more detail.  Pretend it wasn't dark
         *  (though it may "now" be dark) so he won't fall into a
         *  pit while staring into the gloom. */
-       if (game.detail < 3)RSPEAK(ARB_15);
+       if (game.detail < 3)RSPEAK(NO_MORE_DETAIL);
        ++game.detail;
        game.wzdark=false;
        game.abbrev[game.loc]=0;
@@ -566,7 +566,7 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
     }
     else if (motion == CAVE) {
        /*  Cave.  Different messages depending on whether above ground. */
-       RSPEAK((OUTSID(game.loc) && game.loc != 8) ? ARB_57 : ARB_58);
+       RSPEAK((OUTSID(game.loc) && game.loc != 8) ? FOLLOW_STREAM : NEED_DETAIL);
        return true;
     }
     else {
@@ -583,14 +583,14 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
        if (TRAVEL[kk] < 0) {
            /*  Non-applicable motion.  Various messages depending on
             *  word given. */
-           int spk=ARB_12;
-           if (motion >= 43 && motion <= 50)spk=ARB_52;
-           if (motion == 29 || motion == 30)spk=ARB_52;
-           if (motion == 7 || motion == 36 || motion == 37)spk=ARB_10;
-           if (motion == 11 || motion == 19)spk=ARB_11;
-           if (verb == FIND || verb == INVENT)spk=ARB_59;
-           if (motion == 62 || motion == 65)spk=ARB_42;
-           if (motion == 17)spk=ARB_80;
+           int spk=CANT_APPLY;
+           if (motion >= 43 && motion <= 50)spk=BAD_DIRECTION;
+           if (motion == 29 || motion == 30)spk=BAD_DIRECTION;
+           if (motion == 7 || motion == 36 || motion == 37)spk=UNSURE_FACING;
+           if (motion == 11 || motion == 19)spk=NO_INOUT_HERE;
+           if (verb == FIND || verb == INVENT)spk=NEreplace;
+           if (motion == 62 || motion == 65)spk=NOTHING_HAPPENS;
+           if (motion == 17)spk=WHICH_WAY;
            RSPEAK(spk);
            return true;
        }
@@ -644,7 +644,7 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
                if (game.holdng == 0 || (game.holdng == 1 && TOTING(EMRALD)))
                    return true;
                game.newloc=game.loc;
-               RSPEAK(ARB_117);
+               RSPEAK(MUST_DROP);
                return true;
            case 2:
                /*  Travel 302.  Plover transport.  Drop the emerald (only use
@@ -681,7 +681,7 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
                    game.newloc=PLAC[TROLL]+FIXD[TROLL]-game.loc;
                    if (game.prop[TROLL] == 0)game.prop[TROLL]=1;
                    if (!TOTING(BEAR)) return true;
-                   RSPEAK(ARB_162);
+                   RSPEAK(BRIDGE_COLLAPSE);
                    game.prop[CHASM]=1;
                    game.prop[TROLL]=2;
                    DROP(BEAR,game.newloc);
@@ -756,7 +756,7 @@ static bool closecheck(void)
        game.fixed[CHAIN]=0;
        game.prop[AXE]=0;
        game.fixed[AXE]=0;
-       RSPEAK(ARB_129);
+       RSPEAK(CAVE_CLOSING);
        game.clock1= -1;
        game.closng=true;
        return true;
@@ -807,7 +807,7 @@ static bool closecheck(void)
                DSTROY(i);
        }
 
-       RSPEAK(ARB_132);
+       RSPEAK(CAVE_CLOSED);
        game.closed=true;
        return true;
     }
@@ -830,7 +830,7 @@ static void lampcheck(void)
      *  if desired. */
     if (game.limit<=30 && HERE(BATTER) && game.prop[BATTER]==0 && HERE(LAMP))
     {
-       RSPEAK(ARB_188);
+       RSPEAK(REPLACE_BATTERIES);
        game.prop[BATTER]=1;
        if (TOTING(BATTER))
            DROP(BATTER,game.loc);
@@ -840,13 +840,13 @@ static void lampcheck(void)
        game.limit= -1;
        game.prop[LAMP]=0;
        if (HERE(LAMP))
-           RSPEAK(ARB_184);
+           RSPEAK(LAMP_OUT);
     } else if (game.limit <= 30) {
        if (!game.lmwarn && HERE(LAMP)) {
            game.lmwarn=true;
-           int spk=ARB_187;
-           if (game.place[BATTER] == 0)spk=ARB_183;
-           if (game.prop[BATTER] == 1)spk=ARB_189;
+           int spk=GET_BATTERIES;
+           if (game.place[BATTER] == 0)spk=LAMP_DIM;
+           if (game.prop[BATTER] == 1)spk=MISSING_BATTERIES;
            RSPEAK(spk);
        }
     }
@@ -909,7 +909,7 @@ static bool do_command(FILE *cmdin)
 
     /*  Can't leave cave once it's closing (except by main office). */
     if (OUTSID(game.newloc) && game.newloc != 0 && game.closng) {
-       RSPEAK(ARB_130);
+       RSPEAK(EXIT_CLOSED);
        game.newloc=game.loc;
        if (!game.panic)game.clock2=15;
        game.panic=true;
@@ -923,7 +923,7 @@ static bool do_command(FILE *cmdin)
        for (i=1; i<=NDWARVES-1; i++) {
            if (game.odloc[i] == game.newloc && game.dseen[i]) {
                game.newloc=game.loc;
-               RSPEAK(ARB_2);
+               RSPEAK(DWARF_BLOCK);
                break;
            }
        }
@@ -945,14 +945,14 @@ static bool do_command(FILE *cmdin)
            /*  The easiest way to get killed is to fall into a pit in
             *  pitch darkness. */
            if (game.wzdark && PCT(35)) {
-               RSPEAK(ARB_23);
+               RSPEAK(PIT_FALL);
                game.oldlc2 = game.loc;
                croak(cmdin);
                continue;       /* back to top of main interpreter loop */
            }
            msg=arbitrary_messages[16];
        }
-       if (TOTING(BEAR))RSPEAK(ARB_141);
+       if (TOTING(BEAR))RSPEAK(TAME_BEAR);
        newspeak(msg);
        if (FORCED(game.loc)) {
            if (playermove(cmdin, verb, 1))
@@ -960,7 +960,7 @@ static bool do_command(FILE *cmdin)
            else
                continue;       /* back to top of main interpreter loop */
        }
-       if (game.loc == 33 && PCT(25) && !game.closng)RSPEAK(ARB_7);
+       if (game.loc == 33 && PCT(25) && !game.closng)RSPEAK(SAYS_PLUGH);
 
        listobjects();
 
@@ -1044,11 +1044,11 @@ static bool do_command(FILE *cmdin)
        if (WD1 == MAKEWD(23051920)) {
            ++game.iwest;
            if (game.iwest == 10)
-               RSPEAK(ARB_17);
+               RSPEAK(W_IS_WEST);
        }
        if (WD1 == MAKEWD( 715) && WD2 != 0) {
            if (++igo == 10)
-               RSPEAK(ARB_276);
+               RSPEAK(GO_UNNEEDED);
        }
     L2630:
        i=VOCAB(WD1,-1);
@@ -1057,7 +1057,7 @@ static bool do_command(FILE *cmdin)
            if (fallback_handler(rawbuf))
                return true;
            SETPRM(1,WD1,WD1X);
-           RSPEAK(ARB_254);
+           RSPEAK(DONT_KNOW);
            goto L2600;
        }
        KMOD=MOD(i,1000);
@@ -1097,12 +1097,12 @@ static bool do_command(FILE *cmdin)
            /*  Random intransitive verbs come here.  Clear obj just in case
             *  (see attack()). */
            SETPRM(1,WD1,WD1X);
-           RSPEAK(ARB_257);
+           RSPEAK(DO_WHAT);
            obj=0;
            goto L2600;
        case GO_DWARFWAKE:
            /*  Oh dear, he's disturbed the dwarves. */
-           RSPEAK(ARB_136);
+           RSPEAK(DWARVES_AWAKEN);
            score(0);
            return true;
        default:
diff --git a/misc.c b/misc.c
index 7a86b9f2a1682d104d64819d9e62dd899b51b953..445740b7270fc1d4366fa0abf46ecd30336ca91d 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -196,7 +196,7 @@ bool GETIN(FILE *input,
            (junk > 0);
        if (GETTXT(true,true,true) <= 0)
            return true;
-       RSPEAK(ARB_53);
+       RSPEAK(TWO_WORDS);
     }
 }
 
@@ -217,7 +217,7 @@ long YES(FILE *input, vocab_t x, vocab_t y, vocab_t z)
            RSPEAK(z);
            return false;
        }
-       RSPEAK(ARB_185);
+       RSPEAK(PLEASE_ANSWER);
     }
 }
 
index 6cb48ae058c557bdb5b22e86faa540beefeb9242..19e65e1274a0f5b9ddb0db29febe9e7dbf90dc94 100644 (file)
@@ -39,16 +39,16 @@ int saveresume(FILE *input, bool resume)
        /*  Suspend.  Offer to save things in a file, but charging
         *  some points (so can't win by using saved games to retry
         *  battles or to start over after learning zzword). */
-       RSPEAK(ARB_260);
-       if (!YES(input,ARB_200,ARB_54,ARB_54)) return GO_CLEAROBJ;
+       RSPEAK(SUSPEND_WARNING);
+       if (!YES(input,THIS_ACCEPTABLE,OK_MAN,OK_MAN)) return GO_CLEAROBJ;
        game.saved=game.saved+5;
     }
     else
     {
        /*  Resume.  Read a suspended game back from a file. */
        if (game.loc != 1 || game.abbrev[1] != 1) {
-           RSPEAK(ARB_268);
-           if (!YES(input,ARB_200,ARB_54,ARB_54)) return GO_CLEAROBJ;
+           RSPEAK(RESUME_ABANDON);
+           if (!YES(input,THIS_ACCEPTABLE,OK_MAN,OK_MAN)) return GO_CLEAROBJ;
        }
     }
 
@@ -74,7 +74,7 @@ int saveresume(FILE *input, bool resume)
        save.bivalve = OBJTXT[OYSTER];
        IGNORE(fwrite(&save, sizeof(struct save_t), 1, fp));
        fclose(fp);
-       RSPEAK(ARB_266);
+       RSPEAK(RESUME_HELP);
        exit(0);
     } else {
        IGNORE(fread(&save, sizeof(struct save_t), 1, fp));
@@ -82,7 +82,7 @@ int saveresume(FILE *input, bool resume)
        if (save.version != VRSION) {
            SETPRM(1,k/10,MOD(k,10));
            SETPRM(3,VRSION/10,MOD(VRSION,10));
-           RSPEAK(ARB_269);
+           RSPEAK(VERSION_SKEW);
        } else {
            memcpy(&game, &save.game, sizeof(struct game_t));
            OBJSND[BIRD] = save.bird;
diff --git a/score.c b/score.c
index bf47792a5125ab833fdd9deb6c2cf42c00598e9f..3f8d6a291d6e52af44895143814ead7aebc3f4ed 100644 (file)
--- a/score.c
+++ b/score.c
@@ -96,29 +96,29 @@ void score(long mode)
     if(mode < 0) {
        SETPRM(1,score,mxscor);
        SETPRM(3,game.turns,game.turns);
-       RSPEAK(ARB_259);
+       RSPEAK(GARNERED_POINTS);
        return;
     }
 
     /* that should be good enough.  Let's tell him all about it. */
     if(score+game.trnluz+1 >= mxscor && game.trnluz != 0)
-       RSPEAK(ARB_242);
+       RSPEAK(TOOK_LONG);
     if(score+game.saved+1 >= mxscor && game.saved != 0)
-       RSPEAK(ARB_143);
+       RSPEAK(WITHOUT_SUSPENDS);
     SETPRM(1,score,mxscor);
     SETPRM(3,game.turns,game.turns);
-    RSPEAK(ARB_262);
+    RSPEAK(TOTAL_SCORE);
     for (i=1; i<=CLSSES; i++) {
        if(CVAL[i] >= score) {
            newspeak(class_messages[i]);
            i=CVAL[i]+1-score;
            SETPRM(1,i,i);
-           RSPEAK(ARB_263);
+           RSPEAK(NEXT_HIGHER);
            exit(0);
        }
     }
-    RSPEAK(ARB_265);
-    RSPEAK(ARB_264);
+    RSPEAK(OFF_SCALE);
+    RSPEAK(NO_HIGHER);
     exit(0);
 
 }