/
ScryMUD/mud/
ScryMUD/mud/grrmud/Boards/
ScryMUD/mud/grrmud/Help/
ScryMUD/mud/grrmud/Pfiles/
ScryMUD/mud/grrmud/PlayerSacks/
ScryMUD/mud/grrmud/PlayerShops/
ScryMUD/mud/grrmud/help_filter/
ScryMUD/mud/hegemon/
ScryMUD/mud/hegemon/data/
ScryMUD/mud/hegemon/data/help/battle/
ScryMUD/mud/hegemon/data/help/client/
ScryMUD/mud/hegemon/data/help/communications/
ScryMUD/mud/hegemon/data/help/skills/
ScryMUD/mud/hegemon/data/help/spells/
ScryMUD/mud/include/
ScryMUD/mud/lib/
ScryMUD/mud/lib/bitfield/
ScryMUD/mud/lib/log/
ScryMUD/mud/lib/string2/
// $Id: social2.cc,v 1.5.2.4 2000/02/19 17:44:45 justin Exp $
// $Revision: 1.5.2.4 $  $Author: justin $ $Date: 2000/02/19 17:44:45 $

//
//ScryMUD Server Code
//Copyright (C) 1998  Ben Greear
//
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either version 2
//of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License for more details.
//
//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// To contact the Author, Ben Greear:  greear@cyberhighway.net, (preferred)
//                                     greearb@agcs.com
//

/************************** social2.cc **********/

#include "misc.h"
#include "misc2.h"
#include "commands.h" 
#include "command2.h"    
#include <string2.h>
#include "classes.h"
#include "battle.h"
#include "spec_prc.h"
#include "social2.h"


/*Coded By GROCK*/
void smirk(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("You smirk in your sleep.\n", pc);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr = 
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr) 
         show("You don't see that person.\n", pc);
      else if (crit_ptr == &pc) {
         show("You smirk to yourself.\n", pc); 
         Sprintf(buf, "smirks at %s", get_himself_herself(pc)); 
         emote(buf, pc, rm, TRUE);
      }
      else {
         Sprintf(buf, "You smirk at %S.\n", 
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S smirks at you.\n", 
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);
         
         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S smirks at %S.\n", 
                 name_of_crit(pc, ptr->SEE_BIT), 
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {      
      show("You smirk.\n", pc);
      emote("smirks.", pc, rm, TRUE);
   }//else
}//smirk


/*Coded By GROCK*/
void beckon(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("You gesture in your sleep.\n", pc);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr = 
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr) 
         show("You don't see that person.\n", pc);
      else if (crit_ptr == &pc) {
         show("You beckon to yourself.\n", pc); 
         Sprintf(buf, "beckons at %s", get_himself_herself(pc)); 
         emote(buf, pc, rm, TRUE);
      }
      else {
         Sprintf(buf, "You beckon %S to follow you.\n", 
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S beckons you to follow %s.\n", 
                 name_of_crit(pc, crit_ptr->SEE_BIT),
                 get_him_her(pc));
         buf.Cap();
         show(buf, *crit_ptr);
         
         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S beckons %S.\n", 
                 name_of_crit(pc, ptr->SEE_BIT), 
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You beckon folks to follow you.\n", pc);
      emote("beckons all to follow.", pc, rm, TRUE);
   }//else
}//beckon

/*Coded By GROCK*/
void sob(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("You cry in your sleep.\n", pc);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr = 
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr) 
         show("You don't see that person.\n", pc);
      else if (crit_ptr == &pc) {
         show("You sob quietly to yourself.\n", pc); 
         Sprintf(buf, "sobs quietly to %s.", get_himself_herself(pc)); 
         emote(buf, pc, rm, TRUE);
      }
      else {
         Sprintf(buf, "You sob on %S's shoulder.\n", 
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S sobs on your shoulder.\n", 
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);
         
         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S sobs on %S's shoulder.\n", 
                 name_of_crit(pc, ptr->SEE_BIT), 
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {      
      show("You sob quietly.\n", pc);
      emote("sobs quietly.", pc, rm, TRUE);
   }//else
}//sob


