/*  -*- LPC -*-  */
/*
 * $Locker:  $
 * $Id: hemp.c,v 1.1 1998/01/06 04:14:00 ceres Exp $
 * $Log: hemp.c,v $
 * Revision 1.1  1998/01/06 04:14:00  ceres
 * Initial revision
 * 
*/
/**
 * This is the effect skelton docs.  This effect
 * has a classification of "player.is.stoned".
 * <p>
 * Describe the arguments in here.
 * @classification player.is.stoned
 * @see help::effects
 */
#include <effect.h>
#define CURE 200
/** @ignore yes */
string query_classification() { return "player.is.stoned"; }
/** @ignore yes */
int beginning( object player, int arg, int sid ) {
   tell_object( player, "You begin to feel quite pleasantly stoned.\n" );
   tell_room( environment( player ), (string)player->the_short() + " peers at you through half-" 
                         "closed eyes.\n", player);
   player->submit_ee( "soul_reactions", ({ 10, 10 }), EE_CONTINUOUS );
   player->submit_ee( "sap_brains", ({ 100, 100 }), EE_CONTINUOUS );
   player->submit_ee( 0, arg, EE_REMOVE );
   return 0;
} /* beginning() */
/** @ignore yes */
void merge_effect() { return; }
/** @ignore yes */
void end( object player, int arg, int sid ) {
   if ( !player->query_property( "dead" ) )
      tell_object( player, "You get a sudden craving for jelly donuts.\n" );
} /* end() */
void soul_reactions( object player, int arg, int sid ) {
   switch ( random( 10 ) ) {
      case 0 :
         player->new_parser( "cough" );
         break;
      case 1 :
         tell_object( player, "You drone: Wow, man... Cool!.\n" );
         tell_room( environment( player ), (string)player->the_short() + " drones: " 
                         "Wow, man... Cool!\n", player);
         break;
      case 2 :
         tell_object( player, "Your eyes dilate and get redder.\n" );
         tell_room( environment( player ), (string)player->the_short() + " squints " 
                         "and seems uncomfortable in the light.\n", player);
         break;
      case 3 :
         tell_object( player, "You giggle mindlessly.\n" );
         tell_room( environment( player ), (string)player->the_short() + " giggles " 
                         "mindlessly.\n", player);
         break;
      case 4 :
         tell_object( player, "You become fascinated by your hands.\n" );
         tell_room( environment( player ), (string)player->the_short() + " seems " 
                          "to have forgotten what fingers are.\n", player);
         break;
      case 5 :
         player->new_parser( "wibble" );
         break;
      case 6 :
         tell_object( player, "You fall over backwards, giggling.\n" );
         tell_room( environment( player ), (string)player->the_short() + " falls " 
                         "over backwards, giggling.\n", player);
         break;
      case 7 :
         tell_object( player, "You feel very relaxed.\n" );
         tell_room( environment( player ), (string)player->the_short() + " smiles " 
                         "pleasantly at you.\n", player);
         break;
      case 8 :
         tell_object( player, "You start to say something, but forget what it was.\n" );
         tell_room( environment( player ), (string)player->the_short() + " starts to " 
                         "say something to you... forgets what it was and smiles goofily.\n", player);
         break;
      default :
         tell_object( player, "You blow the smoke out slowly, savouring the mellow flavour.\n" );
         tell_room( environment( player ), (string)player->the_short() + " blows a cloud of " 
                         "sweet-smelling smoke in your face.\n", player);
   }
   arg -= CURE / 10;
   if ( arg < 0 )
      arg = 0;
   player->set_arg_of( (int)player->sid_to_enum( sid ), arg );
} /* soul_reactions() */
void sap_brains( object player ) {
   tell_object( player, "You close your eyes... The room seems to spin.\n" );
   tell_room(environment(player),(string)player->the_short()
   + " seems a little dizzy.\n",player);
   player->adjust_tmp_int( -1 );
} /* sap_brains() */
int test_remove( object player, int arg, int enum, int bonus ) {
   arg += bonus;
   if ( arg > CURE )
      return 1;
   player->set_arg_of( enum, arg );
   return 0;
} /* test_remove() */