SPK is no longer global.
[open-adventure.git] / actions.c
index 20a577c480fd9bd4ea840eefa6da9ac24976a0fa..de5f83004f828ee86d0d422819c06b536e3ca2d3 100644 (file)
--- a/actions.c
+++ b/actions.c
@@ -3,6 +3,11 @@
 #include "advent.h"
 #include "database.h"
 
+/* Limit visibility of ugly globals.  Eventually these should go away. */
+extern long K, WD1, WD1X, WD2, WD2X;
+
+static long SPK;       /* This should go away too */
+
 /*
  * Action handlers.  Eventually we'll do lookup through a method table
  * that calls these.  Absolutely nothing like the original FORTRAN.
@@ -38,7 +43,11 @@ static int attack(FILE *input, long verb, long obj)
     }
     if (obj == BIRD) {
        SPK=137;
-       if (game.closed) {RSPEAK(SPK); return 2012;}
+       if (game.closed)
+       {
+           RSPEAK(SPK);
+           return 2012;
+       }
        DSTROY(BIRD);
        game.prop[BIRD]=0;
        SPK=45;
@@ -70,7 +79,8 @@ static int attack(FILE *input, long verb, long obj)
            }
        }
        SPK=SPK+1+1/k;
-       {RSPEAK(SPK); return 2012;}
+       RSPEAK(SPK);
+       return 2012;
     }
     if (obj == BEAR)SPK=165+(game.prop[BEAR]+1)/2;
     if (obj != DRAGON || game.prop[DRAGON] != 0) {RSPEAK(SPK); return 2012;}
@@ -109,13 +119,19 @@ static int bigwords(long foo)
     SPK=42;
     if (game.foobar != 1-k) {
        if (game.foobar != 0)SPK=151;
-       {RSPEAK(SPK); return 2012;}
+       RSPEAK(SPK);
+       return 2012;
     } else {
        game.foobar=k;
-       if (k != 4) return(2009);
+       if (k != 4) {
+           RSPEAK(54);
+           return 2012;
+       }
        game.foobar=0;
-       if (game.place[EGGS] == PLAC[EGGS] || (TOTING(EGGS) && game.loc == PLAC[EGGS])) 
-           {RSPEAK(SPK); return 2012;}
+       if (game.place[EGGS]==PLAC[EGGS] || (TOTING(EGGS) && game.loc==PLAC[EGGS])) {
+           RSPEAK(SPK);
+           return 2012;
+       }
        /*  Bring back troll if we steal the eggs back from him before
         *  crossing. */
        if (game.place[EGGS]==0 && game.place[TROLL]==0 && game.prop[TROLL]==0)
@@ -132,27 +148,34 @@ static int bigwords(long foo)
 static int bivalve(token_t verb, token_t obj)
 /* Clam/oyster actions */
 {
-    int k=0;
+    int spk, k=0;
     if (obj == OYSTER)k=1;
-    SPK=124+k;
-    if (TOTING(obj))SPK=120+k;
-    if (!TOTING(TRIDNT))SPK=122+k;
-    if (verb == LOCK)SPK=61;
-    if (SPK != 124)
-       {RSPEAK(SPK); return 2012;}
-    DSTROY(CLAM);
-    DROP(OYSTER,game.loc);
-    DROP(PEARL,105);
-    {RSPEAK(SPK); return 2012;}
+    spk=124+k;
+    if (TOTING(obj))spk=120+k;
+    if (!TOTING(TRIDNT))spk=122+k;
+    if (verb == LOCK)spk=61;
+    if (spk == 124) {
+       DSTROY(CLAM);
+       DROP(OYSTER,game.loc);
+       DROP(PEARL,105);
+    }
+    RSPEAK(spk);
+    return 2012;
 }
 
 static int blast(void)
 /*  Blast.  No effect unless you've got dynamite, which is a neat trick! */
 {
-    if (game.prop[ROD2] < 0 || !game.closed) {RSPEAK(SPK); return 2012;}
+    if (game.prop[ROD2] < 0 || !game.closed)
+    {
+       RSPEAK(67);
+       return 2012;
+    }
     game.bonus=133;
-    if (game.loc == 115)game.bonus=134;
-    if (HERE(ROD2))game.bonus=135;
+    if (game.loc == 115)
+       game.bonus=134;
+    if (HERE(ROD2))
+       game.bonus=135;
     RSPEAK(game.bonus);
     score(0);
 }