/*Coded By GROCK*/
void splash(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("Let's just hope you have nothing to splash in!\n", pc);
      return;
   }

   if (!(rm.isSmallWater() || rm.isBigWater() ||
       rm.isSwamp())) {
     show("You go to splash, and only find a dry floor!\n", pc);
     return;
   }//if

   if (vict->Strlen()) {
      critter* crit_ptr = 
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr) 
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_SIT)
         show("You are not in a position to splash anyone.\n", pc);
      else if (crit_ptr == &pc) {
         show("You splash yourself in the face!\n", pc); 
         Sprintf(buf, "splashes %s in the face!", get_himself_herself(pc)); 
         emote(buf, pc, rm, TRUE);
      }
      else {
         Sprintf(buf, "You splash %S in the face!\n", 
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S splashes you in the face!\n", 
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);
         
         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S splashes %S in the face!\n", 
                 name_of_crit(pc, ptr->SEE_BIT), 
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {      
      show("You splash around in the water.\n", pc);
      emote("splashes around in the water.", pc, rm, TRUE);
   }//else
}//splash


/*Coded By GROCK*/
void pat(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("Perhaps you should try this while you are awake.\n", pc);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr = 
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr) 
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_SIT)
         show("You are not in a position to do that.\n", pc);
      else if (crit_ptr == &pc) {
         show("You pat yourself on the back.\n", pc); 
         Sprintf(buf, "pats %s on the back.\n", get_himself_herself(pc)); 
         emote(buf, pc, rm, TRUE);
      }
      else {
         Sprintf(buf, "You pat %S on the back.\n", 
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S pats you on the back.\n", 
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);
         
         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S pats %S on the back.\n", 
                 name_of_crit(pc, ptr->SEE_BIT), 
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {      
      show("You pat the ground.\n", pc);
      emote("pats the ground.", pc, rm, TRUE);
   }//else
}//pat



/*Coded By GROCK*/
void itch(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("A terrible itch causes you to sleep restlessly.\n", pc);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr = 
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr) 
         show("You don't see that person.\n", pc);
      else if (pc.POS == POS_SLEEP)
         show("You itch horribly in your sleep.\n", pc);
      else if (crit_ptr == &pc) {
         show("You make yourself break out in hives!\n", pc); 
         Sprintf(buf, "makes %s break out in hives!",
                 get_himself_herself(pc)); 
         emote(buf, pc, rm, TRUE);
      }
      else {
         Sprintf(buf, "You make %S feel itchy all over.\n", 
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S makes you feel itchy all over!\n", 
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);
         
         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S tries to make %S itchy.\n", 
                 name_of_crit(pc, ptr->SEE_BIT), 
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {      
      show("You itch all over...AAAHHHHH infuriating!\n", pc);
      emote("itches all over!", pc, rm, TRUE);
   }//else
}//itch



/*Coded By GROCK*/
void wiggle(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("You toss and turn restlessly.\n", pc);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr = 
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr) 
         show("You don't see that person.\n", pc);
      else if (crit_ptr == &pc) {
         show("You wiggle yourself.\n", pc);
         Sprintf(buf, "wiggles %s.\n", get_himself_herself(pc)); 
         emote(buf, pc, rm, TRUE);
      }
      else {
         Sprintf(buf, "You wiggle your bottom at %S.\n", 
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S wiggles %s bottom at you.\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT),
                 get_his_her(pc));
         buf.Cap();
         show(buf, *crit_ptr);
         
         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S wiggles %s bottom at %S!\n", 
                 name_of_crit(pc, ptr->SEE_BIT), 
                 get_his_her(pc),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {      
      show("You wiggle your bottom.\n", pc);
      Sprintf(buf, "wiggles %s bottom.", get_his_her(pc));
      emote(buf, pc, rm, TRUE);
   }//else
}//wiggle




/*Coded By GROCK*/
void agree(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("You are quite agreeable while you are asleep!\n", pc);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr = 
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr) 
         show("You don't see that person.\n", pc);
      else if (crit_ptr == &pc) {
         show("You agree with yourself...for a change!\n", pc); 
         Sprintf(buf, "agrees with %s.\n", get_himself_herself(pc)); 
         emote(buf, pc, rm, TRUE);
      }
      else {
         Sprintf(buf, "You agree with %S.\n", 
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S agrees with you.\n", 
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);
         
         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S agrees with %S.\n", 
                 name_of_crit(pc, ptr->SEE_BIT), 
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {      
      show("You agree completely.\n", pc);
      emote("agrees all around.", pc, rm, TRUE);
   }//else
}//agree


