3 * Iter Vehemens ad Necem (IVAN)
4 * Copyright (C) Timo Kiviluoto
5 * Released under the GNU General
8 * See LICENSING which should be included
9 * along with this file for more details
13 #ifndef __MISCITEM_H__
14 #define __MISCITEM_H__
17 #include "game.h" /// check
20 ITEM(materialcontainer
, item
)
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;
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
);
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
)
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();
76 ITEM(holybanana
, banana
)
79 virtual truth
HitEffect(character
*, character
*, v2
, int, int, truth
);
80 virtual truth
Zap(character
*, v2
, int);
82 virtual int GetSpecialFlags() const;
83 virtual void AddInventoryEntry(ccharacter
*, festring
&, int, truth
) const;
84 virtual truth
ReceiveDamage(character
*, int, int, int);
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
; }
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
)
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; }
121 virtual void AddPostFix(festring
& String
, int) const { AddContainerPostFix(String
); }
122 virtual truth
AddAdjective(festring
&, truth
) const;
123 virtual v2
GetBitmapPos(int) const;
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
)
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; }
151 virtual void AddPostFix(festring
& String
, int) const { AddContainerPostFix(String
); }
152 virtual truth
AddAdjective(festring
&, truth
) const;
155 ITEM(bananapeels
, item
)
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
)
169 virtual truth
IsBroken() const { return true; }
170 virtual item
* BetterVersion() const;
171 virtual truth
HasBetterVersion() const { return true; }
172 virtual void StepOnEffect(character
*);
174 virtual truth
IsDangerous(ccharacter
*) const;
175 virtual truth
IsBottle () const { return true; }
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
)
190 virtual void FinishReading(character
*);
193 ITEM(scrollofcharging
, scroll
)
196 virtual void FinishReading(character
*);
203 ITEM(leftnutofpetrus
, nut
)
206 virtual void Be() { }
207 virtual truth
IsPetrussNut() const { return true; }
208 virtual truth
IsConsumable() const { return false; }
214 virtual truth
DogWillCatchAndConsume(ccharacter
*) const;
215 virtual truth
isBone () const { return true; }
216 virtual truth
IsBodyPart () const { return true; }
222 virtual void AddPostFix(festring
& String
, int) const { AddLumpyPostFix(String
); }
223 virtual truth
ShowMaterial() const { return false; }
226 ITEM(scrollofwishing
, scroll
)
229 virtual void FinishReading(character
*);
232 ITEM(copyofleftnutofpetrus
, nut
)
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; }
252 virtual void PostConstruct();
253 void BreakEffect(character
*, cfestring
&);
254 feuLong
GetSpecialParameters() const;
259 ITEM(scrollofchangematerial
, scroll
)
262 virtual void FinishReading(character
*);
265 ITEM(avatarofvalpurus
, item
)
268 virtual void Be() { }
269 virtual truth
IsTheAvatar() const { return true; }
270 virtual truth
IsConsumable() const { return false; }
277 ITEM(pineapple
, item
)
281 ITEM(palmbranch
, item
)
284 virtual truth
IsShield(ccharacter
*) const { return true; }
287 ITEM(backpack
, materialcontainer
)
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);
297 virtual void AddPostFix(festring
& String
, int) const { AddContainerPostFix(String
); }
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
*);
308 virtual col16
GetMaterialColorA(int) const;
309 virtual truth
ShowMaterial() const { return false; }
312 ITEM(fiftymillionroubles
, item
)
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; }
328 truth InhabitedByGenie
;
334 virtual sLong
GetTruePrice() const;
335 virtual truth
IsLuxuryItem(ccharacter
*) const { return GetTruePrice() > 0; }
337 virtual truth
WeightIsIrrelevant() const { return true; }
340 ITEM(solstone
, stone
)
343 virtual truth
AllowAlphaEverywhere () const { return true; }
345 virtual int GetClassAnimationFrames () const;
346 virtual col16
GetOutlineColor (int) const;
347 virtual alpha
GetOutlineAlpha (int) const;
350 ITEM(scrolloftaming
, scroll
)
353 virtual void FinishReading(character
*);
356 ITEM(mine
, itemtrap
<materialcontainer
>)
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
*);
366 virtual truth
AddAdjective(festring
&, truth
) const;
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"
381 virtual truth
IsHeadOfElpuri() const { return true; }
382 virtual truth
IsConsumable() const { return false; }
383 virtual void Be() { }
389 virtual truth
Apply(character
*);
390 virtual truth
IsAppliable(ccharacter
*) const { return true; }
391 virtual void BlowEffect(character
*);
393 virtual col16
GetMaterialColorB(int) const;
396 ITEM(magicalwhistle
, whistle
)
399 magicalwhistle() : LastUsed(0) { }
400 virtual void BlowEffect(character
*);
401 virtual void Load(inputfile
&);
402 virtual void Save(outputfile
&) const;
403 virtual void FinalProcessForBone();
408 ITEM(itemcontainer
, lockableitem
)
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
; }
441 virtual col16
GetMaterialColorB(int) const;
442 virtual void PostConstruct();
446 ITEM(beartrap
, itemtrap
<item
>)
450 beartrap(const 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
*);
474 virtual truth
AddAdjective(festring
&, truth
) const;
475 truth
IsStuck() const { return TrapData
.VictimID
; }
476 int GetBaseTrapDamage() const;
480 ITEM(stethoscope
, item
)
483 virtual truth
Apply(character
*);
484 virtual truth
IsAppliable(ccharacter
*) const { return true; };
487 ITEM(scrollofenchantweapon
, scroll
)
490 virtual void FinishReading(character
*);
493 ITEM(scrollofenchantarmor
, scroll
)
496 virtual void FinishReading(character
*);
501 virtual truth
IsBodyPart () const { return true; }
504 ITEM(scrollofrepair
, scroll
)
507 virtual void FinishReading(character
*);
510 ITEM(encryptedscroll
, scroll
)
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
)
522 virtual void FinishReading (character
*);
523 virtual truth
IsMondedrPass () const { return true; }
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();
542 virtual truth
BunnyWillCatchAndConsume(ccharacter
*) const;
544 virtual col16
GetMaterialColorB(int) const;
547 ITEM(charmlyre
, item
)
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();
557 virtual col16
GetMaterialColorB(int) const;
561 ITEM(scrollofdetectmaterial
, scroll
)
564 virtual void FinishReading(character
*);
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
)
578 virtual void FinishReading(character
*);
581 ITEM(scrollofgolemcreation
, scroll
)
584 virtual void FinishReading(character
*);
588 ITEM(gasgrenade
, materialcontainer
)
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
)
598 virtual truth
Apply(character
*);
599 virtual truth
IsAppliable(ccharacter
*) const { return true; }
600 virtual truth
CalculateHasBe() const;
601 virtual void Explode();
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;
615 feuLong PinPulledTick
;
620 ITEM(pantheonbook
, holybook
)
623 virtual void FinishReading(character
*);
625 virtual col16
GetMaterialColorA(int) const;
628 ITEM(celestialmonograph
, holybook
)
631 virtual void FinishReading (character
*);
633 virtual col16
GetMaterialColorA(int) const;
636 ITEM(constitution
, holybook
)
639 virtual void FinishReading(character
*);
641 virtual col16
GetMaterialColorA(int) const;
644 ITEM(gorovitscopyoflenin
, item
)
647 virtual col16
GetMaterialColorB(int) const;
650 ITEM(firstbornchild
, item
)
653 virtual bool SpecialOfferEffect(int);
654 virtual truth
AllowSpoil() const { return false; } // temporary
655 virtual truth
Spoils() const { return false; } // temporary
657 virtual col16
GetMaterialColorB(int) const;
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; }
676 virtual int GetClassAnimationFrames () const { return 32; }
677 virtual col16
GetOutlineColor (int) const;
678 virtual alpha
GetOutlineAlpha (int) const;
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
; }