/* -*- LPC -*- */
/*
* $Locker: $
* $Id: poison.c,v 1.3 1999/10/27 09:42:21 taffyd Exp $
* $Log: poison.c,v $
* Revision 1.3 1999/10/27 09:42:21 taffyd
* Fixed typo
*
* Revision 1.2 1999/07/19 19:04:01 macchirton
* Forcibly unlocked by ceres
*
* Revision 1.1 1998/01/06 04:14:00 ceres
* Initial revision
*
*/
/**
* This is the effect skelton docs. This effect
* has a classification of "body.poison".
* <p>
* Describe the arguments in here.
* <p>
* This effect has a shadow associated with it.
* @classification body.poison
* @see help::effects
*/
#include "path.h"
#include <effect.h>
#define MIN_TIME 60
string *wretch_msg = ({
"Your stomach turns inside out, and you lose your lunch.\n",
"You double over in pain.\n"
});
string *room_msg = ({
" convulses violently, and you're presented with a grand view"
" of a recent meal.\n",
" groans and doubles over.\n",
" turns a variety of colours.\n"
});
/** @ignore yes */
string query_classification() { return "body.poison"; }
/** @ignore yes */
string query_shadow_ob() { return SHADOWS + "poison"; }
/** @ignore yes */
int beginning( object player, int time, int id ) {
if (time < MIN_TIME) {
player->submit_ee( 0, 0, EE_REMOVE );
return 0;
}
player->submit_ee("wretch", ({ 30, 60 }), EE_CONTINUOUS);
player->submit_ee( 0, time, EE_REMOVE );
player->set_active("poison");
tell_object(player, "You suddenly don't feel very well. Maybe it " +
"was something you ate.\n");
return time;
} /* beginning() */
/** @ignore yes */
int merge_effect( object player, int time1, int time2 ) {
player->set_active("poison");
player->submit_ee( 0, time1 + time2 - (int)player->expected_tt(),
EE_REMOVE );
return time1 + time2;
} /* merge_effect() */
/** @ignore yes */
void end( object player, int time, int id ) {
// No message for "short" effects
if (time < MIN_TIME) return;
tell_object( player, "You feel better now.\n" );
player->set_inactive("poison");
} /* end() */
void wretch(object player, int time, int id) {
int msg_no;
msg_no = random(sizeof(wretch_msg));
tell_object(player, wretch_msg[msg_no]);
tell_room(environment(player), (string)player->short() +
room_msg[msg_no], player);
player->adjust_hp(-(int)player->query_hp()/10);
}