My Project
 
Loading...
Searching...
No Matches
armor.h
Go to the documentation of this file.
1#pragma once
2
3#include "equipableitem.h"
4#include "typedefine.h"
5#include "buff.h"
6
7class Armor :public EquipableItem{
8public:
9 class Glyph :public Bundlable{
10 private:
11 static float _chances[];
12 static std::vector<float > chances;
13
14 static std::string _glyphs[];
15 static std::vector<std::string> glyphs;
16 public:
18 virtual std::string getClassName() { return "Glyph"; }
19
20 virtual int proc(Armor* armor, Char* attacker, Char* defender, int damage) = 0;
21
22 virtual String name(const String& armorName) {
23 return armorName;
24 }
25
26 virtual void restoreFromBundle(Bundle* bundle) {
27 }
28 virtual void storeInBundle(Bundle* bundle) {
29 }
33 boolean checkOwner(Char* owner);
34
35 static Glyph* random();
36 };
37private:
38 static const int HITS_TO_KNOW = 10;
39
40 static const String TXT_EQUIP_CURSED;
41
42 static const String TXT_IDENTIFY;
43
44 static const String TXT_TO_STRING;
45 static const String TXT_BROKEN;
46
47 static const String TXT_INCOMPATIBLE;
48 static const String UNFAMILIRIARITY;
49 static const String GLYPH;
50
51 int hitsToKnow;
52public:
53 int tier;
54 int STR;
55
57public:
58 Armor(int tier);
59
60 virtual std::string getClassName(){ return "Armor"; }
61 virtual void storeInBundle(Bundle* bundle);
62 virtual void restoreFromBundle(Bundle* bundle);
63
64 virtual void actions(Hero* hero, std::vector<std::string>& actions);
65 virtual bool doEquip(Hero* hero);
66
67 virtual float time2equip(Hero* hero);
68 virtual bool doUnequip(Hero* hero, bool collect, bool single);
69 virtual bool isEquipped(Hero* hero);
70
71 int DR() {
72 return tier * (2 + effectiveLevel() + (glyph == NULL ? 0 : 1));
73 }
74 virtual Item* upgrade() {
75 return upgrade(false);
76 }
77 Item* upgrade(boolean inscribe);
79 return upgrade(glyph != NULL);
80 }
81 virtual Item* degrade() {
82 STR++;
83 return Item::degrade();
84 }
85 virtual int maxDurability(int lvl) {
86 return 6 * (lvl < 16 ? 16 - lvl : 1);
87 }
88
89 int proc(Char* attacker, Char* defender, int damage);
90 virtual String toString();
91
92 virtual String Name() {
93 return glyph == NULL ? Item::Name() : glyph->name(Item::Name());
94 }
95
96 virtual String info();
97
98 virtual Item* random();
99 int typicalSTR() {
100 return 7 + tier * 2;
101 }
102
103 int typicalDR() {
104 return tier * 2;
105 }
106 virtual int price();
108 this->glyph = glyph;
109 return this;
110 }
111 Armor* inscribe();
112 boolean isInscribed() {
113 return glyph != NULL;
114 }
116 return glyph != NULL ? glyph->glowing() : NULL;
117 }
118};
119
121
122class Bounce :public Armor::Glyph{
123private:
124 static const String TXT_BOUNCE;
125
126public:
128 virtual int proc(Armor* armor, Char* attacker, Char* defender, int damage);
129
130 virtual String name(const String& weaponName);
131};
132
134private:
135 static const String TXT_AFFECTION;
136
137 static ItemSprite::Glowing* PINK;
138public:
140 virtual int proc(Armor* armor, Char* attacker, Char* defender, int damage);
141 virtual String name(const String& weaponName);
143 return PINK;
144 }
145};
146
148private:
149 static const String TXT_ANTI_ENTROPY;
150
151 static ItemSprite::Glowing* BLUE;
152public:
154 virtual int proc(Armor* armor, Char* attacker, Char* defender, int damage);
155 virtual String name(const String& weaponName);
157 return AntiEntropy::BLUE;
158 }
159};
160
161class Multiplicity :public Armor::Glyph, public Object{
162private:
163 static const String TXT_MULTIPLICITY;
164
165 static ItemSprite::Glowing* PINK;
166public:
169 virtual int proc(Armor* armor, Char* attacker, Char* defender, int damage);
170 virtual String name(const String& weaponName);
172 return PINK;
173 }
174};
175
177private:
178 static const String TXT_POTENTIAL;
179
180 static ItemSprite::Glowing* BLUE;
181
182public:
184 virtual int proc(Armor* armor, Char* attacker, Char* defender, int damage);
185 virtual String name(const String& weaponName);
187 return Potential::BLUE;
188 }
189};
190
192private:
193 static const String TXT_METABOLISM;
194
195 static ItemSprite::Glowing* RED;
196public:
198 virtual int proc(Armor* armor, Char* attacker, Char* defender, int damage);
199 virtual String name(const String& weaponName);
201 return RED;
202 }
203};
204
205class Stench :public Armor::Glyph{
206private:
207 static const String TXT_STENCH;
208
209 static ItemSprite::Glowing* GREEN;
210
211public:
213 virtual int proc(Armor* armor, Char* attacker, Char* defender, int damage);
214 virtual String name(const String& weaponName);
216 return GREEN;
217 }
218};
219
221private:
222 static const String TXT_VISCOSITY;
223
224 static ItemSprite::Glowing* PURPLE;
225
226public:
228
229 virtual int proc(Armor* armor, Char* attacker, Char* defender, int damage);
230 virtual String name(const String& weaponName);
232 return PURPLE;
233 }
234
235 class DeferedDamage :public Buff, public Object{
236 protected:
238
239 private:
240 static const String DAMAGE;
241
242 public:
245 virtual std::string getClassName() { return "DeferedDamage"; }
246 virtual void storeInBundle(Bundle* bundle);
247 virtual void restoreFromBundle(Bundle* bundle);
248
249 virtual boolean attachTo(Char* target);
250
251 void prolong(int damage) {
252 this->damage += damage;
253 };
254 virtual int icon();
255
256 virtual String toString();
257 virtual boolean act();
258 };
259};
260
262private:
263 static const String TXT_DISPLACEMENT;
264
265 static ItemSprite::Glowing* BLUE;
266
267public:
269 virtual int proc(Armor* armor, Char* attacker, Char* defender, int damage);
270 virtual String name(const String& weaponName);
272 return Displacement::BLUE;
273 }
274};
275
277private:
278 static const String TXT_ENTANGLEMENT;
279
280 static ItemSprite::Glowing* GREEN;
281public:
283
284 virtual int proc(Armor* armor, Char* attacker, Char* defender, int damage);
285 virtual String name(const String& weaponName);
287 return GREEN;
288 }
289};
290
292private:
293 static const String TXT_AUTO_REPAIR;
294
295 static ItemSprite::Glowing* GRAY;
296
297public:
299
300 virtual int proc(Armor* armor, Char* attacker, Char* defender, int damage);
301 virtual String name(const String& weaponName);
303 return GRAY;
304 }
305};
306
307class ClothArmor :public Armor{
308public:
309 ClothArmor();
310 virtual std::string getClassName() { return "ClothArmor"; }
311 static Item* Create() { return new ClothArmor(); }
312
313 virtual String desc() {
314 return BPT::getText("lang.ClothArmor_Desc");// "This lightweight armor offers basic protection.";
315 }
316};
317
318class LeatherArmor :public Armor{
319public:
320 LeatherArmor();
321 virtual std::string getClassName() { return "LeatherArmor"; }
322 static Item* Create() { return new LeatherArmor(); }
323
324 virtual String desc() {
325 return BPT::getText("lang.LeatherArmor_Desc");// "Armor made from tanned monster hide. Not as light as cloth armor but provides better protection.";
326 }
327};
328
329class MailArmor :public Armor{
330public:
331 MailArmor();
332 virtual std::string getClassName() { return "MailArmor"; }
333 static Item* Create() { return new MailArmor(); }
334
335 virtual String desc() {
336 return BPT::getText("lang.MailArmor_Desc");
337 //"Interlocking metal links make for a tough but flexible suit of armor.";
338 }
339};
340
341class ScaleArmor :public Armor{
342public:
343 ScaleArmor();
344 virtual std::string getClassName() { return "ScaleArmor"; }
345 static Item* Create() { return new ScaleArmor(); }
346
347 virtual String desc() {
348 return BPT::getText("lang.ScaleArmor_Desc");
349 //"The metal scales sewn onto a leather vest create a flexible, yet protective armor.";
350 }
351};
352
353class PlateArmor :public Armor{
354public:
355 PlateArmor();
356 virtual std::string getClassName() { return "PlateArmor"; }
357 static Item* Create() { return new PlateArmor(); }
358
359 virtual String desc() {
360 return BPT::getText("lang.PlateArmor_Desc");
361 //std::string("Enormous plates of metal are joined together into a suit that provides ") +
362 //std::string("unmatched protection to any adventurer strong enough to bear its staggering weight.");
363 }
364};
Definition armor.h:133
virtual String name(const String &weaponName)
Definition armor.cpp:374
virtual ItemSprite::Glowing * glowing()
Definition armor.h:142
virtual int proc(Armor *armor, Char *attacker, Char *defender, int damage)
Definition armor.cpp:354
CLASSNAME(Affection)
Definition armor.h:147
CLASSNAME(AntiEntropy)
virtual String name(const String &weaponName)
Definition armor.cpp:401
virtual int proc(Armor *armor, Char *attacker, Char *defender, int damage)
Definition armor.cpp:384
virtual ItemSprite::Glowing * glowing()
Definition armor.h:156
Definition armor.h:9
virtual int proc(Armor *armor, Char *attacker, Char *defender, int damage)=0
virtual void storeInBundle(Bundle *bundle)
Definition armor.h:28
virtual ItemSprite::Glowing * glowing()
Definition armor.h:30
static Glyph * random()
Definition armor.cpp:302
boolean checkOwner(Char *owner)
Definition armor.cpp:288
Glyph()
Definition armor.h:17
virtual std::string getClassName()
Definition armor.h:18
virtual String name(const String &armorName)
Definition armor.h:22
virtual void restoreFromBundle(Bundle *bundle)
Definition armor.h:26
Definition armor.h:7
int typicalSTR()
Definition armor.h:99
virtual bool doUnequip(Hero *hero, bool collect, bool single)
Definition armor.cpp:99
virtual bool doEquip(Hero *hero)
Definition armor.cpp:66
virtual int price()
Definition armor.cpp:252
virtual void storeInBundle(Bundle *bundle)
Definition armor.cpp:44
virtual Item * random()
Definition armor.cpp:226
int STR
Definition armor.h:54
Armor * inscribe()
Definition armor.cpp:261
virtual String info()
Definition armor.cpp:159
int DR()
Definition armor.h:71
Armor * inscribe(Glyph *glyph)
Definition armor.h:107
virtual bool isEquipped(Hero *hero)
Definition armor.cpp:116
boolean isInscribed()
Definition armor.h:112
virtual void actions(Hero *hero, std::vector< std::string > &actions)
Definition armor.cpp:60
virtual Item * degrade()
Definition armor.h:81
virtual void restoreFromBundle(Bundle *bundle)
Definition armor.cpp:51
int tier
Definition armor.h:53
virtual Item * upgrade()
Definition armor.h:74
virtual float time2equip(Hero *hero)
Definition armor.cpp:94
virtual ItemSprite::Glowing * glowing()
Definition armor.h:115
Item * safeUpgrade()
Definition armor.h:78
virtual std::string getClassName()
Definition armor.h:60
virtual String Name()
Definition armor.h:92
Armor(int tier)
Definition armor.cpp:35
Glyph * glyph
Definition armor.h:56
virtual int maxDurability(int lvl)
Definition armor.h:85
virtual String toString()
Definition armor.cpp:272
int proc(Char *attacker, Char *defender, int damage)
Definition armor.cpp:140
int typicalDR()
Definition armor.h:103
Definition armor.h:291
virtual int proc(Armor *armor, Char *attacker, Char *defender, int damage)
Definition armor.cpp:699
CLASSNAME(AutoRepair)
virtual ItemSprite::Glowing * glowing()
Definition armor.h:302
virtual String name(const String &weaponName)
Definition armor.cpp:708
static std::string getText(const std::string &key)
Definition bpt.cpp:26
Definition armor.h:122
virtual int proc(Armor *armor, Char *attacker, Char *defender, int damage)
Definition armor.cpp:312
virtual String name(const String &weaponName)
Definition armor.cpp:345
CLASSNAME(Bounce)
Char * target
Definition buff.h:13
Buff()
Definition buff.cpp:20
Definition char.h:9
virtual String desc()
Definition armor.h:313
static Item * Create()
Definition armor.h:311
ClothArmor()
Definition armor.cpp:714
virtual std::string getClassName()
Definition armor.h:310
Definition armor.h:261
virtual String name(const String &weaponName)
Definition armor.cpp:665
virtual ItemSprite::Glowing * glowing()
Definition armor.h:271
virtual int proc(Armor *armor, Char *attacker, Char *defender, int damage)
Definition armor.cpp:642
CLASSNAME(Displacement)
Definition armor.h:276
virtual int proc(Armor *armor, Char *attacker, Char *defender, int damage)
Definition armor.cpp:674
CLASSNAME(Entanglement)
virtual ItemSprite::Glowing * glowing()
Definition armor.h:286
virtual String name(const String &weaponName)
Definition armor.cpp:690
Definition equipableitem.h:5
Definition hero.h:18
Definition item.h:15
Item()
Definition item.cpp:65
virtual Item * degrade()
Definition item.h:134
virtual std::string Name()
Definition item.cpp:134
virtual int effectiveLevel()
Definition item.cpp:231
virtual boolean collect(Bag *container)
Definition item.cpp:301
Definition itemsprite.h:10
static Glowing * WHITE
Definition itemsprite.h:12
virtual String desc()
Definition armor.h:324
static Item * Create()
Definition armor.h:322
virtual std::string getClassName()
Definition armor.h:321
LeatherArmor()
Definition armor.cpp:721
MailArmor()
Definition armor.cpp:728
virtual String desc()
Definition armor.h:335
virtual std::string getClassName()
Definition armor.h:332
static Item * Create()
Definition armor.h:333
Definition armor.h:191
virtual int proc(Armor *armor, Char *attacker, Char *defender, int damage)
Definition armor.cpp:482
virtual String name(const String &weaponName)
Definition armor.cpp:508
virtual ItemSprite::Glowing * glowing()
Definition armor.h:200
CLASSNAME(Metabolism)
Definition armor.h:161
virtual int proc(Armor *armor, Char *attacker, Char *defender, int damage)
Definition armor.cpp:410
CLASSNAME(Multiplicity)
CLASSOBJECT(Multiplicity)
virtual ItemSprite::Glowing * glowing()
Definition armor.h:171
virtual String name(const String &weaponName)
Definition armor.cpp:440
Definition typedefine.h:69
virtual String desc()
Definition armor.h:359
virtual std::string getClassName()
Definition armor.h:356
PlateArmor()
Definition armor.cpp:742
static Item * Create()
Definition armor.h:357
Definition armor.h:176
virtual ItemSprite::Glowing * glowing()
Definition armor.h:186
virtual String name(const String &weaponName)
Definition armor.cpp:473
virtual int proc(Armor *armor, Char *attacker, Char *defender, int damage)
Definition armor.cpp:449
CLASSNAME(Potential)
virtual String desc()
Definition armor.h:347
virtual std::string getClassName()
Definition armor.h:344
static Item * Create()
Definition armor.h:345
ScaleArmor()
Definition armor.cpp:735
Definition armor.h:205
virtual int proc(Armor *armor, Char *attacker, Char *defender, int damage)
Definition armor.cpp:517
CLASSNAME(Stench)
virtual ItemSprite::Glowing * glowing()
Definition armor.h:215
virtual String name(const String &weaponName)
Definition armor.cpp:530
virtual void restoreFromBundle(Bundle *bundle)
Definition armor.cpp:584
DeferedDamage()
Definition armor.cpp:573
void prolong(int damage)
Definition armor.h:251
virtual String toString()
Definition armor.cpp:633
virtual std::string getClassName()
Definition armor.h:245
virtual void storeInBundle(Bundle *bundle)
Definition armor.cpp:578
virtual boolean act()
Definition armor.cpp:606
virtual boolean attachTo(Char *target)
Definition armor.cpp:590
virtual int icon()
Definition armor.cpp:601
CLASSOBJECT(DeferedDamage)
int damage
Definition armor.h:237
Definition armor.h:220
virtual int proc(Armor *armor, Char *attacker, Char *defender, int damage)
Definition armor.cpp:539
virtual ItemSprite::Glowing * glowing()
Definition armor.h:231
virtual String name(const String &weaponName)
Definition armor.cpp:566
CLASSNAME(Viscosity)
#define __FACTORY__(name, cls)
Definition typedefine.h:77
std::string String
Definition typedefine.h:8