/*
*
* Iter Vehemens ad Necem (IVAN)
* Copyright (C) Timo Kiviluoto
* Released under the GNU General
* Public License
*
* See LICENSING which should be included
* along with this file for more details
*
*/
#ifndef __HUMAN_H__
#define __HUMAN_H__
#include "char.h"
CHARACTER(humanoid, character)
{
public:
friend class rightarm;
friend class leftarm;
humanoid() : CurrentRightSWeaponSkill(0), CurrentLeftSWeaponSkill(0) { }
humanoid(const humanoid&);
virtual ~humanoid();
virtual truth CanWield() const;
virtual truth Hit(character*, v2, int, truth = false);
virtual int GetSize() const;
head* GetHead() const { return static_cast
(*BodyPartSlot[HEAD_INDEX]); }
arm* GetRightArm() const { return static_cast(*BodyPartSlot[RIGHT_ARM_INDEX]); }
arm* GetLeftArm() const { return static_cast(*BodyPartSlot[LEFT_ARM_INDEX]); }
groin* GetGroin() const { return static_cast(*BodyPartSlot[GROIN_INDEX]); }
leg* GetRightLeg() const { return static_cast(*BodyPartSlot[RIGHT_LEG_INDEX]); }
leg* GetLeftLeg() const { return static_cast(*BodyPartSlot[LEFT_LEG_INDEX]); }
item* GetHelmet() const { return GetHead() ? GetHead()->GetHelmet() : 0; }
item* GetAmulet() const { return GetHead() ? GetHead()->GetAmulet() : 0; }
item* GetCloak() const { return GetHumanoidTorso() ? GetHumanoidTorso()->GetCloak() : 0; }
item* GetBodyArmor() const { return GetHumanoidTorso() ? GetHumanoidTorso()->GetBodyArmor() : 0; }
item* GetBelt() const { return GetHumanoidTorso() ? GetHumanoidTorso()->GetBelt() : 0; }
item* GetRightWielded() const { return GetRightArm() ? GetRightArm()->GetWielded() : 0; }
item* GetLeftWielded() const { return GetLeftArm() ? GetLeftArm()->GetWielded() : 0; }
item* GetRightRing() const { return GetRightArm() ? GetRightArm()->GetRing() : 0; }
item* GetLeftRing() const { return GetLeftArm() ? GetLeftArm()->GetRing() : 0; }
item* GetRightGauntlet() const { return GetRightArm() ? GetRightArm()->GetGauntlet() : 0; }
item* GetLeftGauntlet() const { return GetLeftArm() ? GetLeftArm()->GetGauntlet() : 0; }
item* GetRightBoot() const { return GetRightLeg() ? GetRightLeg()->GetBoot() : 0; }
item* GetLeftBoot() const { return GetLeftLeg() ? GetLeftLeg()->GetBoot() : 0; }
void SetHelmet(item* What) { GetHead()->SetHelmet(What); }
void SetAmulet(item* What) { GetHead()->SetAmulet(What); }
void SetCloak(item* What) { GetHumanoidTorso()->SetCloak(What); }
void SetBodyArmor(item* What) { GetHumanoidTorso()->SetBodyArmor(What); }
void SetBelt(item* What) { GetHumanoidTorso()->SetBelt(What); }
void SetRightWielded(item* What) { GetRightArm()->SetWielded(What); }
void SetLeftWielded(item* What) { GetLeftArm()->SetWielded(What); }
void SetRightRing(item* What) { GetRightArm()->SetRing(What); }
void SetLeftRing(item* What) { GetLeftArm()->SetRing(What); }
void SetRightGauntlet(item* What) { GetRightArm()->SetGauntlet(What); }
void SetLeftGauntlet(item* What) { GetLeftArm()->SetGauntlet(What); }
void SetRightBoot(item* What) { GetRightLeg()->SetBoot(What); }
void SetLeftBoot(item* What) { GetLeftLeg()->SetBoot(What); }
arm* GetMainArm() const;
arm* GetSecondaryArm() const;
virtual truth ReceiveDamage(character*, int, int, int = ALL, int = 8, truth = false, truth = false, truth = false, truth = true);
virtual truth BodyPartIsVital(int) const;
virtual truth BodyPartCanBeSevered(int) const;
virtual item* GetMainWielded() const;
virtual item* GetSecondaryWielded() const;
virtual const char* GetEquipmentName(int) const;
virtual bodypart* GetBodyPartOfEquipment(int) const;
virtual item* GetEquipment(int) const;
virtual int GetEquipments() const { return 13; }
virtual void SwitchToDig(item*, v2);
virtual int GetUsableLegs() const;
virtual int GetUsableArms() const;
virtual truth CheckKick() const;
virtual int OpenMultiplier() const;
virtual int CloseMultiplier() const;
virtual truth CheckThrow() const;
virtual truth CheckOffer() const;
virtual sorter EquipmentSorter(int) const;
virtual void SetEquipment(int, item*);
virtual void DrawSilhouette(truth) const;
virtual int GetGlobalResistance(int) const;
virtual truth TryToRiseFromTheDead();
virtual truth HandleNoBodyPart(int);
virtual void Kick(lsquare*, int, truth = false);
virtual double GetTimeToKill(const character*, truth) const;
virtual int GetAttribute(int, truth = true) const;
virtual truth EditAttribute(int, int);
virtual void EditExperience(int, double, double);
virtual int DrawStats(truth) const;
virtual void Bite(character*, v2, int, truth = false);
virtual int GetCarryingStrength() const;
virtual int GetRandomStepperBodyPart() const;
virtual int CheckForBlock(character*, item*, double, int, int, int);
virtual truth AddSpecialSkillInfo(felist&) const;
virtual truth CheckBalance(double);
virtual long GetMoveAPRequirement(int) const;
virtual v2 GetEquipmentPanelPos(int) const;
virtual truth EquipmentEasilyRecognized(int) const;
sweaponskill* GetCurrentRightSWeaponSkill() const { return CurrentRightSWeaponSkill; }
void SetCurrentRightSWeaponSkill(sweaponskill* What) { CurrentRightSWeaponSkill = What; }
sweaponskill* GetCurrentLeftSWeaponSkill() const { return CurrentLeftSWeaponSkill; }
void SetCurrentLeftSWeaponSkill(sweaponskill* What) { CurrentLeftSWeaponSkill = What; }
virtual void SWeaponSkillTick();
virtual void Save(outputfile&) const;
virtual void Load(inputfile&);
virtual void SignalEquipmentAdd(int);
virtual void SignalEquipmentRemoval(int);
virtual void DrawBodyParts(blitdata&) const;
virtual truth CanUseStethoscope(truth) const;
virtual truth IsUsingArms() const;
virtual truth IsUsingLegs() const;
virtual truth IsUsingHead() const;
virtual void CalculateBattleInfo();
virtual void CalculateBodyParts();
virtual void CalculateAllowedWeaponSkillCategories();
virtual truth HasALeg() const { return HasAUsableLeg(); }
virtual void AddSpecialEquipmentInfo(festring&, int) const;
virtual void CreateInitialEquipment(int);
virtual festring GetBodyPartName(int, truth = false) const;
virtual void CreateBlockPossibilityVector(blockvector&, double) const;
virtual item* SevereBodyPart(int, truth = false, stack* = 0);
virtual int GetSWeaponSkillLevel(const item*) const;
virtual truth UseMaterialAttributes() const;
virtual void CalculateDodgeValue();
virtual truth CheckZap();
virtual truth IsHumanoid() const { return true; }
virtual truth CheckTalk();
virtual truth CheckIfEquipmentIsNotUsable(int) const;
virtual void AddSpecialStethoscopeInfo(felist&) const;
virtual item* GetPairEquipment(int) const;
virtual truth HasHead() const { return bool(GetHead()); }
virtual const festring& GetStandVerb() const;
virtual head* Behead();
virtual void AddAttributeInfo(festring&) const;
virtual void AddAttackInfo(felist&) const;
virtual void AddDefenceInfo(felist&) const;
virtual void DetachBodyPart();
virtual int GetRandomApplyBodyPart() const;
void EnsureCurrentSWeaponSkillIsCorrect(sweaponskill*&, const item*);
virtual int GetSumOfAttributes() const;
virtual truth CheckConsume(const festring&) const;
virtual truth CanConsume(material*) const;
virtual truth PreProcessForBone();
virtual void FinalProcessForBone();
virtual void StayOn(liquid*);
virtual head* GetVirtualHead() const { return GetHead(); }
virtual character* CreateZombie() const;
virtual void LeprosyHandler();
virtual void DropRandomNonVitalBodypart();
virtual void DropBodyPart(int);
virtual void DuplicateEquipment(character*, ulong);
truth IsImmuneToLeprosy() const;
virtual int GetAttributeAverage() const;
virtual truth CanVomit() const;
virtual truth CheckApply() const;
virtual truth CanForceVomit() const { return TorsoIsAlive() && HasAUsableArm(); }
virtual truth IsTransparent() const;
virtual void ModifySituationDanger(double&) const;
virtual int RandomizeTryToUnStickBodyPart(ulong) const;
virtual truth AllowUnconsciousness() const;
virtual truth CanChokeOnWeb(web*) const;
virtual truth BrainsHurt() const;
virtual const char* GetRunDescriptionLine(int) const;
virtual const char* GetNormalDeathMessage() const;
protected:
virtual v2 GetBodyPartBitmapPos(int, truth = false) const;
virtual col16 GetBodyPartColorB(int, truth = false) const;
virtual col16 GetBodyPartColorC(int, truth = false) const;
virtual col16 GetBodyPartColorD(int, truth = false) const;
virtual int GetBodyPartSparkleFlags(int) const;
virtual long GetBodyPartSize(int, int) const;
virtual long GetBodyPartVolume(int) const;
virtual bodypart* MakeBodyPart(int) const;
virtual const festring& GetDeathMessage() const;
virtual v2 GetDrawDisplacement(int) const { return ZERO_V2; }
truth HasAUsableArm() const;
truth HasAUsableLeg() const;
truth HasTwoUsableLegs() const;
truth CanAttackWithAnArm() const;
truth RightArmIsUsable() const;
truth LeftArmIsUsable() const;
truth RightLegIsUsable() const;
truth LeftLegIsUsable() const;
std::list SWeaponSkill;
sweaponskill* CurrentRightSWeaponSkill;
sweaponskill* CurrentLeftSWeaponSkill;
static const int DrawOrder[];
};
CHARACTER(playerkind, humanoid)
{
public:
playerkind();
playerkind(const playerkind&);
virtual void Save(outputfile&) const;
virtual void Load(inputfile&);
virtual void SetSoulID(ulong);
virtual truth SuckSoul(character*);
virtual truth TryToRiseFromTheDead();
virtual void FinalProcessForBone();
virtual void BeTalkedTo();
virtual truth IsHuman() const { return true; }
virtual col16 GetHairColor() const { return HairColor; }
virtual col16 GetEyeColor() const { return EyeColor; }
virtual v2 GetHeadBitmapPos() const;
virtual v2 GetRightArmBitmapPos() const;
virtual v2 GetLeftArmBitmapPos() const;
virtual int GetNaturalSparkleFlags() const;
virtual truth IsPlayerKind() const { return true; }
virtual double GetNaturalExperience(int) const;
protected:
virtual bodypart* MakeBodyPart(int) const;
virtual void PostConstruct();
ulong SoulID;
col16 HairColor;
col16 EyeColor;
int Talent;
int Weakness;
truth IsBonePlayer;
truth IsClone;
};
CHARACTER(petrus, humanoid)
{
public:
petrus();
virtual ~petrus();
virtual void Save(outputfile&) const;
virtual void Load(inputfile&);
virtual void BeTalkedTo();
truth HealFully(character*);
virtual void FinalProcessForBone();
virtual truth MoveTowardsHomePos();
protected:
virtual void CreateCorpse(lsquare*);
virtual void GetAICommand();
ulong LastHealed;
};
CHARACTER(farmer, humanoid)
{
public:
virtual v2 GetHeadBitmapPos() const;
virtual v2 GetRightArmBitmapPos() const;
virtual v2 GetLeftArmBitmapPos() const { return GetRightArmBitmapPos(); }
};
CHARACTER(guard, humanoid)
{
public:
guard() : NextWayPoint(0) { }
virtual void Save(outputfile&) const;
virtual void Load(inputfile&);
virtual void GetAICommand();
virtual void SetWayPoints(const fearray&);
virtual truth MoveTowardsHomePos();
protected:
std::vector WayPoints;
uint NextWayPoint;
};
CHARACTER(shopkeeper, humanoid)
{
public:
shopkeeper();
protected:
virtual void GetAICommand() { StandIdleAI(); }
};
CHARACTER(priest, humanoid)
{
protected:
virtual void GetAICommand() { StandIdleAI(); }
virtual void BeTalkedTo();
};
CHARACTER(oree, humanoid)
{
public:
virtual void Bite(character*, v2, int, truth = false);
virtual void GetAICommand();
protected:
virtual const char* FirstPersonBiteVerb() const;
virtual const char* FirstPersonCriticalBiteVerb() const;
virtual const char* ThirdPersonBiteVerb() const;
virtual const char* ThirdPersonCriticalBiteVerb() const;
virtual const char* BiteNoun() const;
void CallForMonsters();
};
CHARACTER(darkknight, humanoid)
{
protected:
virtual int ModifyBodyPartHitPreference(int, int) const;
virtual int ModifyBodyPartToHitChance(int, int) const;
virtual truth CanPanicFromSeveredBodyPart() const { return false; }
virtual void SpecialBodyPartSeverReaction();
};
CHARACTER(ennerbeast, humanoid)
{
public:
virtual truth Hit(character*, v2, int, truth = false);
virtual truth MustBeRemovedFromBone() const;
protected:
virtual bodypart* MakeBodyPart(int) const;
virtual void GetAICommand();
virtual truth AttackIsBlockable(int) const { return false; }
};
CHARACTER(skeleton, humanoid)
{
public:
virtual void BeTalkedTo();
virtual item* SevereBodyPart(int, truth = false, stack* = 0);
virtual truth BodyPartIsVital(int) const;
virtual long GetBodyPartVolume(int) const;
protected:
virtual void CreateCorpse(lsquare*);
};
CHARACTER(goblin, humanoid)
{
};
CHARACTER(golem, humanoid)
{
public:
golem();
virtual truth MoveRandomly();
virtual truth CheckForUsefulItemsOnGround(truth = true) { return false; }
virtual void BeTalkedTo();
virtual void Save(outputfile&) const;
virtual void Load(inputfile&);
void SetItemVolume(long What) { ItemVolume = What; }
protected:
virtual truth AddAdjective(festring&, truth) const;
virtual material* CreateBodyPartMaterial(int, long) const;
virtual void CreateCorpse(lsquare*);
long ItemVolume;
};
CHARACTER(communist, humanoid)
{
public:
virtual truth MoveRandomly();
virtual void BeTalkedTo();
virtual truth BoundToUse(const item*, int) const;
virtual truth MustBeRemovedFromBone() const;
protected:
virtual truth ShowClassDescription() const;
};
CHARACTER(hunter, humanoid)
{
public:
virtual void BeTalkedTo();
protected:
virtual void CreateBodyParts(int);
};
CHARACTER(slave, playerkind)
{
public:
virtual void BeTalkedTo();
virtual void GetAICommand();
virtual col16 GetHairColor() const { return humanoid::GetHairColor(); }
virtual col16 GetEyeColor() const { return humanoid::GetEyeColor(); }
protected:
virtual void PostConstruct();
};
CHARACTER(petrusswife, humanoid)
{
public:
virtual truth MoveRandomly() { return MoveRandomlyInRoom(); }
virtual truth SpecialEnemySightedReaction(character*);
};
CHARACTER(housewife, humanoid)
{
public:
virtual truth SpecialEnemySightedReaction(character*);
protected:
virtual int GetHairColor() const;
virtual v2 GetHeadBitmapPos() const;
};
CHARACTER(femaleslave, humanoid)
{
public:
virtual void BeTalkedTo();
protected:
virtual void GetAICommand() { StandIdleAI(); }
};
CHARACTER(librarian, humanoid)
{
public:
virtual void BeTalkedTo();
protected:
virtual void GetAICommand() { StandIdleAI(); }
};
CHARACTER(zombie, humanoid)
{
public:
virtual void BeTalkedTo();
virtual truth BodyPartIsVital(int) const;
virtual void CreateBodyParts(int);
virtual truth AllowSpoil() const { return true; }
void SetDescription(const festring What) { Description = What; }
virtual void Save(outputfile&) const;
virtual void Load(inputfile&);
virtual festring GetZombieDescription() const;
protected:
virtual void PostConstruct();
virtual void AddPostFix(festring&) const;
virtual void GetAICommand();
virtual truth AllowExperience() const { return false; }
festring Description;
};
CHARACTER(imp, humanoid)
{
};
CHARACTER(mistress, humanoid)
{
public:
virtual int TakeHit(character*, item*, bodypart*, v2, double, double, int, int, int, truth, truth);
virtual truth ReceiveDamage(character*, int, int, int = ALL, int = 8, truth = false, truth = false, truth = false, truth = true);
virtual truth AllowEquipment(const item*, int) const;
};
CHARACTER(werewolfhuman, humanoid)
{
};
CHARACTER(werewolfwolf, humanoid)
{
public:
virtual festring GetKillName() const;
};
CHARACTER(kobold, humanoid)
{
};
CHARACTER(gibberling, humanoid)
{
};
CHARACTER(angel, humanoid)
{
public:
angel() : LastHealed(0) { }
virtual void Load(inputfile&);
virtual void Save(outputfile&) const;
virtual truth AttachBodyPartsOfFriendsNear();
virtual truth BodyPartIsVital(int) const;
virtual int GetAttribute(int, truth = true) const;
virtual col24 GetBaseEmitation() const;
virtual truth CanCreateBodyPart(int) const;
virtual const festring& GetStandVerb() const { return character::GetStandVerb(); }
virtual void FinalProcessForBone();
virtual void CreateInitialEquipment(int);
protected:
virtual int GetTorsoMainColor() const;
virtual int GetArmMainColor() const;
virtual void GetAICommand();
ulong LastHealed;
};
CHARACTER(kamikazedwarf, humanoid)
{
public:
virtual truth Hit(character*, v2, int, truth = false);
virtual truth CheckForUsefulItemsOnGround(truth = true) { return false; }
virtual void GetAICommand();
virtual void CreateInitialEquipment(int);
virtual truth IsKamikazeDwarf() const { return true; }
protected:
virtual int GetTorsoMainColor() const;
virtual int GetGauntletColor() const;
virtual int GetLegMainColor() const;
virtual v2 GetDrawDisplacement(int) const;
virtual int GetWSkillHits() const { return 10000; }
virtual truth IsElite() const { return false; }
};
CHARACTER(genie, humanoid)
{
public:
virtual truth BodyPartIsVital(int) const;
virtual int GetAttribute(int, truth = true) const;
virtual truth CanCreateBodyPart(int) const;
virtual const festring& GetStandVerb() const { return character::GetStandVerb(); }
};
CHARACTER(orc, humanoid)
{
protected:
virtual void PostConstruct();
};
CHARACTER(cossack, humanoid)
{
};
CHARACTER(bananagrower, humanoid)
{
public:
virtual void Save(outputfile&) const;
virtual void Load(inputfile&);
virtual void BeTalkedTo();
virtual festring& ProcessMessage(festring&) const;
virtual truth IsBananaGrower() const { return true; }
festring GetProfession() const { return Profession; }
protected:
virtual truth HandleCharacterBlockingTheWay(character*, v2, int);
virtual void PostConstruct();
virtual void GetAICommand();
void RandomizeProfession();
festring Profession;
truth HasDroppedBananas;
truth FeedingSumo;
};
CHARACTER(imperialist, humanoid)
{
public:
virtual void GetAICommand() { StandIdleAI(); }
virtual void BeTalkedTo();
};
CHARACTER(smith, humanoid)
{
public:
virtual void BeTalkedTo();
virtual void GetAICommand() { StandIdleAI(); }
};
CHARACTER(elder, humanoid)
{
protected:
virtual void GetAICommand();
virtual void CreateBodyParts(int);
};
CHARACTER(encourager, humanoid)
{
public:
encourager() : LastHit(0) { }
virtual void Save(outputfile&) const;
virtual void Load(inputfile&);
virtual void FinalProcessForBone();
protected:
virtual void GetAICommand();
ulong LastHit;
};
CHARACTER(darkmage, humanoid)
{
public:
virtual void GetAICommand();
protected:
int GetSpellAPCost() const;
};
CHARACTER(necromancer, humanoid)
{
public:
virtual void GetAICommand();
virtual truth TryToRaiseZombie();
virtual void RaiseSkeleton();
protected:
int GetSpellAPCost() const;
};
CHARACTER(sumowrestler, humanoid)
{
public:
virtual void BeTalkedTo();
virtual truth CheckIfSatiated() { return GetNP() > BLOATED_LEVEL; }
virtual truth IsSumoWrestler() const { return true; }
virtual truth EquipmentIsAllowed(int) const;
protected:
virtual void GetAICommand();
};
CHARACTER(tourist, humanoid)
{
public:
virtual character* GetLeader() const;
protected:
virtual void GetAICommand();
};
CHARACTER(veterankamikazedwarf, kamikazedwarf)
{
protected:
virtual void PostConstruct();
virtual int GetTorsoMainColor() const;
virtual int GetGauntletColor() const;
virtual int GetLegMainColor() const;
virtual int GetWSkillHits() const { return 50000; }
virtual truth IsElite() const { return true; }
};
CHARACTER(archangel, angel)
{
public:
virtual void CreateInitialEquipment(int);
protected:
virtual int GetTorsoMainColor() const;
virtual int GetArmMainColor() const;
};
CHARACTER(tailor, humanoid)
{
public:
virtual void BeTalkedTo();
virtual void GetAICommand() { StandIdleAI(); }
};
#endif