@@ -160,27 +183,30 @@ static int blast(void)
 static int vbreak(token_t obj)
 /*  Break.  Only works for mirror in repository and, of course, the vase. */
 {
+    /* FIXME: defaults from ACTSPK */
     if (obj == MIRROR)SPK=148;
     if (obj == VASE && game.prop[VASE] == 0) {
        SPK=198;
        if (TOTING(VASE))DROP(VASE,game.loc);
        game.prop[VASE]=2;
        game.fixed[VASE]= -1;
-       {RSPEAK(SPK); return 2012;}
     } else {
-       if (obj != MIRROR || !game.closed) {RSPEAK(SPK); return 2012;}
-       SPK=197;
-       return(18999);
+       if (obj == MIRROR && game.closed) {
+           RSPEAK(197);
+           return(190000);
+       }
     }
+    RSPEAK(SPK);
+    return 2012;
 }
 
 static int brief(void)
 /*  Brief.  Intransitive only.  Suppress long descriptions after first time. */
 {
-    SPK=156;
     game.abbnum=10000;
     game.detail=3;
-    {RSPEAK(SPK); return 2012;}
+    RSPEAK(156);
+    return 2012;
 }
 
 static int carry(long obj)
@@ -188,6 +214,7 @@ static int carry(long obj)
  *  take one without the other).  Liquids also special, since they depend on
  *  status of bottle.  Also various side effects, etc. */
 {
+    int spk;
     if (obj == INTRANSITIVE) {
        /*  Carry, no object given yet.  OK if only one object present. */
        if(game.atloc[game.loc] == 0 ||
@@ -197,45 +224,54 @@ static int carry(long obj)
        obj=game.atloc[game.loc];
     }
 
-    if (TOTING(obj)) {RSPEAK(SPK); return 2012;}
-    SPK=25;
-    if (obj == PLANT && game.prop[PLANT] <= 0)SPK=115;
-    if (obj == BEAR && game.prop[BEAR] == 1)SPK=169;
-    if (obj == CHAIN && game.prop[BEAR] != 0)SPK=170;
-    if (obj == URN)SPK=215;
-    if (obj == CAVITY)SPK=217;
-    if (obj == BLOOD)SPK=239;
-    if (obj == RUG && game.prop[RUG] == 2)SPK=222;
-    if (obj == SIGN)SPK=196;
+    if (TOTING(obj)) {RSPEAK(24); return 2012;}
+    spk=25;
+    if (obj == PLANT && game.prop[PLANT] <= 0)spk=115;
+    if (obj == BEAR && game.prop[BEAR] == 1)spk=169;
+    if (obj == CHAIN && game.prop[BEAR] != 0)spk=170;
+    if (obj == URN)spk=215;
+    if (obj == CAVITY)spk=217;
+    if (obj == BLOOD)spk=239;
+    if (obj == RUG && game.prop[RUG] == 2)spk=222;
+    if (obj == SIGN)spk=196;
     if (obj == MESSAG) {
-       SPK=190;
+       spk=190;
+       return 2012;
        DSTROY(MESSAG);
     }
-    if (game.fixed[obj] != 0)
-       {RSPEAK(SPK); return 2012;}
+    if (game.fixed[obj] != 0) {
+       RSPEAK(spk);
+       return 2012;
+    }
     if (obj == WATER || obj == OIL) {
        if (!HERE(BOTTLE) || LIQUID() != obj) {
            if (TOTING(BOTTLE) && game.prop[BOTTLE] == 1)
                return(fill(BOTTLE));
-           if (game.prop[BOTTLE] != 1)SPK=105;
-           if (!TOTING(BOTTLE))SPK=104;
-           {RSPEAK(SPK); return 2012;}
+           if (game.prop[BOTTLE] != 1)spk=105;
+           if (!TOTING(BOTTLE))spk=104;
+           RSPEAK(spk);
+           return 2012;
        }
        obj = BOTTLE;
     }
 
-    SPK=92;
-    if (game.holdng >= INVLIMIT)
-       {RSPEAK(SPK); return 2012;}
-    if (obj == BIRD && game.prop[BIRD] != 1 && -1-game.prop[BIRD] != 1) {
+    spk=92;
+    if (game.holdng >= INVLIMIT) {
+       RSPEAK(spk);
+       return 2012;
+    }
+    else if (obj == BIRD && game.prop[BIRD] != 1 && -1-game.prop[BIRD] != 1) {
        if (game.prop[BIRD] == 2) {
-           SPK=238;
            DSTROY(BIRD);
-           {RSPEAK(SPK); return 2012;}
+           RSPEAK(238);
+           return 2012;
+       }
+       if (!TOTING(CAGE))spk=27;
+       if (TOTING(ROD))spk=26;
+       if (spk/2 == 13) {
+           RSPEAK(spk);
+           return 2012;
        }
-       if (!TOTING(CAGE))SPK=27;
-       if (TOTING(ROD))SPK=26;
-       if (SPK/2 == 13) {RSPEAK(SPK); return 2012;}
        game.prop[BIRD]=1;
     }
     if ((obj==BIRD || obj==CAGE) && (game.prop[BIRD]==1 || -1-game.prop[BIRD]==1))
@@ -243,36 +279,38 @@ static int carry(long obj)
     CARRY(obj,game.loc);
     if (obj == BOTTLE && LIQUID() != 0)
        game.place[LIQUID()] = -1;
-    if (!GSTONE(obj) || game.prop[obj] == 0)
-       return(2009);
-    game.prop[obj]=0;
-    game.prop[CAVITY]=1;
-    return(2009);
+    if (GSTONE(obj) && game.prop[obj] != 0) {
+       game.prop[obj]=0;
+       game.prop[CAVITY]=1;
+    }
+    RSPEAK(54);
+    return(2012);
 }
 
 static int chain(token_t verb)
 /* Do something to the bear's chain */
 {
+    int spk;
     if (verb != LOCK) {
-       SPK=171;
-       if (game.prop[BEAR] == 0)SPK=41;
-       if (game.prop[CHAIN] == 0)SPK=37;
-       if (SPK != 171) {RSPEAK(SPK); return 2012;}
+       spk=171;
+       if (game.prop[BEAR] == 0)spk=41;
+       if (game.prop[CHAIN] == 0)spk=37;
+       if (spk != 171) {RSPEAK(spk); return 2012;}
        game.prop[CHAIN]=0;
        game.fixed[CHAIN]=0;
        if (game.prop[BEAR] != 3)game.prop[BEAR]=2;
        game.fixed[BEAR]=2-game.prop[BEAR];
-       {RSPEAK(SPK); return 2012;}
     } else {
-       SPK=172;
-       if (game.prop[CHAIN] != 0)SPK=34;
-       if (game.loc != PLAC[CHAIN])SPK=173;
-       if (SPK != 172) {RSPEAK(SPK); return 2012;}
+       spk=172;
+       if (game.prop[CHAIN] != 0)spk=34;
+       if (game.loc != PLAC[CHAIN])spk=173;
+       if (spk != 172) {RSPEAK(spk); return 2012;}
        game.prop[CHAIN]=2;
        if (TOTING(CHAIN))DROP(CHAIN,game.loc);
        game.fixed[CHAIN]= -1;
-       {RSPEAK(SPK); return 2012;}
     }
+    RSPEAK(spk);
+    return 2012;
 }
 
 static int discard(long obj, bool just_do_it)
@@ -357,13 +395,15 @@ static int drink(token_t obj)
        game.prop[BOTTLE]=1;
        game.place[WATER]=0;
        SPK=74;
-       {RSPEAK(SPK); return 2012;}
+       RSPEAK(SPK);
+       return 2012;
     } else {
        DSTROY(BLOOD);
        game.prop[DRAGON]=2;
        OBJSND[BIRD]=OBJSND[BIRD]+3;
        SPK=240;
-       {RSPEAK(SPK); return 2012;}
+       RSPEAK(SPK);
+       return 2012;
     }
 }
 
