#include <vector>
#include <SDL.h>
-namespace common { class Spell; }
+namespace common {
+ class Item;
+ class Spell;
+}
namespace graphics { class Sprite; }
namespace battle {
Uint16 MaxHealth() const { return maxHealth; }
Uint16 Health() const { return health; }
- int RelativeHealth(int max) const { return health * max / maxHealth; }
+ int RelativeHealth(int max) const { return Health() * max / MaxHealth(); }
Uint16 MaxMana() const { return maxMana; }
Uint16 Mana() const { return mana; }
- int RelativeMana(int max) const { return maxMana == 0 ? 0 : mana * max / maxMana; }
- bool CanUseMagic() const { return maxMana > 0; }
+ int RelativeMana(int max) const { return MaxMana() == 0 ? 0 : Mana() * max / MaxMana(); }
+ bool CanUseMagic() const { return MaxMana() > 0; }
+ Uint8 MaxIP() const { return 255; }
Uint8 IP() const { return ip; }
- int RelativeIP(int max) const { return ip * max / 255; }
+ int RelativeIP(int max) const { return IP() * max / MaxIP(); }
Uint16 Attack() const { return attack; }
Uint16 Defense() const { return defense; }
Uint16 Gut() const { return gut; }
Uint16 MagicResistance() const { return magicResistance; }
+ const common::Item *Weapon() const { return weapon; }
+ const common::Item *Armor() const { return armor; }
+ const common::Item *Shield() const { return shield; }
+ const common::Item *Helmet() const { return helmet; }
+ const common::Item *Ring() const { return ring; }
+ const common::Item *Jewel() const { return jewel; }
+
+ bool HasWeapon() const { return weapon; }
+ bool HasArmor() const { return armor; }
+ bool HasShield() const { return shield; }
+ bool HasHelmet() const { return helmet; }
+ bool HasRing() const { return ring; }
+ bool HasJewel() const { return jewel; }
+
// temporary setters until loader is implemented
public:
void SetName(const char *n) { name = n; }
void SetMana(Uint16 m) { mana = m; }
void SetIP(Uint8 i) { ip = i; }
+ void SetWeapon(const common::Item *i) { weapon = i; }
+ void SetArmor(const common::Item *i) { armor = i; }
+ void SetShield(const common::Item *i) { shield = i; }
+ void SetHelmet(const common::Item *i) { helmet = i; }
+ void SetRing(const common::Item *i) { ring = i; }
+ void SetJewel(const common::Item *i) { jewel = i; }
+
void AddSpell(const common::Spell *s) { spells.push_back(s); }
private:
const char *name;
graphics::Sprite *sprite;
+ const common::Item *weapon;
+ const common::Item *armor;
+ const common::Item *shield;
+ const common::Item *helmet;
+ const common::Item *ring;
+ const common::Item *jewel;
+
// TODO: vector does not seem to be a good choice
std::vector<const common::Spell *> spells;
// TODO: equipment list
Sprite shieldIcon(itemIcons, 16, 16, 0, 128);
Sprite helmetIcon(itemIcons, 16, 16, 0, 144);
Sprite ringIcon(itemIcons, 16, 16, 0, 160);
- Sprite stoneIcon(itemIcons, 16, 16, 0, 176);
+ Sprite jewelIcon(itemIcons, 16, 16, 0, 176);
Inventory inventory;
Item antidote;
battleRes.itemMenuHeadline = "Please choose an item.";
battleRes.itemMenuPrototype = Menu<const common::Item *>(&normalFont, &disabledFont, &handCursorSprite, 15, 6, 8, 16, 1, 32, 2, ':');
+ Item zircoSword;
+ zircoSword.SetName("Zirco sword");
+ zircoSword.SetMenuIcon(&swordIcon);
+ maxim.SetWeapon(&zircoSword);
+ Item zirconArmor;
+ zirconArmor.SetName("Zircon armor");
+ zirconArmor.SetMenuIcon(&armorIcon);
+ maxim.SetArmor(&zirconArmor);
+ Item holyShield;
+ holyShield.SetName("Holy shield");
+ holyShield.SetMenuIcon(&shieldIcon);
+ maxim.SetShield(&holyShield);
+ Item legendHelm;
+ legendHelm.SetName("Legend helm");
+ legendHelm.SetMenuIcon(&helmetIcon);
+ maxim.SetHelmet(&legendHelm);
+ Item sProRing;
+ sProRing.SetName("S-pro ring");
+ sProRing.SetMenuIcon(&ringIcon);
+ maxim.SetRing(&sProRing);
+ Item evilJewel;
+ evilJewel.SetName("Evil jewel");
+ evilJewel.SetMenuIcon(&jewelIcon);
+ maxim.SetJewel(&evilJewel);
+
+ Item zircoWhip;
+ zircoWhip.SetName("Zirco whip");
+ zircoWhip.SetMenuIcon(&rodIcon);
+ selan.SetWeapon(&zircoWhip);
+ Item zirconPlate;
+ zirconPlate.SetName("Zircon plate");
+ zirconPlate.SetMenuIcon(&armorIcon);
+ selan.SetArmor(&zirconPlate);
+ Item zircoGloves;
+ zircoGloves.SetName("Zirco gloves");
+ zircoGloves.SetMenuIcon(&shieldIcon);
+ selan.SetShield(&zircoGloves);
+ Item holyCap;
+ holyCap.SetName("Holy cap");
+ holyCap.SetMenuIcon(&helmetIcon);
+ selan.SetHelmet(&holyCap);
+ Item ghostRing;
+ ghostRing.SetName("Ghost ring");
+ ghostRing.SetMenuIcon(&ringIcon);
+ selan.SetRing(&ghostRing);
+ Item eagleRock;
+ eagleRock.SetName("Eagle rock");
+ eagleRock.SetMenuIcon(&jewelIcon);
+ selan.SetJewel(&eagleRock);
+
+ Item zircoAx;
+ zircoAx.SetName("Zirco ax");
+ zircoAx.SetMenuIcon(&axIcon);
+ guy.SetWeapon(&zircoAx);
+ guy.SetArmor(&zirconArmor);
+ Item megaShield;
+ megaShield.SetName("Mega shield");
+ megaShield.SetMenuIcon(&shieldIcon);
+ guy.SetShield(&megaShield);
+ Item zircoHelmet;
+ zircoHelmet.SetName("Zirco helmet");
+ zircoHelmet.SetMenuIcon(&helmetIcon);
+ guy.SetHelmet(&zircoHelmet);
+ Item powerRing;
+ powerRing.SetName("Power ring");
+ powerRing.SetMenuIcon(&ringIcon);
+ guy.SetRing(&powerRing);
+ guy.SetJewel(&evilJewel);
+
+ // NOTE: this is actually Artea equipment
+ Item lizardBlow;
+ lizardBlow.SetName("Lizard blow");
+ lizardBlow.SetMenuIcon(&swordIcon);
+ dekar.SetWeapon(&lizardBlow);
+ Item holyRobe;
+ holyRobe.SetName("Holy robe");
+ holyRobe.SetMenuIcon(&armorIcon);
+ dekar.SetArmor(&holyRobe);
+ dekar.SetShield(&zircoGloves);
+ dekar.SetHelmet(&holyCap);
+ Item rocketRing;
+ rocketRing.SetName("Rocket ring");
+ rocketRing.SetMenuIcon(&ringIcon);
+ dekar.SetRing(&rocketRing);
+ Item krakenRock;
+ krakenRock.SetName("Kraken rock");
+ krakenRock.SetMenuIcon(&jewelIcon);
+ dekar.SetJewel(&krakenRock);
+
battleRes.ikariMenuHeadline = "Please choose equipment.";
battleRes.ikariMenuPrototype = Menu</* Item */ void *>(&normalFont, &disabledFont, &handCursorSprite, 26, 6, 8, 16, 1, 32);
battleRes.ikariMenuPrototype.Add("Zirco whip Thundershriek", 0, false, &swordIcon);
battleRes.ikariMenuPrototype.Add("Zirco gloves Forcefield", 0, true, &shieldIcon);
battleRes.ikariMenuPrototype.Add("Holy cap Vulnerable", 0, false, &helmetIcon);
battleRes.ikariMenuPrototype.Add("Ghost ring Destroy", 0, true, &ringIcon);
- battleRes.ikariMenuPrototype.Add("Eagle rock Dive", 0, true, &stoneIcon);
+ battleRes.ikariMenuPrototype.Add("Eagle rock Dive", 0, true, &jewelIcon);
BattleState *battleState(new BattleState(bg, monstersLayout, heroesLayout, &battleRes));
battleState->AddMonster(monster);