/
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: socials.cc,v 1.5.2.11 2000/05/08 05:24:17 greear Exp $
// $Revision: 1.5.2.11 $  $Author: greear $ $Date: 2000/05/08 05:24:17 $

//
//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
//

/*  Socials.cc: These are simplistic commands.  They usually only
    involve text messages, but some can provoke responses from mobs,
    not to mention other players. */

#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 <PtrArray.h>



/* By Shamu */
void mutter(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 = rm.haveCritNamed(i_th, vict, pc);
      
      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 mutter about your foolish actions.\n", pc);
         Sprintf(buf, "mutters to %s.\n", get_hisself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You mutter under your breath about %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S mutters something under his breath about 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 mutters about %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 mutter.\n", pc);
      emote("mutters.", pc, rm, TRUE);
   }//else
}//mutter


/* By Shamu */
void cough(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 = rm.haveCritNamed(i_th, vict, pc);
      
      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 politely cough at your own actions.\n", pc);
         Sprintf(buf, "coughs politely to %s.\n", get_hisself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You cough politely at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S coughs politely at you.  Are you missing something?\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 coughs in %S's direction..\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 cough politely.\n", pc);
      emote("coughs politely.", pc, rm, TRUE);
   }//else
}//cough


/* By Shamu */
void point(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 = rm.haveCritNamed(i_th, vict, pc);
      
      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 grin at yourself.\n", pc);
         Sprintf(buf, "points accusingly at %s.\n", get_hisself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You point accusingly at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S points at you accusingly!\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 points 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 point at nowhere in particular.\n", pc);
      emote("points at nowhere in particular.", pc, rm, TRUE);
   }//else
}//point


/* By Shamu */
void snap(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 = rm.haveCritNamed(i_th, vict, pc);
      
      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 snap your fingers in front of your face.\n", pc);
         Sprintf(buf, "snaps at %s.\n", get_hisself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You snap your fingers in front of %S's face.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S snaps their fingers in front of your 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 tries to snap %S's neck.\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 snap your fingers.\n", pc);
      emote("snaps their fingers.", pc, rm, TRUE);
   }//else
}//snap


/* By Shamu */
void whine(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 = rm.haveCritNamed(i_th, vict, pc);
      
      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 whine to yourself.\n", pc);
         Sprintf(buf, "grins at %s.\n", get_hisself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You whine at %S.  Perhaps you'd like some cheese with that?\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S whines at you, claiming it's all your fault.\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 whines 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 whine at everyone!\n", pc);
      emote("whines at everyone!", pc, rm, TRUE);
   }//else
}//whine


/* By Shamu */
void bah(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 = rm.haveCritNamed(i_th, vict, pc);
      
      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 grin at yourself.\n", pc);
         Sprintf(buf, "makes sheep-like noises at %s.\n",
                 get_hisself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You look at %S and exclaim, 'Bah!'.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S gets right up in your face and yells, 'Bah!' Weird, '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 looks at %S and shouts, 'Bah!' in perfect Quadcaster style.\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, 'Bah!'\n", pc);
      emote("suddenly shouts, 'Bah!'.", pc, rm, TRUE);
   }//else
}//bah


/* By Shamu */
void punt(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 = rm.haveCritNamed(i_th, vict, pc);
      
      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 kick yourself in the behind!\n", pc);
         Sprintf(buf, "kicks %s in the bottom!.\n", get_hisself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You kick %S in the rear end, sending them flying!.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S runs up behind you and punts you in the behind!\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 punts %S at some imaginary target.\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 try and punt the air!\n", pc);
      emote("takes a big swing at the air and misses!  Ouch, that had to hurt.", pc, rm, TRUE);
   }//else
}//punt


/* By Shamu */
void yuck(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 = rm.haveCritNamed(i_th, vict, pc);
      
      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 look at yourself and say, 'Yuck.'.\n", pc);
         Sprintf(buf, "looks at %s and mutters, 'Yuck.'.\n",
                 get_hisself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You look at %S and say, 'Yuck!'.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S lets you know just how disgusting you really are!\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 tells everyone that %S is all yucky.\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 look up to the sky and yell, 'Ew!  Yucky!'.\n", pc);
      emote("looks to the sky and yells, 'Ewwww!  Yucky!'.", pc, rm, TRUE);
   }//else
}//yuck