@@ -376,18 +416,17 @@ static int eat(token_t obj)
            return(8000);
        DSTROY(FOOD);
        SPK=72;
-       {RSPEAK(SPK); return 2012;}
     } else {
        if (obj == FOOD) {
            DSTROY(FOOD);
            SPK=72;
-           {RSPEAK(SPK); return 2012;}
        }
        if (obj == BIRD || obj == SNAKE || obj == CLAM || obj == OYSTER || obj ==
           DWARF || obj == DRAGON || obj == TROLL || obj == BEAR || obj ==
           OGRE)SPK=71;
-       {RSPEAK(SPK); return 2012;}
     }
+    RSPEAK(SPK);
+    return 2012;
 }
 
 static int extinguish(int obj)
@@ -396,24 +435,26 @@ static int extinguish(int obj)
     if (obj == INTRANSITIVE) {
        if (HERE(LAMP) && game.prop[LAMP] == 1)obj=LAMP;
        if (HERE(URN) && game.prop[URN] == 2)obj=obj*NOBJECTS+URN;
-       if (obj == 0 || obj > NOBJECTS) return(8000);
+       if (obj == INTRANSITIVE || obj == 0 || obj > NOBJECTS) return(8000);
     }
 
     if (obj == URN) {
        game.prop[URN]=game.prop[URN]/2;
        SPK=210;
-       {RSPEAK(SPK); return 2012;}
+       RSPEAK(SPK);
+       return 2012;
     }
