2 CHARACTER(werewolfwolf
, humanoid
)
5 virtual festring
GetKillName() const;
6 virtual truth
SpecialBiteEffect(character
* Victim
, v2 HitPos
, int BodyPartIndex
, int Direction
, truth BlockedByArmour
, truth Critical
, int DoneDamage
);
13 festring
werewolfwolf::GetKillName() const
15 if(GetPolymorphBackup() && GetPolymorphBackup()->GetType() == werewolfhuman::ProtoType
.GetIndex())
16 return GetName(INDEFINITE
);
18 return humanoid::GetKillName();
22 truth
werewolfwolf::SpecialBiteEffect(character
* Victim
, v2 HitPos
, int BodyPartIndex
, int Direction
, truth BlockedByArmour
, truth Critical
, int DoneDamage
) {
23 if (!BlockedByArmour
&& Victim
->IsWarmBlooded() && (!(RAND() % 2) || Critical
) && !Victim
->AllowSpoil()) {
24 // Werewolf wolf gives lycanthropy
25 if (Victim
->IsHumanoid() && !Victim
->StateIsActivated(VAMPIRISM
) && !Victim
->StateIsActivated(LYCANTHROPY
) && !Victim
->StateIsActivated(DISEASE_IMMUNITY
)) {
26 Victim
->BeginTemporaryState(LYCANTHROPY
, 6000 + RAND_N(2000));
29 // Werewolves do double damage against vampires and this is a drain attack
30 if (Victim
->StateIsActivated(VAMPIRISM
) && (DoneDamage
>= 1)) {
32 ADD_MESSAGE("You drain some life force from %s!", Victim
->CHAR_DESCRIPTION(DEFINITE
));
33 else if (Victim
->IsPlayer() || Victim
->CanBeSeenByPlayer() || CanBeSeenByPlayer())
34 ADD_MESSAGE("%s drains some life force from %s!", CHAR_DESCRIPTION(DEFINITE
), Victim
->CHAR_DESCRIPTION(DEFINITE
));
35 return Victim
->ReceiveBodyPartDamage(this, DoneDamage
, DRAIN
, BodyPartIndex
, Direction
);