/
lib/banish/
lib/d/
lib/doc/
lib/doc/domains/
lib/doc/efun/
lib/doc/examples/
lib/doc/examples/armour/
lib/doc/examples/contain/
lib/doc/examples/food/
lib/doc/examples/magic/
lib/doc/examples/monster/
lib/doc/examples/room/
lib/doc/examples/weapons/
lib/function/
lib/include/
lib/include/fn_specs/
lib/include/skills/
lib/info/
lib/inherit/base/
lib/log/
lib/manuals/312/
lib/news/
lib/obj/party/
lib/objects/components/
lib/open/
lib/open/library/
lib/open/party/
lib/players/
lib/players/zilanthius/
lib/room/
lib/room/city/arena/
lib/room/city/creator/
lib/room/city/garden/monst/
lib/room/city/obj/
lib/room/city/shop/
lib/room/death/
lib/room/registry/
lib/secure/
lib/secure/UDP_CMD_DIR/
lib/skills/
lib/skills/fighter/
lib/skills/thief/
lib/usr/
lib/usr/creators/
lib/usr/players/
/*****************************************************************/
/*** New Implementation (with adverbs) by Mumbles, August 1993 ***/
/***                                                           ***/
/*** Previous Updates:                                         ***/
/***         Far-call Implementation by Zilanthius, Dec. 1992  ***/
/***         Modified for genders: padrone, Oct 22 1990        ***/
/***                                                           ***/
/*****************************************************************/
string cap_name, *adverb_list;
object the_owner;

reset(arg) {
    if (!arg) {
        adverb_list = ({
#include "adverbs.h"
        });
    }
}

soul_command(verb, str, player_name) {
    object ob;
    string adv, who;

    cap_name = player_name;
    the_owner = this_player();
    if (str) {
        if (sscanf(str,"%s %s", who, adv) != 2)
            who = str;
        ob = present(lower_case(who), environment(this_player()));
        if (ob == this_player()) {
            write("You must be awfully bored.\n");
            return 1;
        }
        if (!ob || !living(ob)) {
            adv = who;
            ob = 0;
        }
        adv = adv ? valid_adverb(adv): 0;
    }
    return call_other(this_object(), verb, ob, adv);
}

valid_adverb(s) {
    int i;
    for (i=0; i < sizeof(adverb_list); i++)
        if (abbr(s, adverb_list[i])) {
            return adverb_list[i];
        }
    return 0;
}

abbr(s1, s2) {
    if (strlen(s1) < 4)
        return 0;
    return extract(s2, 0, strlen(s1) - 1) == s1;
}

/*** Notice That The Functions Are in Alphbetical Order!! ***/
            /*** KEEP IT THAT WAY ***/

ack(ob, adv) {
    string ob_name;
   
    if (ob) {
        write("How do you ack someone else?\n");
        return 1;
    }
    write("You ack " + (adv ? adv: "noisily") + ".\n");
    say(cap_name + " acks " + (adv ? adv: "noisily") + ".\n");
    return 1;
}