-    if (obj == LAMP) {
+    else if (obj == LAMP) {
        game.prop[LAMP]=0;
        RSPEAK(40);
        if (DARK(game.loc))
            RSPEAK(16);
        return(2012);
     }
-    if (obj == DRAGON || obj == VOLCAN)
+    else if (obj == DRAGON || obj == VOLCAN)
        SPK=146;
-    {RSPEAK(SPK); return 2012;}
+    RSPEAK(SPK);
+    return 2012;
 }
 
 static int feed(long obj)
@@ -421,51 +462,62 @@ static int feed(long obj)
  *  mad.  Bear, special. */
 {
     if (obj == BIRD) {
-       SPK=100;
-       {RSPEAK(SPK); return 2012;}
+       RSPEAK(100);
+       return 2012;
     }
 
     if (!(obj != SNAKE && obj != DRAGON && obj != TROLL)) {
-       SPK=102;
-       if (obj == DRAGON && game.prop[DRAGON] != 0)SPK=110;
-       if (obj == TROLL)SPK=182;
+       int spk=102;
+       if (obj == DRAGON && game.prop[DRAGON] != 0)spk=110;
+       if (obj == TROLL)spk=182;
        if (obj != SNAKE || game.closed || !HERE(BIRD))
-           {RSPEAK(SPK); return 2012;}
-       SPK=101;
+       {
+           RSPEAK(spk);
+           return 2012;
+       }
        DSTROY(BIRD);
        game.prop[BIRD]=0;
-       {RSPEAK(SPK); return 2012;}
+       RSPEAK(101);
+       return 2012;
     }
 
     if (obj == DWARF) {
        if (!HERE(FOOD))
-           {RSPEAK(SPK); return 2012;}
-       SPK=103;
+       {
+           RSPEAK(SPK);        /* FIXME: Defaults from ACTSPK */
+           return 2012;
+       }
        game.dflag=game.dflag+2;
-       {RSPEAK(SPK); return 2012;}
+       RSPEAK(103);
+       return 2012;
     }
 
     if (obj == BEAR) {
        if (game.prop[BEAR] == 0)SPK=102;
        if (game.prop[BEAR] == 3)SPK=110;
-       if (!HERE(FOOD))
-           {RSPEAK(SPK); return 2012;}
+       if (!HERE(FOOD)) {
+           RSPEAK(SPK);
+           return 2012;
+       }
        DSTROY(FOOD);
        game.prop[BEAR]=1;
        game.fixed[AXE]=0;
        game.prop[AXE]=0;
        SPK=168;
-       {RSPEAK(SPK); return 2012;}
+       RSPEAK(SPK);
+       return 2012;
     }
 
     if (obj == OGRE) {
        if (HERE(FOOD))
            SPK=202;
-       {RSPEAK(SPK); return 2012;}
+       RSPEAK(SPK);
+       return 2012;
     }
 
     SPK=14;
-    {RSPEAK(SPK); return 2012;}
+    RSPEAK(SPK);
+    return 2012;
 }
 
 int fill(long obj)
