/*  -*- LPC -*-
 * $Locker:  $
 * $Id: death_shadow.c,v 1.2 1998/03/30 01:14:23 olorin Exp $
 * $Log: death_shadow.c,v $
 * Revision 1.2  1998/03/30 01:14:23  olorin
 * added functions so remember if the death cost a life, and if resurrect
 * should restore it.
 *
 * Added autodoc stuff as well.
 *
 * Revision 1.1  1998/01/06 04:39:04  ceres
 * Initial revision
 */
object my_player;
int cost_life, resurrect_adds_life;
/** @ignore yes */
int test_add(object ob) {
   if (ob->query_property("dead usable"))
      return 1;
   return 0;
} /* test_add() */
/**
 * This function remembers if the death cost a life
 * @param i 1 if it cost a life, 0 if it didn't
 */
void set_death_cost_life( int i ) { cost_life = i; }
/**
 * This function remembers if the death cost a life
 * @return 1 if it cost a life, 0 if it didn't
 */
int query_death_cost_life() { return cost_life; }
/**
 * This function remembers if resurrect should restore a life
 * @param i 1 if resurrect should restore a life, 0 if it shouldn't
 */
void set_resurrect_adds_life( int i ) { resurrect_adds_life = i; }
/**
 * This function remembers if resurrect should restore a life
 * @return 1 if resurrect should restore a life, 0 if it shouldn't
 */
int query_resurrect_adds_life() { return resurrect_adds_life; }
/** @ignore yes */
void attack() {
} /* attack() */
/** @ignore yes */
void adjust_hp() {
} /* adjust_hp() */
/** @ignore yes */
void set_hp() {
} /* set_hp() */
/** @ignore yes */
void do_death() {
/* He's already dead...  sheeze.  */
} /* do_death() */
/**
 * This function sets this object up as a clone of ob, and if done
 * while the player is reloading, it'll also restore the values returned
 * by query_resurrect_adds_life() and query_death_cost_life()
 * @param ob the object to shadow
 */
void setup_shadow( object ob ) {
   shadow( ob, 1 );
   my_player = ob;
   /* restore status */
   cost_life = my_player->query_property( "death cost life" );
   my_player->remove_property( "death cost life" );
   resurrect_adds_life = my_player->query_property( "resurrect should add life" );
   my_player->remove_property( "resurrect should add life" );
} /* setup_shadow() */
/** @ignore yes */
int attack_by( object ob ) {
   tell_object( ob, "This person is a ghost... You cannot attack them.\n" );
   ob->stop_fight( my_player );
   return 1;
} /* attack_by() */
/** @ignore yes */
int attack_ob( object ob ) {
   write( "Your hand passes right through it!  You are just a ghost!\n" );
   return 0;
} /* attack_ob() */
/** @ignore yes */
string short() {
   if ( !my_player )
      return "death shadow";
   return "the ghost of "+my_player->short();
} /* short() */
/** @ignore yes */
void dest_death_shadow() {
   destruct( TO );
} /* dest_death_shadow() */
/** @ignore yes */
int command_shadowed( string verb, string args ) {
    if( verb == "cast" ) {
        write( "Casting spells when you are dead?\n" );
        return 1;
    }
    return my_player->command_shadowed( verb, args );
} /* command_shadowed() */
/** @ignore yes */
int do_shout() {
   write( "You are dead, that is not possible.\n" );
   return 1;
} /* do_shout() */
/** @ignore yes */
int do_echo() {
   write( "You are dead...\n" );
   return 1;
} /* do_echo() */
/** @ignore yes */
int do_guild_command() {
   write( "You are dead!\n" );
   return 1;
} /* do_guild_command() */
/** @ignore yes */
int do_race_command() {
   write( "You are dead!\n" );
   return 1;
} /* do_race_command() */
/** @ignore yes */
int score() {
   write( "You are just a disembodied spirit.  What use has a wispy thing "
         "like you have for a collection of meaningless numbers?\n" );
   return 1;
} /* score() */
 
/** @ignore yes */
void second_life() {
} /* second_life() */
/** @ignore yes */
mapping query_dynamic_auto_load() {
   if ( my_player ) {
      /* save status before save */
      my_player->add_property( "death cost life", cost_life );
      my_player->add_property( "resurrect should add life", 
                              resurrect_adds_life );
      return my_player->query_dynamic_auto_load();
   } else
      return ([ ]);
} /* query_dynamic_auto_load() */