/*Coded By Crazy*/
void blush(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (vict->Strlen()) {
      critter* crit_ptr = 
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr) 
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_SIT)
         show("You are not in a position to do that.\n", pc);
      else if (crit_ptr == &pc) {
         show("You blush.\n", pc); 
         Sprintf(buf, "blushes at %s.\n", get_himself_herself(pc)); 
      emote(buf, pc, rm, TRUE);
      }
      else {
         Sprintf(buf, "You blush at the sight of %S.\n", 
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S blushes at the sight of you.\n", 
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);
         
         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S blushes at the sight of %S.\n", 
                 name_of_crit(pc, ptr->SEE_BIT), 
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {      
      show("You turn beet red!\n", pc);
      emote("turns bright red and blushes.", pc, rm, TRUE);
   }//else
}//blush


/* by crazy */
void kiss(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      Sprintf(buf,"You pucker and try to kiss your dream %s!",
              pc.SEX==SEX_MALE?"woman":
              (pc.SEX==SEX_FEMALE?"man":"being of undisclosed gender"));
      pc.show(buf);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr = 
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr) 
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_SIT)
         show("You are not in a position to do that.\n", pc);
      else if (crit_ptr == &pc) {
         show("You kiss yourself.\n", pc); //change
         Sprintf(buf, "Kisses %s.\n", get_himself_herself(pc)); 
//change
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You kiss %S.\n", //change
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S kisses you long and passionatly.\n", //change
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);
         
         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S kisses %S passionately.\n", //change
                 name_of_crit(pc, ptr->SEE_BIT), 
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {      //change these next two lines
      show("You kiss the air.  Was it fun??\n", pc);
      emote("blows kisses into the air!", pc, rm, TRUE);
   }//else
}//kiss


/* by Crazy */
void afk(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);

   show("You go afk.\n", pc);
   Sprintf(buf, "steps away from %s keyboard.", get_his_her(pc));
   emote(buf, pc, rm, TRUE); 
}//afk


/* Made by Shamu */
void giggle(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      pc.show("You know what they say about people who laugh in their sleep?\n");
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_SIT)
         show("You would probably want to be standing to do that.\n", pc);
      else if (crit_ptr == &pc) {
         show("You giggle uncontrollably!\n", pc);
         Sprintf(buf, "giggles crazily at %s!\n", get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You giggle at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S giggles crazily at you!\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S giggles crazily at %S.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You giggle uncontrollably!\n", pc);
      emote("giggles crazily!", pc, rm, TRUE);
   }//else
}//giggle


/* Made by Shamu */
void shrug(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      pc.show("In your attempt to shrug while asleep, you dig your shoulder into the back of your neck!\n");
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_SIT)
         show("You would probably want to be standing to do that.\n", pc);
      else if (crit_ptr == &pc) {
         show("You shrug helplessly to yourself.\n", pc);
         Sprintf(buf, "shrugs helplessly to %s.\n", get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You shrug in response to %S's remark.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S shrugs helplessly at you.\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S shrugs at %S.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You shrug helplessly.\n", pc);
      emote("shrugs helplessly.", pc, rm, TRUE);
   }//else
}//shrug



/* Made by Shamu */
void wibble(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_SIT)
         show("You turn your face inside out and WIBBLE!\n", pc);
      else if (crit_ptr == &pc) {
         show("You turn your face inside out and WIBBLE!\n", pc);
         Sprintf(buf, "WIBBLES! %s\n", get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You turn your face inside out and WIBBLE at %S!\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S turns %s face inside out and WIBBLES at you!\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT), get_his_her(pc));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, 
                 "%S turns %s face inside out and WIBBLES at %S.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 get_his_her(pc),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You turn your face inside out and WIBBLE!\n", pc);
      emote("WIBBLES!", pc, rm, TRUE);
   }//else
}//wibble