/* By Shamu */
void announce(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 = rm.haveCritNamed(i_th, vict, pc);
      
      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 let yourself know just who you are!\n", pc);
         Sprintf(buf, "introduces %s to no one in particular.\n",
                 get_hisself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You announce to %S that you are here!.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S announces to you that he is here.\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 announces himself 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 announce yourself!\n", pc);
      emote("boldly lets everyone know just who he is.", pc, rm, TRUE);
   }//else
}//announce


/* By Shamu */
void greet(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 = rm.haveCritNamed(i_th, vict, pc);
      
      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 wave hello to yourself.  Lonely?\n", pc);
         Sprintf(buf, "waves to %s.\n", get_hisself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You wave hello to %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S gives you a big welcome wave!\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 waves in greetings 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 greet everyone!\n", pc);
      emote("greets everyone around!", pc, rm, TRUE);
   }//else
}//greet


/* By everyone's favorite marine mammal */
void doze(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 = rm.haveCritNamed(i_th, vict, pc);
      
      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 doze off.\n", pc);
         Sprintf(buf, "dozes off, having bored %s to pieces.\n",
                 get_hisself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You doze off whilst trying to pay attention to %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S dozes off while looking 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 dozes off in the middle of %S's boring diatribe.\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 begin to doze off.\n", pc);
      emote("lies down to take a nap.", pc, rm, TRUE);
   }//else
}//doze


/* Not by Shamu.  Definitely not by Shamu. */
void megawibble(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 = rm.haveCritNamed(i_th, vict, pc);
      
      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 turn yourself downside up and outside in and try to wibble at yourself!\n", 
              pc);
         Sprintf(buf, "twists all around and tries to wibble at %s!\n", 
                 get_hisself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You turn yourself inside out and upside down and MEGAWIBBLE at %S!!\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S turns themself outside in and downside up and MEGAWIBBLES 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 rearranges themself in impossible ways and MEGAWIBBLES 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 turn yourself inside out and upside down and MEGAWIBBLE!\n", pc);
      emote("turns downside out and upside in and MEGAWIBBLES!", pc, rm, TRUE);
   }//else
}//mega





/* By kat_skan */
void social_jump(int i_th, const String* vict, critter& pc, room& rm) {
   String buf(100);
   object* obj_ptr;

   if(vict->Strlen()) {
      if( (obj_ptr=have_obj_named(pc.inv, i_th, vict, pc.SEE_BIT, rm)) ) {

         Sprintf(buf, "You throw %S to the ground and start jumping up and down on it.\n",
                 long_name_of_obj(*obj_ptr, ~0));
         show(buf, pc);

         Sprintf(buf, "throws %S to the ground and starts jumping up and down on it.",
                 long_name_of_obj(*obj_ptr, ~0));
         pc.emote(buf);
      }
      else {
         pc.show(CS_DONT_SEEM_TO_HAVE_THAT);
      }
   }
   else {
      pc.show("You jump up and down in frustration.\n");
      pc.emote("jumps up and down in frustration.");
   }
}//social_jump

