Gather all enchantment info into a single place

This also resolves several TODO notes about duplicate code and makes cPresetItem::ability an eEnchant
This commit is contained in:
2024-08-28 23:41:36 -04:00
committed by Celtic Minstrel
parent 71a9d11cd0
commit 6965b822dc
22 changed files with 216 additions and 83 deletions

76
src/enchant.cpp Normal file
View File

@@ -0,0 +1,76 @@
//
// enchant.cpp
// BoE
//
// Created by Celtic Minstrel on 2023-08-28.
//
//
#include "enchant.hpp"
#include "mathutil.hpp"
std::map<eEnchant, cEnchant> cEnchant::dictionary;
cEnchant::cEnchant(eEnchant id, std::string suf) : id(id), suffix(suf) {}
cEnchant& cEnchant::withCost(short cost) {
aug_cost = cost;
return *this;
}
cEnchant& cEnchant::withBonus(int bonus) {
add_bonus = bonus;
return *this;
}
cEnchant& cEnchant::withAbility(eItemAbil abil, unsigned int stren) {
add_ability = abil;
abil_strength = stren;
return *this;
}
cEnchant& cEnchant::withAbility(eItemAbil abil, unsigned int stren, eSpell spell) {
withAbility(abil, stren);
abil_data.spell = spell;
return *this;
}
cEnchant& cEnchant::withAbility(eItemAbil abil, unsigned int stren, eDamageType dmg) {
withAbility(abil, stren);
abil_data.damage = dmg;
return *this;
}
cEnchant& cEnchant::withAbility(eItemAbil abil, unsigned int stren, eStatus status) {
withAbility(abil, stren);
abil_data.status = status;
return *this;
}
cEnchant& cEnchant::withCharges(int c) {
charges = c;
return *this;
}
const cEnchant& cEnchant::finish() {
dictionary.emplace(id, *this);
return *this;
}
int cEnchant::adjust_value(int initial_value) const {
return max(aug_cost * 100, initial_value * (5 + aug_cost));
}
const cEnchant& operator* (eEnchant ench) {
static cEnchant none{eEnchant::NONE, ""};
if(ench == eEnchant::NONE) return none;
return cEnchant::dictionary.at(ench);
}
cEnchant E_PLUS_ONE = cEnchant(eEnchant::PLUS_ONE, "+1").withCost(4).withBonus(1).finish();
cEnchant E_PLUS_TWO = cEnchant(eEnchant::PLUS_TWO, "+2").withCost(7).withBonus(2).finish();
cEnchant E_PLUS_THREE = cEnchant(eEnchant::PLUS_THREE, "+3").withCost(10).withBonus(3).finish();
cEnchant E_SHOOT_FLAME = cEnchant(eEnchant::SHOOT_FLAME, "F").withCost(8).withAbility(eItemAbil::CAST_SPELL, 5, eSpell::FLAME).withCharges(8).finish();
cEnchant E_FLAMING = cEnchant(eEnchant::FLAMING, "F!").withCost(15).withAbility(eItemAbil::DAMAGING_WEAPON, 5, eDamageType::FIRE).finish();
cEnchant E_PLUS_FIVE = cEnchant(eEnchant::PLUS_FIVE, "+5").withCost(15).withBonus(5).finish();
cEnchant E_BLESSED = cEnchant(eEnchant::BLESSED, "B").withCost(10).withBonus(1).withAbility(eItemAbil::AFFECT_STATUS, 5, eStatus::BLESS_CURSE);