agree(ob, adv) {
    string ob_name;

    if (!ob && !adv) {
        write("You agree wholeheartedly.\n");
        say(cap_name + " agrees wholeheartedly.\n");
        return 1;
    }
    if (ob) {
        tell_object(ob, cap_name+" agrees with you"+ 
          (adv ? " "+adv: "") +".\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();        
    }
    write("You agree"+ (ob ? " with "+ob_name: "") + 
      (adv ? " "+adv: "") +".\n");
    say(cap_name+" agrees"+ (ob ? " with "+ob_name: "") + 
      ( adv ? " "+adv: "") +".\n", ob ? ob: this_object());
    return 1;
}

ah(ob, adv) {

     write("You finally get the idea and give an 'ah' of comprehension.\n");
    say(cap_name + " finally gets the idea and gives an 'ah' of comprehension.\n");
    return 1;
}
applaud(ob, adv) {
    string ob_name;

    if (!ob && !adv) {
        write("You applaud wholeheartedly.\n");
        say(cap_name + " gives a round of applause.\n");
        return 1;
    }    
    if (ob) {
        tell_object(ob, cap_name+" gives you a round of applause"+
          (adv ? " "+adv: "") +".\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();
    }
    write("You applaud"+ (ob ? " "+ob_name: "")+(adv ? " "+adv: "") +".\n");
    say(cap_name+" applauds"+ (ob ? " "+ob_name: "") + 
      (adv ? " "+adv: "") +".\n", ob ? ob: this_object());
    return 1;
}
 
arch(ob, adv) {
    string ob_name;

    if(!ob && !adv) {
        write("You arch an eyebrow quizzically.\n");
        say(cap_name + " archs an eyebrow quizzically.\n");
        return 1;
    }
    if (ob) {
        tell_object(ob, cap_name+" archs an eyebrow"+ 
          (adv ? " "+adv: "") +" at you.\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();
    }
    write("You arch an eyebrow"+ (adv ? " "+adv: "") +
      (ob ? " at "+ob_name: "") +".\n");
    say(cap_name+" archs an eyebrow"+ (adv ? " "+adv: "") + 
      (ob ? " at "+ob_name: "") +".\n", ob ? ob: this_object());
    return 1;
}
 
blush(ob, adv) {

    if (adv) {
        write("You blush "+ adv +".\n");
        say(cap_name+" blushes "+ adv +".\n");
        return 1;
    }
    write("Your cheeks are burning.\n");
    say(cap_name + " blushes.\n");
    return 1;
}
 
boggle(ob, adv) {
    string ob_name;
   
    if (ob) {
        write("You can't boggle someone else's mind!\n");
        return 1;
    }
    write("Your mind boggles"+(adv ? " "+adv: "")+" at the concept.\n");
    say(cap_name + "'s mind boggles"+(adv ? " "+adv: "")+" at the concept.\n");
    return 1;
}

bounce(ob, adv) {

    if (adv) {
        write("You bounce around "+ adv +".\n");
        say(cap_name+" bounces around "+ adv +".\n");
        return 1;
    }
    write("B O I N G !!\n");
    say(cap_name + " bounces around.\n");
    return 1;
}
 
bop(ob, adv) {
    string ob_name;
   
    if (!ob) {
        write("You bop to the beat" + (adv ? " "+adv: "") + ".\n");
        say(cap_name + " bops to the beat" + (adv ? " "+adv: "") + ".\n");
        return 1;
    }
    tell_object(ob, cap_name+" bops you on the head " +
      (adv ? adv: "playfully") + ".\n");
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    write("You bop " + ob_name + " on the head " +
      (adv ? adv: "playfully") + ".\n");
    say(cap_name + " bops " + ob_name + " on the head " +
      (adv ? adv: "playfully") + ".\n", ob);
    return 1;
}

bow(ob, adv) {
    string ob_name;

    if (!ob && !adv) {
        write("You bow to your audience.\n");
        say(cap_name + " bows gracefully.\n");
        return 1;
    }
    if (ob) {
        tell_object(ob, cap_name+" bows"+ (adv ? " "+adv: "")+  
          " before you.\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();        
    }
    write("You bow"+ (adv ? " "+adv: "") + 
      (ob ? " to "+ob_name: "") +".\n");
    say(cap_name+" bows"+ ( adv ? " "+adv: "") + 
      (ob ? " to "+ob_name: "") +".\n", ob ? ob: this_object());
    return 1;
}
 
brb(ob, adv) {

    write("You hold up one finger and say \"I'll be right back!\"\n");
    say(cap_name + " hold up one finger and says \"I'll be right back!\"\n");
    return 1;
}

burp(ob, adv) {

    if (adv) {
        write("You burp "+ adv +".\n");
        say(cap_name+" burps "+ adv +".\n");
        return 1;
    }
    write("Excuse yourself!\n");
    say(cap_name + " burps rudely.\n");
    return 1;
}
 
cackle(ob, adv) {

    if (adv) {
        write("You cackle "+ adv +".\n");
        say(cap_name+" cackles "+ adv +".\n");
        return 1;
    }
    write("You cackle gleefully.\n");
    say(cap_name + " throws " + the_owner->query_possessive() +
        " head back and cackles with glee!\n");
    return 1;
}
 
cheer(ob, adv) {
    string ob_name;
   
    if (!ob) {
        write("You cheer " + (adv ? adv: "wholeheartedly") + ".\n");
        say(cap_name + " cheers " + (adv ? adv: "wholeheartedly") + ".\n");
        return 1;
    }
    tell_object(ob, cap_name+" cheers for you " +
      (adv ? adv: "wholeheartedly") + ".\n");
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    write("You cheer for "+ob_name+(adv ? " "+adv: " wholeheartedly")+".\n");
    say(cap_name + " cheers for " + ob_name +
      (adv ? " "+adv: " wholeheartedly") + ".\n", ob);
    return 1;
}

chuckle(ob, adv) {

    if (adv) {
        write("You chuckle "+ adv +".\n");
        say(cap_name+" chuckles "+ adv +".\n");
        return 1;
    }
    write("You chuckle politely.\n");
    say(cap_name + " chuckles politely.\n");
    return 1;
}
 
clap(ob, adv) {

    if (adv) {
        write("You clap "+ adv +".\n");
        say(cap_name+" claps "+ adv +".\n");
        return 1;
    }
    write("You clap briefly.\n");
    say(cap_name + " claps.\n");
    return 1;
}
 
comfort(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();    
    tell_object(ob, cap_name+" comforts you" +
      (adv ? " "+adv: "") +".\n");
    write("You comfort "+ob_name+ (adv ? " "+adv: "") +".\n");
    say(cap_name + " comforts "+ ob_name +
      (adv ? " "+adv: "") +".\n", ob);
    return 1;
}
 
cough(ob, adv) {

    if (adv) {
        write("You cough "+ adv +".\n");
        say(cap_name+" coughs "+ adv +".\n");
        return 1;
    }
    write("Cover your mouth when you do that!\n");
    say(cap_name+ " coughs noisily.\n");
    return 1;
}
 
cower(ob, adv) {
    string ob_name;
   
    if (!ob) {
        write("You cower " + (adv ? adv: "sheepishly") + ".\n");
        say(cap_name + " cowers" + (adv ? adv: "sheepishly") + ".\n");
        return 1;
    }
    tell_object(ob, cap_name+" cowers " + (adv ? adv: "sheepishly") +
      " in your presence.\n");
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    write("You cower "+ (adv ? adv: "sheepishly") + " in " +
      ob_name +"'s presence.\n");
    say(cap_name + " cowers " + (adv ? adv: "sheepishly") + " in " +
      ob_name + "'s presence.\n", ob);
    return 1;
}

cringe(ob, adv) {
    string ob_name;
   
    if (!ob) {
        write("You cringe " + (adv ? adv: "in terror") + ".\n");
        say(cap_name + " cringes " + (adv ? adv: "in terror") + ".\n");
        return 1;
    }
    tell_object(ob, cap_name+" cringes before you " +
      (adv ? adv: "in terror") + ".\n");
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    write("You cringe before "+ob_name+(adv ? " "+adv: " in terror")+".\n");
    say(cap_name + " cringes before "+ob_name+(adv ? " "+adv: " in terror") +
      ".\n", ob);
    return 1;

}
cry(ob, adv) {

    if (adv) {
        write("You sob "+ adv +".\n");
        say(cap_name+" sobs "+ adv +".\n");
        return 1;
    }
    write("Waaaaah!\n");
    say(cap_name + " bursts into tears.\n");
    return 1;
}
 
cuddle(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();    
    tell_object(ob, cap_name+" cuddles you" +
      (adv ? " "+adv: "") +".\n");
    write("You cuddle "+ob_name+ (adv ? " "+adv: "") +".\n");
    say(cap_name + " cuddles "+ ob_name +
      (adv ? " "+adv: "") +".\n", ob);
    return 1;
}
 
curtsey(ob, adv) {

    if (adv) {
        write("You curtsey "+ adv +".\n");
        say(cap_name+" curtseys "+ adv +".\n");
        return 1;
    }
    write("You curtsey gracefully.\n");
    say(cap_name + " curtseys gracefully.\n");
    return 1;
}
 
dance(ob, adv) {
    string ob_name;

    if (!ob) {
        write("Feels silly, doesn't it?\n");
        say(cap_name + " does the disco duck.\n");
        return 1;
    }
    ob_name = interactive(ob) ? ob->query_name(): ob->short();    
    tell_object(ob, cap_name + " sweeps you across the dance floor.\n");
    write("You sweep "+ ob_name +" across the dance floor.\n");
    say(cap_name+" sweeps "+ ob_name +" across the dance floor.\n", ob);
    return 1;
}
 
duh(ob, adv) {

    if (adv) {
        write("You whap yourself in the head "+ adv +
          " while saying, \"Duuuuhh!\".\n");
        say(cap_name+" "+adv+" whaps "+ this_player()->query_objective()+
          "self in the head while saying, \"Duuuuhh!\".\n");
        return 1;
    }
    write("You whap yourself in the head while saying, \"Duuuuhh!\"\n");
    say(cap_name + " whaps " + this_player()->query_objective() +
    "self in the head while saying, \"Duuuuhh!\"\n");
    return 1;
}
 
fart(ob, adv) {

    if (adv) {
        write("You fart "+ adv +".\n");
        say(cap_name+" farts "+ adv +".\n");
        return 1;
    }
    write("How rude!\n");
    say(cap_name + " lets off a real rip-roarer.\n");
    return 1;
}
 
flex(ob, adv) {
    string ob_name;
 
    if(!ob) {
        write("You flex your buldging muscles " +
          (adv ? adv: "egotistically") + ".\n");
        say(cap_name + " flexes "+ the_owner->query_possessive() +
          " muscles " + (adv ? adv: "egotistically") + ".\n");
        return 1;
    }
    tell_object(ob, cap_name + " flexes "+ the_owner->query_possessive() +
      " muscles at you " + (adv ? adv: "egotistically") + ".\n");
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    write("You flex your muscles "+ (adv ? adv: "egotistically") +
      " at " + ob_name + ".\n");
    say(cap_name+" flexes "+ the_owner->query_possessive() +
      " muscles "+ (adv ? adv: "egotistically") +  " at " +
      ob_name + ".\n", ob);
    return 1;
}

flip(ob, adv) {

    if (adv) {
        write("You flip "+ adv +".\n");
        say(cap_name+" flips "+ adv +".\n");
        return 1;
    }
    write("You flip head over heels.\n");
    say(cap_name + " flips head over heels.\n");
    return 1;
}
 
flutter(ob, adv) {

    string ob_name;

    if (!ob && !adv) {
    write("You flutter your eyelids suggestively.\n");
    say(cap_name + " flutters "+the_owner->query_possessive()+ " eyelids suggestively.\n");
    return 1;
   }
    if (ob) {
        tell_object(ob, cap_name+" flutters "+ the_owner->query_possessive()+" eyelids"+ 
          (adv ? " "+adv: "") + " at you.\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();
    }
    write("You flutter your eyelids"+ (adv ? " "+adv: "") +
      (ob ? " at "+ob_name: "") +".\n");
    say(cap_name+" flutters "+ the_owner->query_possessive()+ " eyelids"+ (adv ? " "+adv: "") + 
      (ob ? " at "+ob_name: "") +".\n", ob ? ob: this_object());
    return 1;

}
fondle(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();    
    tell_object(ob, cap_name+" fondles you" +
      (adv ? " "+adv: "") +".\n");
    write("You fondle "+ob_name+ (adv ? " "+adv: "") +".\n");
    say(cap_name + " fondles "+ ob_name +
      (adv ? " "+adv: "") +".\n", ob);
    return 1;
}
 
french(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    tell_object(ob, cap_name +
       " gives you a deep and passionate kiss..it seems to take forever...\n");
    ob_name = interactive(ob) ? ob->query_name(): ob->short();    
    write("You give "+ ob_name +" a REAL kiss..it lasts a long time...\n");
    say(cap_name+" gives "+ ob_name +" a deep and passionate kiss.."+
      "it seems to take forever...\n", ob);
    if (ob->query_frog()) {
        the_owner->frog_curse(1);
        ob->frog_curse(0);
    }
    return 1;
}
 
frown(ob, adv) {

    if (adv) {
        write("You frown "+ adv +".\n");
        say(cap_name+" frowns "+ adv +".\n");
        return 1;
    }
    write("Is something wrong?\n");
    say(cap_name + " frowns.\n");
    return 1;
}                                       
 
gasp(ob, adv) {

    if (adv) {
        write("You gasp "+ adv +".\n");
        say(cap_name+" gasps "+ adv +".\n");
        return 1;
    }
    write("You gasp in astonishment.\n");
    say(cap_name + " gasps in astonishment!\n");
    return 1;
}
 
giggle(ob, adv) {

    if (adv) {
        write("You giggle "+ adv +".\n");
        say(cap_name+" giggles "+ adv +".\n");
        return 1;
    }
    write("You giggle delightedly.\n");
    say(cap_name + " giggles delightedly.\n");
    return 1;
}
 
glare(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();    
    tell_object(ob, cap_name+" glares"+ (adv ? " "+adv: "") +
      "at you.\n");
    write("You glare"+ (adv ? " "+adv: "") +" at "+ ob_name +".\n");
    say(cap_name+" glares"+ (adv ? " "+adv: "") +" at "+ 
      ob_name +".\n", ob);
    return 1;
}
 
grin(ob, adv) {
    string ob_name;

    if (!ob && !adv) {
        write("You grin widely.\n");
        say(cap_name + " grins widely.\n");
        return 1;
    }
    if (adv) {
        write("You grin "+ adv +".\n");
        say(cap_name+" grins "+ adv +".\n");
        return 1;
    }
    if (ob) {
        tell_object(ob, cap_name+" grins"+ (adv ? " "+adv: "") + 
          " at you.\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();
    }
    write("You grin"+ (adv ? " "+adv: "") +
      (ob ? " at "+ob_name: "") +".\n");
    say(cap_name+" grins"+ (adv ? " "+adv: "") + 
      (ob ? " at "+ob_name: "") +".\n", ob ? ob: this_object());
    return 1;
}
 
groan(ob, adv) {

    if (adv) {
        write("You groan "+ adv +".\n");
        say(cap_name+" groans "+ adv +".\n");
        return 1;
    }
    write("You groan.\n");
    say(cap_name + " groans loudly.\n");
    return 1;
}
 
grope(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();    
    tell_object(ob, cap_name+" gropes you" +
      (adv ? " "+adv: "") +".\n");
    write("You grope "+ob_name+ (adv ? " "+adv: "") +".\n");
    say(cap_name + " gropes "+ ob_name +
      (adv ? " "+adv: "") +".\n", ob);
    return 1;
}
 
growl(ob, adv) {
    string ob_name;

    if (!ob && !adv) {
        write("You growl.\n");
        say(cap_name + " growls.\n");
        return 1;
    }
    if (ob) {
        tell_object(ob, cap_name+" growls"+ (adv ? " "+adv: "") + 
          " at you.\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();
    }
    write("You growl"+ (adv ? " "+adv: "") +
      (ob ? " at "+ob_name: "") +".\n");
    say(cap_name+" growls"+ (adv ? " "+adv: "") + 
      (ob ? " at "+ob_name: "") +".\n", ob ? ob: this_object());
    return 1;
}
 
grumble(ob, adv) {
    string ob_name;
   
    if (!ob) {
        write("You grumble " + (adv ? adv: "unhappily") + ".\n");
        say(cap_name + " grumbles " + (adv ? adv: "unhappily") + ".\n");
        return 1;
    }
    tell_object(ob, cap_name+" grumbles " + (adv ? adv: "unhappily") +
      " to you.\n");
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    write("You grumble "+ (adv ? adv: "unhappily") + " to " +
      ob_name +".\n");
    say(cap_name + " grumbles " + (adv ? adv: "unhappily") + " to " +
      ob_name + ".\n", ob);
    return 1;
}

hiccup(ob, adv) {

    if (adv) {
        write("You hiccup "+ adv +".\n");
        say(cap_name+" hiccups "+ adv +".\n");
        return 1;
    }
    write("Hic!\n");
    say(cap_name + " hiccups.\n");
    return 1;
}
 
hkiss(ob, adv) {
    string ob_name;

    if (!ob) {
        write("You kiss your hand" + (adv ? " "+adv: "") + ".\n");
        say(cap_name + " kisses " + the_owner->query_possessive() +
          " hand" + (adv ? " "+adv: "") + ".\n");
        return 1;
    }
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    tell_object(ob, cap_name + " kisses your hand" +
      (adv ? " "+adv: "") +".\n");
    write("You kiss " + ob_name + "'s hand" + (adv ? " "+adv: "") +".\n");
    say(cap_name + " kisses " + ob_name + "'s hand" +
      (adv ? " "+adv: "") +".\n", ob);
    if (ob->query_frog()) {
        the_owner->frog_curse(1);
        ob->frog_curse(0);
    }
    return 1;
}

hmm(ob, adv) {
    string ob_name;
   
    if (ob) {
        write("How do you hmm someone else?\n");
        return 1;
    }
    write("You hmm " + (adv ? adv: "thoughtfully") + ".\n");
    say(cap_name + " hmms " + (adv ? adv: "thoughtfully") + ".\n");
    return 1;
}

hug(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();    
    tell_object(ob, cap_name+" hugs you" +
      (adv ? " "+adv: "") +".\n");
    write("You hug "+ob_name+ (adv ? " "+adv: "") +".\n");
    say(cap_name+" hugs "+ob_name+(adv ? " "+adv: "") +".\n", ob);
    return 1;
}
 
kick(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();    
    tell_object(ob, cap_name+" kicks you" +
      (adv ? " "+adv: "") +".\n");
    write("You kick "+ob_name+ (adv ? " "+adv: "") +".\n");
    say(cap_name+" kicks "+ob_name+(adv ? " "+adv: "") +".\n", ob);
    return 1;
}
 
kiss(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();    
    tell_object(ob, cap_name+" kisses you" +
      (adv ? " "+adv: "") +".\n");
    write("You kiss "+ob_name+ (adv ? " "+adv: "") +".\n");
    say(cap_name+" kisses "+ob_name+(adv ? " "+adv: "") +".\n", ob);
    if (ob->query_frog()) {
        this_player()->frog_curse(1);
        ob->frog_curse(0);
    }
    return 1;
}
 
knee(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();    
    if (ob->query_male()) {
        tell_object(ob, cap_name+" hits you"+ (adv ? " "+adv: "")+  
          "with "+the_owner->query_possessive()+" knee below your belt!\n"+
          "You double over and fall to the ground, writhing in " +
          "excruciating pain,\nfeeling like you may throw up " +
          "everything you have eaten!\n");
        say(cap_name + " suddenly raises " + the_owner->query_possessive() +
          " knee, sending "+ ob_name +" to the floor, writhing in pain!\n",
          ob);
        write("You hit "+ ob_name +(adv ? " "+adv: "")+
          " with your knee.\n");
    }
    else {
        tell_object(ob, cap_name+" tries to knee you"+
          (adv ? " "+adv: "")+", without much effect.\n");
        say(cap_name+" tries to knee "+ ob_name +
          ", without much effect.\n", ob);
        write("You try to knee "+ ob_name +". Not very effective though.\n");
    }
    return 1;
}
 
laugh(ob, adv) {

    if (adv) {
        write("You laugh "+ adv +".\n");
        say(cap_name+" laughs "+ adv +".\n");
        return 1;
    }
    write("You fall down laughing.\n");
    say(cap_name + " falls down laughing.\n");
    return 1;
}
 
lick(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();    
    tell_object(ob, cap_name+" licks you" +
      (adv ? " "+adv: "") +".\n");
    write("You lick "+ ob_name + (adv ? " "+adv: "") +".\n");
    say(cap_name+" licks "+ ob_name +(adv ? " "+adv: "")+".\n", ob);
    return 1;
}
 
listen(ob, adv) {
    string ob_name;
 
    if (!ob && !adv) {
        write("You listen.\n");
        say(cap_name + " listens.\n");
        return 1;
    }    
    if (ob) {
        tell_object(ob, cap_name+" listens to you"+
          (adv ? " "+adv: "") +".\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();
    }
    write("You listen"+ (ob ? " to "+ob_name: "")+(adv ? " "+adv: "") +".\n");
    say(cap_name+" listens"+ (ob ? " to "+ob_name: "") +
      (adv ? " "+adv: "") +".\n", ob ? ob: this_object());
    return 1;
}

love(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();    
    tell_object(ob, cap_name+" whispers to you sweet words of love.\n"); 
    write("You tell your true feelings to " + ob_name + ".\n");
    say(cap_name + " whispers softly to " + ob_name + ".\n", ob);
    return 1;
}
 
moan(ob, adv) {

    if (adv) {
        write("You moan "+ adv +".\n");
        say(cap_name+" moans "+ adv +".\n");
        return 1;
    }
    write("You start to moan.\n");
    say(cap_name + " starts moaning.\n");
    return 1;
}
 
nibble(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();    
    tell_object(ob, cap_name+" nibbles on your ear" +
      (adv ? " "+adv: "") +".\n");
    write("You nibble"+(adv ? " "+adv: "")+" on "+ob_name +"'s ear.\n");
    say(cap_name+" nibbles on "+ ob_name +"'s ear"+
      (adv ? " "+adv: "")+".\n", ob);
    return 1;
}
 
nod(ob, adv) {

    if (adv) {
        write("You nod "+ adv +".\n");
        say(cap_name+" nods "+ adv +".\n");
        return 1;
    }
    write("You nod your head.\n");
    say(cap_name + " nods "+the_owner->query_possessive()+ " head.\n");
    return 1;
}
 

oh(ob, adv) {

     write("You look blank and say 'oh'.\n");
    say(cap_name + " looks blank and says 'oh'.\n");
    return 1;
}
pat(ob, adv) {
    string ob_name;
 
    if (!ob && !adv) {
        write("You pat your stomach.\n");
        say(cap_name + " pats "+ this_player()->query_possessive() +
          " stomach.\n");
        return 1;
    }    
    if (ob) {
        tell_object(ob, cap_name+" pats you"+
          (adv ? " "+adv: "") +" on the head.\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();
    }
    write("You pat"+ (ob ? " "+ob_name: "") + (adv ? " "+adv: "") +
      " on the head.\n");
    say(cap_name+" pats"+ (ob ? " "+ob_name: "") +
      (adv ? " "+adv: "") +" on the head.\n", ob ? ob: this_object());
    return 1;
}

pinch(ob, adv) {
    string ob_name;
   
    if (!ob) {
        write("You pinch yourself " + (adv ? adv: "sharply") + ".\n");
        say(cap_name + " pinches " + this_player()->query_objective() +
          "self " + (adv ? adv: "sharply") + ".\n");
        return 1;
    }
    tell_object(ob, cap_name+" pinches you " +
      (adv ? adv: "playfully") + ".\n");
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    write("You pinch "+ob_name+(adv ? " "+adv: " playfully") + ".\n");
    say(cap_name + " pinches " + ob_name + (adv ? " "+adv: " playfully") +
      ".\n", ob);
    return 1;
}

point(ob, adv) {
    string ob_name;
   
    if (!ob) {
        write("You try " + (adv ? adv: "foolishly") +
          " to point in all directions at once.\n");
        say(cap_name + " tries" + (adv ? adv: "foolishly") +
          " to point in all directions at once.\n");
        return 1;
    }
    tell_object(ob, cap_name+" points at you" + (adv ? " "+adv: "") + ".\n");
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    write("You point at " + ob_name + (adv ? " "+adv: "") + ".\n");
    say(cap_name + " points at " + ob_name + (adv ? " "+adv: "") + ".\n", ob);
    return 1;
}

poke(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();    
    tell_object(ob, cap_name+" pokes you" +
      (adv ? " "+adv: "") +" in the ribs.\n");
    write("You poke "+ ob_name +(adv ? " "+adv: "")+
      " in the ribs.\n");
    say(cap_name+" pokes "+ ob_name + (adv ? " "+adv: "") +
      " in the ribs.\n", ob);
    return 1;
}

ponder(ob, adv) {

    if (adv) {
        write("You ponder "+ adv +".\n");
        say(cap_name+" ponders "+ adv +".\n");
        return 1;
    }
    write("You ponder the situation.\n");
    say(cap_name + " ponders the situation.\n");
    return 1;
}

pout(ob, adv) {

    if (adv) {
        write("You pout "+ adv +".\n");
        say(cap_name+" pouts "+ adv +".\n");
        return 1;
    }
    write("Ah, don't take it so hard.\n");
    say(cap_name + " pouts.\n");
    return 1;
}
 
praise(ob, adv) {
    string ob_name;
 
    if (!ob) {
        write("You would praise yourself? What a narcissist!\n");
        return 1;
    }
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    tell_object(ob, cap_name+" praises you" + (adv ? " "+adv: "") +".\n");
    write("You praise "+ ob_name + (adv ? " "+adv: "") +".\n");
    say(cap_name+" praises " + ob_name + (adv ? " "+adv: "") +".\n", ob);
    return 1;
}

puke(ob, adv) {
    string ob_name;

    if(!ob && !adv) {
        write("You puke on your shoes.\n");
        say(cap_name + " doubles over and pukes.\n");
        return 1;
    }
    if (ob) {
        tell_object(ob, cap_name+" pukes"+ 
          (adv ? " "+adv+" on you": "all over you") +".\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();
    }
    write("You puke"+ (adv ? " "+adv: "") +
      (ob ? " on "+ob_name: "") +".\n");
    say(cap_name+" pukes"+ (adv ? " "+adv: "") + 
      (ob ? " on "+ob_name: "") +".\n", ob ? ob: this_object());
    return 1;
}
 
purr(ob, adv) {

    if (adv) {
        write("You purr "+ adv +".\n");
        say(cap_name+" purrs "+ adv +".\n");
        return 1;
    }
    write("MMMMEEEEEEEEOOOOOOOWWWWWWW!\n");
    say(cap_name + " purrs contentedly.\n");
    return 1;
}
 
roll(ob, adv) {
    string ob_name;
   
    if (!ob) {
        write("You roll your eyes" + (adv ? " "+adv: "") + ".\n");
        say(cap_name + " rolls " + this_player()->query_possessive() +
          " eyes" + (adv ? " "+adv: "") + ".\n");
        return 1;
    }
    tell_object(ob, cap_name+" rolls "+ this_player()->query_possessive() +
      " eyes at you" + (adv ? " "+adv: "") + ".\n");
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    write("You roll your eyes at " + ob_name + (adv ? " "+adv: "") + ".\n");
    say(cap_name + " rolls " + this_player()->query_possessive() +
      " eyes at " + ob_name + (adv ? " "+adv: "") + ".\n", ob);
    return 1;
}

ruffle(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    tell_object(ob, cap_name+" ruffles your hair"+
      (adv ? " "+adv: "") +".\n");
    write("You ruffle "+ob_name+"'s hair"+ (adv ? " "+adv: "") +".\n");
    say(cap_name+" ruffles "+ ob_name +"'s hair"+ 
      (adv ? " "+adv: "") +".\n", ob ? ob: this_object());
    return 1;
}
 
scratch(ob, adv) {

         write ("You scratch your head and say 'umm'.\n");
        say (cap_name+" scratches " + this_player()->query_possessive()+ " head and says 'umm'.\n");
        return 1;
}
 
scream(ob, adv) {

    if (adv) {
        write("You scream "+ adv +".\n");
        say(cap_name+" screams "+ adv +".\n");
        return 1;
    }
    write("ARRGGGGGGHHHHHH!!!!\n");
    say(cap_name + " screams loudly!\n");
    return 1;
}
 
shake(ob, adv) {
    string ob_name;

    if(!ob) {
        write("You shake your head"+ (adv ? " "+adv: "") +".\n");
        say(cap_name + " shakes "+the_owner->query_possessive()+" head" +
          (adv ? " "+adv: "") +".\n");
        return 1;
    }
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    tell_object(ob, cap_name+" shakes your hand"+ 
      (adv ? " "+adv: "") +".\n");
    write("You shake "+ ob_name +"'s hand"+(adv ? " "+adv: "")+".\n");
    say(cap_name+" shakes "+ ob_name +"'s hand"+ 
      (adv ? " "+adv: "") +".\n", ob);
    return 1;
}
 
shiver(ob, adv) {

    if (adv) {
        write("You shiver "+ adv +".\n");
        say(cap_name+" shivers "+ adv +".\n");
        return 1;
    }
    write("Brrrrrr!!!\n");
    say(cap_name + " shivers from the cold.\n");
    return 1;
}
 
shrug(ob, adv) {

    if (adv) {
        write("You shrug "+ adv +".\n");
        say(cap_name+" shrugs "+ adv +".\n");
        return 1;
    }
    write("You shrug.\n");
    say(cap_name + " shrugs helplessly.\n");
    return 1;
}
 
sigh(ob, adv) {

    if (adv) {
        write("You sigh "+ adv +".\n");
        say(cap_name+" sighs "+ adv +".\n");
        return 1;
    }
    write("You sigh.\n");
    say(cap_name + " sighs deeply.\n");
    return 1;
}
 
sing(ob, adv) {

    if (adv) {
        write("You sing "+ adv +".\n");
        say(cap_name+" sings "+ adv +".\n");
        return 1;
    }
    write("Oh sole mio!\n");
    say(cap_name + " sings in Italian.\n");
    return 1;
}
 
slap(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    tell_object(ob, cap_name+" slaps you"+
      (adv ? " "+adv: "") +".\n");
    write("You slap "+ob_name + (adv ? " "+adv: "") +".\n");
    say(cap_name+" slaps "+ob_name+(adv ? " "+adv: "")+".\n", ob);
    return 1;
}
 
smirk(ob, adv) {

    if (adv) {
        write("You smirk "+ adv +".\n");
        say(cap_name+" smirks "+ adv +".\n");
        return 1;
    }
    write("You smirk.\n");
    say(cap_name + " smirks.\n");
    return 1;
}
 
smile(ob, adv) {
    string ob_name;

    if(!ob && !adv) {
        write("You smile happily.\n");
        say(cap_name + " smiles happily.\n");
        return 1;
    }
    if (ob) {
        tell_object(ob, cap_name+" smiles"+ 
          (adv ? " "+adv: "") +" at you.\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();
    }
    write("You smile"+ (adv ? " "+adv: "") +
      (ob ? " at "+ob_name: "") +".\n");
    say(cap_name+" smiles"+ (adv ? " "+adv: "") + 
      (ob ? " at "+ob_name: "") +".\n", ob ? ob: this_object());
    return 1;
}
 
snap(ob, adv) {

    if (adv) {
        write("You snap your fingers "+ adv +".\n");
        say(cap_name+" snaps " + the_owner->query_possessive() +
         " " + adv + ".\n");
        return 1;
    }
    write("You snap your fingers.\n");
    say(cap_name + " snaps " + the_owner->query_possessive() +
        " fingers.\n");
    return 1;
}
 
sneer(ob, adv) {
    string ob_name;
   
    if (!ob) {
        write("You sneer " + (adv ? adv: "scornfully") + ".\n");
        say(cap_name + " sneers " + (adv ? adv: "scornfully") + ".\n");
        return 1;
    }
    tell_object(ob, cap_name+" sneers at you" + (adv ? " "+adv: "") + ".\n");
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    write("You sneer at " + ob_name + (adv ? " "+adv: "") + ".\n");
    say(cap_name + " sneers at " + ob_name + (adv ? " "+adv: "") + ".\n", ob);
    return 1;
}

sneeze(ob, adv) {

    if (adv) {
        write("You sneeze "+ adv +".\n");
        say(cap_name+" sneezes " + adv + ".\n");
        return 1;
    }
    write("Gazundheit!\n");
    say(cap_name + " sneezes.\n");
    return 1;
}
 
snicker(ob, adv) {

    if (adv) {
        write("You snicker "+ adv +".\n");
        say(cap_name+" snickers " + adv + ".\n");
        return 1;
    }
    write("You snicker.\n");
    say(cap_name + " snickers.\n");
    return 1;
}
 
sniff(ob, adv) {

    if (adv) {
        write("You sniff "+ adv +".\n");
        say(cap_name+" sniffs " + adv + ".\n");
        return 1;
    }
    write("You sniff.\n");
    say(cap_name + " sniffs.\n");
    return 1;
}
 
snore(ob, adv) {

    if (adv) {
        write("You snore "+ adv +".\n");
        say(cap_name+" snores " + adv + ".\n");
        return 1;
    }
    write("Zzzzzzzzzz...\n");
    say(cap_name + " snores peacefully.\n");
    return 1;
}
 
snort(ob, adv) {
    string ob_name;
   
    if (!ob) {
        write("You snort " + (adv ? adv: "angrily") + ".\n");
        say(cap_name + " snorts " + (adv ? adv: "angrily") + ".\n");
        return 1;
    }
    tell_object(ob, cap_name+" snorts at you" + (adv ? " "+adv: "") + ".\n");
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    write("You snort at " + ob_name + (adv ? " "+adv: "") + ".\n");
    say(cap_name + " snorts at " + ob_name + (adv ? " "+adv: "") + ".\n", ob);
    return 1;
}

snuggle(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    tell_object(ob, cap_name+" snuggles up to you"+
      (adv ? " "+adv: "") +".\n");
    write("You snuggle up to "+ ob_name +(adv ? " "+adv: "")+ ".\n");
    say(cap_name+" snuggles up to "+ ob_name +
      (adv ? " "+adv: "")+".\n", ob);
    return 1;
}
 
spit(ob, adv) {
    string ob_name;

    if(!ob && !adv) {
        write("You spit.\n");
        say(cap_name + " spits on the ground.\n");
        return 1;
    }
    if (ob) {
        tell_object(ob, cap_name+" spits"+ 
          (adv ? " "+adv: "") +"on you.\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();
    }
    write("You spit"+ (adv ? " "+adv: "") +
      (ob ? " on "+ob_name: "") +".\n");
    say(cap_name+" spits"+ (adv ? " "+adv: "") + 
      (ob ? " on "+ob_name: "") +".\n", ob ? ob: this_object());
    return 1;
}
 
squeeze(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    tell_object(ob, cap_name+" squeezes you"+
      (adv ? " "+adv: " fondly") +".\n");
    write("You squeeze "+ ob_name + (adv ? " "+adv: " fondly")+ ".\n");
    say(cap_name+" squeezes "+ ob_name +
      (adv ? " "+adv: " fondly") +".\n", ob);
    return 1;
}
 
stare(ob, adv) {
    string ob_name;

    if(!ob && !adv) {
        write("You stare into space.\n");
        say(cap_name + " stares into space.\n");
        return 1;
    }
    if (ob) {
        tell_object(ob, cap_name+" stares"+ 
          (adv ? " "+adv: "") +"at you.\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();
    }
    write("You stare"+ (adv ? " "+adv: "") +
      (ob ? " at "+ob_name: " into space") +".\n");
    say(cap_name+" stares"+ (adv ? " "+adv: "") + 
      (ob ? " at "+ob_name: " into space") +
        ".\n", ob ? ob: this_object());
    return 1;
}
 
strut(ob, adv) {

    if (adv) {
        write("You strut "+ adv +".\n");
        say(cap_name+" struts " + adv + ".\n");
        return 1;
    }
    write("Strut your stuff!\n");
    say(cap_name + " struts proudly.\n");
    return 1;
}
 
sulk(ob, adv) {

    if (adv) {
        write("You sulk "+ adv +".\n");
        say(cap_name+" sulks " + adv + ".\n");
        return 1;
    }
    write("You sulk.\n");
    say(cap_name + " sulks in the corner.\n");
    return 1;
}
 
tap(ob, adv) {

    string ob_name;

    if (!ob && !adv) {
    write("You tap your foot impatiently.\n");
    say(cap_name + " taps "+the_owner->query_possessive()+ " his foot impatiently.\n");
    return 1;
   }
    if (ob) {
        tell_object(ob, cap_name+" taps "+ the_owner->query_possessive()+" foot"+ 
          (adv ? " "+adv: "") + " at you.\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();
    }
    write("You tap your foot"+ (adv ? " "+adv: "") +
      (ob ? " at "+ob_name: "") +".\n");
    say(cap_name+" taps "+ the_owner->query_possessive()+ " foot"+ (adv ? " "+adv: "") + 
      (ob ? " at "+ob_name: "") +".\n", ob ? ob: this_object());
    return 1;

}
tackle(ob, adv) {
    string ob_name;
 
    if (!ob) {
        write("You wrestle with yourself on the ground" +
          (adv ? " "+adv: "") + ".\n");
        say(cap_name + " wrestles with "+ the_owner->query_objective() +
          "self on the ground" + (adv ? " "+adv: "") + ".\n");
        return 1;
    }    
    tell_object(ob, cap_name+" tackles you" + (adv ? " "+adv: "") +".\n");
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    write("You tackle " + ob_name + (adv ? " "+adv: "") + ".\n");
    say(cap_name+" tackles " + ob_name + (adv ? " "+adv: "") +".\n", ob);
    return 1;
}

thank(ob, adv) {
    string ob_name;

    if (!ob)
        return 0;
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    tell_object(ob, cap_name+" thanks you" +
      (adv ? " "+adv: "") +".\n");
    write("You thank "+ ob_name + (adv ? " "+adv: "") +".\n");
    say(cap_name+" thanks "+ ob_name +
      (adv ? " "+adv: "") +".\n", ob);
    return 1;
}

think(ob, adv) {

    if (adv) {
        write("You try to think "+ adv +", but fail.\n");
        say(cap_name+" tries to think "+ adv +", but fails.\n");
        return 1;
    }
    write("You think deeply about a problem.\n");
    say(cap_name + " thinks deeply about a problem.\n"+
      capitalize(the_owner->query_possessive()) + " brow furrows up and "+
      "smoke billows from "+ the_owner->query_possessive() +" ears.\n");
    return 1;
}

tickle(ob, adv) {
    string ob_name;
   
    if (!ob) {
        write("You tickle yourself " + (adv ? adv: "mercilessly") + ".\n");
        say(cap_name + " tickles " + this_player()->query_possessive() +
          " toes " + (adv ? adv: "mercilessly") + ".\n");
        return 1;
    }
    tell_object(ob, cap_name+" tickles you " +
      (adv ? adv: "mercilessly") + ".\n");
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    write("You tickle "+ob_name+(adv ? " "+adv: " mercilessly") + ".\n");
    say(cap_name + " tickles " + ob_name + (adv ? " "+adv: " mercilessly") +
      ".\n", ob);
    return 1;
}

twiddle(ob, adv) {

    if (adv) {
        write("You twiddle your thumbs "+ adv +".\n");
        say(cap_name+" twiddles "+ the_owner->query_possessive() +
          " thumbs "+ adv +".\n");
        return 1;
    }
    write("You twiddle your thumbs.\n");
    say(cap_name + " twiddles " + the_owner->query_possessive() +
        " thumbs.\n");
    return 1;
}
 
wait(ob, adv) {
    string ob_name;

    if (!ob) {
        write("You wait"+ (adv ? " "+adv: "") +".\n");
        say(cap_name + " waits"+ (adv ? " "+adv: "") +".\n");
        return 1;
    }    
    tell_object(ob, cap_name+" gives you a round of applause"+
      (adv ? " "+adv: "") +".\n");
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    write("You wait"+ (adv ? " "+adv: "") +" for "+ ob_name +".\n");
    say(cap_name+" waits"+ (adv ? " "+adv: "") +
      " for "+ ob_name +".\n", ob);
    return 1;
}
 
wave(ob, adv) {
    string ob_name;

    if(!ob && !adv) {
        write("You wave farewell.\n");
        say(cap_name + " waves farewell.\n");
        return 1;
    }
    if (ob) {
        tell_object(ob, cap_name+" waves farewell to you"+ 
          (adv ? " "+adv: "") +".\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();
    }
    write("You wave farewell"+ (adv ? " "+adv: "") +
      (ob ? " to "+ob_name: "") +".\n");
    say(cap_name+" waves farewell"+ (adv ? " "+adv: "") + 
      (ob ? " to "+ob_name: "") +".\n", ob ? ob: this_object());
    return 1;
}
 
whistle(ob, adv) {
    string ob_name;

    if(!ob && !adv) {
        write("You whistle appreciatively.\n");
        say(cap_name + " whistles appreciatively.\n");
        return 1;
    }
    if (ob) {
        tell_object(ob, cap_name+" whistles"+ 
          (adv ? " "+adv: "") +" at you.\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();
    }
    write("You whistle"+ (adv ? " "+adv: "") +
      (ob ? " at "+ob_name: "") +".\n");
    say(cap_name+" whistles"+ (adv ? " "+adv: "") + 
      (ob ? " at "+ob_name: "") +".\n", ob ? ob: this_object());
    return 1;
}
 
wiggle(ob, adv) {

    if (adv) {
        write("You wiggle your bottom "+ adv +".\n");
        say(cap_name+" wiggles "+ the_owner->query_possessive() +
          " bottom "+ adv +".\n");
        return 1;
    }
    write("You wiggle your bottom.\n");
    say(cap_name + " wiggles " + the_owner->query_possessive() +
        " bottom.\n");
    return 1;
}
 
wince(ob, adv) {
    string ob_name;
   
    if (!ob) {
        write("You wince " + (adv ? adv: "painfully") + ".\n");
        say(cap_name + " winces" + (adv ? adv: "painfully") + ".\n");
        return 1;
    }
    tell_object(ob, cap_name+" winces " + (adv ? adv: "painfully") +
      " before you.\n");
    ob_name = interactive(ob) ? ob->query_name(): ob->short();
    write("You wince "+ (adv ? adv: "painfully") + " before " +
      ob_name +".\n");
    say(cap_name + " winces " + (adv ? adv: "painfully") + " before " +
      ob_name + ".\n", ob);
    return 1;
}

wink(ob, adv) {
    string ob_name;

    if(!ob && !adv) {
        write("You wink.\n");
        say(cap_name + " winks suggestively.\n");
        return 1;
    }
    if (ob) {
        tell_object(ob, cap_name+" winks"+ 
          (adv ? " "+adv: "") +" at you.\n");
        ob_name = interactive(ob) ? ob->query_name(): ob->short();
    }
    write("You wink"+ (adv ? " "+adv: "") +
      (ob ? " at "+ob_name: "") +".\n");
    say(cap_name+" winks"+ (adv ? " "+adv: "") + 
      (ob ? " at "+ob_name: "") +".\n", ob ? ob: this_object());
    return 1;
}
 
yawn(ob, adv) {

    if (adv) {
        write("You yawn "+ adv +".\n");
        say(cap_name+" yawns "+ adv +".\n");
        return 1;
    }
    write("My, what big teeth you have!\n");
    say(cap_name + " yawns.\n");
    return 1;
}