/* by shamu */
void lag(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.emote("How can you tell?\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (crit_ptr == &pc) {
         show("You complain about the lag, your hitpoints, your mana...\n",
              pc);
         Sprintf(buf, "complains on and on about the lag.\n",
                 get_himself_herself(pc));
         emote(buf, pc, ROOM, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You complain to %S about the lag.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         pc.show(buf);
         Sprintf(buf, "%S whines to you about the lag.\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         crit_ptr->show(buf);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S whines about the lag to %S.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               ptr->show(buf);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      pc.show("You complain about the lag, your hitpoints, your mana...\n");
      pc.emote("complains on and on about the lag.");
   }//else
}//lag


/* by shamu */
void sigh(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 sigh in your sleep");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (crit_ptr == &pc) {
         show("You sigh dejectedly to yourself.\n", pc);
         Sprintf(buf, "sighs dejectedly to %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, ROOM, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You sigh dejectedly to %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S sighs and looks pittifully in your direction.\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 sighs dejectedly 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 sigh dejectedly.\n", pc);
      emote("sighs dejectedly.\n", pc, ROOM, TRUE);
   }//else
}//sigh


/* by Grock */
void pout(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 pout in your sleep, but noone seems to notice.\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (crit_ptr == &pc) {
         show("You pout pitifully to yourself.\n", pc);
         Sprintf(buf, "pouts to %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, ROOM, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You poute to %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S pouts 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 pouts 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 pout pitifully.\n", pc);
      emote("pouts pitifully.\n", pc, ROOM, TRUE);
   }//else
}//pout


void rofl(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 =
            rm.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         pc.show("You would probably want to be standing to do that.\n");
      else if (crit_ptr == &pc) {
         pc.show("You roll on the floor, laughing hysterically!\n");
         pc.emote("rolls on the floor, laughing hysterically!\n");
      }//if targ and agg is same
      else {
         Sprintf(buf, "You roll on the floor laughing your guts out at %S!\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         pc.show(buf);
         Sprintf(buf, "%S rolls on the floor laughing at you!\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         crit_ptr->show(buf);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, "%S rolls on the floor laughing at %S!\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               ptr->show(buf);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      pc.show("You roll on the floor laughing hysterically!\n");
      pc.emote("rolls on the floor laughing hysterically!");
   }//else
}//rofl


/* shamu */
void insane(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 =
            rm.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         pc.show("You would probably want to be standing to do that.\n");
      else if (crit_ptr == &pc) {
         pc.show("Your sanity is slowly slipping away...\n");
         pc.pemote("sanity is slowly slipping away, right before your very eyes!\n");
      }//if targ and agg is same
      else {
         Sprintf(buf, "You whisper to %S to call the men in white coats.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         pc.show(buf);
         Sprintf(buf, "%S tells you to call the men in white coats.\n",
                 name_of_crit(pc, crit_ptr->SEE_BIT));
         buf.Cap();
         crit_ptr->show(buf);

         while ((ptr = cll.next())) {
            if ((ptr != &pc) && (ptr != crit_ptr)) {
               Sprintf(buf, 
                 "%S whispers to %S to call the men in white coats.\n",
                 name_of_crit(pc, ptr->SEE_BIT),
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               ptr->show(buf);
            }//if
         }//while
      }//else
   }//if a victim
   else {
      show("Your sanity is slowly slipping away...\n", pc);
      pc.pemote("sanity is slowly slipping away, right before your very eyes!");
   }//else
}//insane



/* Social By Acrwyn */
void flex(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 flex for all the %s fawning all over you.\n",
              pc.SEX==SEX_MALE?"women":
              (pc.SEX==SEX_FEMALE?"men":"beings of undisclosed gender"));
      pc.show(buf);
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You flex impressively for yourself.\n", pc);
         Sprintf(buf, "flexes impressively for %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You flex impressively for %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S flexes impressively for you. Oooo!\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 flexes impressively 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 flex your muscles impressively, watching them ripple.\n", pc);
     emote("flexes impressively.", pc, rm, TRUE);
   }//else
}//flex

/* Social by Acrwyn */
void hug(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 to wake first.\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You hug yourself in a reassuring way.\n", pc);
         Sprintf(buf, "hugs %s warmly.\n",
                 get_himself_herself(pc)); 
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You give %S a big, warm hug.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S gives you a great, big, warm hug.\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 hugs %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 hug the air.  Lonely?\n", pc);
      emote("hugs the air, looking lonely.", pc, rm, TRUE);
   }//else
}//hug

void poke(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 can't poke yourself in the eye if your eyelids are closed!\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_REST)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You poke yourself ruefully.\n", pc);
         Sprintf(buf, "pokes %s in the eye.\n",
                 get_himself_herself(pc)); 
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You poke %S in the ribs.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S pokes you in the ribs.\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 pokes %S in the ribs.\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 poke around.\n", pc);
      emote("pokes around.", pc, rm, TRUE);
   }//else
}//poke


void wink(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("Ha ha ha ha! Nice try.\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_REST)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You wink slyly at yourself.\n", pc);
         Sprintf(buf, "winks at %s.\n",
                 get_himself_herself(pc)); 
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You wink slyly at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S winks at you slyly.\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 winks at %S with a sly grin.\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 wink.\n", pc);
      emote("winks.", pc, rm, TRUE);
   }//else
}//wink

