2 ITEM(holybanana
, banana
)
5 virtual truth
HitEffect(character
*, character
*, v2
, int, int, truth
);
6 virtual truth
Zap(character
*, v2
, int);
8 virtual int GetSpecialFlags() const;
9 virtual void AddInventoryEntry(ccharacter
*, festring
&, int, truth
) const;
10 virtual truth
ReceiveDamage(character
*, int, int, int);
18 int holybanana::GetSpecialFlags() const { return ST_FLAME_1
; }
22 truth
holybanana::HitEffect(character
* Enemy
, character
* Hitter
, v2 HitPos
, int BodyPartIndex
, int Direction
, truth BlockedByArmour
)
24 truth BaseSuccess
= banana::HitEffect(Enemy
, Hitter
, HitPos
, BodyPartIndex
, Direction
, BlockedByArmour
);
26 if(Enemy
->IsEnabled() && RAND() & 1)
28 if(Enemy
->IsPlayer() || Hitter
->IsPlayer() || Enemy
->CanBeSeenByPlayer() || Hitter
->CanBeSeenByPlayer())
29 ADD_MESSAGE("%s banana burns %s.", Hitter
->CHAR_POSSESSIVE_PRONOUN
, Enemy
->CHAR_DESCRIPTION(DEFINITE
));
31 return Enemy
->ReceiveBodyPartDamage(Hitter
, 2 + (RAND() & 3), FIRE
, BodyPartIndex
, Direction
) || BaseSuccess
;
39 truth
holybanana::Zap(character
* Zapper
, v2
, int Direction
)
41 if(Charges
> TimesUsed
)
43 ADD_MESSAGE("BANG! You zap %s!", CHAR_NAME(DEFINITE
));
44 Zapper
->EditExperience(PERCEPTION
, 150, 1 << 10);
49 CONST_S("killed by ") + GetName(INDEFINITE
),
58 (GetLevel()->*level::GetBeam(PARTICLE_BEAM
))(Beam
);
62 ADD_MESSAGE("Click!");
69 void holybanana::AddInventoryEntry(ccharacter
* Viewer
, festring
& Entry
, int, truth ShowSpecialInfo
) const // never piled
71 AddName(Entry
, INDEFINITE
);
75 Entry
<< " [\1C" << GetWeight() << "g\2, DAM \1Y" << GetBaseMinDamage() << "\2-\1Y" << GetBaseMaxDamage() << "\2";
76 Entry
<< ", " << GetBaseToHitValueDescription();
79 Entry
<< ", " << GetStrengthValueDescription();
81 int CWeaponSkillLevel
= Viewer
->GetCWeaponSkillLevel(this);
82 int SWeaponSkillLevel
= Viewer
->GetSWeaponSkillLevel(this);
84 if(CWeaponSkillLevel
|| SWeaponSkillLevel
)
85 Entry
<< ", skill \1C" << CWeaponSkillLevel
<< '/' << SWeaponSkillLevel
<< "\2";
88 Entry
<< ", used \1C1\2 time";
90 Entry
<< ", used \1C" << TimesUsed
<< "\2 times";
98 truth
holybanana::ReceiveDamage(character
* Damager
, int Damage
, int Type
, int)
100 if(TimesUsed
!= 6 && Type
& (PHYSICAL_DAMAGE
|FIRE
|ENERGY
) && Damage
&& (Damage
> 50 || !(RAND() % (100 / Damage
))))
102 festring DeathMsg
= CONST_S("killed by an explosion of ");
103 AddName(DeathMsg
, INDEFINITE
);
106 DeathMsg
<< " caused @bk";
108 if(GetSquareUnder()->CanBeSeenByPlayer(true))
109 ADD_MESSAGE("%s explodes!", GetExtendedDescription().CStr());
111 lsquare
* Square
= GetLSquareUnder();
114 Square
->GetLevel()->Explosion(Damager
, DeathMsg
, Square
->GetPos(), (6 - TimesUsed
) * 50);