/* Made by Shamu */
void yawn(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_SIT)
         show("You yawn sleepily and adjust your pillow.\n", pc);
      else if (crit_ptr == &pc) {
         show("You yawn sleepily and adjust your pillow.\n", pc);
         Sprintf(buf, "yawns to %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You yawn at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S yawns sleepily at you. Are you THAT boring?!\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S yawns sleepily at %S.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You yawn sleepily and adjust your pillow.\n", pc);
      emote("yawns. Are you THAT boring?", pc, rm, TRUE);
   }//else
}//yawn


/* Made by Shamu */
void bonk(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      pc.show("Oh, that's just not right!\n");
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_SIT)
         show("You would probably want to be standing to do that.\n", pc);
      else if (crit_ptr == &pc) {
         show("You bonk youself. What a numbskull.\n", pc);
         Sprintf(buf, "bonks %s. What a weirdo.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You bonk %S!\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S bonks you!\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S bonks %S.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You somehow manage to bonk the air.\n", pc);
      emote("bonks the air. What a weirdo.", pc, rm, TRUE);
   }//else
}//bonk

/* Made by Shamu */
void pft(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      pc.show("You might want to try waking first.\n");
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_SIT)
         show("You would probably want to be standing to do that.\n", pc);
      else if (crit_ptr == &pc) {
         show("You exclaim, 'pftpftpftpft!'\n", pc);
         Sprintf(buf, "exclaims, 'pftpftpftpft!' at %s.\n", 
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You look at %S and exclaim, 'pftpftpftpft!'.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S looks at you and exclaims, 'pftpftpftpft!'\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S exclaims, 'pftpftpftpft!' to %S!\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You exclaim, 'pftpftpftpft!'\n", pc);
      emote("exclaims, 'pftpftpftpft!'", pc, rm, TRUE);
   }//else
}//pft


/* Made by Shamu */
void clap(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      pc.show("Perhaps you should try and wake first.\n");
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_REST)
         show("You feel too relaxed.\n", pc);
      else if (crit_ptr == &pc) {
         show("You clap appreciatively!\n", pc);
         Sprintf(buf, "claps appreciatively to %s!\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You clap at %S's performance.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S claps at your performance.\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S claps at %S's performance.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You clap appreciatively!\n", pc);
      emote("claps appreciatively!", pc, rm, TRUE);
   }//else
}//clap