void hop(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 twitch slightly in your sleep.\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS != POS_STAND)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You hop in little circles around yourself.\n", pc);
         Sprintf(buf, "hops gleefully in little circles around %s.\n",
                 get_himself_herself(pc)); 
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You gleefully hop in little circles around %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S gleefully hops in little circles around 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 gleefully hops around %S in little circles!\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 gleefully hop in little circles!\n", pc);
      emote("gleefully hops in little circles!", pc, rm, TRUE);
   }//else
}//hop


/* Social By Acrwyn */
void smile(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 smile sleepily.\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You smile happily to yourself.\n", pc);
         Sprintf(buf, "smiles happily at %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You smile happily at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S smiles happily 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 smiles happily 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 smile happily.\n", pc);
      emote("smiles happily.", pc, rm, TRUE);
   }//else
}//smile

/* Social By Acrwyn */
void growl(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("Your stomach growls, perhaps you should get a midnight snack.\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You growl quietly to yourself.\n", pc);
         Sprintf(buf, "growls menacingly at %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You growl loudly at %S.  Grrr!!!\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S growls menacingly 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 growls loudly 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 growl menacingly like the beast you really are. Grrr!!!\n",
           pc);
      emote("growls menacingly.  Grrr!", pc, rm, TRUE);
   }//else
}//growl

/* Social By Acrwyn*/
void dance(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 dance around with %s of your dreams!\n",
              pc.SEX==SEX_MALE?"woman":
              (pc.SEX==SEX_FEMALE?"man":"being of undisclosed gender"));
      pc.show(buf);
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You dance romantically with yourself.\n", pc);
         Sprintf(buf, "dances about merrily with %s.\n",
                 get_himself_herself(pc)); 
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You dance about with %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S dances about merrily 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 dances about merrily 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 dance around in happy circles!\n", pc);
      emote("dances about in happy circles!", pc, rm, TRUE);
   }//else
}//dance

/* Social By Acrwyn */
void thank(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("Thank the stars you finally fell asleep!\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You thank yourself.\n", pc); 
         Sprintf(buf, "thanks %s profusely.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You thank %S profusely.\n", 
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S thanks you profusely!\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 thanks %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 thank your lucky stars.\n", pc);
      emote("thanks the gods, eyes turned heavenward.", pc, rm, TRUE);
   }//else
}//thank

/* Social By Acrwyn */
void curtsey(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'd better try that while you're awake.\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You curtsey to yourself and nearly fall over.\n",
              pc); 
         Sprintf(buf, "curtseys gracefully to %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You curtsey gracefully to %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S curtseys gracefully 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 curtseys gracefully 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 curtsey low and gracefully.\n", pc);
      emote("curtseys low and gracefully.", pc, rm, TRUE);
   }//else
}//curtsey

/* ANOTHER Social by Acrwyn */
void laugh(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 = rm.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You laugh at yourself.  Silly you!\n", pc); 
         Sprintf(buf, "laughs loudly at %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You laugh loudly at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S laughs loudly, pointing 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 laughs loudly 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 laugh loudly.  Hahahahaha!\n", pc);
      emote("laughs loudly.", pc, rm, TRUE);
   }//else
}//laugh

/* Social By Acrwyn */
void chuckle(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 = rm.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You chuckle to yourself.\n", pc);
         Sprintf(buf, "chuckles to %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You chuckle at %S.\n", 
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S chuckles 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 chuckles 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 chuckle.\n", pc);
      emote("chuckles.", pc, rm, TRUE);
   }//else
}//chuckle

/* Social By Acrwyn */
void ack(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 gag in your sleep.\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You ACK and spit at yourself.\n", pc); 
         Sprintf(buf, "ACKS and spits on %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You ACK at spit at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S ACKS and spits at you!  ACK!  PTHHH!\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 ACKS and spits 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 ACK and spit.  ACK!  PTHHH!\n", pc);
      emote("ACKS and spits.  ACK!  PTHHH!", pc, rm, TRUE);
   }//else
}//ack

