save and bone files now can be compressed with ZLib (wow!)
[k8-i-v-a-n.git] / src / game / bodypart.h
blob17fee5ff48c582377dded3a8b724e0558e37a707
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 __BODYPART_H__
14 #define __BODYPART_H__
16 #include "item.h"
17 #include "fesave.h"
19 class humanoid;
20 class sweaponskill;
22 struct scar
24 int Severity;
25 mutable bitmap* PanelBitmap;
28 outputfile& operator<<(outputfile&, const scar&);
29 inputfile& operator>>(inputfile&, scar&);
31 struct damageid
33 int SrcID, Amount;
36 RAW_SAVE_LOAD(damageid);
38 ITEM(bodypart, item)
40 public:
41 friend class corpse;
42 bodypart() : Master(0) { }
43 bodypart(const bodypart&);
44 virtual ~bodypart();
45 virtual void Save(outputfile&) const;
46 virtual void Load(inputfile&);
47 virtual int GetGraphicsContainerIndex() const;
48 character* GetMaster() const { return Master; }
49 humanoid* GetHumanoidMaster() const;
50 void SetMaster(character* What) { Master = What; }
51 virtual int GetStrengthValue() const;
52 int GetMaxHP() const { return MaxHP; }
53 void SetHP(int);
54 int GetHP() const { return HP; }
55 void EditHP(int, int);
56 void IncreaseHP();
57 virtual int GetTotalResistance(int) const { return 0; }
58 virtual truth ReceiveDamage(character*, int, int, int);
59 cfestring& GetOwnerDescription() const { return OwnerDescription; }
60 void SetOwnerDescription(cfestring& What) { OwnerDescription = What; }
61 truth IsUnique() const { return Flags & UNIQUE; }
62 void SetIsUnique(truth);
63 virtual void DropEquipment(stack* = 0) { }
64 virtual void InitSpecialAttributes() { }
65 virtual void SignalEquipmentAdd(gearslot*);
66 virtual void SignalEquipmentRemoval(gearslot*, citem*);
67 virtual void Mutate();
68 sLong GetBodyPartVolume() const { return BodyPartVolume; }
69 sLong GetCarriedWeight() const { return CarriedWeight; }
70 virtual item* GetEquipment(int) const { return 0; }
71 virtual int GetEquipments() const { return 0; }
72 virtual void CalculateVolumeAndWeight();
73 virtual void CalculateEmitation();
74 void CalculateMaxHP(feuLong = MAY_CHANGE_HPS|CHECK_USABILITY);
75 virtual void SignalVolumeAndWeightChange();
76 void FastRestoreHP();
77 void RestoreHP();
78 virtual void CalculateDamage() { }
79 virtual void CalculateToHitValue() { }
80 virtual void CalculateAPCost() { }
81 void CalculateAttackInfo();
82 double GetTimeToDie(int, double, double, truth, truth) const;
83 virtual double GetRoughChanceToHit(double, double) const;
84 cfestring& GetBodyPartName() const { return GetNameSingular(); }
85 void RandomizePosition();
86 void ResetPosition() { SpecialFlags &= ~0x7; }
87 virtual void SignalSpoil(material*);
88 virtual truth CanBePiledWith(citem*, ccharacter*) const;
89 truth IsAlive() const;
90 void SpillBlood(int);
91 void SpillBlood(int, v2);
92 virtual void Be();
93 int GetConditionColorIndex() const;
94 void SetBitmapPos(v2 What) { BitmapPos = What; }
95 void SetSpecialFlags(int What) { SpecialFlags = What; }
96 void SetWobbleData(int What) { WobbleData = What; }
97 void SetMaterialColorB(col16 What) { ColorB = What; }
98 void SetMaterialColorC(col16 What) { ColorC = What; }
99 void SetMaterialColorD(col16 What) { ColorD = What; }
100 virtual void SignalEnchantmentChange();
101 virtual void CalculateAttributeBonuses() { }
102 virtual void SignalSpoilLevelChange(material*);
103 virtual truth CanBeEatenByAI(ccharacter*) const;
104 virtual truth DamageArmor(character*, int, int) { return false; }
105 truth CanBeSevered(int) const;
106 virtual truth EditAllAttributes(int) { return false; }
107 virtual void Draw(blitdata&) const;
108 void SetSparkleFlags(int);
109 virtual int GetSpecialFlags() const;
110 virtual truth IsRepairable(ccharacter*) const;
111 truth IsWarm() const;
112 truth UseMaterialAttributes() const;
113 truth CanRegenerate() const;
114 truth CanHaveParasite() const;
115 virtual square* GetSquareUnder(int = 0) const;
116 virtual lsquare* GetLSquareUnder(int = 0) const;
117 virtual item* GetArmorToReceiveFluid(truth) const { return 0; }
118 virtual void SpillFluid(character*, liquid*, int = 0);
119 void StayOn(liquid*);
120 void SetBloodMaterial(int What) { BloodMaterial = What; }
121 int GetBloodMaterial() const { return BloodMaterial; }
122 liquid* CreateBlood(sLong) const;
123 virtual truth UpdateArmorPictures() { return false; }
124 virtual void DrawArmor(blitdata&) const { }
125 virtual void UpdatePictures();
126 item *GetExternalBodyArmor () const;
127 item *GetExternalCloak () const;
128 item *GetExternalHelmet () const;
129 item *GetExternalBelt () const;
130 virtual void ReceiveAcid(material*, cfestring&, sLong);
131 virtual truth ShowFluids() const { return false; }
132 virtual void TryToRust(sLong);
133 virtual truth AllowFluidBe() const;
134 virtual material* RemoveMaterial(material*);
135 virtual void CopyAttributes(const bodypart*) { }
136 virtual void DestroyBodyPart(stack*);
137 virtual void SetLifeExpectancy(int, int);
138 virtual void SpecialEatEffect(character*, int);
139 virtual character* GetBodyPartMaster() const { return Master; }
140 virtual truth AllowFluids() const { return true; }
141 truth IsBadlyHurt() const { return Flags & BADLY_HURT; }
142 truth IsStuck() const { return Flags & STUCK; }
143 truth IsUsable() const { return !(Flags & (BADLY_HURT|STUCK)); }
144 virtual void SignalPossibleUsabilityChange() { UpdateFlags(); }
145 void SetIsInfectedByLeprosy(truth);
146 virtual int GetSparkleFlags() const;
147 virtual truth MaterialIsChangeable(ccharacter*) const;
148 virtual void RemoveRust();
149 virtual item* Fix();
150 virtual sLong GetFixPrice() const;
151 virtual truth IsFixableBySmith(ccharacter*) const;
152 virtual truth IsFixableByTailor(ccharacter*) const;
153 virtual void SignalMaterialChange();
154 void SetNormalMaterial(int What) { NormalMaterial = What; }
155 virtual truth IsBroken() const { return HP < MaxHP; }
156 virtual truth IsDestroyable(ccharacter*) const;
157 void DrawScars(cblitdata&) const;
158 static truth DamageTypeCanScar(int);
159 void GenerateScar(int, int);
160 int CalculateScarAttributePenalty(int) const;
161 virtual truth IsBodyPart () const { return true; }
163 protected:
164 virtual alpha GetMaxAlpha() const;
165 virtual void GenerateMaterials() { }
166 virtual void AddPostFix(festring&, int) const;
167 virtual truth ShowMaterial() const;
168 virtual int GetArticleMode() const;
169 virtual col16 GetMaterialColorA(int) const;
170 virtual col16 GetMaterialColorB(int) const { return ColorB; }
171 virtual col16 GetMaterialColorC(int) const { return ColorC; }
172 virtual col16 GetMaterialColorD(int) const { return ColorD; }
173 virtual v2 GetBitmapPos(int) const { return BitmapPos; }
174 virtual int GetWobbleData() const { return WobbleData; }
175 void UpdateArmorPicture(graphicdata&, item*, int, v2 (item::*)(int) const, truth = false) const;
176 void DrawEquipment(const graphicdata&, blitdata&) const;
177 void UpdateFlags();
178 truth MasterIsAnimated() const;
179 void SignalAnimationStateChange(truth);
180 virtual truth AddAdjective(festring&, truth) const;
181 void RemoveDamageIDs(int);
182 void AddDamageID(int, int);
183 festring OwnerDescription;
184 character* Master;
185 sLong CarriedWeight;
186 sLong BodyPartVolume;
187 packv2 BitmapPos;
188 packcol16 ColorB;
189 packcol16 ColorC;
190 packcol16 ColorD;
191 uShort SpecialFlags;
192 short HP;
193 short MaxHP;
194 short BloodMaterial;
195 short NormalMaterial;
196 uChar SpillBloodCounter;
197 uChar WobbleData;
198 std::vector<scar> Scar;
199 std::deque<damageid> DamageID;
202 ITEM(head, bodypart)
204 public:
205 head();
206 head(const head&);
207 virtual ~head();
208 virtual void Save(outputfile&) const;
209 virtual void Load(inputfile&);
210 virtual int GetTotalResistance(int) const;
211 void SetHelmet(item* What) { HelmetSlot.PutInItem(What); }
212 item* GetHelmet() const { return *HelmetSlot; }
213 void SetAmulet(item* What) { AmuletSlot.PutInItem(What); }
214 item* GetAmulet() const { return *AmuletSlot; }
215 virtual void DropEquipment(stack* = 0);
216 virtual int GetBodyPartIndex() const;
217 double GetBiteDamage() const { return BiteDamage; }
218 int GetBiteMinDamage() const;
219 int GetBiteMaxDamage() const;
220 double GetBiteToHitValue() const { return BiteToHitValue; }
221 sLong GetBiteAPCost() const { return BiteAPCost; }
222 virtual void InitSpecialAttributes();
223 virtual item* GetEquipment(int) const;
224 virtual int GetEquipments() const { return 2; }
225 int GetBaseBiteStrength() const { return BaseBiteStrength; }
226 void SetBaseBiteStrength(sLong What) { BaseBiteStrength = What; }
227 virtual void CalculateDamage();
228 virtual void CalculateToHitValue();
229 virtual void CalculateAPCost();
230 virtual truth DamageArmor(character*, int, int);
231 virtual head* Behead();
232 virtual item* GetArmorToReceiveFluid(truth) const;
233 virtual void SignalPossibleUsabilityChange();
234 protected:
235 void UpdateHeadArmorPictures(graphicdata&) const;
236 gearslot HelmetSlot;
237 gearslot AmuletSlot;
238 int BaseBiteStrength;
239 double BiteToHitValue;
240 double BiteDamage;
241 sLong BiteAPCost;
244 ITEM(torso, bodypart)
246 public:
247 virtual int GetBodyPartIndex() const;
248 virtual double GetRoughChanceToHit(double, double) const;
251 ITEM(normaltorso, torso)
253 public:
254 virtual int GetGraphicsContainerIndex() const;
255 virtual int GetTotalResistance(int) const;
258 ITEM(humanoidtorso, torso)
260 public:
261 humanoidtorso();
262 humanoidtorso(const humanoidtorso&);
263 virtual ~humanoidtorso();
264 virtual void Save(outputfile&) const;
265 virtual void Load(inputfile&);
266 virtual int GetTotalResistance(int) const;
267 void SetBodyArmor(item* What) { BodyArmorSlot.PutInItem(What); }
268 item* GetBodyArmor() const { return *BodyArmorSlot; }
269 void SetCloak(item* What) { CloakSlot.PutInItem(What); }
270 item* GetCloak() const { return *CloakSlot; }
271 void SetBelt(item* What) { BeltSlot.PutInItem(What); }
272 item* GetBelt() const { return *BeltSlot; }
273 virtual void DropEquipment(stack* = 0);
274 virtual item* GetEquipment(int) const;
275 virtual int GetEquipments() const { return 3; }
276 virtual void SignalEquipmentAdd(gearslot*);
277 virtual void SignalVolumeAndWeightChange();
278 virtual truth DamageArmor(character*, int, int);
279 virtual item* GetArmorToReceiveFluid(truth) const;
280 protected:
281 void UpdateTorsoArmorPictures(graphicdata&, graphicdata&, graphicdata&) const;
282 gearslot BodyArmorSlot;
283 gearslot CloakSlot;
284 gearslot BeltSlot;
287 ITEM(arm, bodypart)
289 public:
290 arm() : StrengthBonus(0), DexterityBonus(0) { }
291 arm(const arm&);
292 virtual ~arm();
293 virtual void Save(outputfile&) const;
294 virtual void Load(inputfile&);
295 virtual int GetTotalResistance(int) const;
296 double GetWieldedDamage() const;
297 double GetWieldedToHitValue() const;
298 void SetWielded(item* What) { WieldedSlot.PutInItem(What); }
299 item* GetWielded() const { return *WieldedSlot; }
300 void SetGauntlet(item* What) { GauntletSlot.PutInItem(What); }
301 item* GetGauntlet() const { return *GauntletSlot; }
302 void SetRing(item* What) { RingSlot.PutInItem(What); }
303 item* GetRing() const { return *RingSlot; }
304 virtual void DropEquipment(stack* = 0);
305 double GetUnarmedToHitValue() const;
306 double GetUnarmedDamage() const;
307 void Hit(character*, v2, int, int = 0);
308 int GetAttribute(int, truth = true) const;
309 truth EditAttribute(int, int);
310 void EditExperience(int, double, double);
311 void SetStrength(int What) { StrengthExperience = What * EXP_MULTIPLIER; }
312 void SetDexterity(int What) { DexterityExperience = What * EXP_MULTIPLIER; }
313 virtual void InitSpecialAttributes();
314 virtual void Mutate();
315 virtual arm* GetPairArm() const { return 0; }
316 sLong GetWieldedAPCost() const;
317 sLong GetUnarmedAPCost() const;
318 virtual item* GetEquipment(int) const;
319 virtual int GetEquipments() const { return 3; }
320 int GetBaseUnarmedStrength() const { return BaseUnarmedStrength; }
321 void SetBaseUnarmedStrength(sLong What) { BaseUnarmedStrength = What; }
322 virtual void CalculateDamage();
323 virtual void CalculateToHitValue();
324 virtual void CalculateAPCost();
325 double GetDamage() const { return Damage; }
326 int GetMinDamage() const;
327 int GetMaxDamage() const;
328 double GetToHitValue() const { return ToHitValue; }
329 sLong GetAPCost() const { return APCost; }
330 truth PairArmAllowsMelee() const;
331 virtual void SignalVolumeAndWeightChange();
332 truth TwoHandWieldIsActive() const;
333 double GetBlockChance(double) const;
334 int GetBlockCapability() const;
335 void WieldedSkillHit(int);
336 double GetBlockValue() const;
337 void ApplyEquipmentAttributeBonuses(item*);
338 virtual void CalculateAttributeBonuses();
339 int GetWieldedHitStrength() const;
340 virtual void SignalEquipmentAdd(gearslot*);
341 virtual void SignalEquipmentRemoval(gearslot*, citem*);
342 void ApplyDexterityPenalty(item*);
343 void ApplyStrengthBonus (item *Item);
344 void ApplyDexterityBonus (item *Item);
345 virtual truth DamageArmor(character*, int, int);
346 truth CheckIfWeaponTooHeavy(cchar*) const;
347 virtual truth EditAllAttributes(int);
348 void AddAttackInfo(felist&) const;
349 void AddDefenceInfo(felist&) const;
350 void UpdateWieldedPicture();
351 void DrawWielded(blitdata&) const;
352 virtual truth IsRightArm() const { return 0; }
353 virtual void UpdatePictures();
354 virtual double GetTypeDamage(ccharacter*) const;
355 virtual item* GetArmorToReceiveFluid(truth) const;
356 virtual void CopyAttributes(const bodypart*);
357 double GetStrengthExperience() const { return StrengthExperience; }
358 double GetDexterityExperience() const { return DexterityExperience; }
359 virtual void SignalPossibleUsabilityChange();
360 virtual truth IsAnimated() const;
361 truth HasSadistWeapon() const;
363 protected:
364 virtual sweaponskill** GetCurrentSWeaponSkill() const { return 0; }
365 void UpdateArmArmorPictures(graphicdata&, graphicdata&, int) const;
366 int GetCurrentSWeaponSkillBonus() const;
367 gearslot WieldedSlot;
368 gearslot GauntletSlot;
369 gearslot RingSlot;
370 double StrengthExperience;
371 double DexterityExperience;
372 int BaseUnarmedStrength;
373 double Damage;
374 double ToHitValue;
375 sLong APCost;
376 int StrengthBonus;
377 int DexterityBonus;
378 graphicdata WieldedGraphicData;
381 ITEM(rightarm, arm)
383 public:
384 rightarm();
385 rightarm(const rightarm&);
386 virtual int GetBodyPartIndex() const;
387 virtual arm* GetPairArm() const;
388 virtual truth IsRightArm() const { return true; }
389 virtual int GetSpecialFlags() const;
390 protected:
391 virtual sweaponskill** GetCurrentSWeaponSkill() const;
394 ITEM(leftarm, arm)
396 public:
397 leftarm();
398 leftarm(const leftarm&);
399 virtual int GetBodyPartIndex() const;
400 virtual arm* GetPairArm() const;
401 virtual truth IsRightArm() const { return false; }
402 virtual int GetSpecialFlags() const;
403 protected:
404 virtual sweaponskill** GetCurrentSWeaponSkill() const;
407 ITEM(groin, bodypart)
409 public:
410 virtual int GetTotalResistance(int) const;
411 virtual int GetBodyPartIndex() const;
412 virtual truth DamageArmor(character*, int, int);
413 virtual int GetSpecialFlags() const;
414 virtual item* GetArmorToReceiveFluid(truth) const;
415 void UpdateGroinArmorPictures(graphicdata&) const;
418 ITEM(leg, bodypart)
420 public:
421 leg() : StrengthBonus(0), AgilityBonus(0) { }
422 leg(const leg&);
423 virtual ~leg();
424 virtual void Save(outputfile&) const;
425 virtual void Load(inputfile&);
426 virtual int GetTotalResistance(int) const;
427 void SetBoot(item* What) { BootSlot.PutInItem(What); }
428 item* GetBoot() const { return *BootSlot; }
429 virtual void DropEquipment(stack* = 0);
430 double GetKickToHitValue() const { return KickToHitValue; }
431 double GetKickDamage() const { return KickDamage; }
432 int GetKickMinDamage() const;
433 int GetKickMaxDamage() const;
434 int GetAttribute(int, truth = true) const;
435 truth EditAttribute(int, int);
436 void EditExperience(int, double, double);
437 virtual void InitSpecialAttributes();
438 virtual void Mutate();
439 sLong GetKickAPCost() const { return KickAPCost; }
440 virtual item* GetEquipment(int) const;
441 virtual int GetEquipments() const { return 1; }
442 sLong GetBaseKickStrength() const { return BaseKickStrength; }
443 void SetBaseKickStrength(sLong What) { BaseKickStrength = What; }
444 virtual void CalculateDamage();
445 virtual void CalculateToHitValue();
446 virtual void CalculateAPCost();
447 void ApplyEquipmentAttributeBonuses(item*);
448 virtual void CalculateAttributeBonuses();
449 virtual void SignalEquipmentAdd(gearslot*);
450 void ApplyAgilityPenalty(item*);
451 void ApplyStrengthBonus (item *Item);
452 void ApplyAgilityBonus (item *Item);
453 virtual void SignalVolumeAndWeightChange();
454 virtual truth DamageArmor(character*, int, int);
455 virtual truth EditAllAttributes(int);
456 void AddAttackInfo(felist&) const;
457 virtual item* GetArmorToReceiveFluid(truth) const;
458 virtual void CopyAttributes(const bodypart*);
459 double GetStrengthExperience() const { return StrengthExperience; }
460 double GetAgilityExperience() const { return AgilityExperience; }
461 virtual void SignalPossibleUsabilityChange();
463 protected:
464 void UpdateLegArmorPictures(graphicdata&, graphicdata&, int) const;
465 gearslot BootSlot;
466 double StrengthExperience;
467 double AgilityExperience;
468 int BaseKickStrength;
469 double KickDamage;
470 double KickToHitValue;
471 sLong KickAPCost;
472 int StrengthBonus;
473 int AgilityBonus;
476 ITEM(rightleg, leg)
478 public:
479 rightleg();
480 rightleg(const rightleg&);
481 virtual int GetBodyPartIndex() const;
482 virtual int GetSpecialFlags() const;
483 protected:
486 ITEM(leftleg, leg)
488 public:
489 leftleg();
490 leftleg(const leftleg&);
491 virtual int GetBodyPartIndex() const;
492 virtual int GetSpecialFlags() const;
493 protected:
496 ITEM(corpse, item)
498 public:
499 corpse() { }
500 corpse(const corpse&);
501 virtual ~corpse();
502 virtual int GetOfferValue(int) const;
503 virtual double GetWeaponStrength() const;
504 virtual truth CanBeEatenByAI(ccharacter*) const;
505 virtual int GetStrengthValue() const;
506 character* GetDeceased() const { return Deceased; }
507 void SetDeceased(character*);
508 virtual void Save(outputfile&) const;
509 virtual void Load(inputfile&);
510 virtual truth IsDestroyable(ccharacter*) const;
511 virtual sLong GetTruePrice() const;
512 virtual int GetMaterials() const { return 2; }
513 virtual truth RaiseTheDead(character*);
514 virtual void CalculateVolumeAndWeight();
515 virtual void CalculateEmitation();
516 virtual void SignalSpoil(material*);
517 virtual truth CanBePiledWith(citem*, ccharacter*) const;
518 virtual int GetSpoilLevel() const;
519 virtual material* GetMaterial(int) const;
520 virtual head* Behead();
521 virtual truth CanBeCloned() const;
522 virtual int GetAttachedGod() const;
523 virtual void PreProcessForBone();
524 virtual void PostProcessForBone();
525 virtual void FinalProcessForBone();
526 virtual truth SuckSoul(character*, character* = 0);
527 virtual character* TryNecromancy(character*);
528 virtual void Cannibalize();
529 virtual material* GetConsumeMaterial(ccharacter*, materialpredicate) const;
530 virtual truth DetectMaterial(cmaterial*) const;
531 virtual void SetLifeExpectancy(int, int);
532 virtual void Be();
533 virtual void SignalDisappearance();
534 virtual truth IsValuable() const;
535 virtual truth AddRustLevelDescription(festring&, truth) const { return false; }
536 virtual truth Necromancy(character*);
537 virtual int GetSparkleFlags() const;
538 virtual truth IsRusted() const { return false; }
539 virtual truth CanBeHardened(ccharacter*) const { return false; }
540 virtual truth IsCorpse () const { return true; }
541 protected:
542 virtual void GenerateMaterials() { }
543 virtual col16 GetMaterialColorA(int) const;
544 virtual col16 GetMaterialColorB(int) const;
545 virtual alpha GetAlphaA(int) const;
546 virtual alpha GetAlphaB(int) const;
547 virtual truth ShowMaterial() const { return false; }
548 virtual void AddPostFix(festring&, int) const;
549 virtual v2 GetBitmapPos(int) const;
550 virtual int GetSize() const;
551 virtual int GetArticleMode() const;
552 virtual int GetRustDataA() const;
553 virtual truth AddStateDescription(festring&, truth) const;
554 character* Deceased;
557 ITEM(eddytorso, normaltorso)
559 protected:
560 virtual int GetClassAnimationFrames() const { return 8; }
561 virtual v2 GetBitmapPos(int) const;
564 ITEM(largetorso, normaltorso)
566 public:
567 virtual void SignalStackAdd(stackslot*, void (stack::*)(item*, truth));
568 virtual int GetSquareIndex(v2) const;
569 virtual void Draw(blitdata&) const;
570 virtual void CalculateSquaresUnder() { SquaresUnder = 4; }
571 protected:
572 virtual v2 GetBitmapPos(int I) const { return GetLargeBitmapPos(BitmapPos, I); }
573 virtual void ModifyAnimationFrames(int& AF) const { AF <<= 2; }
576 ITEM(largecorpse, corpse)
578 public:
579 virtual void SignalStackAdd(stackslot*, void (stack::*)(item*, truth));
580 virtual int GetSquareIndex(v2) const;
581 virtual void Draw(blitdata&) const;
582 virtual void CalculateSquaresUnder() { SquaresUnder = 4; }
583 protected:
584 virtual v2 GetBitmapPos(int I) const { return GetLargeBitmapPos(item::GetBitmapPos(I), I); }
585 virtual void ModifyAnimationFrames(int& AF) const { AF <<= 2; }
588 ITEM(ennerhead, head)
590 protected:
591 virtual int GetClassAnimationFrames() const { return 32; }
592 virtual v2 GetBitmapPos(int) const;
595 ITEM(playerkindhead, head)
597 public:
598 playerkindhead() { }
599 playerkindhead(const playerkindhead& Head) : mybase(Head) { }
600 virtual void Save(outputfile&) const;
601 virtual void Load(inputfile&);
602 virtual truth UpdateArmorPictures();
603 virtual void DrawArmor(blitdata&) const;
604 virtual truth ShowFluids() const { return true; }
605 virtual truth IsAnimated() const { return true; }
606 protected:
607 graphicdata HelmetGraphicData;
610 ITEM(playerkindtorso, humanoidtorso)
612 public:
613 playerkindtorso() { }
614 playerkindtorso(const playerkindtorso& Torso) : mybase(Torso) { }
615 virtual void Save(outputfile&) const;
616 virtual void Load(inputfile&);
617 virtual truth UpdateArmorPictures();
618 virtual void DrawArmor(blitdata&) const;
619 virtual void SignalVolumeAndWeightChange();
620 virtual truth ShowFluids() const { return true; }
621 virtual truth IsAnimated() const { return true; }
622 protected:
623 graphicdata TorsoArmorGraphicData;
624 graphicdata CloakGraphicData;
625 graphicdata BeltGraphicData;
628 ITEM(playerkindrightarm, rightarm)
630 public:
631 playerkindrightarm() { }
632 playerkindrightarm(const playerkindrightarm& Arm) : mybase(Arm) { }
633 virtual void Save(outputfile&) const;
634 virtual void Load(inputfile&);
635 virtual truth UpdateArmorPictures();
636 virtual void DrawArmor(blitdata&) const;
637 virtual truth ShowFluids() const { return true; }
638 virtual truth IsAnimated() const { return true; }
639 protected:
640 graphicdata ArmArmorGraphicData;
641 graphicdata GauntletGraphicData;
644 ITEM(playerkindleftarm, leftarm)
646 public:
647 playerkindleftarm() { }
648 playerkindleftarm(const playerkindleftarm& Arm) : mybase(Arm) { }
649 virtual void Save(outputfile&) const;
650 virtual void Load(inputfile&);
651 virtual truth UpdateArmorPictures();
652 virtual void DrawArmor(blitdata&) const;
653 virtual truth ShowFluids() const { return true; }
654 virtual truth IsAnimated() const { return true; }
655 protected:
656 graphicdata ArmArmorGraphicData;
657 graphicdata GauntletGraphicData;
660 ITEM(playerkindgroin, groin)
662 public:
663 playerkindgroin() { }
664 playerkindgroin(const playerkindgroin& Groin) : mybase(Groin) { }
665 virtual void Save(outputfile&) const;
666 virtual void Load(inputfile&);
667 virtual truth UpdateArmorPictures();
668 virtual void DrawArmor(blitdata&) const;
669 virtual truth ShowFluids() const { return true; }
670 virtual truth IsAnimated() const { return true; }
671 protected:
672 graphicdata GroinArmorGraphicData;
675 ITEM(playerkindrightleg, rightleg)
677 public:
678 playerkindrightleg() { }
679 playerkindrightleg(const playerkindrightleg& Leg) : mybase(Leg) { }
680 virtual void Save(outputfile&) const;
681 virtual void Load(inputfile&);
682 virtual truth UpdateArmorPictures();
683 virtual void DrawArmor(blitdata&) const;
684 virtual truth ShowFluids() const { return true; }
685 virtual truth IsAnimated() const { return true; }
686 protected:
687 graphicdata LegArmorGraphicData;
688 graphicdata BootGraphicData;
691 ITEM(playerkindleftleg, leftleg)
693 public:
694 playerkindleftleg() { }
695 playerkindleftleg(const playerkindleftleg& Leg) : mybase(Leg) { }
696 virtual void Save(outputfile&) const;
697 virtual void Load(inputfile&);
698 virtual truth UpdateArmorPictures();
699 virtual void DrawArmor(blitdata&) const;
700 virtual truth ShowFluids() const { return true; }
701 virtual truth IsAnimated() const { return true; }
702 protected:
703 graphicdata LegArmorGraphicData;
704 graphicdata BootGraphicData;
707 ITEM(magicmushroomtorso, normaltorso)
709 protected:
710 virtual int GetClassAnimationFrames() const { return 64; }
711 virtual v2 GetBitmapPos(int) const;
714 ITEM(dogtorso, normaltorso)
716 protected:
717 virtual void Draw(blitdata&) const;
718 virtual int GetClassAnimationFrames() const { return 16; }
719 virtual v2 GetBitmapPos(int) const;
722 ITEM(blinkdogtorso, dogtorso)
724 protected:
725 virtual alpha GetAlphaA(int) const;
726 virtual int GetClassAnimationFrames() const { return 64; }
729 ITEM(mysticfrogtorso, normaltorso)
731 public:
732 virtual truth AllowAlphaEverywhere() const { return true; }
733 protected:
734 virtual int GetClassAnimationFrames() const { return 128; }
735 virtual col16 GetOutlineColor(int) const;
736 virtual alpha GetOutlineAlpha(int) const;
739 ITEM(lobhsetorso, largetorso)
741 protected:
742 virtual int GetClassAnimationFrames() const { return 32; }
743 virtual col16 GetMaterialColorD(int) const;
746 ITEM(battorso, normaltorso)
748 protected:
749 virtual int GetClassAnimationFrames() const { return 16; }
750 virtual v2 GetBitmapPos(int) const;
753 ITEM(spidertorso, normaltorso)
755 protected:
756 virtual int GetClassAnimationFrames() const { return 16; }
757 virtual v2 GetBitmapPos(int) const;
761 ITEM(menatrixtorso, largetorso)
766 #endif