@@ -476,8 +528,10 @@ int fill(long obj)
     if (obj == VASE) {
        SPK=29;
        if (LIQLOC(game.loc) == 0)SPK=144;
-       if (LIQLOC(game.loc) == 0 || !TOTING(VASE))
-           {RSPEAK(SPK); return 2012;}
+       if (LIQLOC(game.loc) == 0 || !TOTING(VASE)) {
+           RSPEAK(SPK);
+           return 2012;
+       }
        RSPEAK(145);
        game.prop[VASE]=2;
        game.fixed[VASE]= -1;
@@ -494,11 +548,14 @@ int fill(long obj)
        game.prop[BOTTLE]=1;
        if (k == OIL)game.prop[URN]=1;
        SPK=211+game.prop[URN];
-       {RSPEAK(SPK); return 2012;}
+       RSPEAK(SPK);
+       return 2012;
     }
 
-    if (obj != 0 && obj != BOTTLE)
-       {RSPEAK(SPK); return 2012;}
+    if (obj != 0 && obj != BOTTLE) {
+       RSPEAK(SPK);
+       return 2012;
+    }
     if (obj == 0 && !HERE(BOTTLE))
        return(8000);
     SPK=107;
@@ -516,7 +573,8 @@ int fill(long obj)
        game.place[k]= -1;
     if (k == OIL)
        SPK=108;
-    {RSPEAK(SPK); return 2012;}
+    RSPEAK(SPK);
+    return 2012;
 }
 
 static int find(token_t obj)
@@ -529,7 +587,8 @@ static int find(token_t obj)
        SPK=94;
     if (game.closed)SPK=138;
     if (TOTING(obj))SPK=24;
-    {RSPEAK(SPK); return 2012;}
+    RSPEAK(SPK);
+    return 2012;
 }
 
 static int fly(token_t obj)
@@ -538,11 +597,17 @@ static int fly(token_t obj)
     if (obj == INTRANSITIVE) {
        if (game.prop[RUG] != 2)SPK=224;
        if (!HERE(RUG))SPK=225;
-       if (SPK/2 == 112) {RSPEAK(SPK); return 2012;}
+       if (SPK/2 == 112) {
+           RSPEAK(SPK);
+           return 2012;
+       }
        obj=RUG;
     }
 
-    if (obj != RUG) {RSPEAK(SPK); return 2012;}
+    if (obj != RUG) {
+       RSPEAK(SPK);
+       return 2012;
+    }
     SPK=223;
     if (game.prop[RUG] != 2) {RSPEAK(SPK); return 2012;}
     game.oldlc2=game.oldloc;
@@ -562,7 +627,8 @@ static int inven(token_t obj)
     for (i=1; i<=NOBJECTS; i++) {
        if (i == BEAR || !TOTING(i))
            continue;
-       if (SPK == 98)RSPEAK(99);
+       if (SPK == 98)
+           RSPEAK(99);
        game.blklin=false;
        PSPEAK(i,-1);
        game.blklin=true;
@@ -570,32 +636,43 @@ static int inven(token_t obj)
     }
     if (TOTING(BEAR))
        SPK=141;
