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
28 template <class type
> class databasecreator
;
30 typedef std::vector
<item
*> itemvector
;
31 typedef std::vector
<fluid
*> fluidvector
;
32 typedef truth (rawbitmap::*pixelpredicate
)(v2
) const;
33 typedef truth (material::*materialpredicate
)() const;
34 typedef truth (item::*sorter
)(ccharacter
*) const;
35 typedef item
* (*itemspawner
)(int, int);
36 typedef item
* (*itemcloner
)(citem
*);
38 extern materialpredicate TrueMaterialPredicate
;
42 sortdata(itemvector
& AllItems
, ccharacter
* Character
, truth Recurse
, sorter Sorter
)
48 ccharacter
* Character
;
55 idholder(feuLong ID
) : ID(ID
) { }
60 outputfile
& operator<<(outputfile
&, const idholder
*);
61 inputfile
& operator>>(inputfile
&, idholder
*&);
66 typedef itemprototype prototype
;
67 itemlock() : Locked(false) { }
68 void Save(outputfile
&) const;
69 void Load(inputfile
&);
70 virtual ~itemlock () { }
71 virtual truth
TryKey(item
*, character
*);
72 virtual int GetVirtualConfig() const = 0;
73 virtual void SetVirtualConfig(int, int = 0) = 0;
74 virtual const prototype
* GetVirtualProtoType() const = 0;
75 virtual festring
GetVirtualDescription(int) const = 0;
77 virtual void PostConstruct();
81 typedef lockable
<item
, itemlock
> lockableitem
;
83 struct itemdatabase
: public databasebase
85 typedef itemprototype prototype
;
86 void InitDefaults(const prototype
*, int);
87 truth
AllowRandomInstantiation() const;
88 void PostProcess() { }
90 inline truth
isBone () const { return NameSingular
== "bone"; } // gum solution
92 const prototype
* ProtoType
;
93 /* Maintained by configcontainer */
94 sLong PartialPossibilitySum
;
95 sLong PartialCategoryPossibilitySum
;
100 truth IsMaterialChangeable
;
101 truth IsPolymorphSpawnable
;
102 truth IsAutoInitializable
;
104 truth IsPolymorphable
;
105 truth CanBeGeneratedInContainer
;
107 truth CreateDivineConfigurations
;
110 truth AffectsArmStrength
;
111 truth AffectsLegStrength
;
112 truth AffectsDexterity
;
113 truth AffectsAgility
;
114 truth AffectsEndurance
;
115 truth AffectsPerception
;
116 truth AffectsIntelligence
;
118 truth AffectsWillPower
;
119 truth AffectsCharisma
;
121 truth PriceIsProportionalToEnchantment
;
122 truth CanBeUsedBySmith
;
123 truth AffectsCarryingCapacity
;
125 truth CanBeEnchanted
;
127 truth IsGoodWithPlants
;
128 truth CreateLockConfigurations
;
130 truth HasSecondaryMaterial
;
133 truth HasNormalPictureDirection
;
134 truth IsKamikazeWeapon
;
135 truth FlexibilityIsEssential
;
140 int PoisonResistance
;
141 int ElectricityResistance
;
143 int StrengthModifier
;
146 sLong DefaultMainVolume
;
147 sLong DefaultSecondaryVolume
;
151 truth UsesLongArticle
;
153 truth UsesLongAdjectiveArticle
;
154 festring NameSingular
;
158 fearray
<sLong
> MainMaterialConfig
;
159 fearray
<sLong
> SecondaryMaterialConfig
;
160 fearray
<sLong
> MaterialConfigChances
;
161 sLong MaterialConfigChanceSum
;
162 fearray
<festring
> Alias
;
164 int ForcedVisualEffects
;
169 festring FlexibleNameSingular
;
173 int MaxGeneratedContainedItems
;
175 int InElasticityPenaltyModifier
;
182 int BreakEffectRangeSquare
;
185 v2 TorsoArmorBitmapPos
;
186 v2 ArmArmorBitmapPos
;
187 v2 AthleteArmArmorBitmapPos
;
188 v2 LegArmorBitmapPos
;
192 v2 GauntletBitmapPos
;
195 int EnchantmentMinusChance
;
196 int EnchantmentPlusChance
;
197 int TeleportPriority
;
200 truth IsSadistWeapon
;
201 truth IsThrowingWeapon
;
202 sLong ThrowItemTypes
;
209 friend class databasecreator
<item
>;
210 itemprototype(const itemprototype
*, itemspawner
, itemcloner
, cchar
*);
211 item
* Spawn(int Config
= 0, int SpecialFlags
= 0) const { return Spawner(Config
, SpecialFlags
); }
212 item
* SpawnAndLoad(inputfile
&) const;
213 item
* Clone(citem
* Item
) const { return Cloner(Item
); }
214 cchar
* GetClassID() const { return ClassID
; }
215 int GetIndex() const { return Index
; }
216 const itemprototype
* GetBase() const { return Base
; }
217 int CreateSpecialConfigurations(itemdatabase
**, int, int);
218 const itemdatabase
* ChooseBaseForConfig(itemdatabase
**, int, int);
219 const itemdatabase
*const* GetConfigData() const { return ConfigData
; }
220 int GetConfigSize() const { return ConfigSize
; }
223 const itemprototype
* Base
;
224 itemdatabase
** ConfigData
;
225 itemdatabase
** ConfigTable
[CONFIG_TABLE_SIZE
];
235 class item
: public object
238 friend class databasecreator
<item
>;
239 typedef itemprototype prototype
;
240 typedef itemdatabase database
;
245 inline truth
IsSteppedOn () const { return mIsStepedOn
; }
246 inline void SetSteppedOn (truth v
) { mIsStepedOn
= v
; }
248 virtual double GetWeaponStrength() const;
249 virtual truth
Open(character
*);
250 truth
Consume(character
*, sLong
);
251 virtual truth
IsHeadOfElpuri() const { return false; }
252 virtual truth
IsPetrussNut() const { return false; }
253 virtual truth
IsGoldenEagleShirt() const { return false; }
254 virtual truth
IsMoneyBag () const { return false; }
255 virtual truth
CanBeRead(character
*) const { return false; }
256 virtual truth
Read(character
*);
257 virtual void FinishReading(character
*) { }
258 virtual truth
HitEffect(character
*, character
*, v2
, int, int, truth
) { return false; }
259 virtual void DipInto(liquid
*, character
*) { }
260 virtual truth
DumpTo (character
*dumper
, v2 dest
) { return false; }
261 virtual liquid
* CreateDipLiquid() { return 0; }
262 virtual item
* BetterVersion() const { return 0; }
263 virtual int GetOfferValue(int) const;
264 virtual void Fly(character
*, int, int);
265 int HitCharacter(character
*, character
*, int, double, int);
266 virtual truth
DogWillCatchAndConsume(ccharacter
*) const { return false; }
267 virtual truth
Apply(character
*);
268 virtual truth
Zap(character
*, v2
, int) { return false; }
269 virtual truth
Burn(character
*, v2
, int);
270 virtual truth
Polymorph(character
*, stack
*);
271 virtual truth
CheckPickUpEffect(character
*) { return true; }
272 virtual void StepOnEffect(character
*) { }
273 virtual truth
IsTheAvatar() const { return false; }
274 virtual void SignalSquarePositionChange(int);
275 virtual truth
CanBeEatenByAI(ccharacter
*) const;
276 virtual truth
IsExplosive() const { return false; }
277 virtual void Save(outputfile
&) const;
278 virtual void Load(inputfile
&);
279 virtual void ChargeFully(character
*) { }
280 void SetSize(int Value
) { Size
= Value
; }
281 virtual int GetSize() const { return Size
; }
282 feuLong
GetID() const { return ID
; }
283 virtual void TeleportRandomly();
284 virtual int GetStrengthValue() const;
285 slot
* GetSlot(int I
= 0) const { return Slot
[I
]; }
286 void SetMainSlot(slot
* What
) { Slot
[0] = What
; }
287 void PlaceToSlot(slot
* Slot
) { Slot
->PutInItem(this); }
288 virtual void RemoveFromSlot();
290 truth
IsMainSlot(const slot
* What
) const { return Slot
[0] == What
; }
291 static cchar
* GetItemCategoryName(sLong
);
292 virtual truth
IsConsumable() const { return true; }
293 truth
IsEatable(ccharacter
*) const;
294 truth
IsDrinkable(ccharacter
*) const;
295 virtual truth
IsOpenable(ccharacter
*) const { return false; }
296 virtual truth
IsReadable(ccharacter
*) const { return false; }
297 virtual truth
IsDippable(ccharacter
*) const { return false; }
298 virtual truth
IsDipDestination(ccharacter
*) const { return false; }
299 virtual truth
IsDumpable(ccharacter
*) const { return false; }
300 virtual truth
IsAppliable(ccharacter
*) const { return false; }
301 virtual truth
IsZappable(ccharacter
*) const { return false; }
302 virtual truth
IsChargeable(ccharacter
*) const { return false; }
303 virtual truth
IsHelmet(ccharacter
*) const { return false; }
304 virtual truth
IsAmulet(ccharacter
*) const { return false; }
305 virtual truth
IsCloak(ccharacter
*) const { return false; }
306 virtual truth
IsBodyArmor(ccharacter
*) const { return false; }
307 virtual truth
IsRing(ccharacter
*) const { return false; }
308 virtual truth
IsGauntlet(ccharacter
*) const { return false; }
309 virtual truth
IsBelt(ccharacter
*) const { return false; }
310 virtual truth
IsBoot(ccharacter
*) const { return false; }
311 virtual truth
IsShield(ccharacter
*) const { return false; }
312 virtual truth
IsWeapon(ccharacter
*) const { return false; }
313 virtual truth
IsArmor(ccharacter
*) const { return false; }
314 virtual truth
IsEnchantable(ccharacter
*) const { return CanBeEnchanted(); }
315 virtual truth
IsRepairable(ccharacter
*) const { return IsBroken() || IsRusted(); }
316 virtual truth
IsDecosAdShirt(ccharacter
*) const { return false; }
317 virtual truth
IsLuxuryItem(ccharacter
*) const { return false; }
318 virtual truth
MaterialIsChangeable(ccharacter
*) const { return true; }
319 virtual truth
IsBeverage(ccharacter
*) const;
320 virtual truth
CanBeHardened(ccharacter
*) const;
321 virtual truth
HasLock(ccharacter
*) const { return false; }
322 virtual truth
IsOnGround() const;
323 virtual truth
IsFlaming (ccharacter
*) const { return CanFlame(); }
324 int GetResistance(int) const;
326 int GetType() const { return GetProtoType()->GetIndex(); }
327 virtual truth
ReceiveDamage(character
*, int, int, int = YOURSELF
);
328 virtual truth
RaiseTheDead(character
*) { return false; }
329 virtual int GetBodyPartIndex() const { return 0xFF; }
330 const database
* GetDataBase() const { return DataBase
; }
331 virtual truth
CanOpenLockType(int) const { return false; }
332 virtual truth
IsWhip() const { return false; }
333 DATA_BASE_VALUE(const prototype
*, ProtoType
);
334 DATA_BASE_VALUE(int, Config
);
335 virtual DATA_BASE_TRUTH_WITH_PARAMETER(IsDestroyable
, ccharacter
*);
336 DATA_BASE_TRUTH(IsMaterialChangeable
);
337 DATA_BASE_VALUE(int, WeaponCategory
);
338 DATA_BASE_TRUTH(IsAutoInitializable
);
339 DATA_BASE_VALUE(sLong
, Category
);
340 DATA_BASE_VALUE(int, FireResistance
);
341 DATA_BASE_VALUE(int, PoisonResistance
);
342 DATA_BASE_VALUE(int, ElectricityResistance
);
343 DATA_BASE_VALUE(int, AcidResistance
);
344 DATA_BASE_VALUE(int, StrengthModifier
);
345 virtual DATA_BASE_VALUE(int, FormModifier
);
346 DATA_BASE_VALUE(int, DefaultSize
);
347 DATA_BASE_VALUE(sLong
, DefaultMainVolume
);
348 DATA_BASE_VALUE(sLong
, DefaultSecondaryVolume
);
349 virtual DATA_BASE_VALUE_WITH_PARAMETER(v2
, BitmapPos
, int);
350 virtual DATA_BASE_VALUE(sLong
, Price
);
351 virtual DATA_BASE_VALUE(col24
, BaseEmitation
);
352 virtual DATA_BASE_TRUTH(UsesLongArticle
);
353 virtual DATA_BASE_VALUE(cfestring
&, Adjective
);
354 virtual DATA_BASE_TRUTH(UsesLongAdjectiveArticle
);
355 virtual DATA_BASE_VALUE(cfestring
&, NameSingular
);
356 virtual DATA_BASE_VALUE(cfestring
&, NamePlural
);
357 virtual DATA_BASE_VALUE(cfestring
&, PostFix
);
358 virtual DATA_BASE_VALUE(int, ArticleMode
);
359 DATA_BASE_VALUE(const fearray
<sLong
>&, MainMaterialConfig
);
360 DATA_BASE_VALUE(const fearray
<sLong
>&, SecondaryMaterialConfig
);
361 virtual DATA_BASE_VALUE(const fearray
<sLong
>&, MaterialConfigChances
);
362 virtual DATA_BASE_VALUE(sLong
, MaterialConfigChanceSum
);
363 DATA_BASE_TRUTH(IsPolymorphable
);
364 virtual DATA_BASE_VALUE(int, OKVisualEffects
);
365 DATA_BASE_TRUTH(CanBeGeneratedInContainer
);
366 virtual DATA_BASE_VALUE(int, ForcedVisualEffects
);
367 DATA_BASE_VALUE(int, Roundness
);
368 DATA_BASE_VALUE(sLong
, GearStates
);
369 DATA_BASE_TRUTH(IsTwoHanded
);
370 DATA_BASE_TRUTH(CanBeBroken
);
371 DATA_BASE_VALUE_WITH_PARAMETER(v2
, WallBitmapPos
, int);
372 DATA_BASE_VALUE(cfestring
&, FlexibleNameSingular
);
373 DATA_BASE_TRUTH(CanBePiled
);
374 DATA_BASE_TRUTH(AffectsArmStrength
);
375 DATA_BASE_TRUTH(AffectsLegStrength
);
376 DATA_BASE_TRUTH(AffectsDexterity
);
377 DATA_BASE_TRUTH(AffectsAgility
);
378 DATA_BASE_TRUTH(AffectsEndurance
);
379 DATA_BASE_TRUTH(AffectsPerception
);
380 DATA_BASE_TRUTH(AffectsIntelligence
);
381 DATA_BASE_TRUTH(AffectsWisdom
);
382 DATA_BASE_TRUTH(AffectsWillPower
);
383 DATA_BASE_TRUTH(AffectsCharisma
);
384 DATA_BASE_TRUTH(AffectsMana
);
385 DATA_BASE_TRUTH(AffectsCarryingCapacity
);
386 DATA_BASE_VALUE(int, BaseEnchantment
);
387 DATA_BASE_TRUTH(PriceIsProportionalToEnchantment
);
388 DATA_BASE_VALUE(int, MaxCharges
);
389 DATA_BASE_VALUE(int, MinCharges
);
390 DATA_BASE_VALUE(int, InElasticityPenaltyModifier
);
391 DATA_BASE_VALUE(sLong
, StorageVolume
);
392 DATA_BASE_VALUE(int, MaxGeneratedContainedItems
);
393 virtual DATA_BASE_TRUTH(CanBeCloned
);
394 virtual DATA_BASE_TRUTH(CanBeMirrored
);
395 DATA_BASE_VALUE(int, BeamRange
);
396 DATA_BASE_TRUTH(CanBeUsedBySmith
);
397 DATA_BASE_VALUE(int, DamageDivider
);
398 DATA_BASE_TRUTH(HandleInPairs
);
399 DATA_BASE_TRUTH(CanBeEnchanted
);
400 DATA_BASE_VALUE(sLong
, BeamColor
);
401 DATA_BASE_VALUE(int, BeamEffect
);
402 DATA_BASE_VALUE(int, BeamStyle
);
403 DATA_BASE_VALUE(int, WearWisdomLimit
);
404 DATA_BASE_VALUE(int, BreakEffectRangeSquare
);
405 virtual DATA_BASE_VALUE_WITH_PARAMETER(v2
, WieldedBitmapPos
, int);
406 DATA_BASE_TRUTH(IsQuestItem
);
407 DATA_BASE_TRUTH(IsGoodWithPlants
);
408 DATA_BASE_TRUTH(CanBePickedUp
);
409 DATA_BASE_VALUE(int, CoverPercentile
);
410 DATA_BASE_VALUE_WITH_PARAMETER(v2
, TorsoArmorBitmapPos
, int);
411 DATA_BASE_VALUE_WITH_PARAMETER(v2
, ArmArmorBitmapPos
, int);
412 DATA_BASE_VALUE_WITH_PARAMETER(v2
, AthleteArmArmorBitmapPos
, int);
413 DATA_BASE_VALUE_WITH_PARAMETER(v2
, LegArmorBitmapPos
, int);
414 DATA_BASE_VALUE_WITH_PARAMETER(v2
, HelmetBitmapPos
, int);
415 DATA_BASE_VALUE_WITH_PARAMETER(v2
, CloakBitmapPos
, int);
416 DATA_BASE_VALUE_WITH_PARAMETER(v2
, BeltBitmapPos
, int);
417 DATA_BASE_VALUE_WITH_PARAMETER(v2
, GauntletBitmapPos
, int);
418 DATA_BASE_VALUE_WITH_PARAMETER(v2
, BootBitmapPos
, int);
419 DATA_BASE_TRUTH(AllowEquip
);
420 DATA_BASE_VALUE(int, ReadDifficulty
);
421 DATA_BASE_VALUE(int, EnchantmentMinusChance
);
422 DATA_BASE_VALUE(int, EnchantmentPlusChance
);
423 virtual DATA_BASE_VALUE(int, TeleportPriority
);
424 DATA_BASE_TRUTH(HasNormalPictureDirection
);
425 DATA_BASE_VALUE(int, DamageFlags
);
426 DATA_BASE_TRUTH(FlexibilityIsEssential
);
427 DATA_BASE_VALUE(cfestring
&, BreakMsg
);
428 DATA_BASE_TRUTH(IsSadistWeapon
);
429 DATA_BASE_TRUTH(IsThrowingWeapon
);
430 DATA_BASE_VALUE(sLong
, ThrowItemTypes
);
431 DATA_BASE_TRUTH(CanFlame
);
432 truth
CanBeSoldInLibrary(character
* Librarian
) const { return CanBeRead(Librarian
); }
433 virtual truth
TryKey(item
*, character
*) { return false; }
434 sLong
GetBlockModifier() const;
435 truth
IsSimiliarTo(item
*) const;
436 virtual truth
IsPickable(character
*) const { return true; }
437 truth
CanBeSeenByPlayer() const;
438 virtual truth
CanBeSeenBy(ccharacter
*) const;
439 festring
GetDescription(int) const;
440 virtual square
* GetSquareUnderEntity(int = 0) const;
441 virtual square
* GetSquareUnder(int = 0) const;
442 virtual lsquare
* GetLSquareUnder(int = 0) const;
443 level
* GetLevel() const { return static_cast<level
*>(Slot
[0]->GetSquareUnder()->GetArea()); }
444 area
* GetArea() const { return Slot
[0]->GetSquareUnder()->GetArea(); }
445 v2
GetPos(int I
= 0) const { return Slot
[I
]->GetSquareUnder()->GetPos(); }
446 square
* GetNearSquare(v2 Pos
) const { return Slot
[0]->GetSquareUnder()->GetArea()->GetSquare(Pos
); }
447 square
* GetNearSquare(int x
, int y
) const { return Slot
[0]->GetSquareUnder()->GetArea()->GetSquare(x
, y
); }
448 lsquare
* GetNearLSquare(v2 Pos
) const { return static_cast<lsquare
*>(Slot
[0]->GetSquareUnder()->GetArea()->GetSquare(Pos
)); }
449 lsquare
* GetNearLSquare(int x
, int y
) const { return static_cast<lsquare
*>(Slot
[0]->GetSquareUnder()->GetArea()->GetSquare(x
, y
)); }
450 virtual void SignalVolumeAndWeightChange();
451 virtual void CalculateVolumeAndWeight();
452 sLong
GetVolume() const { return Volume
; }
453 sLong
GetWeight() const { return Weight
; }
454 virtual void SignalEmitationIncrease(col24
);
455 virtual void SignalEmitationDecrease(col24
);
457 virtual void DropEquipment(stack
* = 0) { }
458 virtual truth
IsDangerous(ccharacter
*) const { return false; }
459 virtual truth
NeedDangerSymbol() const { return false; }
460 void WeaponSkillHit(int);
461 virtual void SetTeam(int) { }
462 void SpecialGenerationHandler();
463 item
* Duplicate(feuLong
= 0);
464 virtual void SetIsActive(truth
) { }
465 double GetBaseDamage() const;
466 int GetBaseMinDamage() const;
467 int GetBaseMaxDamage() const;
468 int GetBaseToHitValue() const;
469 int GetBaseBlockValue() const;
470 virtual void AddInventoryEntry(ccharacter
*, festring
&, int, truth
) const;
471 sLong
GetNutritionValue() const;
472 virtual void SignalSpoil(material
*);
473 virtual truth
AllowSpoil() const;
474 item
* DuplicateToStack(stack
*, feuLong
= 0);
475 virtual truth
CanBePiledWith(citem
*, ccharacter
*) const;
476 virtual sLong
GetTotalExplosivePower() const { return 0; }
477 virtual void Break(character
*, int = YOURSELF
);
478 virtual void SetEnchantment(int) { }
479 virtual void EditEnchantment(int) { }
480 virtual void SignalEnchantmentChange();
481 virtual double GetTHVBonus() const { return 0.; }
482 virtual double GetDamageBonus() const { return 0.; }
483 virtual void DrawContents(ccharacter
*) { }
484 virtual truth
IsBroken() const;
485 virtual int GetEnchantment() const { return 0; }
486 sLong
GetEnchantedPrice(int) const;
488 int GetStrengthRequirement() const;
489 virtual int GetInElasticityPenalty(int) const { return 0; }
490 virtual truth
IsFixableBySmith(ccharacter
*) const { return false; }
491 virtual truth
IsFixableByTailor(ccharacter
*) const { return false; }
492 virtual sLong
GetFixPrice() const;
493 virtual void DonateSlotTo(item
*);
494 virtual int GetSpoilLevel() const;
495 virtual void SignalSpoilLevelChange(material
*);
496 void ResetSpoiling();
497 virtual void SetItemsInside(const fearray
<contentscript
<item
> >&, int) { }
498 virtual int GetCarryingBonus() const { return 0; }
499 virtual truth
IsBanana() const { return false; }
500 virtual truth
IsEncryptedScroll() const { return false; }
501 virtual truth
IsMondedrPass () const { return false; }
502 virtual truth
IsRingOfThieves () const { return false; }
503 cchar
* GetStrengthValueDescription() const;
504 cchar
* GetBaseToHitValueDescription() const;
505 cchar
* GetBaseBlockValueDescription() const;
506 virtual truth
IsInCorrectSlot(int) const;
507 truth
IsInCorrectSlot() const;
508 int GetEquipmentIndex() const;
509 room
* GetRoom(int I
= 0) const { return GetLSquareUnder(I
)->GetRoom(); }
510 virtual truth
HasBetterVersion() const { return false; }
511 virtual void SortAllItems(const sortdata
&) const;
512 virtual truth
AllowAlphaEverywhere() const { return false; }
513 virtual int GetAttachedGod() const;
514 virtual sLong
GetTruePrice() const;
515 virtual void Search(ccharacter
*, int) { }
516 virtual head
* Behead() { return 0; }
517 virtual truth
IsGorovitsFamilyRelic() const { return false; }
518 virtual truth
EffectIsGood() const { return false; }
519 //virtual truth GetCanFlame () const { return CanFlame; }
521 virtual void AddAttackInfo(felist
&) const;
522 void AddMiscellaneousInfo(felist
&) const;
524 virtual void PreProcessForBone();
525 virtual void PostProcessForBone();
526 virtual void FinalProcessForBone() { }
527 virtual truth
SuckSoul(character
*, character
* = 0) { return false; }
528 void SetConfig(int, int = 0);
529 god
* GetMasterGod() const;
530 idholder
* GetCloneMotherID() const { return CloneMotherID
; }
531 virtual void SignalStackAdd(stackslot
*, void (stack::*)(item
*, truth
));
532 virtual int GetSquareIndex(v2
) const { return 0; }
533 virtual void Draw(blitdata
&) const;
534 v2
GetLargeBitmapPos(v2
, int) const;
535 void LargeDraw(blitdata
&) const;
536 virtual truth
BunnyWillCatchAndConsume(ccharacter
*) const { return false; }
537 void DonateIDTo(item
*);
538 virtual void SignalRustLevelChange();
539 virtual void SendNewDrawAndMemorizedUpdateRequest() const;
540 virtual void CalculateSquaresUnder() { SquaresUnder
= 1; }
541 int GetSquaresUnder() const { return SquaresUnder
; }
542 virtual void CalculateEmitation();
543 void FillFluidVector(fluidvector
&, int = 0) const;
544 virtual void SpillFluid(character
*, liquid
*, int = 0);
545 virtual void TryToRust(sLong
);
546 void RemoveFluid(fluid
*);
547 void RemoveAllFluids ();
548 void AddFluid(liquid
*, festring
, int, truth
);
549 virtual truth
IsAnimated() const;
550 const rawbitmap
* GetRawPicture() const;
551 void DrawFluidGearPictures(blitdata
&, int = 0) const;
552 void DrawFluidBodyArmorPictures(blitdata
&, int) const;
553 void CheckFluidGearPictures(v2
, int, truth
);
554 void DrawFluids(blitdata
&) const;
555 virtual void ReceiveAcid(material
*, cfestring
&, sLong
);
556 virtual truth
ShowFluids() const { return true; }
557 void DonateFluidsTo(item
*);
558 void Destroy(character
*, int);
559 virtual truth
AllowFluidBe() const { return true; }
560 virtual truth
IsRusted() const;
561 virtual void RemoveRust();
562 virtual truth
IsBananaPeel() const { return false; }
563 void SetSpoilPercentage(int);
564 virtual pixelpredicate
GetFluidPixelAllowedPredicate() const;
565 void RedistributeFluids();
566 virtual material
* GetConsumeMaterial(ccharacter
*, materialpredicate
= TrueMaterialPredicate
) const;
567 virtual material
* RemoveMaterial(material
*);
568 virtual void Cannibalize();
569 void InitMaterials(material
*, truth
= true);
570 void SetMainMaterial(material
*, int = 0);
571 void ChangeMainMaterial(material
*, int = 0);
572 virtual void GenerateMaterials();
573 virtual void InitMaterials(const materialscript
*, const materialscript
*, truth
);
574 int GetSquarePosition() const { return (Flags
& SQUARE_POSITION_BITS
) >> SQUARE_POSITION_SHIFT
; }
575 virtual truth
IsLanternOnWall() const { return false; }
576 virtual void DestroyBodyPart(stack
*) { SendToHell(); }
577 int GetLifeExpectancy() const { return LifeExpectancy
; }
578 virtual void SetLifeExpectancy(int, int);
579 int NeedsBe() const { return LifeExpectancy
; }
580 truth
IsVeryCloseToDisappearance() const { return LifeExpectancy
&& LifeExpectancy
< 10; }
581 truth
IsVeryCloseToSpoiling() const;
582 virtual truth
IsValuable() const;
583 virtual truth
Necromancy(character
*) { return false; }
584 virtual void CalculateEnchantment() { }
585 virtual character
* GetBodyPartMaster() const { return 0; }
586 virtual truth
AllowFluids() const { return false; }
587 int GetHinderVisibilityBonus(ccharacter
*) const;
588 virtual DATA_BASE_TRUTH_WITH_PARAMETER(IsKamikazeWeapon
, ccharacter
*);
589 virtual void AddTrapName(festring
&, int) const;
590 int GetMainMaterialRustLevel() const;
591 truth
HasID(feuLong What
) const { return ID
== What
; }
592 virtual truth
Spoils() const;
593 int GetMaxSpoilPercentage() const;
594 truth
HasPrice() const;
595 virtual void Disappear();
596 festring
GetLocationDescription() const;
597 truth
IsEquipped() const;
598 festring
GetExtendedDescription() const;
599 virtual ccharacter
* FindCarrier() const;
600 virtual void BlockEffect(character
*, character
*, item
*, int type
) { }
601 virtual bool WillExplodeSoon() const { return false; }
602 virtual const character
* GetWearer() const;
603 virtual bool SpecialOfferEffect(int) { return false; }
606 void SendMemorizedUpdateRequest() const;
608 //FIXME:k8: is there such function already?
609 virtual truth
IsCorpse () const { return false; }
610 virtual truth
IsBodyPart () const { return false; }
611 virtual truth
IsBottle () const { return false; }
612 virtual truth
IsCan () const { return false; }
613 virtual truth
IsScroll () const { return false; }
616 virtual cchar
* GetBreakVerb() const;
617 virtual sLong
GetMaterialPrice() const;
618 void LoadDataBaseStats();
619 virtual void PostConstruct() { }
620 void Initialize(int, int);
621 virtual int GetGraphicsContainerIndex() const;
622 virtual truth
ShowMaterial() const;
623 virtual truth
AllowSparkling() const { return !Fluid
; }
624 virtual truth
WeightIsIrrelevant() const { return false; }
625 virtual const prototype
* FindProtoType() const { return &ProtoType
; }
626 virtual truth
AddStateDescription(festring
&, truth
) const;
627 static const prototype ProtoType
;
631 const database
* DataBase
;
634 idholder
* CloneMotherID
;
636 int FluidCount
; // same as 'SquaresUnder'?
643 #ifdef __FILE_OF_STATIC_ITEM_PROTOTYPE_DEFINITIONS__
644 #define ITEM_PROTO(name, base)\
645 template<> const itemprototype\
646 name##sysbase::ProtoType(&base::ProtoType,\
647 (itemspawner)(&name##sysbase::Spawn),\
648 (itemcloner)(&name##sysbase::Clone), #name);
650 #define ITEM_PROTO(name, base)
653 #define ITEM(name, base)\
655 typedef sysbase<name, base, itemprototype> name##sysbase;\
656 ITEM_PROTO(name, base)\
657 class name : public name##sysbase