2 * Iter Vehemens ad Necem (IVAN)
3 * Copyright (C) Timo Kiviluoto
4 * Released under the GNU General
7 * See LICENSING which should be included
8 * along with this file for more details
21 #define CHAR_PERSONAL_PRONOUN GetPersonalPronoun(true).CStr()
22 #define CHAR_POSSESSIVE_PRONOUN GetPossessivePronoun(true).CStr()
23 #define CHAR_OBJECT_PRONOUN GetObjectPronoun(true).CStr()
24 #define CHAR_PERSONAL_PRONOUN_THIRD_PERSON_VIEW GetPersonalPronoun(false).CStr()
25 #define CHAR_POSSESSIVE_PRONOUN_THIRD_PERSON_VIEW GetPossessivePronoun(false).CStr()
26 #define CHAR_OBJECT_PRONOUN_THIRD_PERSON_VIEW GetObjectPronoun(false).CStr()
33 class characterprototype
;
42 typedef std::vector
<std::pair
<double, int> > blockvector
;
43 typedef truth (item::*sorter
)(ccharacter
*) const;
44 typedef truth (character::*petmanagementfunction
) ();
45 typedef character
*(*characterspawner
) (int, int);
46 typedef character
*(*charactercloner
) (ccharacter
*);
48 // for GeneralFindItem
49 typedef truth (*ItemCheckerCB
) (item
*i
);
52 inline int APBonus (int Attribute
) { return Attribute
>= 10 ? 90 + Attribute
: 50 + Attribute
* 5; }
55 bool operator < (expid
) const;
60 inline bool expid::operator < (expid E
) const { return ActID
!= E
.ActID
? ActID
< E
.ActID
: SrcID
< E
.SrcID
; }
64 typedef std::map
<expid
, double> expmodifiermap
;
67 struct characterdatabase
: public databasebase
{
68 typedef characterprototype prototype
;
69 void InitDefaults (const prototype
*, int);
70 truth
AllowRandomInstantiation () const { return CanBeGenerated
&& !IsUnique
; }
72 const prototype
*ProtoType
;
73 double NaturalExperience
[ATTRIBUTES
];
81 truth IsPolymorphable
;
82 truth CanUseEquipment
;
86 truth CreateDivineConfigurations
;
87 truth CreateGolemMaterialConfigurations
;
98 truth BodyPartsDisappearWhenSevered
;
101 truth BiteCapturesBodyPart
;
105 truth HasSecondaryMaterial
;
106 truth IsImmuneToLeprosy
;
107 truth AutomaticallySeen
;
109 truth WillCarryItems
;
111 truth IsImmuneToItemTeleport
;
112 truth AlwaysUseMaterialAttributes
;
114 truth IsExtraFragile
;
115 truth AllowUnconsciousness
;
117 truth IsImmuneToStickiness
;
118 truth ForceCustomStandVerb
;
119 truth VomittingIsUnhealthy
;
120 int DefaultEndurance
;
121 int DefaultPerception
;
122 int DefaultIntelligence
;
124 int DefaultWillPower
;
127 int DefaultArmStrength
;
128 int DefaultLegStrength
;
129 int DefaultDexterity
;
134 int CriticalModifier
;
137 int EnergyResistance
;
139 int PoisonResistance
;
140 int ElectricityResistance
;
144 packv2 HeadBitmapPos
;
145 packv2 TorsoBitmapPos
;
148 packv2 RightArmBitmapPos
;
149 packv2 LeftArmBitmapPos
;
150 packv2 RightLegBitmapPos
;
151 packv2 LeftLegBitmapPos
;
152 packv2 GroinBitmapPos
;
153 packcol16 ClothColor
;
158 packcol16 TorsoMainColor
;
161 packcol16 TorsoSpecialColor
;
162 packcol16 ArmMainColor
;
163 packcol16 GauntletColor
;
164 packcol16 ArmSpecialColor
;
165 packcol16 LegMainColor
;
166 packcol16 LegSpecialColor
;
168 truth UsesLongArticle
;
170 truth UsesLongAdjectiveArticle
;
171 festring NameSingular
;
175 int BaseUnarmedStrength
;
176 int BaseBiteStrength
;
177 int BaseKickStrength
;
180 sLong WhatThrowItemTypesToThrow
;
181 fearray
<festring
> Alias
;
182 contentscript
<item
> Helmet
;
183 contentscript
<item
> Amulet
;
184 contentscript
<item
> Cloak
;
185 contentscript
<item
> BodyArmor
;
186 contentscript
<item
> Belt
;
187 contentscript
<item
> RightWielded
;
188 contentscript
<item
> LeftWielded
;
189 contentscript
<item
> RightRing
;
190 contentscript
<item
> LeftRing
;
191 contentscript
<item
> RightGauntlet
;
192 contentscript
<item
> LeftGauntlet
;
193 contentscript
<item
> RightBoot
;
194 contentscript
<item
> LeftBoot
;
196 fearray
<sLong
> KnownCWeaponSkills
;
197 fearray
<sLong
> CWeaponSkillHits
;
198 int RightSWeaponSkillHits
;
199 int LeftSWeaponSkillHits
;
201 fearray
<contentscript
<item
> > Inventory
;
203 festring DefaultName
;
204 fearray
<festring
> FriendlyReplies
;
205 fearray
<festring
> HostileReplies
;
207 festring DeathMessage
;
208 int HPRequirementForGeneration
;
209 int DayRequirementForGeneration
;
210 int AttackWisdomLimit
;
212 packv2 WieldedPosition
;
213 int NaturalSparkleFlags
;
217 int PolymorphIntelligenceRequirement
;
218 uLong DefaultCommandFlags
;
219 uLong ConstantCommandFlags
;
220 festring ForceVomitMessage
;
222 fearray
<festring
> ScienceTalkAdjectiveAttribute
;
223 fearray
<festring
> ScienceTalkSubstantiveAttribute
;
224 fearray
<festring
> ScienceTalkPrefix
;
225 fearray
<festring
> ScienceTalkName
;
226 int ScienceTalkPossibility
;
227 int ScienceTalkIntelligenceModifier
;
228 int ScienceTalkWisdomModifier
;
229 int ScienceTalkCharismaModifier
;
230 int ScienceTalkIntelligenceRequirement
;
231 int ScienceTalkWisdomRequirement
;
232 int ScienceTalkCharismaRequirement
;
233 int DisplacePriority
;
234 festring RunDescriptionLineOne
;
235 festring RunDescriptionLineTwo
;
236 truth AllowPlayerToChangeEquipment
;
237 int TamingDifficulty
;
240 truth IsCatacombCreature
;
241 truth CreateUndeadConfigurations
;
242 truth UndeadVersions
;
243 int UndeadAttributeModifier
;
244 int UndeadVolumeModifier
;
245 truth UndeadCopyMaterials
;
246 truth CanBeGeneratedOnlyInTheCatacombs
;
248 truth IsImmuneToWhipOfThievery
;
249 truth IsRangedAttacker
;
250 int WhatCategoryToThrow
;
251 int WhatWeaponConfigToThrow
;
255 class characterprototype
{
256 friend class databasecreator
<character
>;
257 friend class protosystem
;
259 characterprototype (const characterprototype
*, characterspawner
, charactercloner
, cchar
*);
260 character
*Spawn (int Config
=0, int SpecialFlags
=0) const { return Spawner(Config
, SpecialFlags
); }
261 character
*SpawnAndLoad(inputfile
&) const;
262 character
*Clone(ccharacter
*Char
) const { return Cloner(Char
); }
263 int GetIndex () const { return Index
; }
264 const characterprototype
*GetBase() const { return Base
; }
265 cchar
*GetClassID () const { return ClassID
; }
266 int CreateSpecialConfigurations (characterdatabase
**, int, int);
267 const characterdatabase
*ChooseBaseForConfig (characterdatabase
** TempConfig
, int, int) { return *TempConfig
; }
268 const characterdatabase
*const *GetConfigData () const { return ConfigData
; }
269 int GetConfigSize () const { return ConfigSize
; }
273 const characterprototype
*Base
;
274 characterdatabase
**ConfigData
;
275 characterdatabase
**ConfigTable
[CONFIG_TABLE_SIZE
];
277 characterspawner Spawner
;
278 charactercloner Cloner
;
286 class character
: public entity
, public id
{
287 friend class databasecreator
<character
>;
290 typedef characterprototype prototype
;
291 typedef characterdatabase database
;
293 character (ccharacter
&);
294 virtual ~character ();
295 virtual void Save (outputfile
&) const;
296 virtual void Load (inputfile
&);
297 virtual truth
CanWield () const { return false; }
298 virtual truth
Catches(item
*) { return false; }
299 truth
CheckDeath (cfestring
&, ccharacter
* =0, uLong
=0);
300 truth
DodgesFlyingItem (item
*, double);
301 virtual truth
Hit (character
*, v2
, int, int=0)=0;
302 truth
ReadItem (item
*);
303 truth
TestForPickup (item
*) const;
304 void ThrowItem (int, item
*);
305 truth
TryMove (v2
, truth
, truth
);
306 truth
TryToAddToInventory (item
*);
307 truth
HasHeadOfElpuri () const;
308 truth
HasGoldenEagleShirt () const;
309 truth
HasPetrussNut () const;
310 truth
RemoveEncryptedScroll ();
311 truth
RemoveMondedrPass ();
312 truth
RemoveRingOfThieves ();
313 truth
IsPlayer () const { return Flags
& C_PLAYER
; }
314 truth
Engrave (cfestring
&What
);
315 void AddScoreEntry (cfestring
&, double = 1.0, truth
= true) const;
316 sLong
GetAP () const { return AP
; }
317 sLong
GetNP () const { return NP
; }
318 stack
*GetStack () const { return Stack
; }
319 int GetBurdenState () const { return BurdenState
; }
320 truth
MakesBurdened (sLong What
) const { return sLong(GetCarryingStrength()) * 2500 < What
; }
321 virtual int TakeHit (character
*, item
*, bodypart
*, v2
, double, double, int, int, int, truth
, truth
);
322 int GetLOSRange () const;
323 int GetLOSRangeSquare () const { return GetLOSRange() * GetLOSRange(); }
324 int GetESPRange () const { return GetAttribute(INTELLIGENCE
) / 3; }
325 int GetESPRangeSquare () const { return GetESPRange() * GetESPRange(); }
326 int GetTeleportRange () const { return GetAttribute(INTELLIGENCE
); }
327 int GetTeleportRangeSquare () const { return GetTeleportRange() * GetTeleportRange(); }
328 void AddMissMessage (ccharacter
*) const;
329 void AddPrimitiveHitMessage (ccharacter
*, cfestring
&, cfestring
&, int) const;
330 void AddWeaponHitMessage (ccharacter
*, citem
*, int, truth
= false) const;
331 virtual void BeTalkedTo ();
332 void ReceiveDarkness (sLong
);
333 void Die (ccharacter
*Killer
=0, cfestring
&Msg
=CONST_S(""), uLong DeathFlags
=0);
334 void HasBeenHitByItem (character
*, item
*, int, double, int);
336 void Move (v2
, truth
, truth
= false);
337 virtual truth
MoveRandomly ();
338 void ReceiveNutrition (sLong
);
339 void ReceiveOmmelUrine (sLong
);
340 void ReceivePepsi (sLong
);
341 void ReceiveSchoolFood (sLong
);
343 void SetAP (sLong What
) { AP
= What
; }
345 void Vomit (v2
, int, truth
= true);
347 truth
Polymorph (character
*, int);
348 void BeKicked (character
*, item
*, bodypart
*, v2
, double, double, int, int, truth
, truth
);
349 void FallTo (character
*, v2
);
350 truth
CheckCannibalism (cmaterial
*) const;
351 void ActivateTemporaryState (sLong What
) { TemporaryState
|= What
; }
352 void DeActivateTemporaryState (sLong What
) { TemporaryState
&= ~What
; }
353 void ActivateEquipmentState (sLong What
) { EquipmentState
|= What
; }
354 void DeActivateEquipmentState (sLong What
) { EquipmentState
&= ~What
; }
355 truth
TemporaryStateIsActivated (sLong What
) const { return TemporaryState
& What
; }
356 truth
EquipmentStateIsActivated (sLong What
) const { return EquipmentState
& What
; }
357 truth
StateIsActivated (sLong What
) const { return TemporaryState
& What
|| EquipmentState
& What
; }
358 truth
LoseConsciousness (int, truth
= false);
359 void SetTemporaryStateCounter (sLong
, int);
360 void DeActivateVoluntaryAction (cfestring
& = CONST_S(""));
361 void ActionAutoTermination ();
362 team
*GetTeam () const { return Team
; }
363 void SetTeam (team
*);
364 void ChangeTeam (team
*);
365 virtual int GetMoveEase () const;
366 double GetDodgeValue () const { return DodgeValue
; }
367 sLong
GetMoney () const { return Money
; }
368 void SetMoney (sLong What
) { Money
= What
; }
369 void EditMoney (sLong What
) { Money
+= What
; }
370 int GetCurrentSweatMaterial() const { return CurrentSweatMaterial
; }
371 void SetInitialSweatMaterial(int What
) { CurrentSweatMaterial
= What
; }
372 void EditCurrentSweatMaterial(int What
) { CurrentSweatMaterial
= What
; }
373 truth
Displace (character
*, truth
= false);
374 truth
CheckStarvationDeath (cfestring
&);
375 void ShowNewPosInfo () const;
376 void Hostility (character
*);
377 stack
*GetGiftStack () const;
378 truth
MoveRandomlyInRoom ();
379 std::list
<character
*>::iterator
GetTeamIterator ();
380 void SetTeamIterator (std::list
<character
*>::iterator
);
381 void ReceiveKoboldFlesh (sLong
);
382 truth
ChangeRandomAttribute (int);
383 int RandomizeReply (sLong
&, int);
384 virtual void CreateInitialEquipment (int);
385 void DisplayInfo (festring
&);
386 virtual truth
SpecialEnemySightedReaction (character
*) { return false; }
387 void TestWalkability ();
391 virtual int GetSize () const;
392 torso
*GetTorso () const { return static_cast<torso
*>(*BodyPartSlot
[TORSO_INDEX
]); }
393 humanoidtorso
*GetHumanoidTorso() const { return static_cast<humanoidtorso
*>(*BodyPartSlot
[TORSO_INDEX
]); }
394 void SetTorso (torso
*What
) { SetBodyPart(TORSO_INDEX
, What
); }
395 bodypart
*GetBodyPart (int I
) const { return static_cast<bodypart
*>(*BodyPartSlot
[I
]); }
396 void SetBodyPart (int, bodypart
*);
397 void SetMainMaterial (material
*, int = 0);
398 void ChangeMainMaterial (material
*, int = 0);
399 void SetSecondaryMaterial (material
*, int = 0);
400 void ChangeSecondaryMaterial (material
*, int = 0);
402 void RestoreLivingHP ();
403 void RestoreStamina () { Stamina
= MaxStamina
; }
404 virtual truth
ReceiveDamage (character
*, int, int, int = ALL
, int = 8, truth
= false, truth
= false, truth
= false, truth
= true);
405 virtual int ReceiveBodyPartDamage (character
*, int, int, int, int = 8, truth
= false, truth
= false, truth
= true, truth
= false);
406 virtual truth
BodyPartIsVital (int) const { return true; }
407 void RestoreBodyParts ();
408 cfestring
&GetAssignedName () const { return AssignedName
; }
409 void SetAssignedName (cfestring
&What
) { AssignedName
= What
; }
410 festring
GetDescription (int) const;
411 festring
GetPersonalPronoun (truth
= true) const;
412 festring
GetPossessivePronoun (truth
= true) const;
413 festring
GetObjectPronoun (truth
= true) const;
414 virtual truth
BodyPartCanBeSevered (int) const;
415 virtual void AddName (festring
&, int) const;
416 void ReceiveHeal (sLong
);
417 virtual item
*GetMainWielded () const { return 0; }
418 virtual item
*GetSecondaryWielded () const { return 0; }
419 int GetHungerState () const;
420 truth
ConsumeItem (item
*, cfestring
&);
421 virtual truth
CanConsume (material
*) const;
422 action
*GetAction () const { return Action
; }
423 void SetAction (action
*What
) { Action
= What
; }
424 virtual void SwitchToDig (item
*, v2
) {}
425 virtual void SetRightWielded (item
*) {}
426 virtual void SetLeftWielded (item
*) {}
427 truth
IsPassableSquare (const v2 xy
) const { return IsPassableSquare(xy
.X
, xy
.Y
); }
428 truth
IsPassableSquare (int x
, int y
) const;
429 truth
IsInCorridor () const;
430 truth
IsInCorridor (int x
, int y
) const;
431 truth
IsInCorridor (const v2 dir
) const;
432 void GoOn (go
*, truth
= false);
433 virtual truth
CheckKick () const;
434 virtual int OpenMultiplier () const { return 2; }
435 virtual int CloseMultiplier () const { return 2; }
436 virtual truth
CheckThrow () const;
437 virtual truth
CheckOffer () const { return true; }
438 int GetTemporaryStateCounter (sLong
) const;
439 void EditTemporaryStateCounter (sLong
, int);
440 static truth
AllowDamageTypeBloodSpill (int);
441 int GetResistance (int) const;
442 virtual int GetGlobalResistance (int Type
) const { return GetResistance(Type
); }
443 virtual cchar
*GetEquipmentName (int) const;
444 virtual bodypart
*GetBodyPartOfEquipment (int) const { return 0; }
445 virtual item
*GetEquipment (int) const { return 0; }
446 virtual int GetEquipments () const { return 0; }
447 virtual sorter
EquipmentSorter (int) const { return 0; }
448 virtual void SetEquipment (int, item
*) {}
449 void AddHealingLiquidConsumeEndMessage () const;
450 void AddSchoolFoodConsumeEndMessage () const;
451 void AddSchoolFoodHitMessage () const;
452 void AddOmmelConsumeEndMessage () const;
453 void AddPepsiConsumeEndMessage () const;
454 void AddFrogFleshConsumeEndMessage () const;
455 void AddKoboldFleshConsumeEndMessage () const;
456 void AddKoboldFleshHitMessage () const;
457 void AddBoneConsumeEndMessage () const;
458 void AddBlackUnicornConsumeEndMessage () const;
459 void AddGrayUnicornConsumeEndMessage () const;
460 void AddWhiteUnicornConsumeEndMessage () const;
461 void AddOmmelBoneConsumeEndMessage () const;
462 void PrintInfo () const;
463 virtual item
*SevereBodyPart (int, truth
= false, stack
* = 0);
464 virtual truth
TryToRiseFromTheDead ();
465 virtual truth
RaiseTheDead (character
*);
466 bodypart
*CreateBodyPart (int, int = 0);
467 virtual truth
EquipmentIsAllowed (int) const { return true; }
468 truth
CanUseEquipment (int) const;
469 const database
*GetDataBase () const { return DataBase
; }
470 void SetParameters (int) {}
471 virtual double GetNaturalExperience (int) const;
472 DATA_BASE_VALUE(const prototype
*, ProtoType
);
473 DATA_BASE_VALUE(int, Config
);
474 DATA_BASE_VALUE(int, DefaultEndurance
);
475 DATA_BASE_VALUE(int, DefaultPerception
);
476 DATA_BASE_VALUE(int, DefaultIntelligence
);
477 DATA_BASE_VALUE(int, DefaultWisdom
);
478 DATA_BASE_VALUE(int, DefaultWillPower
);
479 DATA_BASE_VALUE(int, DefaultCharisma
);
480 DATA_BASE_VALUE(int, DefaultMana
);
481 DATA_BASE_VALUE(int, DefaultArmStrength
);
482 DATA_BASE_VALUE(int, DefaultLegStrength
);
483 DATA_BASE_VALUE(int, DefaultDexterity
);
484 DATA_BASE_VALUE(int, DefaultAgility
);
485 DATA_BASE_VALUE(sLong
, DefaultMoney
);
486 DATA_BASE_VALUE(int, TotalSize
);
487 DATA_BASE_TRUTH(CanRead
);
488 DATA_BASE_VALUE(int, Sex
);
489 DATA_BASE_TRUTH(CanBeGenerated
);
490 DATA_BASE_VALUE(int, CriticalModifier
);
491 DATA_BASE_TRUTH(CanOpen
);
492 DATA_BASE_VALUE(int, EnergyResistance
);
493 DATA_BASE_VALUE(int, FireResistance
);
494 DATA_BASE_VALUE(int, PoisonResistance
);
495 DATA_BASE_VALUE(int, ElectricityResistance
);
496 DATA_BASE_VALUE(int, AcidResistance
);
497 DATA_BASE_VALUE(int, ConsumeFlags
);
498 DATA_BASE_VALUE(sLong
, TotalVolume
);
499 virtual DATA_BASE_VALUE(v2
, HeadBitmapPos
);
500 virtual DATA_BASE_VALUE(v2
, TorsoBitmapPos
);
501 virtual DATA_BASE_VALUE(v2
, ArmBitmapPos
);
502 virtual DATA_BASE_VALUE(v2
, LegBitmapPos
);
503 virtual DATA_BASE_VALUE(v2
, RightArmBitmapPos
);
504 virtual DATA_BASE_VALUE(v2
, LeftArmBitmapPos
);
505 virtual DATA_BASE_VALUE(v2
, RightLegBitmapPos
);
506 virtual DATA_BASE_VALUE(v2
, LeftLegBitmapPos
);
507 virtual DATA_BASE_VALUE(v2
, GroinBitmapPos
);
508 virtual DATA_BASE_VALUE(col16
, ClothColor
);
509 virtual DATA_BASE_VALUE(col16
, SkinColor
);
510 virtual DATA_BASE_VALUE(col16
, CapColor
);
511 virtual DATA_BASE_VALUE(col16
, HairColor
);
512 virtual DATA_BASE_VALUE(col16
, EyeColor
);
513 virtual DATA_BASE_VALUE(col16
, TorsoMainColor
);
514 virtual DATA_BASE_VALUE(col16
, BeltColor
);
515 virtual DATA_BASE_VALUE(col16
, BootColor
);
516 virtual DATA_BASE_VALUE(col16
, TorsoSpecialColor
);
517 virtual DATA_BASE_VALUE(col16
, ArmMainColor
);
518 virtual DATA_BASE_VALUE(col16
, GauntletColor
);
519 virtual DATA_BASE_VALUE(col16
, ArmSpecialColor
);
520 virtual DATA_BASE_VALUE(col16
, LegMainColor
);
521 virtual DATA_BASE_VALUE(col16
, LegSpecialColor
);
522 virtual DATA_BASE_TRUTH(IsNameable
);
523 virtual DATA_BASE_VALUE(col24
, BaseEmitation
); // devirtualize ASAP
524 DATA_BASE_TRUTH(UsesLongArticle
);
525 DATA_BASE_VALUE(cfestring
&, Adjective
);
526 DATA_BASE_TRUTH(UsesLongAdjectiveArticle
);
527 DATA_BASE_VALUE(cfestring
&, NameSingular
);
528 DATA_BASE_VALUE(cfestring
&, NamePlural
);
529 DATA_BASE_VALUE(cfestring
&, PostFix
);
530 DATA_BASE_VALUE(int, ArticleMode
);
531 DATA_BASE_TRUTH(CanZap
);
532 virtual DATA_BASE_TRUTH(IsPolymorphable
);
533 DATA_BASE_VALUE(int, BaseUnarmedStrength
);
534 DATA_BASE_VALUE(int, BaseBiteStrength
);
535 DATA_BASE_VALUE(int, BaseKickStrength
);
536 DATA_BASE_VALUE(int, AttackStyle
);
537 DATA_BASE_TRUTH(CanUseEquipment
);
538 DATA_BASE_TRUTH(CanKick
);
539 DATA_BASE_TRUTH(CanTalk
);
540 DATA_BASE_TRUTH(CanBeWished
);
541 DATA_BASE_VALUE(sLong
, ClassStates
);
542 DATA_BASE_VALUE(sLong
, WhatThrowItemTypesToThrow
);
543 DATA_BASE_VALUE(const fearray
<festring
>&, Alias
);
544 DATA_BASE_TRUTH(CreateGolemMaterialConfigurations
);
545 DATA_BASE_VALUE(const fearray
<sLong
>&, KnownCWeaponSkills
);
546 DATA_BASE_VALUE(const fearray
<sLong
>&, CWeaponSkillHits
);
547 DATA_BASE_VALUE(int, RightSWeaponSkillHits
);
548 DATA_BASE_VALUE(int, LeftSWeaponSkillHits
);
549 DATA_BASE_VALUE(int, PanicLevel
);
550 DATA_BASE_TRUTH(CanBeCloned
);
551 DATA_BASE_VALUE(cfestring
&, DefaultName
);
552 DATA_BASE_VALUE(const fearray
<festring
>&, FriendlyReplies
);
553 DATA_BASE_VALUE(const fearray
<festring
>&, HostileReplies
);
554 DATA_BASE_VALUE(int, FleshMaterial
);
555 virtual DATA_BASE_TRUTH(HasALeg
);
556 virtual DATA_BASE_VALUE(cfestring
&, DeathMessage
);
557 DATA_BASE_VALUE(int, HPRequirementForGeneration
);
558 DATA_BASE_TRUTH(IsExtraCoward
);
559 DATA_BASE_TRUTH(SpillsBlood
);
560 DATA_BASE_TRUTH(HasEyes
);
561 virtual DATA_BASE_TRUTH(HasHead
);
562 DATA_BASE_TRUTH(CanThrow
);
563 DATA_BASE_TRUTH(UsesNutrition
);
564 DATA_BASE_VALUE(int, AttackWisdomLimit
);
565 DATA_BASE_TRUTH(IsUnique
);
566 DATA_BASE_VALUE(int, AttachedGod
);
567 DATA_BASE_TRUTH(BodyPartsDisappearWhenSevered
);
568 DATA_BASE_VALUE(int, Frequency
);
569 DATA_BASE_TRUTH(CanBeConfused
);
570 DATA_BASE_TRUTH(CanApply
);
571 DATA_BASE_VALUE(v2
, WieldedPosition
);
572 virtual DATA_BASE_VALUE(int, NaturalSparkleFlags
);
573 DATA_BASE_TRUTH(IgnoreDanger
);
574 DATA_BASE_TRUTH(BiteCapturesBodyPart
);
575 DATA_BASE_TRUTH(IsPlant
);
576 DATA_BASE_TRUTH(DestroysWalls
);
577 DATA_BASE_TRUTH(IsRooted
);
578 DATA_BASE_VALUE(int, BloodMaterial
);
579 DATA_BASE_VALUE(int, VomitMaterial
);
580 DATA_BASE_TRUTH(AutomaticallySeen
);
581 DATA_BASE_VALUE(uLong
, DefaultCommandFlags
);
582 DATA_BASE_TRUTH(WillCarryItems
);
583 DATA_BASE_VALUE(int, SweatMaterial
);
584 DATA_BASE_TRUTH(Sweats
);
585 DATA_BASE_TRUTH(IsImmuneToItemTeleport
);
586 DATA_BASE_TRUTH(AlwaysUseMaterialAttributes
);
587 DATA_BASE_TRUTH(IsEnormous
);
588 DATA_BASE_VALUE(const fearray
<festring
>&, ScienceTalkAdjectiveAttribute
);
589 DATA_BASE_VALUE(const fearray
<festring
>&, ScienceTalkSubstantiveAttribute
);
590 DATA_BASE_VALUE(const fearray
<festring
>&, ScienceTalkPrefix
);
591 DATA_BASE_VALUE(const fearray
<festring
>&, ScienceTalkName
);
592 DATA_BASE_VALUE(int, ScienceTalkPossibility
);
593 DATA_BASE_VALUE(int, ScienceTalkIntelligenceModifier
);
594 DATA_BASE_VALUE(int, ScienceTalkWisdomModifier
);
595 DATA_BASE_VALUE(int, ScienceTalkCharismaModifier
);
596 DATA_BASE_VALUE(int, ScienceTalkIntelligenceRequirement
);
597 DATA_BASE_VALUE(int, ScienceTalkWisdomRequirement
);
598 DATA_BASE_VALUE(int, ScienceTalkCharismaRequirement
);
599 DATA_BASE_TRUTH(IsExtraFragile
);
600 DATA_BASE_TRUTH(IsImmuneToStickiness
);
601 DATA_BASE_VALUE(festring
, ForceVomitMessage
);
602 DATA_BASE_TRUTH(CanChoke
);
603 DATA_BASE_VALUE(int, DisplacePriority
);
604 DATA_BASE_VALUE(cfestring
&, RunDescriptionLineOne
);
605 DATA_BASE_VALUE(cfestring
&, RunDescriptionLineTwo
);
606 DATA_BASE_TRUTH(ForceCustomStandVerb
);
607 DATA_BASE_TRUTH(VomittingIsUnhealthy
);
608 DATA_BASE_TRUTH(AllowPlayerToChangeEquipment
);
609 DATA_BASE_VALUE(int, TamingDifficulty
);
610 DATA_BASE_TRUTH(IsMasochist
);
611 DATA_BASE_TRUTH(IsSadist
);
612 DATA_BASE_TRUTH(IsCatacombCreature
);
613 DATA_BASE_TRUTH(CreateUndeadConfigurations
);
614 DATA_BASE_TRUTH(UndeadVersions
);
615 DATA_BASE_VALUE(int, UndeadAttributeModifier
);
616 DATA_BASE_VALUE(int, UndeadVolumeModifier
);
617 DATA_BASE_TRUTH(UndeadCopyMaterials
);
618 DATA_BASE_TRUTH(CanBeGeneratedOnlyInTheCatacombs
);
619 DATA_BASE_TRUTH(IsAlcoholic
);
620 DATA_BASE_TRUTH(IsImmuneToWhipOfThievery
);
621 DATA_BASE_TRUTH(IsRangedAttacker
);
622 DATA_BASE_VALUE(int, WhatCategoryToThrow
);
623 DATA_BASE_VALUE(int, WhatWeaponConfigToThrow
);
624 int GetType () const { return GetProtoType()->GetIndex(); }
625 void TeleportRandomly (truth
= false);
626 truth
TeleportNear (character
*);
627 virtual void InitSpecialAttributes () {}
628 virtual void Kick (lsquare
*, int, truth
= false) = 0;
629 virtual int GetAttribute (int, truth
= true) const;
630 virtual truth
EditAttribute (int, int);
631 virtual void EditExperience (int, double, double);
632 truth
RawEditAttribute (double &, int) const;
633 void DrawPanel (truth
) const;
634 virtual int DrawStats (truth
) const = 0;
635 virtual int GetCarryingStrength () const = 0;
636 static truth
DamageTypeAffectsInventory (int);
637 virtual int GetRandomStepperBodyPart () const;
638 entity
*GetMotherEntity () const { return MotherEntity
; }
639 void SetMotherEntity (entity
*What
) { MotherEntity
= What
; }
640 virtual int CheckForBlock (character
*, item
*, double, int, int, int);
641 int CheckForBlockWithArm (character
*, item
*, arm
*, double, int, int, int);
642 void AddBlockMessage (ccharacter
*, citem
*, cfestring
&, truth
) const;
643 character
*GetPolymorphBackup () const { return PolymorphBackup
; }
644 void SetPolymorphBackup (character
*What
) { PolymorphBackup
= What
; }
645 cweaponskill
*GetCWeaponSkill (int I
) const { return &CWeaponSkill
[I
]; }
646 virtual truth
AddSpecialSkillInfo (felist
&) const { return false; }
647 virtual truth
CheckBalance (double);
648 sLong
GetStateAPGain (sLong
) const;
649 virtual sLong
GetMoveAPRequirement (int) const;
650 virtual void SignalEquipmentAdd (int);
651 virtual void SignalEquipmentRemoval (int, citem
*);
652 void BeginTemporaryState (sLong
, int);
653 void GainIntrinsic (sLong
);
654 void HandleStates ();
655 void PrintBeginPolymorphControlMessage () const;
656 void PrintEndPolymorphControlMessage () const;
657 void PrintBeginLifeSaveMessage () const;
658 void PrintEndLifeSaveMessage () const;
659 void PrintBeginLycanthropyMessage () const;
660 void PrintEndLycanthropyMessage () const;
661 void PrintBeginHasteMessage () const;
662 void PrintEndHasteMessage () const;
663 void PrintBeginSlowMessage () const;
664 void PrintEndSlowMessage () const;
665 void PrintBeginSearchingMessage () const;
666 void PrintEndSearchingMessage () const;
667 void PrintBeginHiccupsMessage () const;
668 void PrintEndHiccupsMessage () const;
669 void EndPolymorph ();
670 character
*ForceEndPolymorph ();
671 void LycanthropyHandler ();
672 void SearchingHandler ();
674 void BeginInvisibility ();
675 void BeginInfraVision ();
677 void EndInvisibility ();
678 void EndInfraVision ();
680 void HiccupsHandler ();
681 character
*PolymorphRandomly (int, int, int);
682 virtual truth
EquipmentEasilyRecognized (int) const { return true; }
683 void StartReading (item
*, sLong
);
684 void DexterityAction (int);
685 void IntelligenceAction (int);
686 virtual void SWeaponSkillTick () {}
687 void PrintBeginInvisibilityMessage () const;
688 void PrintEndInvisibilityMessage () const;
689 void PrintBeginInfraVisionMessage () const;
690 void PrintEndInfraVisionMessage () const;
691 void PrintBeginESPMessage () const;
692 void PrintEndESPMessage () const;
693 truth
CanBeSeenByPlayer (truth
= false, truth
= false) const;
694 truth
CanBeSeenBy (ccharacter
*, truth
= false, truth
= false) const;
695 void AttachBodyPart (bodypart
*);
696 truth
HasAllBodyParts () const;
697 bodypart
*FindRandomOwnBodyPart (truth
) const;
698 bodypart
*GenerateRandomBodyPart ();
699 void PrintBeginPoisonedMessage () const;
700 void PrintEndPoisonedMessage () const;
701 truth
IsWarm () const;
702 void CalculateEquipmentState ();
703 void Draw (blitdata
&) const;
704 virtual void DrawBodyParts (blitdata
&) const;
705 god
*GetMasterGod () const;
706 void PoisonedHandler ();
707 void PrintBeginTeleportMessage () const;
708 void PrintEndTeleportMessage () const;
709 void TeleportHandler ();
710 void PrintEndTeleportControlMessage () const;
711 void PrintBeginTeleportControlMessage () const;
712 void PolymorphHandler ();
713 void PrintEndPolymorphMessage () const;
714 void PrintBeginPolymorphMessage () const;
715 virtual void DisplayStethoscopeInfo (character
*) const;
716 virtual truth
CanUseStethoscope (truth
) const;
717 virtual truth
IsUsingArms () const;
718 virtual truth
IsUsingLegs () const;
719 virtual truth
IsUsingHead () const;
720 dungeon
*GetDungeon () const { return static_cast<level
*>(GetSquareUnder()->GetArea())->GetDungeon(); }
721 level
*GetLevel () const { return static_cast<level
*>(GetSquareUnder()->GetArea()); }
722 area
*GetArea () const { return GetSquareUnder()->GetArea(); }
723 virtual square
*GetNeighbourSquare (int) const;
724 virtual lsquare
*GetNeighbourLSquare (int) const;
725 virtual wsquare
*GetNeighbourWSquare (int) const;
726 stack
*GetStackUnder (int I
= 0) const { return static_cast<lsquare
*>(GetSquareUnder(I
))->GetStack(); }
727 square
*GetNearSquare (v2 Pos
) const { return GetSquareUnder()->GetArea()->GetSquare(Pos
); }
728 square
*GetNearSquare (int x
, int y
) const { return GetSquareUnder()->GetArea()->GetSquare(x
, y
); }
729 lsquare
*GetNearLSquare (v2 Pos
) const { return static_cast<lsquare
*>(GetSquareUnder()->GetArea()->GetSquare(Pos
)); }
730 lsquare
*GetNearLSquare (int x
, int y
) const { return static_cast<lsquare
*>(GetSquareUnder()->GetArea()->GetSquare(x
, y
)); }
731 wsquare
*GetNearWSquare (v2
) const;
732 wsquare
*GetNearWSquare (int, int) const;
733 v2
GetPos (int I
= 0) const { return GetSquareUnder(I
)->GetPos(); }
734 square
*GetSquareUnder (int I
= 0) const { return !MotherEntity
? SquareUnder
[I
] : MotherEntity
->GetSquareUnderEntity(I
); }
735 virtual square
*GetSquareUnderEntity (int I
= 0) const { return GetSquareUnder(I
); }
736 lsquare
*GetLSquareUnder (int I
= 0) const { return static_cast<lsquare
*>(GetSquareUnder(I
)); }
737 int GetRandomNonVitalBodyPart () const;
738 void TeleportSomePartsAway (int);
739 virtual void SignalVolumeAndWeightChange ();
740 virtual void SignalBodyPartVolumeAndWeightChange () {}
741 void CalculateVolumeAndWeight ();
742 sLong
GetVolume () const { return Volume
; }
743 sLong
GetBodyVolume () const { return BodyVolume
; }
744 sLong
GetWeight () const { return Weight
; }
745 sLong
GetCarriedWeight () const { return CarriedWeight
; }
746 virtual void SignalEmitationIncrease (col24
);
747 virtual void SignalEmitationDecrease (col24
);
748 void CalculateEmitation ();
749 void CalculateAll ();
751 void CalculateMaxHP ();
752 int GetHP () const { return HP
; }
753 int GetMaxHP () const { return MaxHP
; }
754 void CalculateBodyPartMaxHPs (uLong
= MAY_CHANGE_HPS
|CHECK_USABILITY
);
755 truth
IsInitializing () const { return Flags
& C_INITIALIZING
; }
756 truth
IsInNoMsgMode () const { return Flags
& C_IN_NO_MSG_MODE
; }
757 truth
ActivateRandomState (int, int, sLong
= 0);
758 sLong
GetRandomState (int) const;
759 truth
GainRandomIntrinsic (int);
760 virtual void CalculateBattleInfo () = 0;
761 void CalculateBurdenState ();
762 virtual void CalculateDodgeValue ();
763 virtual void CalculateBodyParts () { BodyParts
= 1; }
764 virtual void CalculateAllowedWeaponSkillCategories ();
765 int GetBodyParts () const { return BodyParts
; }
766 int GetAllowedWeaponSkillCategories () const { return AllowedWeaponSkillCategories
; }
767 double GetRelativeDanger (ccharacter
*, truth
= false) const;
768 double GetTimeToDie (ccharacter
*, int, double, truth
, truth
) const;
769 virtual double GetTimeToKill (ccharacter
*, truth
) const = 0;
770 virtual void AddSpecialEquipmentInfo (festring
&, int) const {}
771 virtual festring
GetBodyPartName (int, truth
= false) const;
772 item
*SearchForItem (uLong
) const;
773 truth
SearchForItem (citem
*) const;
774 item
*SearchForItem (const sweaponskill
*) const;
775 truth
ContentsCanBeSeenBy (ccharacter
*) const;
776 festring
GetBeVerb () const;
777 virtual void CreateBlockPossibilityVector (blockvector
&, double) const {}
778 virtual truth
SpecialUnarmedEffect (character
*, v2
, int, int, truth
) { return false; }
779 virtual truth
SpecialKickEffect (character
*, v2
, int, int, truth
) { return false; }
780 virtual truth
SpecialBiteEffect (character
*, v2
, int, int, truth
) { return false; }
781 truth
HitEffect (character
*, item
*, v2
, int, int, int, truth
);
782 void WeaponSkillHit (item
*, int, int);
783 character
*Duplicate (uLong
= 0);
784 room
*GetRoom (int I
=0) const { return GetLSquareUnder(I
)->GetRoom(); }
785 truth
TryToEquip (item
*);
786 truth
TryToConsume (item
*);
787 void UpdateESPLOS () const;
788 int GetCWeaponSkillLevel (citem
*) const;
789 virtual int GetSWeaponSkillLevel (citem
*) const { return 0; }
790 void PrintBeginPanicMessage () const;
791 void PrintEndPanicMessage () const;
792 void CheckPanic (int);
793 character
*DuplicateToNearestSquare (character
*, uLong
= 0);
794 virtual void SignalSpoil (material
*m
= 0);
795 virtual void SignalSpoilLevelChange (material
*m
= 0);
796 virtual truth
UseMaterialAttributes () const = 0;
797 truth
IsPolymorphed () const { return Flags
& C_POLYMORPHED
; }
798 truth
IsInBadCondition () const { return HP
* 3 < MaxHP
; }
799 truth
IsInBadCondition (int HP
) const { return HP
* 3 < MaxHP
; }
800 int GetCondition () const;
801 void UpdatePictures ();
802 truth
CanHeal () const;
803 void SetGoingTo (v2
);
804 int GetRelation (ccharacter
*) const;
805 truth
CalculateAttributeBonuses ();
806 void ApplyEquipmentAttributeBonuses (item
*);
807 void ReceiveAntidote (sLong
);
808 void AddAntidoteConsumeEndMessage () const;
809 truth
IsDead () const;
810 void AddOriginalBodyPartID (int, uLong
);
811 void AddToInventory (const fearray
<contentscript
<item
> > &, int);
812 truth
HasHadBodyPart (citem
*) const;
813 void ProcessAndAddMessage (festring
) const;
814 virtual truth
CheckZap ();
815 void SetEndurance (int);
816 void SetPerception (int);
817 void SetIntelligence (int);
818 void SetWisdom (int);
819 void SetWillPower (int);
820 void SetCharisma (int);
822 void DamageAllItems (character
*, int, int);
823 truth
Equips (citem
*) const;
824 void PrintBeginConfuseMessage () const;
825 void PrintEndConfuseMessage () const;
826 v2
ApplyStateModification (v2
) const;
827 void AddConfuseHitMessage () const;
828 item
*SelectFromPossessions (cfestring
&, sorter
= 0);
829 truth
SelectFromPossessions (itemvector
&, cfestring
&, int, sorter
= 0);
830 truth
EquipsSomething (sorter
= 0);
832 virtual truth
CanCreateBodyPart (int) const { return true; }
833 virtual truth
HandleCharacterBlockingTheWay (character
*, v2
, int) { return false; }
834 virtual festring
& ProcessMessage (festring
&) const;
835 virtual truth
IsHumanoid () const { return false; }
836 virtual truth
IsHuman () const { return false; }
837 truth
IsOnGround () const;
838 virtual truth
CheckIfEquipmentIsNotUsable (int) const { return false; }
839 virtual truth
MoveTowardsHomePos ();
840 virtual void SetWayPoints (const fearray
<packv2
> &) {}
841 truth
TryToChangeEquipment (stack
*, stack
*, int);
842 void PrintBeginParasitizedMessage () const;
843 void PrintEndParasitizedMessage () const;
844 void ParasitizedHandler ();
845 truth
CanFollow () const;
846 truth
LeftOversAreUnique () const;
847 virtual festring
GetKillName () const;
848 festring
GetPanelName () const;
849 virtual void AddSpecialStethoscopeInfo (felist
&) const = 0;
850 virtual item
*GetPairEquipment (int) const { return 0; }
851 bodypart
*HealHitPoint ();
852 void CreateHomeData ();
853 room
*GetHomeRoom () const;
854 truth
HomeDataIsValid () const;
855 void SetHomePos (v2
);
856 void RemoveHomeData ();
857 uLong
GetID () const { return ID
; }
858 void AddESPConsumeMessage () const;
859 const std::list
<uLong
> &GetOriginalBodyPartID (int) const;
860 void GetHitByExplosion (const explosion
*, int);
861 truth
CanBePoisoned () const { return TorsoIsAlive(); }
862 truth
CanBeParasitized () const { return TorsoIsAlive(); }
863 void SortAllItems (const sortdata
&);
864 character
*GetRandomNeighbourEnemy () const;
866 character
*GetRandomNeighbour (int = (HOSTILE
|UNCARING
|FRIEND
)) const;
867 virtual truth
IsRetreating () const;
868 virtual truth
IsMushroom () const { return false; }
870 virtual head
*Behead () { return 0; }
871 void PrintBeginGasImmunityMessage () const;
872 void PrintEndGasImmunityMessage () const;
873 void ShowAdventureInfo () const;
874 virtual truth
BoundToUse (citem
*, int) const { return false; }
875 virtual truth
IsBananaGrower () const { return false; }
876 virtual int GetRandomApplyBodyPart () const;
878 virtual void AddAttributeInfo (festring
&) const;
879 virtual void AddAttackInfo (felist
&) const = 0;
880 virtual void AddDefenceInfo (felist
&) const;
881 virtual void DetachBodyPart ();
883 void ReceiveHolyBanana (sLong
);
884 void AddHolyBananaConsumeEndMessage () const;
885 virtual truth
PreProcessForBone ();
886 truth
PostProcessForBone (double &, int &);
887 truth
PostProcessForBone ();
888 virtual void FinalProcessForBone ();
889 virtual truth
EditAllAttributes (int);
890 virtual void SetSoulID (uLong
);
891 virtual truth
SuckSoul (character
*) { return false; }
892 virtual truth
MustBeRemovedFromBone () const;
893 truth
TorsoIsAlive () const { return GetTorso()->IsAlive(); }
894 truth
PictureUpdatesAreForbidden () const { return Flags
& C_PICTURE_UPDATES_FORBIDDEN
; }
895 virtual int GetUsableArms () const { return 0; }
896 truth
IsPet () const;
897 virtual void PutTo (v2
);
898 void PutTo (lsquare
*);
900 void PutToOrNear (v2
);
901 virtual void Remove ();
902 truth
IsSmall () const { return SquaresUnder
== 1; }
903 truth
IsOver (v2
) const;
904 truth
IsOver (citem
*) const;
905 truth
SquareUnderCanBeSeenByPlayer (truth
) const;
906 truth
SquareUnderCanBeSeenBy (ccharacter
*, truth
) const;
907 int GetDistanceSquareFrom (ccharacter
*) const;
908 virtual truth
CanTheoreticallyMoveOn (const lsquare
*) const;
909 virtual truth
CanMoveOn (const lsquare
*) const;
910 virtual truth
CanMoveOn (const square
*) const;
911 truth
CanMoveOn (const olterrain
*) const;
912 truth
CanMoveOn (const oterrain
*) const;
913 truth
IsMainPos (v2 What
) const { return GetPos() == What
; }
914 virtual void CalculateSquaresUnder () { SquaresUnder
= 1; }
915 int GetSquaresUnder () const { return SquaresUnder
; }
916 virtual int GetSquareIndex (v2
) const { return 0; }
917 virtual int GetNeighbourSquares () const { return 8; }
918 virtual int GetExtendedNeighbourSquares () const { return 9; }
919 virtual int CalculateNewSquaresUnder (lsquare
**, v2
) const;
920 virtual truth
IsFreeForMe (square
*) const;
921 void SendNewDrawRequest () const;
922 square
*GetNaturalNeighbourSquare (int I
) const { return character::GetNeighbourSquare(I
); }
923 lsquare
*GetNaturalNeighbourLSquare (int I
) const { return character::GetNeighbourLSquare(I
); }
924 void SignalStepFrom (lsquare
**);
925 virtual void SpecialBodyDefenceEffect (character
*, bodypart
*, int) {}
926 virtual int GetSumOfAttributes () const;
927 truth
IsGoingSomeWhere () const { return GoingTo
!= ERROR_V2
; }
928 virtual truth
CreateRoute ();
929 void TerminateGoingTo ();
930 virtual truth
IsSpy () const { return false; } // does CallForAttention() if true
931 truth
CheckForFood (int);
932 truth
CheckForFoodInSquare (v2
);
933 virtual truth
CheckIfSatiated () { return GetNP() > SATIATED_LEVEL
; }
934 virtual void SignalNaturalGeneration () {}
935 virtual truth
IsBunny () const { return false; }
936 void SetConfig (int, int = 0);
937 bodypartslot
*GetBodyPartSlot (int I
) { return &BodyPartSlot
[I
]; }
938 virtual truth
CheckConsume (cfestring
&) const;
939 virtual int GetTameSymbolSquareIndex () const { return 0; }
940 virtual int GetFlySymbolSquareIndex () const { return 0; }
941 virtual int GetSwimmingSymbolSquareIndex () const { return 0; }
942 virtual int GetUnconsciousSymbolSquareIndex () const { return 0; }
943 virtual truth
PlaceIsIllegal (v2 Pos
, v2 Illegal
) const { return Pos
== Illegal
; }
944 liquid
*CreateBlood (sLong
) const;
945 void SpillFluid (character
*, liquid
*, int = 0);
946 virtual void StayOn (liquid
*);
947 virtual head
*GetVirtualHead () const { return 0; }
948 truth
IsAlly (ccharacter
*) const;
949 virtual truth
CanVomit () const { return TorsoIsAlive(); }
950 uLong
GetLastAcidMsgMin () const { return LastAcidMsgMin
; }
951 void SetLastAcidMsgMin (uLong What
) { LastAcidMsgMin
= What
; }
952 virtual truth
AllowSpoil () const { return false; }
953 void Disappear (corpse
*, cchar
*, truth (item::*)() const);
954 void ResetSpoiling ();
955 virtual character
*GetLeader () const;
956 int GetMoveType () const;
957 virtual truth
IsSumoWrestler () const { return false; }
958 void InitMaterials (const materialscript
*, const materialscript
*, truth
) {}
959 item
*SearchForItem (ccharacter
*, sorter
) const;
960 virtual character
*CreateZombie () const { return 0; }
961 virtual festring
GetZombieDescription () const;
962 virtual truth
CanAttack () const { return true; }
963 truth
DetectMaterial (cmaterial
*) const;
964 truth
CheckIfTooScaredToHit (ccharacter
*) const;
965 void PrintBeginLevitationMessage () const;
966 void PrintEndLevitationMessage () const;
967 void EditDealExperience (sLong
);
968 int RawEditExperience (double &, double, double, double) const;
969 virtual void LeprosyHandler ();
970 virtual void TryToInfectWithLeprosy (ccharacter
*);
971 void PrintBeginLeprosyMessage () const;
972 void PrintEndLeprosyMessage () const;
973 void SignalGeneration ();
976 truth
HasBeenSeen () const;
977 int GetPolymorphIntelligenceRequirement () const;
978 void RemoveAllItems ();
979 int CalculateWeaponSkillHits (ccharacter
*) const;
980 void DonateEquipmentTo (character
*);
981 void ReceivePeaSoup (sLong
);
982 void AddPeaSoupConsumeEndMessage () const;
983 void CalculateMaxStamina ();
984 void EditStamina (int, truth
);
985 void RegenerateStamina ();
988 int GetTirednessState () const;
989 int GetStamina () const { return Stamina
; }
990 int GetMaxStamina () const { return MaxStamina
; }
991 void SetGenerationDanger (double What
) { GenerationDanger
= What
; }
992 double GetGenerationDanger () const { return GenerationDanger
; }
993 void ReceiveBlackUnicorn (sLong
);
994 void ReceiveGrayUnicorn (sLong
);
995 void ReceiveWhiteUnicorn (sLong
);
996 void DecreaseStateCounter (sLong
, int);
997 truth
IsImmuneToLeprosy () const;
998 bodypart
*SearchForOriginalBodyPart (int) const;
999 void SetLifeExpectancy (int, int);
1000 virtual void DuplicateEquipment (character
*, uLong
);
1001 virtual void SignalDisappearance ();
1002 virtual truth
HornOfFearWorks () const;
1003 virtual truth
CanHear () const;
1004 void BeginLeprosy ();
1006 void ReceiveOmmelCerumen (sLong
);
1007 void ReceiveOmmelSweat (sLong
);
1008 void ReceiveOmmelTears (sLong
);
1009 void ReceiveOmmelSnot (sLong
);
1010 void ReceiveOmmelBone (sLong
);
1011 truth
IsSameAs (ccharacter
*) const;
1012 uLong
GetCommandFlags () const;
1013 void SetCommandFlags (uLong What
) { CommandFlags
= What
; }
1014 uLong
GetPossibleCommandFlags () const;
1015 uLong
GetConstantCommandFlags () const;
1016 virtual truth
AllowEquipment (citem
*, int) const { return true; }
1018 truth
ChangePetEquipment ();
1019 truth
TakePetItems ();
1020 truth
GivePetItems ();
1021 truth
IssuePetCommands ();
1023 truth
EquipmentScreen (stack
*, stack
*);
1024 uLong
GetManagementFlags () const;
1025 cchar
*GetVerbalBurdenState () const;
1026 col16
GetVerbalBurdenStateColor () const;
1027 virtual int GetAttributeAverage () const;
1028 virtual cfestring
& GetStandVerb () const;
1029 virtual truth
CheckApply () const;
1030 virtual truth
CanForceVomit () const { return CanVomit(); }
1031 void EndLevitation ();
1032 virtual truth
CanMove () const;
1033 void CalculateEnchantments ();
1034 truth
GetNewFormForPolymorphWithControl (character
*&);
1035 liquid
*CreateSweat (sLong
) const;
1036 truth
IsTemporary () const;
1037 truth
TeleportRandomItem (truth
);
1038 truth
HasClearRouteTo (v2
) const;
1039 virtual truth
IsTransparent () const;
1040 void SignalPossibleTransparencyChange ();
1041 int GetCursorData () const;
1043 double GetSituationDanger (ccharacter
*, v2
, v2
, truth
) const;
1044 virtual void ModifySituationDanger (double &) const;
1045 void LycanthropySituationDangerModifier (double &) const;
1046 void PoisonedSituationDangerModifier (double &) const;
1047 void PolymorphingSituationDangerModifier (double &) const;
1048 void PanicSituationDangerModifier (double &) const;
1049 void ConfusedSituationDangerModifier (double &) const;
1050 void ParasitizedSituationDangerModifier (double &) const;
1051 void LeprosySituationDangerModifier (double &) const;
1052 void HiccupsSituationDangerModifier (double &) const;
1053 truth
TryToTalkAboutScience ();
1054 truth
IsUsingWeaponOfCategory (int) const;
1055 virtual truth
IsKamikazeDwarf () const { return false; }
1056 void AddRandomScienceName (festring
&) const;
1057 truth
IsStuck () const { return truth(TrapData
); }
1058 festring
GetTrapDescription () const;
1059 truth
TryToUnStickTraps (v2
);
1060 void RemoveTrap (uLong
);
1061 void AddTrap (uLong
, uLong
);
1062 truth
IsStuckToTrap (uLong
) const;
1063 void RemoveTraps ();
1064 void RemoveTraps (int);
1065 int RandomizeHurtBodyPart (uLong
) const;
1066 virtual int RandomizeTryToUnStickBodyPart (uLong
) const { return NONE_INDEX
; }
1067 truth
BodyPartIsStuck (int) const;
1068 void PrintAttribute (cchar
*, int, int, int) const;
1069 virtual truth
AllowUnconsciousness () const;
1070 truth
CanPanic () const;
1071 int GetRandomBodyPart (uLong
= ALL_BODYPART_FLAGS
) const;
1072 virtual truth
CanChokeOnWeb (web
*) const { return CanChoke(); }
1073 virtual truth
BrainsHurt () const { return false; }
1074 truth
IsSwimming () const;
1075 truth
IsAnimated () const;
1076 virtual truth
IsPlayerKind () const { return false; }
1077 truth
HasBodyPart (sorter
) const;
1078 truth
PossessesItem (sorter
) const;
1079 truth
IsFlying () const { return GetMoveType() & FLY
; }
1080 virtual cchar
*GetRunDescriptionLine (int) const;
1081 void VomitAtRandomDirection (int);
1082 virtual truth
SpecialSaveLife () { return false; }
1083 void RemoveLifeSavers ();
1084 virtual ccharacter
*FindCarrier () const;
1085 virtual cchar
*GetNormalDeathMessage () const;
1086 virtual bool IsConscious () const;
1087 void ForcePutNear (v2
);
1088 virtual void ApplySpecialAttributeBonuses () {}
1089 void ReceiveMustardGas (int, sLong
);
1090 void ReceiveMustardGasLiquid (int, sLong
);
1091 truth
IsBadPath (v2
) const;
1092 double &GetExpModifierRef (expid
);
1093 truth
ForgetRandomThing ();
1094 void ApplyAllGodsKnownBonus ();
1095 item
*GiveMostExpensiveItem (character
*);
1096 void ReceiveItemAsPresent (item
*);
1097 item
*FindMostExpensiveItem () const;
1098 void ReceiveSirenSong (character
*Siren
);
1099 character
*GetNearestEnemy () const;
1100 truth
IsInfectedByMindWorm () const { return !CounterToMindWormHatch
; }
1101 void SetCounterToMindWormHatch (int What
) { CounterToMindWormHatch
= What
; }
1102 truth
MindWormCanPenetrateSkull (mindworm
*) const;
1103 truth
CanTameWithDulcis (const character
*) const;
1104 truth
CanTameWithLyre (const character
*) const;
1105 truth
CanTameWithScroll (const character
*) const;
1106 truth
IsCharmable () const { return GetTamingDifficulty() != NO_TAMING
; }
1107 truth
CheckSadism ();
1108 virtual truth
CheckThrowItemOpportunity ();
1109 virtual truth
CheckAIZapOpportunity ();
1110 virtual truth
CheckInventoryForItemToThrow (item
*);
1111 virtual truth
HasSadistAttackMode () const { return IsUsingLegs(); }
1112 truth
CheckForBeverage ();
1115 virtual void SurgicallyDetachBodyPart ();
1118 static truth
DamageTypeDestroysBodyPart (int);
1119 virtual void LoadSquaresUnder ();
1120 virtual bodypart
*MakeBodyPart (int) const;
1121 virtual void SpecialTurnHandler () {}
1122 void Initialize (int, int);
1123 virtual void PostConstruct () {}
1124 void LoadDataBaseStats ();
1125 virtual v2
GetBodyPartBitmapPos (int, truth
= false) const;
1126 virtual col16
GetBodyPartColorA (int, truth
= false) const;
1127 virtual col16
GetBodyPartColorB (int, truth
= false) const;
1128 virtual col16
GetBodyPartColorC (int, truth
= false) const;
1129 virtual col16
GetBodyPartColorD (int, truth
= false) const;
1130 virtual int GetBodyPartSparkleFlags (int) const;
1131 virtual sLong
GetBodyPartSize (int, int) const;
1132 virtual sLong
GetBodyPartVolume (int) const;
1133 void UpdateBodyPartPicture (int I
, truth
);
1134 int ChooseBodyPartToReceiveHit (double, double);
1135 virtual void CreateBodyParts (int);
1136 virtual material
*CreateBodyPartMaterial (int, sLong
) const;
1137 virtual truth
ShowClassDescription () const { return true; }
1138 void SeekLeader (ccharacter
*);
1139 virtual truth
CheckForUsefulItemsOnGround (truth
= true);
1140 truth
CheckForDoors ();
1141 truth
CheckForEnemies (truth
, truth
, truth
, truth
= false);
1142 truth
FollowLeader (character
*);
1143 void StandIdleAI ();
1144 virtual void CreateCorpse (lsquare
*);
1145 void GetPlayerCommand ();
1146 virtual void GetAICommand ();
1147 truth
MoveTowardsTarget (truth
);
1148 virtual cchar
*FirstPersonUnarmedHitVerb () const;
1149 virtual cchar
*FirstPersonCriticalUnarmedHitVerb () const;
1150 virtual cchar
*ThirdPersonUnarmedHitVerb () const;
1151 virtual cchar
*ThirdPersonCriticalUnarmedHitVerb () const;
1152 virtual cchar
*FirstPersonKickVerb () const;
1153 virtual cchar
*FirstPersonCriticalKickVerb () const;
1154 virtual cchar
*ThirdPersonKickVerb () const;
1155 virtual cchar
*ThirdPersonCriticalKickVerb () const;
1156 virtual cchar
*FirstPersonBiteVerb () const;
1157 virtual cchar
*FirstPersonCriticalBiteVerb () const;
1158 virtual cchar
*ThirdPersonBiteVerb () const;
1159 virtual cchar
*ThirdPersonCriticalBiteVerb () const;
1160 virtual cchar
*UnarmedHitNoun () const;
1161 virtual cchar
*KickNoun () const;
1162 virtual cchar
*BiteNoun () const;
1163 virtual truth
AttackIsBlockable (int) const { return true; }
1164 virtual truth
AttackMayDamageArmor () const { return true; }
1165 virtual int GetSpecialBodyPartFlags (int) const { return ST_NORMAL
; }
1166 virtual int GetBodyPartWobbleData (int) const { return 0; }
1167 virtual int ModifyBodyPartHitPreference (int, int Modifier
) const { return Modifier
; }
1168 virtual int ModifyBodyPartToHitChance (int, int Chance
) const { return Chance
; }
1169 virtual truth
CanPanicFromSeveredBodyPart () const { return true; }
1170 virtual void SpecialBodyPartSeverReaction () {}
1171 truth
AttackAdjacentEnemyAI ();
1172 double RandomizeBabyExperience (double);
1173 static truth
IsLimbIndex (int);
1174 virtual truth
AllowExperience () const { return true; }
1175 virtual const prototype
*FindProtoType () const { return &ProtoType
; }
1177 item
*GeneralFindItem (ItemCheckerCB chk
) const;
1178 int GeneralRemoveItem (ItemCheckerCB chk
, truth allItems
=false); // return count
1181 static const prototype ProtoType
;
1184 sLong TemporaryState
;
1185 int TemporaryStateCounter
[STATES
];
1189 int CurrentSweatMaterial
;
1190 std::list
<character
*>::iterator TeamIterator
;
1191 bodypartslot
*BodyPartSlot
;
1192 festring AssignedName
;
1194 const database
*DataBase
;
1195 double BaseExperience
[BASE_ATTRIBUTES
];
1196 std::list
<uLong
> *OriginalBodyPartID
;
1197 entity
*MotherEntity
;
1198 character
*PolymorphBackup
;
1199 cweaponskill
*CWeaponSkill
;
1200 sLong EquipmentState
;
1201 square
**SquareUnder
;
1204 sLong CarriedWeight
;
1210 int AllowedWeaponSkillCategories
;
1212 sLong RegenerationCounter
;
1213 int AttributeBonus
[BASE_ATTRIBUTES
];
1218 std::vector
<v2
> Route
;
1219 std::set
<v2
> Illegal
;
1220 uLong LastAcidMsgMin
;
1223 int BlocksSinceLastTurn
;
1224 double GenerationDanger
;
1229 expmodifiermap ExpModifierMap
;
1230 int CounterToMindWormHatch
;
1234 #ifdef __FILE_OF_STATIC_CHARACTER_PROTOTYPE_DEFINITIONS__
1235 #define CHARACTER_PROTO(name, base)\
1236 template<> const characterprototype\
1237 name##sysbase::ProtoType(&base::ProtoType,\
1238 (characterspawner)(&name##sysbase::Spawn),\
1239 (charactercloner)(&name##sysbase::Clone), #name);
1241 #define CHARACTER_PROTO(name, base)
1245 #define CHARACTER(name, base)\
1247 typedef sysbase<name, base, characterprototype> name##sysbase;\
1248 CHARACTER_PROTO(name, base)\
1249 class name : public name##sysbase