/* Social By Acrwyn */
void bounce(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 twitch slightly in your sleep.\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You bounce around yourself and get dizzy.\n", pc);
         Sprintf(buf, "bounces excitedly around %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You bounce excitedly around %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S bounces around you excitedly!\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 bounces excitedly around %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 bounce about excitedly!  BOIIING!\n", pc);
      emote("bounces about excitedly!", pc, rm, TRUE);
   }//else
}//bounce

/* Social By "The Love Monkey" */
void burp(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 belch softly in your sleep.\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You burp loudly at yourself.  PHEW!.\n", pc);
         Sprintf(buf, "burps loudly at %s.\n", get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You burp loudly at %S, sending %s reeling.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT), get_his_her(*crit_ptr));
         show(buf, pc);
         Sprintf(buf, "%S sends you reeling with a horrific burp!\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 burps loudly 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 burp happily.  BUUUUURP!\n", pc);
      emote("burps loud and happily.", pc, rm, TRUE);
   }//else
}//burp

/* Social By Acrwyn */
void snicker(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 = rm.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You snicker knowingly to yourself.\n", pc);
         Sprintf(buf, "snickers to %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You snicker quietly at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S snickers quietly 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 snickers quietly 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 snicker quietly.\n", pc);
      emote("snickers quietly.", pc, rm, TRUE);
   }//else
}//snicker

/* Social By Acrwyn */
void scream(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 scream in their sleep?\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You scream in frustration at yourself.\n", pc);
         Sprintf(buf, "screams deafeningly at %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You get close and scream loudly at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S screams loudly into your ears. 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 screams deafeningly 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 scream like you've never screamed before!!!\n",
pc);
      emote("screams deafeningly.  AAAAAH!", pc, rm, TRUE);
   }//else
}//scream

/* Socials By Acrwyn */
void panic(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("Can't that wait until morning?\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You panic at the thought of yourself.\n", pc);
         emote("panics and runs screaming in erratic circles.\n",
               pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You panic and run in circles around %S while screaming.\n", 
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S panics and runs in circles around you, screaming.\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 panics and runs screaming in circles around %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 panic, running about in circles and screaming.\n", pc);
      emote("panics, running about in circles and screaming.", pc, rm, TRUE);
   }//else
}//panic

/* Social By Acrwyn */
void grunt(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 grunt and roll over in your sleep.\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You grunt to yourself.\n", pc);
         Sprintf(buf, "grunts to %s.\n", get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You grunt loudly at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S grunts loudly 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 grunts 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 grunt.\n", pc);
      emote("grunts loudly.", pc, rm, TRUE);
   }//else
}//grunt

/* Social By Acrwyn */
void ponder(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 ponder for a moment, and suddenly realize the meaning of life!  You should write it down in the morning!\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         if (strcasecmp(*(Top(pc.names)), "levander") == 0) {
            show("You ARE a Ponder!!.\n", pc);
         }//if
         else {
            show("You ponder your own existence.\n", pc);
         }//else
         Sprintf(buf, "ponders %s.\n", get_himself_herself(pc));  
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You ponder %S thoughtfully.\n", 
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S ponders you thoughtfully.\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 ponders %S thoughtfully.\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 ponder, thinking deep thoughts.\n", pc);
      emote("ponders, eyebrows furrowed in deep thought.", pc, rm,
TRUE);
   }//else
}//ponder

/* Social By Acrwyn */
void scratch(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 scratch sleepily.\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You scratch yourself thoughtfully.\n", pc);
         Sprintf(buf, "scratches %s thoughtfully.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You scratch %S thoughtfully.\n", 
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S scratches your back.  Ahhh.\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 scratches %S behind the ears.\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 scratch, thoughtfully.\n", pc);
      emote("thoughtfully scratches.", pc, rm, TRUE);
   }//else
}//scratch

/* Social By Acrwyn */
void lick(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 dream of puppies, thousands of puppies! Oh god, they're coming this way! FOR THE LOVE OF GOD! KEEP THE PUPPIES AWAY!!!\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You lick yourself. Mmmm.\n", pc);
         Sprintf(buf, "licks %s.\n", get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You lick %S.\n", 
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S licks 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 licks %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 lick your lips.\n", pc);
      Sprintf(buf, "licks %s lips.", get_his_her(pc));
      emote(buf, pc, rm, TRUE);
   }//else
}//lick

