/* -*- LPC -*- */
/*
* $Locker: $
* $Id: living_light.c,v 1.1 1998/01/06 04:06:32 ceres Exp $
* $Log: living_light.c,v $
* Revision 1.1 1998/01/06 04:06:32 ceres
* Initial revision
*
*/
/**
* This is the effect skelton docs. This effect
* has a classification of "magic.body.light".
* <p>
* Describe the arguments in here.
* @classification magic.body.light
* @see help::effects
*/
#include "path.h"
#include <effect.h>
#define COST_PER_ROUND 30
#define INTENSITY 25
/** @ignore yes */
string query_classification() { return "magic.body.light"; }
/** @ignore yes */
int beginning( object player ) {
tell_object( player, "A soft glow spreads out from your middle to "+
"envelop you.\n" );
tell_room( environment( player ), "A soft glow spreads out from "+
(string)player->the_short() +"'s middle to envelop "+
(string)player->query_objective() +".\n", player );
player->adjust_light( INTENSITY );
player->add_extra_look( this_object() );
player->submit_ee( "decrease_points", 1, EE_ONCE );
player->submit_ee( "decrease_points", ({ 30, 60 }), EE_CONTINUOUS );
return INTENSITY;
} /* beginning() */
void restart( object player, int light ) {
player->adjust_light( light );
player->add_extra_look( this_object() );
} /* restart() */
/** @ignore yes */
int merge_effect( object player, int light ) {
int times;
times = sizeof( filter_array( (object *)player->query_armours(),
"test_for_effect", this_object() ) );
if ( light >= ( INTENSITY * times ) )
return light;
tell_object( player, "The light surrounding you intensifies.\n" );
tell_room( environment( player ), "The light around "+
(string)player->short() +" grows brighter.\n", player );
player->adjust_light( INTENSITY );
return light + INTENSITY;
} /* merge_effect() */
/** @ignore yes */
void end( object player, int light ) {
tell_object( player, "The light surrounding you flickers and winks "+
"out.\n" );
tell_room( environment( player ), "The light around "+
(string)player->short() +" flickers and winks out.\n", player );
player->adjust_light( -light );
player->remove_extra_look( this_object() );
} /* end() */
int test_for_effect( object thing ) {
if ( !thing )
return 0;
return member_array( file_name( this_object() ),
(string *)thing->query_wear_effects() ) != -1;
} /* test_for_effect() */
void decrease_points( object player, int light, int id ) {
int times;
if ( player->query_auto_loading() )
return;
times = sizeof( filter_array( (object *)player->query_armours(),
"test_for_effect", this_object() ) );
if ( !times ) {
player->submit_ee( 0, 0, EE_REMOVE );
return;
}
if ( (int)player->query_gp() < times * COST_PER_ROUND ) {
player->submit_ee( 0, 0, EE_REMOVE );
return;
}
player->clear_gp_info();
player->adjust_gp( - times * COST_PER_ROUND );
if ( light != ( times * INTENSITY ) ) {
tell_object( player, "The light surrounding you flickers and "+
"stabilises, only a little dimmer than before.\n" );
tell_room( environment( player ), "The light around "+
(string)player->short() +" flickers and stabilises, only a "+
"little dimmer than before.\n", player );
player->adjust_light( times * INTENSITY - light );
light = times * INTENSITY;
player->set_arg_of( (int)player->sid_to_enum( id ), light );
}
} /* decrease_points() */
string extra_look( object player ) {
return capitalize( (string)player->query_pronoun() ) +" is surrounded by "+
"a soft yellow glow.\n";
} /* extra_look() */