inherit "/std/races/standard";
#include "light_defs.inc"
#define CLAWS "/std/races/shadows/claws"
#define CONT_CHANCE 250
#define WOLF_SHADOW "/std/races/shadows/werewolf_sh"
#define WEATHERHAND "/obj/handlers/weather"
#define OLDRACE "old_race"
void change_race(object player);
void setup() {
set_long("The demonical werewolf was once a normal being, now possessed "
"by a fearful spirit..\n");
set_name("werewolf");
set_light_limits(LIGHT_DROW_LOW, LIGHT_DROW_HIGH);
}
//Needed for healing by the werewolf shadow
int query_enchant() { return 1; }
void set_racial_bonuses()
{
previous_object()->adjust_bonus_str(10);
previous_object()->adjust_bonus_dex(30);
previous_object()->adjust_bonus_int(-5);
previous_object()->adjust_bonus_wis(-5);
previous_object()->adjust_bonus_cha(-(previous_object()->query_cha()-3));
}
string query_desc(object ob) {
return "A fierce looking wolf with red glowing eyes.\n";
}
void race_heartbeat(object player)
{
object *obs;
string moon_str;
int i;
if(!player||!ENV(player)||player->query_dead()) return;
if( !ENV(player)->query_property("noguild"))
{
obs = all_inventory(ENV(player));
obs -= ({ player });
tell_room(ENV(player),player->query_cap_name()+" snarls viciously "
"and attacks everything in sight.\n");
for(i=0;i<sizeof(obs);i++)
{
if(!obs[i]->query_alive()) continue;
if(obs[i]->query_property("wolfbane") || player->query_property("wolfbane"))
{
tell_object(player,"A terrible smell assault your wolf senses "
"driving you away.\n");
player->run_away();
break;
}
if(!interactive(player) && !random(CONT_CHANCE))
{
tell_object(obs[i],player->query_cap_name()+"'s teeth sinks deep "
"into your thigh.\n");
obs[i]->add_property("WEREWOLF",1);
}
player->attack_ob(obs[i]);
}
player->adjust_hp(100);
if(WEATHERHAND->query_day(ENV(player)))
change_race(player);
}
::race_heartbeat(player); // or they can't drown
}
void start_player(object player)
{
object claws, shadow;
int i;
player->add_static_property("nocast",1);
player->add_static_property("noguild",1);
player->add_static_property("magical",70);
"/std/spells/wizard/useful_stuff"->force_drop_everything(player);
for(i=0;i<2;i++)
{
claws = clone_object(CLAWS);
claws->move(player);
player->hold_ob(claws);
claws->add_property("cursed",1);
}
shadow = clone_object(WOLF_SHADOW);
shadow->setup_shadow(player);
player->set_language("werewolf");
::start_player(player);
}
void change_race(object player)
{
object *claws;
int i;
if(player->query_property("JUST_CHANGED")) return;
player->remove_werewolf_shadow();
player->remove_static_property("nocast");
player->remove_static_property("noguild");
player->remove_static_property("magical");
player->add_timed_property("JUST_CHANGED",1,100);
claws = find_match("claws",player);
for(i=0;i<sizeof(claws);i++)
{
claws[i]->remove_property("cursed");
claws[i]->dest_me();
}
player->set_race_ob("/std/races/"+player->query_property(OLDRACE));
}
void player_quit(object player)
{
change_race(player);
}