CLIVAN: copied muntuo (not all critters yet)
[k8-i-v-a-n.git] / src / game / human.h
blob0b0cdba69316d7e8a2dc5dcda766967fb825facd
1 /*
3 * Iter Vehemens ad Necem (IVAN)
4 * Copyright (C) Timo Kiviluoto
5 * Released under the GNU General
6 * Public License
8 * See LICENSING which should be included
9 * along with this file for more details
13 #ifndef __HUMAN_H__
14 #define __HUMAN_H__
16 #include "char.h"
18 CHARACTER(humanoid, character)
20 public:
21 friend class rightarm;
22 friend class leftarm;
23 public:
24 humanoid () : CurrentRightSWeaponSkill(0), CurrentLeftSWeaponSkill(0) { }
25 humanoid (const humanoid &);
26 virtual ~humanoid ();
27 virtual truth CanWield () const;
28 virtual truth Hit (character *, v2, int, int = 0);
29 virtual int GetSize () const;
30 head *GetHead () const { return static_cast<head*>(*BodyPartSlot[HEAD_INDEX]); }
31 arm *GetRightArm () const { return static_cast<arm*>(*BodyPartSlot[RIGHT_ARM_INDEX]); }
32 arm *GetLeftArm () const { return static_cast<arm*>(*BodyPartSlot[LEFT_ARM_INDEX]); }
33 groin *GetGroin () const { return static_cast<groin*>(*BodyPartSlot[GROIN_INDEX]); }
34 leg *GetRightLeg () const { return static_cast<leg*>(*BodyPartSlot[RIGHT_LEG_INDEX]); }
35 leg *GetLeftLeg () const { return static_cast<leg*>(*BodyPartSlot[LEFT_LEG_INDEX]); }
36 item *GetHelmet () const { return GetHead() ? GetHead()->GetHelmet() : 0; }
37 item *GetAmulet () const { return GetHead() ? GetHead()->GetAmulet() : 0; }
38 item *GetCloak () const { return GetHumanoidTorso() ? GetHumanoidTorso()->GetCloak() : 0; }
39 item *GetBodyArmor () const { return GetHumanoidTorso() ? GetHumanoidTorso()->GetBodyArmor() : 0; }
40 item *GetBelt () const { return GetHumanoidTorso() ? GetHumanoidTorso()->GetBelt() : 0; }
41 item *GetRightWielded () const { return GetRightArm() ? GetRightArm()->GetWielded() : 0; }
42 item *GetLeftWielded () const { return GetLeftArm() ? GetLeftArm()->GetWielded() : 0; }
43 item *GetRightRing () const { return GetRightArm() ? GetRightArm()->GetRing() : 0; }
44 item *GetLeftRing () const { return GetLeftArm() ? GetLeftArm()->GetRing() : 0; }
45 item *GetRightGauntlet () const { return GetRightArm() ? GetRightArm()->GetGauntlet() : 0; }
46 item *GetLeftGauntlet () const { return GetLeftArm() ? GetLeftArm()->GetGauntlet() : 0; }
47 item *GetRightBoot () const { return GetRightLeg() ? GetRightLeg()->GetBoot() : 0; }
48 item *GetLeftBoot () const { return GetLeftLeg() ? GetLeftLeg()->GetBoot() : 0; }
49 void SetHelmet (item *What) { GetHead()->SetHelmet(What); }
50 void SetAmulet (item *What) { GetHead()->SetAmulet(What); }
51 void SetCloak (item *What) { GetHumanoidTorso()->SetCloak(What); }
52 void SetBodyArmor (item *What) { GetHumanoidTorso()->SetBodyArmor(What); }
53 void SetBelt (item *What) { GetHumanoidTorso()->SetBelt(What); }
54 void SetRightWielded (item *What) { GetRightArm()->SetWielded(What); }
55 void SetLeftWielded (item *What) { GetLeftArm()->SetWielded(What); }
56 void SetRightRing (item *What) { GetRightArm()->SetRing(What); }
57 void SetLeftRing (item *What) { GetLeftArm()->SetRing(What); }
58 void SetRightGauntlet (item *What) { GetRightArm()->SetGauntlet(What); }
59 void SetLeftGauntlet (item *What) { GetLeftArm()->SetGauntlet(What); }
60 void SetRightBoot (item *What) { GetRightLeg()->SetBoot(What); }
61 void SetLeftBoot (item *What) { GetLeftLeg()->SetBoot(What); }
62 arm *GetMainArm () const;
63 arm *GetSecondaryArm () const;
64 virtual truth ReceiveDamage(character*, int, int, int = ALL, int = 8, truth = false, truth = false, truth = false, truth = true);
65 virtual truth BodyPartIsVital(int) const;
66 virtual truth BodyPartCanBeSevered(int) const;
67 virtual item* GetMainWielded() const;
68 virtual item* GetSecondaryWielded() const;
69 virtual cchar* GetEquipmentName(int) const;
70 virtual bodypart* GetBodyPartOfEquipment(int) const;
71 virtual item* GetEquipment(int) const;
72 virtual int GetEquipments() const { return 13; }
73 virtual void SwitchToDig(item*, v2);
74 virtual int GetUsableLegs() const;
75 virtual int GetUsableArms() const;
76 virtual truth CheckKick() const;
77 virtual int OpenMultiplier() const;
78 virtual int CloseMultiplier() const;
79 virtual truth CheckThrow() const;
80 virtual truth CheckThrowItemOpportunity();
81 virtual truth CheckAIZapOpportunity();
82 virtual truth CheckOffer() const;
83 virtual sorter EquipmentSorter(int) const;
84 virtual void SetEquipment(int, item*);
85 virtual void DrawSilhouette(truth) const;
86 virtual int GetGlobalResistance(int) const;
87 virtual truth TryToRiseFromTheDead();
88 virtual truth HandleNoBodyPart(int);
89 virtual void Kick(lsquare*, int, truth = false);
90 virtual double GetTimeToKill(ccharacter*, truth) const;
91 virtual int GetAttribute(int, truth = true) const;
92 virtual truth EditAttribute(int, int);
93 virtual void EditExperience(int, double, double);
94 virtual int DrawStats(truth) const;
95 virtual void Bite(character*, v2, int, truth = false);
96 virtual int GetCarryingStrength() const;
97 virtual int GetRandomStepperBodyPart() const;
98 virtual int CheckForBlock(character*, item*, double, int, int, int);
99 virtual truth AddSpecialSkillInfo(felist&) const;
100 virtual truth CheckBalance(double);
101 virtual sLong GetMoveAPRequirement(int) const;
102 virtual v2 GetEquipmentPanelPos(int) const;
103 virtual truth EquipmentEasilyRecognized(int) const;
104 sweaponskill* GetCurrentRightSWeaponSkill() const { return CurrentRightSWeaponSkill; }
105 void SetCurrentRightSWeaponSkill(sweaponskill* What) { CurrentRightSWeaponSkill = What; }
106 sweaponskill* GetCurrentLeftSWeaponSkill() const { return CurrentLeftSWeaponSkill; }
107 void SetCurrentLeftSWeaponSkill(sweaponskill* What) { CurrentLeftSWeaponSkill = What; }
108 virtual void SWeaponSkillTick();
109 virtual void Save(outputfile&) const;
110 virtual void Load(inputfile&);
111 virtual void SignalEquipmentAdd(int);
112 virtual void SignalEquipmentRemoval(int, citem*);
113 virtual void DrawBodyParts(blitdata&) const;
114 virtual truth CanUseStethoscope(truth) const;
115 virtual truth IsUsingArms() const;
116 virtual truth IsUsingLegs() const;
117 virtual truth IsUsingHead() const;
118 virtual void CalculateBattleInfo();
119 virtual void CalculateBodyParts();
120 virtual void CalculateAllowedWeaponSkillCategories();
121 virtual truth HasALeg() const { return HasAUsableLeg(); }
122 virtual void AddSpecialEquipmentInfo(festring&, int) const;
123 virtual void CreateInitialEquipment(int);
124 virtual festring GetBodyPartName(int, truth = false) const;
125 virtual void CreateBlockPossibilityVector(blockvector&, double) const;
126 virtual item* SevereBodyPart(int, truth = false, stack* = 0);
127 virtual int GetSWeaponSkillLevel(citem*) const;
128 virtual truth UseMaterialAttributes() const;
129 virtual void CalculateDodgeValue();
130 virtual truth CheckZap();
131 virtual truth IsHumanoid() const { return true; }
132 virtual truth CheckTalk();
133 virtual truth CheckIfEquipmentIsNotUsable(int) const;
134 virtual void AddSpecialStethoscopeInfo(felist&) const;
135 virtual item* GetPairEquipment(int) const;
136 virtual truth HasHead() const { return truth(GetHead()); }
137 virtual cfestring& GetStandVerb() const;
138 virtual head* Behead();
139 virtual void AddAttributeInfo(festring&) const;
140 virtual void AddAttackInfo(felist&) const;
141 virtual void AddDefenceInfo(felist&) const;
142 virtual void DetachBodyPart();
143 virtual int GetRandomApplyBodyPart() const;
144 void EnsureCurrentSWeaponSkillIsCorrect(sweaponskill*&, citem*);
145 virtual int GetSumOfAttributes() const;
146 virtual truth CheckConsume(cfestring&) const;
147 virtual truth CanConsume(material*) const;
148 virtual truth PreProcessForBone();
149 virtual void FinalProcessForBone();
150 virtual void StayOn(liquid*);
151 virtual head* GetVirtualHead() const { return GetHead(); }
152 virtual character* CreateZombie() const;
153 virtual void LeprosyHandler();
154 virtual void DropRandomNonVitalBodypart();
155 virtual void DropBodyPart(int);
156 virtual void DuplicateEquipment(character*, uLong);
157 virtual int GetAttributeAverage() const;
158 virtual truth CanVomit() const;
159 virtual truth CheckApply() const;
160 virtual truth CanForceVomit() const { return TorsoIsAlive() && HasAUsableArm(); }
161 virtual truth IsTransparent() const;
162 virtual void ModifySituationDanger(double&) const;
163 virtual int RandomizeTryToUnStickBodyPart(uLong) const;
164 virtual truth AllowUnconsciousness() const;
165 virtual truth CanChokeOnWeb(web*) const;
166 virtual truth BrainsHurt() const;
167 virtual cchar* GetRunDescriptionLine(int) const;
168 virtual cchar* GetNormalDeathMessage() const;
169 virtual void ApplySpecialAttributeBonuses();
170 virtual truth MindWormCanPenetrateSkull(mindworm*) const;
171 truth HasSadistWeapon() const;
172 virtual truth HasSadistAttackMode() const;
173 virtual void SurgicallyDetachBodyPart();
174 protected:
175 virtual v2 GetBodyPartBitmapPos(int, truth = false) const;
176 virtual col16 GetBodyPartColorB(int, truth = false) const;
177 virtual col16 GetBodyPartColorC(int, truth = false) const;
178 virtual col16 GetBodyPartColorD(int, truth = false) const;
179 virtual int GetBodyPartSparkleFlags(int) const;
180 virtual sLong GetBodyPartSize(int, int) const;
181 virtual sLong GetBodyPartVolume(int) const;
182 virtual bodypart* MakeBodyPart(int) const;
183 virtual cfestring& GetDeathMessage() const;
184 virtual v2 GetDrawDisplacement(int) const { return ZERO_V2; }
185 truth HasAUsableArm() const;
186 truth HasAUsableLeg() const;
187 truth HasTwoUsableLegs() const;
188 truth CanAttackWithAnArm() const;
189 truth RightArmIsUsable() const;
190 truth LeftArmIsUsable() const;
191 truth RightLegIsUsable() const;
192 truth LeftLegIsUsable() const;
193 std::list<sweaponskill*> SWeaponSkill;
194 sweaponskill* CurrentRightSWeaponSkill;
195 sweaponskill* CurrentLeftSWeaponSkill;
196 static cint DrawOrder[];
199 CHARACTER(playerkind, humanoid)
201 public:
202 playerkind();
203 playerkind(const playerkind&);
204 virtual void Save(outputfile&) const;
205 virtual void Load(inputfile&);
206 virtual void SetSoulID(uLong);
207 virtual truth SuckSoul(character*);
208 virtual truth TryToRiseFromTheDead();
209 virtual void FinalProcessForBone();
210 virtual void BeTalkedTo();
211 virtual truth IsHuman() const { return true; }
212 virtual col16 GetHairColor() const { return HairColor; }
213 virtual col16 GetEyeColor() const { return EyeColor; }
214 virtual v2 GetHeadBitmapPos() const;
215 virtual v2 GetRightArmBitmapPos() const;
216 virtual v2 GetLeftArmBitmapPos() const;
217 virtual int GetNaturalSparkleFlags() const;
218 virtual truth IsPlayerKind() const { return true; }
219 virtual double GetNaturalExperience(int) const;
220 protected:
221 virtual bodypart* MakeBodyPart(int) const;
222 virtual void PostConstruct();
223 uLong SoulID;
224 col16 HairColor;
225 col16 EyeColor;
226 int Talent;
227 int Weakness;
228 truth IsBonePlayer;
229 truth IsClone;
232 CHARACTER(petrus, humanoid)
234 public:
235 petrus();
236 virtual ~petrus();
237 virtual void Save(outputfile&) const;
238 virtual void Load(inputfile&);
239 virtual void BeTalkedTo();
240 truth HealFully(character*);
241 virtual void FinalProcessForBone();
242 virtual truth MoveTowardsHomePos();
243 protected:
244 virtual void CreateCorpse(lsquare*);
245 virtual void GetAICommand();
246 uLong LastHealed;
249 CHARACTER(farmer, humanoid)
251 public:
252 virtual v2 GetHeadBitmapPos() const;
253 virtual v2 GetRightArmBitmapPos() const;
254 virtual v2 GetLeftArmBitmapPos() const { return GetRightArmBitmapPos(); }
257 CHARACTER(guard, humanoid)
259 public:
260 guard() : NextWayPoint(0) { }
261 virtual void Save(outputfile&) const;
262 virtual void Load(inputfile&);
263 virtual void GetAICommand();
264 virtual void SetWayPoints(const fearray<packv2>&);
265 virtual truth MoveTowardsHomePos();
266 virtual void BeTalkedTo();
267 protected:
268 std::vector<v2> WayPoints;
269 uInt NextWayPoint;
272 CHARACTER(shopkeeper, humanoid)
274 public:
275 shopkeeper();
276 protected:
277 virtual void GetAICommand() { StandIdleAI(); }
280 CHARACTER(priest, humanoid)
282 protected:
283 virtual void GetAICommand () { StandIdleAI(); }
284 virtual void BeTalkedTo ();
287 CHARACTER(exiledpriest, priest)
289 public:
290 exiledpriest ();
291 virtual ~exiledpriest ();
292 virtual void Save (outputfile &) const;
293 virtual void Load (inputfile &);
294 virtual void BeTalkedTo ();
295 virtual truth MoveTowardsHomePos ();
296 protected:
297 virtual void GetAICommand ();
298 void healBodyParts ();
299 void healDeseases ();
300 void healAll ();
301 protected:
302 truth mAtHome;
305 CHARACTER(oree, humanoid)
307 public:
308 virtual void Bite(character*, v2, int, truth = false);
309 virtual void GetAICommand();
310 protected:
311 virtual cchar* FirstPersonBiteVerb() const;
312 virtual cchar* FirstPersonCriticalBiteVerb() const;
313 virtual cchar* ThirdPersonBiteVerb() const;
314 virtual cchar* ThirdPersonCriticalBiteVerb() const;
315 virtual cchar* BiteNoun() const;
316 void CallForMonsters();
319 CHARACTER(darkknight, humanoid)
321 protected:
322 virtual int ModifyBodyPartHitPreference(int, int) const;
323 virtual int ModifyBodyPartToHitChance(int, int) const;
324 virtual truth CanPanicFromSeveredBodyPart() const { return false; }
325 virtual void SpecialBodyPartSeverReaction();
328 CHARACTER(ennerbeast, humanoid)
330 public:
331 virtual truth Hit(character*, v2, int, int = 0);
332 virtual truth MustBeRemovedFromBone() const;
333 protected:
334 virtual bodypart* MakeBodyPart(int) const;
335 virtual void GetAICommand();
336 virtual truth AttackIsBlockable(int) const { return false; }
339 CHARACTER(skeleton, humanoid)
341 public:
342 virtual void BeTalkedTo();
343 virtual item* SevereBodyPart(int, truth = false, stack* = 0);
344 virtual truth BodyPartIsVital(int) const;
345 virtual sLong GetBodyPartVolume(int) const;
346 protected:
347 virtual void CreateCorpse(lsquare*);
350 CHARACTER(goblin, humanoid)
354 CHARACTER(golem, humanoid)
356 public:
357 golem();
358 virtual truth MoveRandomly();
359 virtual truth CheckForUsefulItemsOnGround(truth = true) { return false; }
360 virtual void BeTalkedTo();
361 virtual void Save(outputfile&) const;
362 virtual void Load(inputfile&);
363 void SetItemVolume(sLong What) { ItemVolume = What; }
364 protected:
365 virtual truth AddAdjective(festring&, truth) const;
366 virtual material* CreateBodyPartMaterial(int, sLong) const;
367 virtual void CreateCorpse(lsquare*);
368 sLong ItemVolume;
371 CHARACTER(communist, humanoid)
373 public:
374 virtual truth MoveRandomly();
375 virtual void BeTalkedTo();
376 virtual truth BoundToUse(citem*, int) const;
377 virtual truth MustBeRemovedFromBone() const;
378 protected:
379 virtual truth ShowClassDescription() const;
382 CHARACTER(hunter, humanoid)
384 public:
385 virtual void BeTalkedTo();
386 protected:
387 virtual void CreateBodyParts(int);
390 CHARACTER(slave, playerkind)
392 public:
393 virtual void BeTalkedTo();
394 virtual void GetAICommand();
395 virtual col16 GetHairColor() const { return humanoid::GetHairColor(); }
396 virtual col16 GetEyeColor() const { return humanoid::GetEyeColor(); }
397 protected:
398 virtual void PostConstruct();
401 CHARACTER(petrusswife, humanoid)
403 public:
404 petrusswife() : GiftTotal(0) { }
405 virtual truth MoveRandomly() { return MoveRandomlyInRoom(); }
406 virtual truth SpecialEnemySightedReaction(character*);
407 virtual void Save(outputfile&) const;
408 virtual void Load(inputfile&);
409 virtual void BeTalkedTo();
410 protected:
411 int GiftTotal;
414 CHARACTER(housewife, humanoid)
416 public:
417 virtual truth SpecialEnemySightedReaction(character*);
418 protected:
419 virtual int GetHairColor() const;
420 virtual v2 GetHeadBitmapPos() const;
423 CHARACTER(femaleslave, humanoid)
425 public:
426 virtual void BeTalkedTo();
427 protected:
428 virtual void GetAICommand() { StandIdleAI(); }
431 CHARACTER(librarian, humanoid)
433 public:
434 virtual void BeTalkedTo();
435 protected:
436 virtual void GetAICommand() { StandIdleAI(); }
439 CHARACTER(zombie, humanoid)
441 public:
442 virtual void BeTalkedTo();
443 virtual truth BodyPartIsVital(int) const;
444 virtual void CreateBodyParts(int);
445 virtual truth AllowSpoil() const { return true; }
446 void SetDescription(cfestring What) { Description = What; }
447 virtual void Save(outputfile&) const;
448 virtual void Load(inputfile&);
449 virtual festring GetZombieDescription() const;
450 protected:
451 virtual void PostConstruct();
452 virtual void AddPostFix(festring&, int) const;
453 virtual void GetAICommand();
454 virtual truth AllowExperience() const { return false; }
455 festring Description;
458 CHARACTER(imp, humanoid)
462 CHARACTER(mistress, humanoid)
464 public:
465 virtual int TakeHit(character*, item*, bodypart*, v2, double, double, int, int, int, truth, truth);
466 virtual truth ReceiveDamage(character*, int, int, int = ALL, int = 8, truth = false, truth = false, truth = false, truth = true);
467 virtual truth AllowEquipment(citem*, int) const;
470 CHARACTER(werewolfhuman, humanoid)
474 CHARACTER(werewolfwolf, humanoid)
476 public:
477 virtual festring GetKillName() const;
480 CHARACTER(kobold, humanoid)
484 CHARACTER(gibberling, humanoid)
488 CHARACTER(angel, humanoid)
490 public:
491 angel() : LastHealed(0) { }
492 virtual void Load(inputfile&);
493 virtual void Save(outputfile&) const;
494 virtual truth AttachBodyPartsOfFriendsNear();
495 virtual truth BodyPartIsVital(int) const;
496 virtual int GetAttribute(int, truth = true) const;
497 virtual col24 GetBaseEmitation() const;
498 virtual truth CanCreateBodyPart(int) const;
499 virtual cfestring& GetStandVerb() const { return character::GetStandVerb(); }
500 virtual void FinalProcessForBone();
501 virtual void CreateInitialEquipment(int);
502 protected:
503 virtual int GetTorsoMainColor() const;
504 virtual int GetArmMainColor() const;
505 virtual void GetAICommand();
506 uLong LastHealed;
509 CHARACTER(kamikazedwarf, humanoid)
511 public:
512 virtual truth Hit(character*, v2, int, int = 0);
513 virtual truth CheckForUsefulItemsOnGround(truth = true) { return false; }
514 virtual void GetAICommand();
515 virtual void CreateInitialEquipment(int);
516 virtual truth IsKamikazeDwarf() const { return true; }
517 virtual void SingRandomSong();
518 protected:
519 virtual int GetTorsoMainColor() const;
520 virtual int GetGauntletColor() const;
521 virtual int GetLegMainColor() const;
522 virtual v2 GetDrawDisplacement(int) const;
523 virtual int GetWSkillHits() const { return 10000; }
524 virtual truth IsElite() const { return false; }
527 CHARACTER(axethrowerdwarf, humanoid)
529 public:
530 virtual void GetAICommand();
531 virtual void CreateInitialEquipment(int);
532 protected:
533 virtual int GetTorsoMainColor() const;
534 virtual int GetGauntletColor() const;
535 virtual int GetLegMainColor() const;
536 virtual v2 GetDrawDisplacement(int) const;
537 virtual int GetWSkillHits() const { return 10000; }
538 virtual truth IsElite() const { return false; }
541 CHARACTER(genie, humanoid)
543 public:
544 virtual truth BodyPartIsVital(int) const;
545 virtual int GetAttribute(int, truth = true) const;
546 virtual truth CanCreateBodyPart(int) const;
547 virtual cfestring& GetStandVerb() const { return character::GetStandVerb(); }
550 CHARACTER(orc, humanoid)
552 protected:
553 virtual void PostConstruct();
556 CHARACTER(cossack, humanoid)
560 CHARACTER(bananagrower, humanoid)
562 public:
563 virtual void Save(outputfile&) const;
564 virtual void Load(inputfile&);
565 virtual void BeTalkedTo();
566 virtual festring& ProcessMessage(festring&) const;
567 virtual truth IsBananaGrower() const { return true; }
568 festring GetProfession() const { return Profession; }
569 protected:
570 virtual truth HandleCharacterBlockingTheWay(character*, v2, int);
571 virtual void PostConstruct();
572 virtual void GetAICommand();
573 void RandomizeProfession();
574 festring Profession;
575 truth HasDroppedBananas;
576 truth FeedingSumo;
579 CHARACTER(imperialist, humanoid)
581 public:
582 virtual void GetAICommand () { StandIdleAI(); }
583 virtual void BeTalkedTo ();
584 virtual void DisplayStethoscopeInfo (character *) const;
585 protected:
586 virtual void CreateCorpse (lsquare *);
589 CHARACTER(smith, humanoid)
591 public:
592 virtual void BeTalkedTo();
593 virtual void GetAICommand() { StandIdleAI(); }
596 CHARACTER(elder, humanoid)
598 protected:
599 virtual void GetAICommand();
600 virtual void CreateBodyParts(int);
603 CHARACTER(encourager, humanoid)
605 /*public:
606 encourager() : LastHit(0) { }
607 virtual void Save(outputfile&) const;
608 virtual void Load(inputfile&);
609 virtual void FinalProcessForBone();
610 protected:
611 virtual void GetAICommand();
612 uLong LastHit;*/
613 protected:
614 virtual void GetAICommand() { StandIdleAI(); }
617 CHARACTER(darkmage, humanoid)
619 protected:
620 virtual void GetAICommand();
621 int GetSpellAPCost() const;
624 CHARACTER(necromancer, humanoid)
626 public:
627 virtual truth TryToRaiseZombie();
628 virtual void RaiseSkeleton();
629 protected:
630 virtual void GetAICommand();
631 int GetSpellAPCost() const;
634 CHARACTER(sumowrestler, humanoid)
636 public:
637 virtual void BeTalkedTo();
638 virtual truth CheckIfSatiated() { return GetNP() > BLOATED_LEVEL; }
639 virtual truth IsSumoWrestler() const { return true; }
640 virtual truth EquipmentIsAllowed(int) const;
641 protected:
642 virtual void GetAICommand();
645 CHARACTER(tourist, humanoid)
647 public:
648 virtual character* GetLeader() const;
649 protected:
650 virtual void GetAICommand();
653 CHARACTER(veterankamikazedwarf, kamikazedwarf)
655 protected:
656 virtual void PostConstruct();
657 virtual int GetTorsoMainColor() const;
658 virtual int GetGauntletColor() const;
659 virtual int GetLegMainColor() const;
660 virtual int GetWSkillHits() const { return 50000; }
661 virtual truth IsElite() const { return true; }
664 CHARACTER(archangel, angel)
666 public:
667 virtual void CreateInitialEquipment(int);
668 protected:
669 virtual int GetTorsoMainColor() const;
670 virtual int GetArmMainColor() const;
673 CHARACTER(tailor, humanoid)
675 public:
676 virtual void BeTalkedTo();
677 virtual void GetAICommand() { StandIdleAI(); }
681 CHARACTER(siren, humanoid)
683 public:
684 virtual void GetAICommand();
685 protected:
686 virtual truth TryToSing();
690 CHARACTER(punisher, humanoid)
695 CHARACTER(mysteryman, humanoid)
697 public:
698 virtual void BeTalkedTo();
701 CHARACTER(denim, humanoid)
703 protected:
704 virtual void GetAICommand();
707 CHARACTER(raven, humanoid)
709 public:
710 virtual void BeTalkedTo();
711 protected:
712 virtual void GetAICommand();
715 CHARACTER(wisefarmer, humanoid)
717 protected:
718 virtual void GetAICommand();
719 public:
720 virtual v2 GetHeadBitmapPos() const;
721 virtual v2 GetRightArmBitmapPos() const;
722 virtual v2 GetLeftArmBitmapPos() const { return GetRightArmBitmapPos(); }
725 CHARACTER(vulcan, humanoid)
727 protected:
728 virtual void GetAICommand();
731 CHARACTER(bum, humanoid)
735 CHARACTER(rogue, humanoid)
737 public:
738 virtual void GetAICommand();
739 virtual truth IsRetreating() const;
742 CHARACTER(assassin, humanoid)
744 public:
745 virtual void BeTalkedTo();
748 CHARACTER(reaper, genie)
752 CHARACTER(shaman, humanoid)
754 protected:
755 virtual void GetAICommand ();
756 virtual void PostConstruct ();
757 int GetSpellAPCost () const;
761 CHARACTER(warlock, humanoid)
763 protected:
764 virtual void GetAICommand ();
765 int GetSpellAPCost() const;
769 CHARACTER(alchemist, humanoid)
771 protected:
772 virtual void GetAICommand ();
773 int GetSpellAPCost () const;
777 CHARACTER(doctor, humanoid)
779 protected:
780 virtual void BeTalkedTo ();
784 CHARACTER(insudo, angel)
786 public:
787 virtual col24 GetBaseEmitation() const { return MakeRGB24(120, 120, 150); }
788 virtual void CreateInitialEquipment(int); //has a bespoke function to handle this, need to adapt from the archangel code
789 protected:
790 virtual int GetTorsoMainColor() const { return MakeRGB16(120, 120, 120); }
791 virtual int GetArmMainColor() const { return MakeRGB16(120, 120, 120); }
792 virtual void GetAICommand();
796 #endif