#define AN my_player->query_cap_name()
#define DN himx->query_cap_name()
object my_player;
object himx;
void dest_shadow();
int test_add() { return 0; }
void setup_shadow(object ob)
{
shadow(ob,1);
my_player = ob;
my_player->add_alias("wolf");
}
string *query_languages()
{
return ({ "werewolf", "grunt" });
}
string query_current_language()
{
return "werewolf";
}
string query_short()
{
string path = file_name(previous_object());
if (!my_player)
return "Werewolf hide";
if((path[20..23] == "look") || (path[20..24] == "glance"))
return "A wolf";
if((path[0..18] == "/global/player/cmds")||
(!previous_object()->is_player()))
return my_player->short();
return "A wolf";
}
string query_cap_name()
{
return capitalize(query_short());
}
void remove_werewolf_shadow()
{
tell_object(my_player, "You return to your previous form.\n");
tell_room(environment(my_player), my_player->query_cap_name()+" returns "+
my_player->query_possessive()+" normal form.\n", my_player);
my_player->remove_alias("wolf");
destruct(this_object());
}
int adjust_hp(int i, object hp_remover) {
if(previous_object()){
if(previous_object()->query_weapon()){
if(previous_object()->query_property("SILVER")||
previous_object()->query_property("SILVER_BLADE")){
i *= 1.5;
}
else if(previous_object()->query_enchant()<1){
i = 0;
}
}
}
return my_player->adjust_hp(i, hp_remover);
}
mapping valid_attack() {
return([
"kick" :({AN+" rends "+DN+" horribly.\n",
"You rend "+DN+" horribly.\n",
AN+" rends you horribly.\n"}),
"knee" :({AN+" rakes "+DN+" with its claws.\n",
"You rake "+DN+" with your claws.\n",
AN+" rakes you with its claws.\n"}),
"punch" :({AN+" tears "+DN+" with its claw.\n",
"You tear "+DN+" with your claws.\n",
AN+" tears you with its fist.\n"}),
"headbutt" :({AN+" savages "+DN+" with its jaws.\n",
"You savage "+DN+" with your jaws.\n",
AN+" savages you with its jaws.\n"}) ]);
} /* valid_attack() */
/* this is from haste_sh.c */
int weapon_attack(object him, object me){
int ret, i, num;
object *weap;
himx = him;
weap = my_player->query_weapons_wielded();
if(sizeof(weap))
"/std/spells/wizard/useful_stuff"->force_drop_everything(my_player);
ret = 0;
num = 1 + my_player->query_level()/10;
num += 1;
num -= random(3);
if(num < 1) num = 1;
my_player->adjust_tmp_tohit_bon(50);
my_player->adjust_tmp_damage_bon(5);
for(i=0;i<sizeof(num);i++)
ret += my_player->unarmed_attack(him,me);
my_player->adjust_tmp_tohit_bon(-50);
my_player->adjust_tmp_damage_bon(-5);
} /* weapon_attack() */