-    {RSPEAK(SPK); return 2012;}
+    RSPEAK(SPK);
+    return 2012;
 }
 
 int light(token_t obj)
 /*  Light.  Applicable only to lamp and urn. */
 {
+    int spk;
     if (obj == INTRANSITIVE) {
        if (HERE(LAMP) && game.prop[LAMP] == 0 && game.limit >= 0)obj=LAMP;
        if (HERE(URN) && game.prop[URN] == 1)obj=obj*NOBJECTS+URN;
-       if (obj == 0 || obj > NOBJECTS) return(8000);
+       if (obj == INTRANSITIVE || obj == 0 || obj > NOBJECTS) return(8000);
     }
 
     if (obj == URN) {
-       SPK=38;
+       spk=38;
        if (game.prop[URN] == 0)
-           {RSPEAK(SPK); return 2012;}
-       SPK=209;
+           {RSPEAK(spk); return 2012;}
+       spk=209;
        game.prop[URN]=2;
-       {RSPEAK(SPK); return 2012;}
+       RSPEAK(spk);
+       return 2012;
     } else {
-       if (obj != LAMP) {RSPEAK(SPK); return 2012;}
-       SPK=184;
-       if (game.limit < 0) {RSPEAK(SPK); return 2012;}
+       if (obj != LAMP)
+       {
+           RSPEAK(spk);
+           return 2012;
+       }
+       spk=184;
+       if (game.limit < 0) {
+           RSPEAK(spk);
+           return 2012;
+       }
        game.prop[LAMP]=1;
        RSPEAK(39);
-       if (game.wzdark) return(2000);
+       if (game.wzdark)
+           return(2000);
        return(2012);
     }   
 }
@@ -604,23 +681,24 @@ static int listen(void)
 /*  Listen.  Intransitive only.  Print stuff based on objsnd/locsnd. */
 {
     int i, k;
-    SPK=228;
+    int spk=228;
     k=LOCSND[game.loc];
     if (k != 0) {
        RSPEAK(labs(k));
        if (k < 0) return(2012);
-       SPK=0;
+       spk=0;
     }
     SETPRM(1,game.zzword,0);
     for (i=1; i<=NOBJECTS; i++) {
        if (!HERE(i) || OBJSND[i] == 0 || game.prop[i] < 0)
            continue;
        PSPEAK(i,OBJSND[i]+game.prop[i]);
-       SPK=0;
+       spk=0;
        if (i == BIRD && OBJSND[i]+game.prop[i] == 8)
            DSTROY(BIRD);
     }
-    {RSPEAK(SPK); return 2012;}
+    RSPEAK(spk);
+    return 2012;
 }
 
 static int lock(token_t verb, token_t obj)
@@ -647,20 +725,25 @@ static int lock(token_t verb, token_t obj)
     if (obj == CAGE)SPK=32;
     if (obj == KEYS)SPK=55;
     if (obj == GRATE || obj == CHAIN)SPK=31;
-    if (SPK != 31 || !HERE(KEYS)) {RSPEAK(SPK); return 2012;}
+    if (SPK != 31 || !HERE(KEYS)) {
+       RSPEAK(SPK);
+       return 2012;
+    }
     if (obj == CHAIN)
        return chain(verb);
     if (game.closng) {
        SPK=130;
        if (!game.panic)game.clock2=15;
        game.panic=true;
-       {RSPEAK(SPK); return 2012;}
+       RSPEAK(SPK);
+       return 2012;
     }
     SPK=34+game.prop[GRATE];
     game.prop[GRATE]=1;
     if (verb == LOCK)game.prop[GRATE]=0;
     SPK=SPK+2*game.prop[GRATE];
-    {RSPEAK(SPK); return 2012;}
+    RSPEAK(SPK);
+    return 2012;
 }
 
 static int pour(token_t obj)
@@ -691,7 +774,8 @@ static int pour(token_t obj)
        game.prop[DOOR]=0;
        if (obj == OIL)game.prop[DOOR]=1;
        SPK=113+game.prop[DOOR];
-       {RSPEAK(SPK); return 2012;}
+       RSPEAK(SPK);
+       return 2012;
     }
 }
 
@@ -755,7 +839,8 @@ static int rub(token_t obj)
     --game.tally;
     DROP(CAVITY,game.loc);
     SPK=216;
-    {RSPEAK(SPK); return 2012;}
+    RSPEAK(SPK);
+    return 2012;
 }
 
 static int say(void)
@@ -770,7 +855,7 @@ static int say(void)
        return(2630);
     }
     RSPEAK(258);
-    return(2012);
+    return 2012;
 
 }
 
