/* -*- LPC -*- */
/*
* $Locker: $
* $Id: hypothermia.c,v 1.2 1999/04/02 16:47:24 taffyd Exp $
* $Log: hypothermia.c,v $
* Revision 1.2 1999/04/02 16:47:24 taffyd
* Made it so you could have your own custom level of freezing. (defaults to 100).
*
* Revision 1.1 1998/01/06 04:08:27 ceres
* Initial revision
*
*/
/**
* This is the effect skelton docs. This effect
* has a classification of "disease.hypothermia".
* <p>
* Describe the arguments in here.
* @classification disease.hypothermia
* @see help::effects
*/
#include <effect.h>
/** @ignore yes */
string query_classification() { return "disease.hypothermia"; }
/** @ignore yes */
int beginning( object player, int index, int id ) {
if ( !index )
index = 100;
tell_object( player, "You feel a bit chilly.\n" );
player->submit_ee( "change_index", ({ 60, 60 }), EE_CONTINUOUS );
player->submit_ee( "stat_adjusts", ({ 90, 90 }), EE_CONTINUOUS );
return index;
} /* beginning() */
/** @ignore yes */
int merge_effect( object player, int index ) { return index; }
/** @ignore yes */
void end( object player ) {
tell_object( player, "You feel a lot warmer now.\n" );
} /* end() */
void change_index( object player, int index, int id ) {
int *enums, pwet;
if ( !environment( player ) )
return;
if ( !environment( player )->query_property( "freezer" ) ) {
player->submit_ee( 0, 0, EE_REMOVE );
return;
}
index -= 7 - (int)player->query_con() / 7;
if ( index < 0 ) {
player->dest_hide_shadow();
tell_object( player, "The cold is just too much for you.\n" );
tell_room( environment( player ), "Frost riming "+
(string)player->query_possessive() +" skin in a thick crust, "+
(string)player->the_short() +" expires.\n", player );
player->do_death();
return;
}
switch( random( 4 ) ) {
case 0 :
player->dest_hide_shadow();
tell_object( player, "You shiver.\n" );
tell_room( environment( player ),
capitalize( (string)player->short() ) +" shivers.\n", player );
break;
case 1 :
player->dest_hide_shadow();
tell_object( player, "You rub your arms briskly in an attempt to "+
"keep warm.\n" );
tell_room( environment( player ),
capitalize( (string)player->short() ) +" rubs "+
(string)player->query_possessive() +" arms briskly.\n",
player );
break;
case 2 :
enums = (int *)player->effects_matching("body.wetness");
if ( sizeof( enums ) )
pwet = (int)player->arg_of( enums[ 0 ] );
if ( (int)pwet > 25 ) {
player->dest_hide_shadow();
tell_object( player, "You dislodge a lump of ice, which falls "+
"and shatters on the floor.\n" );
tell_room( environment( player ),
capitalize( (string)player->short() ) +" dislodges a lump "+
"of ices, which falls and shatters on the floor.\n",
player );
player->add_effect("/std/effects/wetness", -25 );
}
break;
default :
tell_object( player, "You're getting really cold in here.\n" );
}
player->set_arg_of( (int)player->sid_to_enum( id ), index );
} /* change_index() */
void stat_adjusts( object player ) {
switch ( random( 3 ) ) {
case 0 :
tell_object( player, "You feel your strength being drained by the "+
"below freezing temperatures.\n" );
player->adjust_tmp_str( -1 );
return;
case 1 :
tell_object( player, "You really don't feel at all well stuck in "+
"here.\n" );
player->adjust_tmp_con( -1 );
return;
default :
if ( (string)player->query_race() == "troll" ) {
tell_object( player, "You feel a tingling between your ears and "+
"new and strangely clever thoughts race along the "+
"superconducting neural pathways of your brain.\n" );
player->adjust_int( 1 );
}
}
} /* stat_adjusts() */