/* Social By Acrwyn */
void cackle(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 = rm.haveCritNamed(i_th, vict, pc.SEE_BIT);

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You cackle gleefully at yourself.\n", pc); 
         Sprintf(buf, "cackles gleefully at %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You cackle gleefully at %S.\n", 
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S cackles at you gleefully.\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 cackles 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 cackle gleefully!\n", pc);
      emote("cackles gleefully!", pc, rm, TRUE);
   }//else
}//cackle


/* by Acrwyn */
void weep(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 cry in their sleep?\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_REST)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You weep big tears on yourself.\n", pc); //change
         Sprintf(buf, "weeps at %s.\n", get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "Bawling, you weep huge tears on %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S weeps huge tears on you!!\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 weeps on %S.\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 weep big mournful tears.  Poor you.\n", pc);
      emote("weeps loudly, drenching everything with tears!!", pc,
            rm, TRUE);
   }//else
}//weep

/* by Acrwyn */
void disco(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 dream of a simpler time.\n");
      return;
   }

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

      if (!crit_ptr)
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_STAND)
         show("You are not in a position to disco.\n", pc);
      else if (crit_ptr == &pc) {
         show("You disco with yourself across the room.\n", pc);
         Sprintf(buf, "disco dances with %s.\n",get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You disco wildly with %S.\n", //change
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S wildly dances the disco 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 does a funky disco dance 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 {      //change these next two lines
      show("You flail your arms and twirl ... it's the disco man!\n", pc);
      pc.pemote("collar flipped up, does the disco!!");
   }//else
}//disco


void puke(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're not going to appreciate waking up in that!\n");
      return;
   }

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

      if (!crit_ptr) 
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You puke on your shoes.\n", pc);
         Sprintf(buf, "pukes on %s.\n", get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You puke your guts out all over %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S spews chunks all over 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 pukes all over %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 spew chunks...did THAT come out of your stomach???\n", pc);
      emote("turns green and blows chunks!!", pc, rm, TRUE);
   }//else
}//puke



void cheer(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("Better not, that would wake you up for sure!\n");
      return;
   }

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

      if (!crit_ptr) 
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You cheer yourself..  What a hoser!.\n", pc);
         Sprintf(buf, "cheers %s.\n", get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You give a big cheer for %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S cheers you on!!\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 cheers %S to victory and glory!!\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 give a good try at starting the wave....nothing happens!\n", 
                pc);
      emote("throws up the hands and gives a big cheer!!", pc, rm, 
                TRUE);
   }//else
}//cheer



void nod(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've already nodded off.\n");
      return;
   }

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

      if (!crit_ptr) 
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You nod to yourself.\n", pc);
         Sprintf(buf, "nods to %s.\n", get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
         targ = &pc;
      }//if targ and agg is same
      else {
         targ = crit_ptr;
         Sprintf(buf, "You nod your head in agreement with %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S nods in agreement 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 nods in agreement 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 nod your head in agreement.\n", pc);
      emote("nods in agreement!!", pc, rm, TRUE);
      targ = NULL;
   }//else

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


void nog(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("Quit that, damn it!\n");
      return;
   }

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

      if (!crit_ptr) 
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_REST)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You nog sagely to yourself.\n", pc);
         Sprintf(buf, "nogs sagely to %s.\n", get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
         targ = &pc;
      }//if targ and agg is same
      else {
         targ = crit_ptr;
         Sprintf(buf, "You nog in sagely agreement with %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S nogs in sagely agreement 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 nogs in sagely agreement 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 nog sagely.\n", pc);
      emote("nogs sagely!!", pc, rm, TRUE);
      targ = NULL;
   }//else

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

void grin(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 smile in your sleep?\n");
      return;
   }

   if (vict->Strlen()) {
      critter* crit_ptr = 
         rm.haveCritNamed(i_th, vict, pc.SEE_BIT);
      
      if (!crit_ptr) 
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_REST)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You grin at yourself.\n", pc);
         Sprintf(buf, "grins at %s.\n", get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You grin mischieviously at %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S grins mischieviously 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 grins 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 grin widely!\n", pc);
      emote("grins at the thought.", pc, rm, TRUE);
   }//else
}//grin


