72 lines
1.6 KiB
C++
72 lines
1.6 KiB
C++
//
|
|
// alchemy.hpp
|
|
// BoE
|
|
//
|
|
// Created by Celtic Minstrel on 17-04-13.
|
|
//
|
|
//
|
|
|
|
#ifndef BoE_ALCHEMY_HPP
|
|
#define BoE_ALCHEMY_HPP
|
|
|
|
#include "scenario/item_abilities.hpp"
|
|
#include "scenario/item_variety.hpp"
|
|
|
|
#include <array>
|
|
#include <map>
|
|
|
|
enum class eAlchemy {
|
|
NONE = -1,
|
|
CURE_WEAK = 0,
|
|
HEAL_WEAK = 1,
|
|
POISON_WEAK = 2,
|
|
SPEED_WEAK = 3,
|
|
POISON_MED = 4,
|
|
HEAL_MED = 5,
|
|
CURE_STRONG = 6,
|
|
SPEED_MED = 7,
|
|
GRAYMOLD = 8,
|
|
POWER_WEAK = 9,
|
|
CLARITY = 10,
|
|
POISON_STRONG = 11,
|
|
HEAL_STRONG = 12,
|
|
POISON_KILL = 13,
|
|
RESURRECT = 14,
|
|
POWER_MED = 15,
|
|
KNOWLEDGE = 16,
|
|
STRENGTH = 17,
|
|
BLISS = 18,
|
|
POWER_STRONG = 19,
|
|
};
|
|
|
|
class cAlchemy {
|
|
static std::map<eAlchemy,cAlchemy> dictionary;
|
|
static const std::array<short, 9> fail_chances;
|
|
friend const cAlchemy& operator*(eAlchemy spell_num);
|
|
public:
|
|
cAlchemy(eAlchemy id);
|
|
cAlchemy& withValue(short val);
|
|
cAlchemy& withDifficulty(int d);
|
|
cAlchemy& withIngredient(eItemAbil ingred);
|
|
cAlchemy& withIngredients(eItemAbil first, eItemAbil second);
|
|
cAlchemy& withAbility(eItemAbil abil, int stren);
|
|
cAlchemy& withAbility(eItemAbil abil, int stren, eStatus status);
|
|
cAlchemy& withUse(eItemUse use);
|
|
const cAlchemy& finish();
|
|
eAlchemy id;
|
|
short value = 0;
|
|
int difficulty = 0;
|
|
eItemAbil ability = eItemAbil::NONE, ingred1, ingred2;
|
|
unsigned int abil_strength = 0;
|
|
uItemAbilData abil_data;
|
|
eItemUse magic_use_type = eItemUse::HELP_ONE;
|
|
short fail_chance(short skill) const;
|
|
short charges(short skill) const;
|
|
bool can_make(short skill) const;
|
|
};
|
|
|
|
// Need to declare this a second time in order for it to be in scope where it's needed
|
|
const cAlchemy& operator* (eAlchemy alch);
|
|
|
|
#endif
|