/* Made by Shamu */
void shake(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;
   critter* targ = NULL;

   if (pc.POS == POS_SLEEP) {
      pc.show("You twitch slightly in your sleep.\n");
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_SIT)
         show("You would probably want to be standing to do that.\n", pc);
      else if (crit_ptr == &pc) {
         targ = &pc;
         show("You shake your head in denial.\n", pc);
         Sprintf(buf, "shakes %s head in denial.!\n",
                get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         targ = crit_ptr;
         Sprintf(buf, "You shake your head in denial at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S shakes his head in denial at your claims!\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S shakes his head in denial at %S.\n",
                       name_of_crit(pc, ptr->SEE_BIT),
                       name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You shake your head in denial.\n", pc);
      emote("shakes his head in denial.", pc, rm, TRUE);
   }//else

   String cmd = "shake";
   if (targ) {
      rm.checkForProc(cmd, NULL_STRING, pc, targ->getIdNum());
   }
   else {
      rm.checkForProc(cmd, NULL_STRING, pc, 0);
   }
}//shake


/* Made by Shamu */
void groan(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("You groan in your sleep.\n", pc);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (crit_ptr == &pc) {
         show("You groan loudly, clutching your stomach.\n", pc);
         Sprintf(buf, "groans loudly, clutching %s stomach.\n",
                 get_his_her(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You groan at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S groans at you. What could you have done?\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S groans at %S.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You groan loudly, clutching your stomach.\n", pc);
      emote("groans loudly.", pc, rm, TRUE);
   }//else
}//groan


/* Made by Shamu */
void hmm(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("You drool a little harder.\n", pc);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (crit_ptr == &pc) {
         show("You think for a while. Hmmmmm....!\n", pc);
         emote("thinks, 'Hmmm....'\n", pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You look at %S and think, 'Hmmm....'\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S looks at you and thinks, 'Hmmm....'\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S glances at %S and goes, 'Hmmmm...'\n", 
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You think for a while. Hmmmmm....\n", pc);
      emote("thinks for a while. Hmmmmm....", pc, rm, TRUE);
   }//else
}//hmm


/* Made by Shamu */
void hum(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("You hum in your sleep.\n", pc);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (crit_ptr == &pc) {
         show("You hum a tune.\n", pc);
         Sprintf(buf, "hums a tune to %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You hum a tune just for %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S hums a tune for you.\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S hums a tune for %S.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You hum a tune.\n", pc);
      emote("hums a tune.", pc, rm, TRUE);
   }//else
}//hum


/* Made by Shamu */
void grumble(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_REST)
         show("You grumble in your sleep.\n", pc);
      else if (crit_ptr == &pc) {
         show("You grumble to yourself.\n", pc);
         Sprintf(buf, "grumbles to %s. Is something wrong?\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You grumble at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S grumbles at you. What could you have done?\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S grumbles at %S.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You grumble. Is something bothering you?\n", pc);
      emote("grumbles at the world!", pc, rm, TRUE);
   }//else
}//grumble


/* Made by Shamu */
void listen(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("You submit to the voices in your head.\n", pc);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (crit_ptr == &pc) {
         show("You listen attentively.\n", pc);
         Sprintf(buf, "listens attentively to %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You listen to %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S listens to you.\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S listens attentively to %S.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You listen attentively.\n", pc);
      emote("listens attentively.", pc, rm, TRUE);
   }//else
}//listen


/* Made by Shamu */
void pinch(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("You pinch yourself. Yep, you're dreaming.\n", pc);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (crit_ptr == &pc) {
         show("You pinch yourself. Nope, you're not dreaming.\n", pc);
         Sprintf(buf, "pinches %s on the arm.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You pinch %S on the arm..\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S pinches you on the arm. Ouch!\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S pinches %S on the arm. Uh-oh!\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You pinch yourself. Nope, you're not dreaming.\n", pc);
      emote("pinches a bug.", pc, rm, TRUE);
   }//else
}//pinch


/* Made by Shamu */
void roll(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      pc.show("Oh yeah, THAT would be effective!\n");
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_SIT)
         show("You roll your eyes.\n", pc);
      else if (crit_ptr == &pc) {
         show("You roll your eyes.\n", pc);
         Sprintf(buf, "rolls his eyes at %s.\n",
                get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You roll your eyes at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S rolls his eyes at you.\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S rolls %s eyes at %S.\n",
                 name_of_crit(pc, ptr->SEE_BIT), get_his_her(pc),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You roll your eyes.\n", pc);
      Sprintf(buf, "rolls %s eyes.\n", get_his_her(pc));
      emote(buf, pc, rm, TRUE);
   }//else
}//roll


/* Made by Shamu */
void strut(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      Sprintf(buf,"Why would you need to strut when you have all these %s fawning all over you?",
              pc.SEX==SEX_MALE?"women":
              (pc.SEX==SEX_FEMALE?"men":"beings of undisclosed gender"));
      pc.show(buf);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_SIT)
         show("You would probably want to be standing to do that.\n", pc);
      else if (crit_ptr == &pc) {
         show("You strut proudly.\n", pc);
         Sprintf(buf, "struts proudly.\n");
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You strut proudly, eyeing %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S struts proudly before you.  Nice, eh?\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S struts proudly before %S.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You strut proudly.\n", pc);
      emote("struts proudly.", pc, rm, TRUE);
   }//else
}//strut


/* Made by Shamu */
void whistle(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("You whistle a tune in your sleep.\n", pc);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (crit_ptr == &pc) {
         show("You whistle a tune to yourself.\n", pc);
         Sprintf(buf, "whistles a tune to %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You whistle a special song for %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S whistles a special song for you.\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S whistles a song for %S.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You whistle a tune.\n", pc);
      emote("whistles a tune.", pc, rm, TRUE);
   }//else
}//whistle


/* Made by Shamu */
void slap(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr = NULL;
   critter* crit_ptr = NULL;

   if (vict->Strlen()) {
      crit_ptr = ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_SIT)
         show("You would probably want to be standing to do that.\n", pc);
      else if (crit_ptr == &pc) {
         show("You slap yourself silly.\n", pc);
         Sprintf(buf, "slaps %s silly. What a weirdo.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You slap %S across the face!\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S slaps you across the face. Grrr! That did it!\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S slaps %S across the face.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You slap the wall.\n", pc);
      emote("slaps the ground in anger.", pc, rm, TRUE);
   }//else

   String cmd = "slap";
   if (crit_ptr) {
      rm.checkForProc(cmd, NULL_STRING, pc, crit_ptr->getIdNum());
   }
   else {
      rm.checkForProc(cmd, NULL_STRING, pc, 0);
   }

}//slap


/* Made by Shamu */
void muahaha(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("You gargle in your sleep!\n", pc);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (crit_ptr == &pc) {
         show("You burst forth with a booming 'MUAHAHAHAHA!'\n", pc);
         Sprintf(buf, "bursts forth with a booming 'MUAHAHAHAHA!'\n");
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You laugh mercilessly at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S looks at you and yells, 'MUAHAHAHAHAHA!'\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S laughs mercilessly at %S.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You burst forth with a booming 'MUAHAHAHAHAHA!'\n", pc);
      emote("bursts forth with a booming 'MUAHAHAHAHAHA'!", pc, rm, TRUE);
   }//else
}//muahaha


/* Made by Shamu */
void hehe(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("You snarfle in your sleep!\n", pc);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (crit_ptr == &pc) {
         show("You giggle like the Pillsbury Doughboy!\n", pc);
         Sprintf(buf, "giggles like the Pillsbury Doughboy at %s! \n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You giggle like the Pillsbury Doughboy at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S giggles strangely at you!\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, 
                 "%S giggles like the Pillsbury Doughboy at %S!\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You giggle like the Pillsbury Doughboy!\n", pc);
      emote("giggles like the Pillsbury Doughboy!", pc, rm, TRUE);
   }//else
}//hehe


/* Made by Shamu */
void silly(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("You twitch a little\n", pc);
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (crit_ptr == &pc) {
         show("You say, 'Oh, silly me!\n", pc);
         Sprintf(buf, "exclaims, 'Oh, silly me!'\n");
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You say to %S, 'You're so silly!'\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S says to you, 'You're so silly!'\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S says, 'You're so silly!' to %S.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You say, 'Oh, silly me!'\n", pc);
      emote("exclaims, 'Oh, silly me!'", pc, rm, TRUE);
   }//else
}//silly


/* Made by Shamu */
void scold(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;

   if (pc.POS == POS_SLEEP) {
      show("You twitch in your sleep.\n", pc);
      return;
   }
   if (vict->Strlen()) {
      critter* crit_ptr =
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show("You don't see that person.\n", pc);
      else if (crit_ptr == &pc) {
         show("You scold yourself.\n", pc);
         Sprintf(buf, "scolds %s.\n", get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You scold %S!\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S scolds you! What did you do?\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         show(buf, *crit_ptr);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S scolds %S.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("You scold the harsh world!\n", pc);
      emote("scolds the harsh world!", pc, rm, TRUE);
   }//else
}//scold


/* Coded by Crazy */
void twiddle(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   Cell<critter*> cll(rm.getCrits());
   critter* ptr;
   if (vict->Strlen()) {
      critter* crit_ptr = 
           ROOM.haveCritNamed(i_th, vict, pc.SEE_BIT);
      if (!crit_ptr) 
         show("You don't see that person.\n", pc);
      else if (pc.POS > POS_SIT)
         show("You are not in a position to do that.\n", pc);
      else if (crit_ptr == &pc) {
         show("You twiddle your thumbs.\n", pc); 
         Sprintf(buf, "Twiddles %s thumbs.\n", 
                 get_his_her(pc)); 
         emote(buf, pc, rm, TRUE);
      }
      else {
         Sprintf(buf, "You twiddle your thumbs because of %S.\n", 
         name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S twiddles %s thumbs because of you!!\n", 
                 name_of_crit(pc, crit_ptr->SEE_BIT),
                 get_his_her(pc));
         buf.Cap();
         show(buf, *crit_ptr);
         
         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S twiddles %s thumbs because of %S.\n", 
                 name_of_crit(pc, ptr->SEE_BIT), 
                 get_his_her(pc),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
      }//else
   }//if a victim
   else {      
      show("You twiddle your thumbs.\n", pc);
      Sprintf(buf, "twiddles %s thumbs.", get_his_her(pc));
      emote(buf, pc, rm, TRUE);
   }//else
}//twiddle