void wave(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 dream you've won the Miss Universe pagent. Wave to your adoring public!?\n");
      return;
   }

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

      if (!crit_ptr) 
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_REST)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You wave goodbye to yourself.\n", pc);
         Sprintf(buf, "waves goodbye to  %s.\n", get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You wave goodbye to %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S waves goodbye 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 waves goodbye 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 wave merrily!\n", pc);
      emote("waves in your general direction.", pc, rm, TRUE);
   }//else
}//wave


void bow(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("And just how do you plan to pull that off?\n");
      return;
   }

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

      if (!crit_ptr) 
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You attempt to bow to yourself.\n", pc);
         Sprintf(buf, "tries to bow to %s.\n", get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You bow to %S.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S bows before 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 bows 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
         if (crit_ptr->mob && crit_ptr->mob->proc_data &&
             crit_ptr->mob->proc_data->bow_proc) {
            ptr = crit_ptr;
            if (crit_ptr->isMob()) {
               ptr = mob_to_smob(*crit_ptr, rm.getRoomNum());
            }//if
            do_domob_bow_proc(*ptr, pc);
         }//if
      }//else
   }//if a victim
   else {      
      show("You bow.\n", pc);
      emote("bows.", pc, rm, TRUE);
   }//else
}//bow


void curse(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 scream profanities in your sleep!\n");
      return;
   }

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

      if (!crit_ptr) 
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_REST)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You curse to yourself.\n", pc);
         Sprintf(buf, "curses at %s folly.\n", get_his_her(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You call down the wrath of ancient gods upon %S!\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S invokes ancient names to speed your doom!!\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 calls forth the wrath of ancient gods to hasten %S's doom.\n",
                 name_of_crit(pc, ptr->SEE_BIT), 
                 name_of_crit(*crit_ptr, ptr->SEE_BIT));
               buf.Cap();
               show(buf, *ptr);
            }//if
         }//while
         if (crit_ptr->mob && crit_ptr->mob->proc_data &&
             crit_ptr->mob->proc_data->curse_proc) {
           ptr = crit_ptr;
           if (crit_ptr->isMob()) {
             ptr = mob_to_smob(*crit_ptr, rm.getRoomNum());
           }//if
           do_domob_curse_proc(*ptr, pc);
         }//if
      }//else
   }//if a victim
   else {      
      show("You curse darkly at the world.", pc);
      Sprintf(buf, "curses the situation %s finds %s in.", get_he_she(pc),
              get_himself_herself(pc));
      emote(buf, pc, rm, TRUE);
   }//else
}//curse


void disdain(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("That might be more effective if you were awake.\n");
      return;
   }

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

      if (!crit_ptr) 
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_REST)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You wallow in self pity.\n", pc);
         Sprintf(buf, "turns a glowering eye upon %s.\n",
                 get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You glower at %S with great disdain.\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);

         Sprintf(buf, "%S glares disdainfully 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 glares disdainfully 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 glower with disdain at the world.\n", pc);
      emote("glowers disdainfully.", pc, rm, TRUE);
   }//else
}//disdain




/*by Gingon*/
void thpppt(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("That might be more effective if you were awake.\n");
      return;
   }

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

      if (!crit_ptr) 
         show(DONT_SEE_PERSON, pc);
      else if (pc.POS > POS_SIT)
         show(NOT_IN_POSN, pc);
      else if (crit_ptr == &pc) {
         show("You try to stick your tongue out at yourself and thpppt!\n", pc);
         Sprintf(buf, "tries to sticks %s out at %s and thpppt!\n",
         get_his_her(pc),
         get_himself_herself(pc));
         emote(buf, pc, rm, TRUE);
      }//if targ and agg is same
      else {
         Sprintf(buf, "You stick you tongue at %S and thpppt!\n",
                 name_of_crit(*crit_ptr, pc.SEE_BIT));
         show(buf, pc);
         Sprintf(buf, "%S sticks %s tongue out at you and thpppts!\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 sticks %s tongue out at %S and thpppts!\"\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 stick your tongue out and thpppt!\n", 
                pc);
        Sprintf(buf,"sticks %s tongue out, and thpppts!\n",
        get_his_her(pc));        
        emote(buf,pc,rm, TRUE);
   }//else
}//thpppt