save and bone files now can be compressed with ZLib (wow!)
[k8-i-v-a-n.git] / src / game / miscitem.h
bloba38959c4a9b6c52b24de0f6352e9febadbfa7db2
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 __MISCITEM_H__
14 #define __MISCITEM_H__
16 #include "item.h"
17 #include "game.h" /// check
18 #include "trap.h"
20 ITEM(materialcontainer, item)
22 public:
23 materialcontainer() { }
24 materialcontainer(const materialcontainer&);
25 virtual ~materialcontainer();
26 virtual material* GetSecondaryMaterial() const { return SecondaryMaterial; }
27 virtual void SetSecondaryMaterial(material*, int = 0);
28 virtual void ChangeSecondaryMaterial(material*, int = 0);
29 void InitMaterials(material*, material*, truth = true);
30 virtual void Save(outputfile&) const;
31 virtual void Load(inputfile&);
32 virtual int GetMaterials() const { return 2; }
33 virtual void SignalSpoil(material*);
34 virtual truth CanBePiledWith(citem*, ccharacter*) const;
35 virtual void Be();
36 virtual int GetSpoilLevel() const;
37 virtual material* GetMaterial(int) const;
38 virtual int GetAttachedGod() const;
39 virtual material* GetConsumeMaterial(ccharacter*, materialpredicate = TrueMaterialPredicate) const;
40 virtual material* RemoveMaterial(material*);
41 material* RemoveMainMaterial();
42 virtual material* RemoveSecondaryMaterial();
43 virtual void CalculateEmitation();
44 virtual void InitMaterials(const materialscript*, const materialscript*, truth);
45 virtual int GetSparkleFlags() const;
46 virtual truth DumpTo (character *dumper, v2 dest);
47 protected:
48 virtual sLong GetMaterialPrice() const;
49 virtual truth CalculateHasBe() const;
50 virtual void GenerateMaterials();
51 virtual col16 GetMaterialColorB(int) const;
52 virtual alpha GetAlphaB(int) const;
53 virtual int GetRustDataB() const;
54 material* SecondaryMaterial;
57 ITEM(banana, materialcontainer)
59 public:
60 banana() : TimesUsed(0), Charges(6), Jammed(false) { }
61 virtual truth Zap(character*, v2, int);
62 virtual void Save(outputfile&) const;
63 virtual void Load(inputfile&);
64 virtual void ChargeFully(character*) { TimesUsed = 0; }
65 virtual truth IsZappable(ccharacter*) const { return true; }
66 virtual truth IsChargeable(ccharacter*) const { return true; }
67 virtual void SignalSpoil(material*);
68 virtual truth IsBanana() const { return true; }
69 virtual material* RemoveSecondaryMaterial();
70 protected:
71 int TimesUsed;
72 int Charges;
73 truth Jammed;
76 ITEM(holybanana, banana)
78 public:
79 virtual truth HitEffect(character*, character*, v2, int, int, truth);
80 virtual truth Zap(character*, v2, int);
81 virtual void Be() { }
82 virtual int GetSpecialFlags() const;
83 virtual void AddInventoryEntry(ccharacter*, festring&, int, truth) const;
84 virtual truth ReceiveDamage(character*, int, int, int);
87 ITEM(lantern, item)
89 public:
90 virtual void SignalSquarePositionChange(int);
91 virtual truth AllowAlphaEverywhere() const { return true; }
92 virtual int GetSpecialFlags() const;
93 virtual truth IsLanternOnWall() const { return GetSquarePosition() != CENTER; }
94 protected:
95 virtual int GetClassAnimationFrames() const { return !IsBroken() ? 32 : 1; }
96 virtual col16 GetMaterialColorA(int) const;
97 virtual col16 GetMaterialColorB(int) const;
98 virtual col16 GetMaterialColorC(int) const;
99 virtual col16 GetMaterialColorD(int) const;
100 virtual alpha GetAlphaA(int) const { return 255; }
101 virtual alpha GetAlphaB(int) const;
102 virtual alpha GetAlphaC(int) const;
103 virtual alpha GetAlphaD(int) const;
104 virtual v2 GetBitmapPos(int) const;
107 ITEM(can, materialcontainer)
109 public:
110 virtual item* BetterVersion() const;
111 virtual void DipInto(liquid*, character*);
112 virtual truth IsDippable(ccharacter*) const { return !SecondaryMaterial; }
113 virtual truth IsDipDestination(ccharacter*) const;
114 virtual truth IsDumpable(ccharacter*) const { return SecondaryMaterial != 0; }
115 virtual liquid* CreateDipLiquid();
116 virtual truth AllowSpoil() const { return false; } // temporary
117 virtual truth Spoils() const { return false; } // temporary
118 virtual truth HasBetterVersion() const { return !SecondaryMaterial; }
119 virtual truth IsCan () const { return true; }
120 protected:
121 virtual void AddPostFix(festring& String, int) const { AddContainerPostFix(String); }
122 virtual truth AddAdjective(festring&, truth) const;
123 virtual v2 GetBitmapPos(int) const;
126 ITEM(lump, item)
128 protected:
129 virtual void AddPostFix(festring& String, int) const { AddLumpyPostFix(String); }
130 virtual truth ShowMaterial() const { return false; }
131 virtual truth WeightIsIrrelevant() const { return true; }
134 ITEM(potion, materialcontainer)
136 public:
137 virtual item* BetterVersion() const;
138 virtual void DipInto(liquid*, character*);
139 virtual liquid* CreateDipLiquid();
140 virtual truth IsDippable(ccharacter*) const { return !SecondaryMaterial; }
141 virtual void Break(character*, int);
142 virtual truth IsDipDestination(ccharacter*) const;
143 virtual truth IsDumpable(ccharacter*) const { return SecondaryMaterial != 0; }
144 virtual truth IsExplosive() const;
145 virtual truth ReceiveDamage(character*, int, int, int);
146 virtual truth HasBetterVersion() const { return !SecondaryMaterial; }
147 virtual truth EffectIsGood() const;
148 virtual truth IsKamikazeWeapon(ccharacter*) const { return IsExplosive(); }
149 virtual truth IsBottle () const { return true; }
150 protected:
151 virtual void AddPostFix(festring& String, int) const { AddContainerPostFix(String); }
152 virtual truth AddAdjective(festring&, truth) const;
155 ITEM(bananapeels, item)
157 public:
158 virtual item* BetterVersion() const;
159 virtual truth HasBetterVersion() const { return true; }
160 virtual void StepOnEffect(character*);
161 virtual truth IsBananaPeel() const { return true; }
162 virtual truth IsDangerous(ccharacter*) const;
163 virtual truth RaiseTheDead(character*);
166 ITEM(brokenbottle, item)
168 public:
169 virtual truth IsBroken() const { return true; }
170 virtual item* BetterVersion() const;
171 virtual truth HasBetterVersion() const { return true; }
172 virtual void StepOnEffect(character*);
173 virtual item* Fix();
174 virtual truth IsDangerous(ccharacter*) const;
175 virtual truth IsBottle () const { return true; }
178 ITEM(scroll, item)
180 public:
181 virtual truth CanBeRead(character*) const;
182 virtual truth IsReadable(ccharacter*) const { return true; }
183 virtual truth IsScroll () const { return true; }
184 virtual truth ReceiveDamage(character*, int, int, int);
187 ITEM(scrollofteleportation, scroll)
189 public:
190 virtual void FinishReading(character*);
193 ITEM(scrollofcharging, scroll)
195 public:
196 virtual void FinishReading(character*);
199 ITEM(nut, item)
203 ITEM(leftnutofpetrus, nut)
205 public:
206 virtual void Be() { }
207 virtual truth IsPetrussNut() const { return true; }
208 virtual truth IsConsumable() const { return false; }
211 ITEM(bone, item)
213 public:
214 virtual truth DogWillCatchAndConsume(ccharacter*) const;
215 virtual truth isBone () const { return true; }
216 virtual truth IsBodyPart () const { return true; }
219 ITEM(loaf, item)
221 protected:
222 virtual void AddPostFix(festring& String, int) const { AddLumpyPostFix(String); }
223 virtual truth ShowMaterial() const { return false; }
226 ITEM(scrollofwishing, scroll)
228 public:
229 virtual void FinishReading(character*);
232 ITEM(copyofleftnutofpetrus, nut)
236 ITEM(wand, item)
238 public:
239 virtual truth Apply(character*);
240 virtual void Save(outputfile&) const;
241 virtual void Load(inputfile&);
242 virtual void ChargeFully(character*) { TimesUsed = 0; }
243 virtual truth IsAppliable(ccharacter*) const { return true; }
244 virtual truth IsZappable(ccharacter*) const { return true; }
245 virtual truth IsChargeable(ccharacter*) const { return true; }
246 virtual truth ReceiveDamage(character*, int, int, int);
247 virtual truth Zap(character*, v2, int);
248 virtual void AddInventoryEntry(ccharacter*, festring&, int, truth) const;
249 virtual sLong GetPrice() const;
250 virtual truth IsExplosive() const { return true; }
251 protected:
252 virtual void PostConstruct();
253 void BreakEffect(character*, cfestring&);
254 feuLong GetSpecialParameters() const;
255 int Charges;
256 int TimesUsed;
259 ITEM(scrollofchangematerial, scroll)
261 public:
262 virtual void FinishReading(character*);
265 ITEM(avatarofvalpurus, item)
267 public:
268 virtual void Be() { }
269 virtual truth IsTheAvatar() const { return true; }
270 virtual truth IsConsumable() const { return false; }
273 ITEM(kiwi, item)
277 ITEM(pineapple, item)
281 ITEM(palmbranch, item)
283 public:
284 virtual truth IsShield(ccharacter*) const { return true; }
287 ITEM(backpack, materialcontainer)
289 public:
290 virtual truth Apply(character*);
291 virtual truth IsAppliable(ccharacter*) const { return true; }
292 virtual truth ReceiveDamage(character*, int, int, int);
293 virtual truth IsExplosive() const;
294 virtual sLong GetTotalExplosivePower() const;
295 virtual void SpillFluid(character*, liquid*, int = 0);
296 protected:
297 virtual void AddPostFix(festring& String, int) const { AddContainerPostFix(String); }
300 ITEM(holybook, item)
302 public:
303 virtual truth CanBeRead(character*) const;
304 virtual truth IsReadable(ccharacter*) const { return true; }
305 virtual truth ReceiveDamage(character*, int, int, int);
306 virtual void FinishReading(character*);
307 protected:
308 virtual col16 GetMaterialColorA(int) const;
309 virtual truth ShowMaterial() const { return false; }
312 ITEM(fiftymillionroubles, item)
316 ITEM(oillamp, item)
318 public:
319 oillamp();
320 oillamp(const oillamp&);
321 virtual void Save(outputfile&) const;
322 virtual void Load(inputfile&);
323 virtual truth GetInhabitedByGenie() const { return InhabitedByGenie; }
324 virtual void SetInhabitedByGenie(truth What) { InhabitedByGenie = What; }
325 virtual truth Apply(character*);
326 virtual truth IsAppliable(ccharacter*) const { return true; }
327 protected:
328 truth InhabitedByGenie;
331 ITEM(stone, item)
333 public:
334 virtual sLong GetTruePrice() const;
335 virtual truth IsLuxuryItem(ccharacter*) const { return GetTruePrice() > 0; }
336 protected:
337 virtual truth WeightIsIrrelevant() const { return true; }
340 ITEM(solstone, stone)
342 public:
343 virtual truth AllowAlphaEverywhere () const { return true; }
344 protected:
345 virtual int GetClassAnimationFrames () const;
346 virtual col16 GetOutlineColor (int) const;
347 virtual alpha GetOutlineAlpha (int) const;
350 ITEM(scrolloftaming, scroll)
352 public:
353 virtual void FinishReading(character*);
356 ITEM(mine, itemtrap<materialcontainer>)
358 public:
359 virtual void StepOnEffect(character*);
360 virtual truth ReceiveDamage(character*, int, int, int);
361 virtual truth Apply(character* User);
362 virtual truth IsDangerous(ccharacter* Stepper) const { return WillExplode(Stepper); }
363 virtual truth WillExplode(ccharacter*) const;
364 virtual truth CheckPickUpEffect(character*);
365 protected:
366 virtual truth AddAdjective(festring&, truth) const;
369 ITEM(key, item)
371 public:
372 virtual truth Apply(character*);
373 virtual truth IsAppliable(ccharacter*) const { return true; }
374 virtual truth CanOpenDoors() const { return true; }
375 virtual truth CanOpenLockType(int AnotherLockType) const { return GetConfig() == AnotherLockType; }
378 ITEM(headofelpuri, item) // can't wear equipment, so not "head"
380 public:
381 virtual truth IsHeadOfElpuri() const { return true; }
382 virtual truth IsConsumable() const { return false; }
383 virtual void Be() { }
386 ITEM(whistle, item)
388 public:
389 virtual truth Apply(character*);
390 virtual truth IsAppliable(ccharacter*) const { return true; }
391 virtual void BlowEffect(character*);
392 protected:
393 virtual col16 GetMaterialColorB(int) const;
396 ITEM(magicalwhistle, whistle)
398 public:
399 magicalwhistle() : LastUsed(0) { }
400 virtual void BlowEffect(character*);
401 virtual void Load(inputfile&);
402 virtual void Save(outputfile&) const;
403 virtual void FinalProcessForBone();
404 protected:
405 feuLong LastUsed;
408 ITEM(itemcontainer, lockableitem)
410 public:
411 itemcontainer();
412 itemcontainer(const itemcontainer&);
413 virtual ~itemcontainer();
414 virtual truth Open(character*);
415 virtual void Load(inputfile&);
416 virtual void Save(outputfile&) const;
417 virtual truth Polymorph(character*, stack*);
418 virtual void CalculateVolumeAndWeight();
419 virtual truth ContentsCanBeSeenBy(ccharacter*) const;
420 virtual sLong GetTruePrice() const;
421 virtual truth ReceiveDamage(character*, int, int, int);
422 virtual void DrawContents(ccharacter*);
423 virtual truth Apply(character* Applier) { return Open(Applier); }
424 virtual truth IsAppliable(ccharacter*) const { return true; }
425 virtual void SetItemsInside(const fearray<contentscript<item> >&, int);
426 virtual truth AllowContentEmitation() const { return false; }
427 virtual truth IsDestroyable(ccharacter*) const;
428 virtual int GetOfferValue(int) const;
429 virtual void SortAllItems(const sortdata&) const;
430 virtual void PreProcessForBone();
431 virtual void PostProcessForBone();
432 virtual void FinalProcessForBone();
433 virtual material* RemoveMaterial(material*);
434 virtual void SetLifeExpectancy(int, int);
435 virtual void CalculateEnchantment();
436 virtual int GetTeleportPriority() const;
437 virtual void SetParameters(int);
438 virtual void Disappear();
439 virtual stack* GetContained() const { return Contained; }
440 protected:
441 virtual col16 GetMaterialColorB(int) const;
442 virtual void PostConstruct();
443 stack* Contained;
446 ITEM(beartrap, itemtrap<item>)
448 public:
449 beartrap();
450 beartrap(const beartrap&);
451 virtual ~beartrap();
452 virtual void Load(inputfile&);
453 virtual void Save(outputfile&) const;
454 virtual void StepOnEffect(character*);
455 virtual truth CheckPickUpEffect(character*);
456 virtual truth IsPickable(character*) const;
457 virtual truth Apply(character*);
458 virtual v2 GetBitmapPos(int) const;
459 virtual truth IsDangerous(ccharacter*) const { return Active; }
460 virtual truth ReceiveDamage(character*, int, int, int);
461 virtual truth NeedDangerSymbol() const { return IsActive(); }
462 virtual void Fly(character*, int, int);
463 virtual feuLong GetTrapID() const { return TrapData.TrapID; }
464 virtual feuLong GetVictimID() const { return TrapData.VictimID; }
465 virtual void UnStick() { TrapData.VictimID = 0; }
466 virtual void UnStick(int I) { TrapData.BodyParts &= ~(1 << I); }
467 virtual truth TryToUnStick(character*, v2);
468 virtual void RemoveFromSlot();
469 virtual int GetTrapType() const { return GetType() | ITEM_TRAP; }
470 virtual void PreProcessForBone();
471 virtual void PostProcessForBone();
472 virtual void DonateSlotTo(item*);
473 protected:
474 virtual truth AddAdjective(festring&, truth) const;
475 truth IsStuck() const { return TrapData.VictimID; }
476 int GetBaseTrapDamage() const;
477 trapdata TrapData;
480 ITEM(stethoscope, item)
482 public:
483 virtual truth Apply(character*);
484 virtual truth IsAppliable(ccharacter*) const { return true; };
487 ITEM(scrollofenchantweapon, scroll)
489 public:
490 virtual void FinishReading(character*);
493 ITEM(scrollofenchantarmor, scroll)
495 public:
496 virtual void FinishReading(character*);
499 ITEM(skull, item)
501 virtual truth IsBodyPart () const { return true; }
504 ITEM(scrollofrepair, scroll)
506 public:
507 virtual void FinishReading(character*);
510 ITEM(encryptedscroll, scroll)
512 public:
513 virtual void Be() { }
514 virtual truth Read(character*);
515 virtual truth ReceiveDamage(character*, int, int, int) { return false; }
516 virtual truth IsEncryptedScroll() const { return true; }
519 ITEM(mondedrpass, scroll)
521 public:
522 virtual void FinishReading (character *);
523 virtual truth IsMondedrPass () const { return true; }
526 ITEM(horn, item)
528 public:
529 horn() : LastUsed(0) { }
530 virtual void Load(inputfile&);
531 virtual void Save(outputfile&) const;
532 virtual truth Apply(character*);
533 virtual truth IsAppliable(ccharacter*) const { return true; }
534 virtual void FinalProcessForBone();
535 protected:
536 feuLong LastUsed;
539 ITEM(carrot, item)
541 public:
542 virtual truth BunnyWillCatchAndConsume(ccharacter*) const;
543 protected:
544 virtual col16 GetMaterialColorB(int) const;
547 ITEM(charmlyre, item)
549 public:
550 charmlyre();
551 virtual truth Apply(character*);
552 virtual truth IsAppliable(ccharacter*) const { return true; }
553 virtual void Load(inputfile&);
554 virtual void Save(outputfile&) const;
555 virtual void FinalProcessForBone();
556 protected:
557 virtual col16 GetMaterialColorB(int) const;
558 feuLong LastUsed;
561 ITEM(scrollofdetectmaterial, scroll)
563 public:
564 virtual void FinishReading(character*);
567 ITEM(stick, item)
569 protected:
570 virtual void AddPostFix(festring& String, int) const { AddLumpyPostFix(String); }
571 virtual truth ShowMaterial() const { return false; }
572 virtual truth WeightIsIrrelevant() const { return true; }
575 ITEM(scrollofhardenmaterial, scroll)
577 public:
578 virtual void FinishReading(character*);
581 ITEM(scrollofgolemcreation, scroll)
583 public:
584 virtual void FinishReading(character*);
588 ITEM(gasgrenade, materialcontainer)
590 protected:
591 virtual void AddPostFix(festring& String, int) const { AddContainerPostFix(String); }
592 truth /*gasgrenade::*/ReceiveDamage(character* Damager, int Damage, int Type, int);
595 ITEM(holyhandgrenade, item)
597 public:
598 virtual truth Apply(character*);
599 virtual truth IsAppliable(ccharacter*) const { return true; }
600 virtual truth CalculateHasBe() const;
601 virtual void Explode();
602 virtual void Be();
603 virtual v2 GetBitmapPos(int) const;
604 virtual int GetClassAnimationFrames() const;
605 virtual alpha GetOutlineAlpha(int) const;
606 virtual col16 GetOutlineColor(int) const;
607 virtual void Save(outputfile&) const;
608 virtual void Load(inputfile&);
609 virtual void PreProcessForBone();
610 virtual void PostConstruct();
611 virtual truth AllowAlphaEverywhere() const { return true; }
612 virtual col16 GetMaterialColorB(int) const;
613 virtual bool WillExplodeSoon() const;
614 protected:
615 feuLong PinPulledTick;
616 int Count;
617 feuLong PinPullerID;
620 ITEM(pantheonbook, holybook)
622 public:
623 virtual void FinishReading(character*);
624 protected:
625 virtual col16 GetMaterialColorA(int) const;
628 ITEM(celestialmonograph, holybook)
630 public:
631 virtual void FinishReading (character *);
632 protected:
633 virtual col16 GetMaterialColorA(int) const;
636 ITEM(constitution, holybook)
638 public:
639 virtual void FinishReading(character*);
640 protected:
641 virtual col16 GetMaterialColorA(int) const;
644 ITEM(gorovitscopyoflenin, item)
646 protected:
647 virtual col16 GetMaterialColorB(int) const;
650 ITEM(firstbornchild, item)
652 public:
653 virtual bool SpecialOfferEffect(int);
654 virtual truth AllowSpoil() const { return false; } // temporary
655 virtual truth Spoils() const { return false; } // temporary
656 protected:
657 virtual col16 GetMaterialColorB(int) const;
660 ITEM(ullrbone, item)
662 public:
663 ullrbone() : TimesUsed(0), Charges(12) {}
664 virtual truth Zap (character *, v2, int);
665 virtual void ChargeFully (character *) { TimesUsed = 0; }
666 virtual truth IsZappable (const character *) const { return true; }
667 virtual truth IsChargeable (const character*) const { return true; }
668 virtual truth HitEffect (character *, character *, v2, int, int, truth);
669 virtual void Be () {}
670 virtual void AddInventoryEntry (const character *, festring &, int, truth) const;
671 virtual truth ReceiveDamage (character *, int, int, int);
672 virtual truth AllowAlphaEverywhere () const { return true; }
673 protected:
674 int TimesUsed;
675 int Charges;
676 virtual int GetClassAnimationFrames () const { return 32; }
677 virtual col16 GetOutlineColor (int) const;
678 virtual alpha GetOutlineAlpha (int) const;
682 ITEM(moneybag, item)
684 public:
685 moneybag () : moneyAmount(1+RAND_N(300)) {
686 if (RAND_N(100) < 10) moneyAmount += 1000;
688 virtual truth Apply (character *beggar);
689 virtual void Save (outputfile &) const;
690 virtual void Load (inputfile &);
691 virtual truth IsConsumable () const { return false; }
692 virtual truth IsAppliable (ccharacter *beggar) const;
693 virtual truth CanBeHardened (ccharacter *) const { return false; }
694 virtual truth IsMoneyBag () const { return true; }
696 virtual sLong GetTruePrice () const { return moneyAmount; }
698 protected:
699 int moneyAmount;
703 #endif