typos
[k8-i-v-a-n.git] / src / game / humans / humanoid_angel.cpp
blob86292e4d3c5726cdead839e911d0b2f40b0d5090
1 #ifdef HEADER_PHASE
2 CHARACTER(angel, humanoid)
4 public:
5 angel() : LastHealed(0) {}
7 virtual void Load (inputfile &);
8 virtual void Save (outputfile &) const;
9 virtual truth AttachBodyPartsOfFriendsNear ();
10 virtual truth BodyPartIsVital (int) const;
11 virtual int GetAttribute (int, truth = true) const;
12 virtual col24 GetBaseEmitation () const;
13 virtual truth CanCreateBodyPart (int) const;
14 virtual cfestring& GetStandVerb () const { return character::GetStandVerb(); }
15 virtual void FinalProcessForBone ();
16 virtual void CreateInitialEquipment (int);
18 protected:
19 virtual int GetTorsoMainColor () const;
20 virtual int GetArmMainColor () const;
21 virtual void GetAICommand ();
23 protected:
24 feuLong LastHealed;
28 #else
31 truth angel::BodyPartIsVital (int I) const { return I == TORSO_INDEX || I == HEAD_INDEX; }
32 col16 angel::GetTorsoMainColor () const { return GetMasterGod()->GetColor(); }
33 col16 angel::GetArmMainColor () const { return GetMasterGod()->GetColor(); }
36 void angel::Save (outputfile &SaveFile) const {
37 humanoid::Save(SaveFile);
38 SaveFile << LastHealed;
42 void angel::Load (inputfile &SaveFile) {
43 humanoid::Load(SaveFile);
44 SaveFile >> LastHealed;
48 void angel::FinalProcessForBone () {
49 humanoid::FinalProcessForBone();
50 LastHealed = 0;
54 void angel::CreateInitialEquipment (int SpecialFlags) {
55 humanoid::CreateInitialEquipment(SpecialFlags);
56 GetStack()->AddItem(holybook::Spawn(GetConfig(), SpecialFlags));
60 void angel::GetAICommand () {
61 if ((LastHealed || game::GetTick() - LastHealed > 10000) && AttachBodyPartsOfFriendsNear()) return;
62 humanoid::GetAICommand();
66 /* Returns true if the angel finds somebody near to heal else false */
67 truth angel::AttachBodyPartsOfFriendsNear () {
68 character *HurtOne = 0;
69 bodypart *SeveredOne = 0;
71 for(int d = 0; d < GetNeighbourSquares(); ++d) {
72 square *Square = GetNeighbourSquare(d);
74 if (Square) {
75 character *Char = Square->GetCharacter();
77 if (Char && (!HurtOne || Char->IsPlayer()) && GetRelation(Char) == FRIEND && !Char->HasAllBodyParts()) {
78 bodypart *BodyPart = Char->FindRandomOwnBodyPart(false);
80 if (BodyPart) { HurtOne = Char; SeveredOne = BodyPart; }
85 if (HurtOne) {
86 if (HurtOne->IsPlayer()) ADD_MESSAGE("%s puts your %s back to its place.", CHAR_DESCRIPTION(DEFINITE), SeveredOne->GetBodyPartName().CStr());
87 else if (CanBeSeenByPlayer()) ADD_MESSAGE("%s helps %s by putting %s %s in its old place.", CHAR_DESCRIPTION(DEFINITE), HurtOne->CHAR_DESCRIPTION(DEFINITE), HurtOne->GetPossessivePronoun().CStr(), SeveredOne->GetBodyPartName().CStr());
88 SeveredOne->SetHP(1);
89 SeveredOne->RemoveFromSlot();
90 HurtOne->AttachBodyPart(SeveredOne);
91 LastHealed = game::GetTick();
92 DexterityAction(10);
93 return true;
95 return false;
99 // temporary until wings are bodyparts
100 int angel::GetAttribute (int Identifier, truth AllowBonus) const {
101 if (Identifier == LEG_STRENGTH) return GetDefaultLegStrength();
102 if (Identifier == AGILITY) return GetDefaultAgility();
103 return humanoid::GetAttribute(Identifier, AllowBonus);
107 col24 angel::GetBaseEmitation () const {
108 auto al = GetMasterGod()->GetBasicAlignment();
109 if (al == GOOD) return MakeRGB24(150, 150, 150);
110 if (al == NEUTRAL) return MakeRGB24(120, 120, 150);
111 if (al == EVIL) return MakeRGB24(150, 110, 110);
112 return 0;
116 truth angel::CanCreateBodyPart (int I) const {
117 return (I == TORSO_INDEX || I == HEAD_INDEX || I == RIGHT_ARM_INDEX || I == LEFT_ARM_INDEX);
121 #endif