@@ -789,8 +874,10 @@ static int throw(FILE *cmdin, long verb, long obj)
  *  troll.  Treasures special for troll. */
 {
     if (TOTING(ROD2) && obj == ROD && !TOTING(ROD))obj=ROD2;
-    if (!TOTING(obj))
-       {RSPEAK(SPK); return 2012;}
+    if (!TOTING(obj)) {
+       RSPEAK(SPK);    /* FIXME: Defaults from ACTSPK */
+       return 2012;
+    }
     if (obj >= 50 && obj <= MAXTRS && AT(TROLL)) {
         SPK=159;
         /*  Snarf a treasure for the troll. */
@@ -800,7 +887,8 @@ static int throw(FILE *cmdin, long verb, long obj)
         DROP(TROLL2,PLAC[TROLL]);
         DROP(TROLL2+NOBJECTS,FIXD[TROLL]);
         JUGGLE(CHASM);
-        {RSPEAK(SPK); return 2012;}
+        RSPEAK(SPK);
+       return 2012;
     }
     if (obj == FOOD && HERE(BEAR)) {
     /* But throwing food is another story. */
@@ -852,15 +940,15 @@ static int vscore(void)
 /* Score.  Call scoring routine but tell it to return. */
 {
     score(-1);
-    return(2012);
+    return 2012;
 }
 
 static int wake(token_t obj)
 /* Wake.  Only use is to disturb the dwarves. */
 {
     if (obj != DWARF || !game.closed) {RSPEAK(SPK); return 2012;}
-    SPK=199;
-    return(18999);
+    RSPEAK(199);
+    return(19000);
 }
 
 static int wave(token_t obj)
@@ -869,22 +957,28 @@ static int wave(token_t obj)
     if ((!TOTING(obj)) && (obj != ROD || !TOTING(ROD2)))SPK=29;
     if (obj != ROD ||
        !TOTING(obj) ||
-       (!HERE(BIRD) && (game.closng || !AT(FISSUR))))
-       {RSPEAK(SPK); return 2012;}
+       (!HERE(BIRD) && (game.closng || !AT(FISSUR)))) {
+       RSPEAK(SPK);
+       return 2012;
+    }
     if (HERE(BIRD))SPK=206+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=208;
-       {RSPEAK(SPK); return 2012;}
+       RSPEAK(SPK);
+       return 2012;
     } else {
-       if (game.closed) return(18999);
+       if (game.closed) {
+           RSPEAK(SPK);        /* FIXME: How is SPK set here? */
+           return(19000);
+       }
        if (game.closng || !AT(FISSUR)) {RSPEAK(SPK); return 2012;}
        if (HERE(BIRD))RSPEAK(SPK);
        game.prop[FISSUR]=1-game.prop[FISSUR];
        PSPEAK(FISSUR,2-game.prop[FISSUR]);
-       return(2012);
+       return 2012;
     }
 }
 
@@ -962,7 +1056,7 @@ int action(FILE *input, enum speechpart part, long verb, long obj)
                    case  1: /* DROP  */ return(8000); 
                    case  2: /* SAY   */ return(8000); 
                    case  3: /* UNLOC */ return lock(verb, INTRANSITIVE);    
-                   case  4: /* NOTHI */ return(2009); 
+                   case  4: /* NOTHI */ {RSPEAK(54); return(20012);}
                    case  5: /* LOCK  */ return lock(verb, INTRANSITIVE);    
                    case  6: /* LIGHT */ return light(INTRANSITIVE);    
                    case  7: /* EXTIN */ return extinguish(INTRANSITIVE);    
@@ -1003,7 +1097,7 @@ int action(FILE *input, enum speechpart part, long verb, long obj)
                case  1: /* DROP  */ return discard(obj, false);    
                case  2: /* SAY   */ return say();    
                case  3: /* UNLOC */ return lock(verb, obj);    
-               case  4: /* NOTHI */ return(2009); 
+               case  4: /* NOTHI */ {RSPEAK(54); return(20012);}
                case  5: /* LOCK  */ return lock(verb, obj);    
                case  6: /* LIGHT */ return light(obj);    
                case  7: /* EXTI  */ return extinguish(obj);