diff options
Diffstat (limited to 'pokemod/ItemEffect.cpp')
| -rw-r--r-- | pokemod/ItemEffect.cpp | 508 |
1 files changed, 254 insertions, 254 deletions
diff --git a/pokemod/ItemEffect.cpp b/pokemod/ItemEffect.cpp index 896a73d9..d7b98023 100644 --- a/pokemod/ItemEffect.cpp +++ b/pokemod/ItemEffect.cpp @@ -15,13 +15,12 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +// Header include +#include "ItemEffect.h" // Pokemod includes -#include "Pokemod.h" #include "MapWildList.h" - -// Header include -#include "ItemEffect.h" +#include "Pokemod.h" const QStringList ItemEffect::EffectStr = QStringList() << "HP Cure" << "Revive" << "Cure Status" << "Level Boost" << "Stat Boost" << "Flinch" << "Go First" << "Keep Alive" << "Modify Stat (Battle Only)" << "Shield (Battle Only)" << "Run (Battle Only)" << "PP Boost" << "Type Boost" << "PP Restore" << "Experience Share" << "Fishing Rod" << "Repel" << "Escape" << "TM" << "HM" << "Map" << "Ball" << "Itemfinder" << "Bike" << "Scope" << "Coin" << "Coin Case" << "Berry" << "Acorn"; const QStringList ItemEffect::RelativeStr = QStringList() << "Absolute" << "Relative"; @@ -33,13 +32,13 @@ const QStringList ItemEffect::BallTypeStr = QStringList() << "Regular" << "Maste const QStringList ItemEffect::BerryTypeStr = QStringList() << "HP Cure" << "Status Cure"; ItemEffect::ItemEffect(const ItemEffect& effect) : - Object("ItemEffect", effect.pokemod(), effect.id()) + Object("ItemEffect", effect.parent(), effect.id()) { *this = effect; } -ItemEffect::ItemEffect(const Pokemod* pokemod, const int id) : - Object("ItemEffect", pokemod, id), +ItemEffect::ItemEffect(const Object* parent, const int id) : + Object("ItemEffect", parent, id), m_overworld(false), m_battle(false), m_held(false), @@ -51,255 +50,256 @@ ItemEffect::ItemEffect(const Pokemod* pokemod, const int id) : { } -ItemEffect::ItemEffect(const ItemEffect& effect, const Pokemod* pokemod, const int id) : - Object("ItemEffect", pokemod, id) +ItemEffect::ItemEffect(const ItemEffect& effect, const Object* parent, const int id) : + Object("ItemEffect", parent, id) { *this = effect; } -ItemEffect::ItemEffect(const QDomElement& xml, const Pokemod* pokemod, const int id) : - Object("ItemEffect", pokemod, id) +ItemEffect::ItemEffect(const QDomElement& xml, const Object* parent, const int id) : + Object("ItemEffect", parent, id) { load(xml, id); } bool ItemEffect::validate() const { - bool valid = true; - pokemod()->validationMsg(QString("------Effect with id %1---").arg(id()), Pokemod::V_Msg); - switch (m_effect) - { - case E_Revive: - case E_LevelBoost: - case E_StatBoost: - case E_PPBoost: - case E_Fish: - case E_Repel: - case E_Escape: - case E_TM: - case E_HM: - case E_Map: - case E_Itemfinder: - case E_Bike: - case E_Scope: - case E_Coin: - case E_CoinCase: - case E_Acorn: - case E_Evolution: - if (!m_overworld) - { - pokemod()->validationMsg("Effect only works in the overworld"); - valid = false; - } - break; - case E_Flinch: - case E_First: - case E_KeepAlive: - case E_ModifyStatBattle: - case E_ShieldBattle: - case E_RunBattle: - case E_TypeBoost: - case E_ExpShare: - case E_Ball: - case E_Berry: - if (m_overworld) - { - valid = false; - pokemod()->validationMsg("Effect cannot work in the overworld"); - } - break; - } - if (m_effect < E_End) - { - bool ok = true; - switch (m_effect) - { - case E_HPCure: - case E_Revive: - if ((m_value4 != R_Absolute) || !m_value1) - ok = false; - break; - case E_LevelBoost: - case E_ShieldBattle: - case E_PPBoost: - case E_Repel: - if (!m_value1) - ok = false; - break; - case E_StatBoost: - case E_Acorn: - if ((m_value1 < 0) || (65536 <= m_value1)) - ok = false; - break; - case E_ModifyStatBattle: - if ((m_value1 < -12) || (12 < m_value1)) - ok = false; - break; - case E_Ball: - switch (m_value2) - { - case B_Regular: - if (256 <= m_value1) - ok = false; - break; - case B_Level: - if (pokemod()->rules()->maxLevel() < m_value1) - ok = false; - break; - case B_Master: - case B_Love: - case B_Area: - case B_Time: - case B_Battle: - case B_Friend: - case B_Stat: - case B_Type: - case B_Weight: - break; - default: - ok = false; - break; - } - break; - } - if (!ok) - { - pokemod()->validationMsg("Invalid value 1"); - valid = false; - ok = true; - } - switch (m_effect) - { - case E_HPCure: - case E_Revive: - if (R_End <= m_value2) - ok = false; - break; - case E_CureStatus: - if (Pokemod::STS_End <= m_value2) - ok = false; - break; - case E_StatBoost: - if ((m_value2 <= 0) || (65536 <= m_value2)) - ok = false; - break; - case E_ModifyStatBattle: - if (Pokemod::ST_End_Battle <= m_value2) - ok = false; - break; - case E_ShieldBattle: - if (SP_End <= m_value2) - ok = false; - break; - case E_TypeBoost: - if (pokemod()->typeIndex(m_value2) == INT_MAX) - ok = false; - break; - case E_PPRestore: - if (A_End <= m_value2) - ok = false; - break; - case E_Repel: - if (RP_End <= m_value2) - ok = false; - break; - case E_Escape: - if (ES_End <= m_value2) - ok = false; - break; - case E_TM: - case E_HM: - if (pokemod()->moveIndex(m_value2) == INT_MAX) - ok = false; - break; - case E_Ball: - if (B_End <= m_value2) - ok = false; - break; - case E_Berry: - if (B2_End <= m_value2) - ok = false; - break; - case E_Coin: - case E_CoinCase: - if (m_value2 <= 0) - ok = false; - break; - case E_Acorn: - if (pokemod()->itemIndex(m_value2) == INT_MAX) - ok = false; - break; - } - if (!ok) - { - pokemod()->validationMsg("Invalid value 2"); - valid = false; - ok = true; - } - switch (m_effect) - { - case E_StatBoost: - if ((pokemod()->rules()->specialSplit() ? Pokemod::ST_End_GSC : Pokemod::ST_End_RBY) <= m_value3) - ok = false; - break; - case E_Ball: - switch (m_value2) - { - case B_Regular: - case B_Master: - case B_Level: - case B_Love: - case B_Battle: - case B_Friend: - case B_Weight: - break; - case B_Area: - if (MapWildList::End <= m_value3) - ok = false; - break; - case B_Time: - if (pokemod()->timeIndex(m_value3) == INT_MAX) - ok = false; - break; - case B_Stat: - if ((pokemod()->rules()->specialSplit() ? Pokemod::ST_End_GSC : Pokemod::ST_End_RBY) <= m_value3) - ok = false; - break; - case B_Type: - if (pokemod()->typeIndex(m_value3) == INT_MAX) - ok = false; - break; - } - break; - case E_Berry: - switch (m_value2) - { - case B2_HPCure: - if (Pokemod::REL_End <= m_value3) - ok = false; - break; - case B2_StatusCure: - if (Pokemod::STS_End <= m_value3) - ok = false; - break; - default: - ok = false; - break; - } - break; - } - if (!ok) - { - pokemod()->validationMsg("Invalid value 3"); - valid = false; - } - } - else - { - pokemod()->validationMsg("Invalid effect"); - valid = false; - } - return valid; + // TODO: validate +// bool valid = true; +// static_cast<const Pokemod*>(pokemod())->validationMsg(QString("------Effect with id %1---").arg(id()), Pokemod::V_Msg); +// switch (m_effect) +// { +// case E_Revive: +// case E_LevelBoost: +// case E_StatBoost: +// case E_PPBoost: +// case E_Fish: +// case E_Repel: +// case E_Escape: +// case E_TM: +// case E_HM: +// case E_Map: +// case E_Itemfinder: +// case E_Bike: +// case E_Scope: +// case E_Coin: +// case E_CoinCase: +// case E_Acorn: +// case E_Evolution: +// if (!m_overworld) +// { +// static_cast<const Pokemod*>(pokemod())->validationMsg("Effect only works in the overworld"); +// valid = false; +// } +// break; +// case E_Flinch: +// case E_First: +// case E_KeepAlive: +// case E_ModifyStatBattle: +// case E_ShieldBattle: +// case E_RunBattle: +// case E_TypeBoost: +// case E_ExpShare: +// case E_Ball: +// case E_Berry: +// if (m_overworld) +// { +// valid = false; +// static_cast<const Pokemod*>(pokemod())->validationMsg("Effect cannot work in the overworld"); +// } +// break; +// } +// if (m_effect < E_End) +// { +// bool ok = true; +// switch (m_effect) +// { +// case E_HPCure: +// case E_Revive: +// if ((m_value4 != R_Absolute) || !m_value1) +// ok = false; +// break; +// case E_LevelBoost: +// case E_ShieldBattle: +// case E_PPBoost: +// case E_Repel: +// if (!m_value1) +// ok = false; +// break; +// case E_StatBoost: +// case E_Acorn: +// if ((m_value1 < 0) || (65536 <= m_value1)) +// ok = false; +// break; +// case E_ModifyStatBattle: +// if ((m_value1 < -12) || (12 < m_value1)) +// ok = false; +// break; +// case E_Ball: +// switch (m_value2) +// { +// case B_Regular: +// if (256 <= m_value1) +// ok = false; +// break; +// case B_Level: +// if (static_cast<const Pokemod*>(pokemod())->rules()->maxLevel() < m_value1) +// ok = false; +// break; +// case B_Master: +// case B_Love: +// case B_Area: +// case B_Time: +// case B_Battle: +// case B_Friend: +// case B_Stat: +// case B_Type: +// case B_Weight: +// break; +// default: +// ok = false; +// break; +// } +// break; +// } +// if (!ok) +// { +// static_cast<const Pokemod*>(pokemod())->validationMsg("Invalid value 1"); +// valid = false; +// ok = true; +// } +// switch (m_effect) +// { +// case E_HPCure: +// case E_Revive: +// if (R_End <= m_value2) +// ok = false; +// break; +// case E_CureStatus: +// if (Pokemod::STS_End <= m_value2) +// ok = false; +// break; +// case E_StatBoost: +// if ((m_value2 <= 0) || (65536 <= m_value2)) +// ok = false; +// break; +// case E_ModifyStatBattle: +// if (Pokemod::ST_End_Battle <= m_value2) +// ok = false; +// break; +// case E_ShieldBattle: +// if (SP_End <= m_value2) +// ok = false; +// break; +// case E_TypeBoost: +// if (static_cast<const Pokemod*>(pokemod())->typeIndex(m_value2) == INT_MAX) +// ok = false; +// break; +// case E_PPRestore: +// if (A_End <= m_value2) +// ok = false; +// break; +// case E_Repel: +// if (RP_End <= m_value2) +// ok = false; +// break; +// case E_Escape: +// if (ES_End <= m_value2) +// ok = false; +// break; +// case E_TM: +// case E_HM: +// if (static_cast<const Pokemod*>(pokemod())->moveIndex(m_value2) == INT_MAX) +// ok = false; +// break; +// case E_Ball: +// if (B_End <= m_value2) +// ok = false; +// break; +// case E_Berry: +// if (B2_End <= m_value2) +// ok = false; +// break; +// case E_Coin: +// case E_CoinCase: +// if (m_value2 <= 0) +// ok = false; +// break; +// case E_Acorn: +// if (static_cast<const Pokemod*>(pokemod())->itemIndex(m_value2) == INT_MAX) +// ok = false; +// break; +// } +// if (!ok) +// { +// static_cast<const Pokemod*>(pokemod())->validationMsg("Invalid value 2"); +// valid = false; +// ok = true; +// } +// switch (m_effect) +// { +// case E_StatBoost: +// if ((static_cast<const Pokemod*>(pokemod())->rules()->specialSplit() ? Pokemod::ST_End_GSC : Pokemod::ST_End_RBY) <= m_value3) +// ok = false; +// break; +// case E_Ball: +// switch (m_value2) +// { +// case B_Regular: +// case B_Master: +// case B_Level: +// case B_Love: +// case B_Battle: +// case B_Friend: +// case B_Weight: +// break; +// case B_Area: +// if (MapWildList::End <= m_value3) +// ok = false; +// break; +// case B_Time: +// if (static_cast<const Pokemod*>(pokemod())->timeIndex(m_value3) == INT_MAX) +// ok = false; +// break; +// case B_Stat: +// if ((static_cast<const Pokemod*>(pokemod())->rules()->specialSplit() ? Pokemod::ST_End_GSC : Pokemod::ST_End_RBY) <= m_value3) +// ok = false; +// break; +// case B_Type: +// if (static_cast<const Pokemod*>(pokemod())->typeIndex(m_value3) == INT_MAX) +// ok = false; +// break; +// } +// break; +// case E_Berry: +// switch (m_value2) +// { +// case B2_HPCure: +// if (Pokemod::REL_End <= m_value3) +// ok = false; +// break; +// case B2_StatusCure: +// if (Pokemod::STS_End <= m_value3) +// ok = false; +// break; +// default: +// ok = false; +// break; +// } +// break; +// } +// if (!ok) +// { +// static_cast<const Pokemod*>(pokemod())->validationMsg("Invalid value 3"); +// valid = false; +// } +// } +// else +// { +// static_cast<const Pokemod*>(pokemod())->validationMsg("Invalid effect"); +// valid = false; +// } +// return valid; } void ItemEffect::load(const QDomElement& xml, int id) @@ -462,7 +462,7 @@ void ItemEffect::setValue1(const int value1) throw(Exception) error<BoundsException>("value1"); break; case B_Level: - if (pokemod()->rules()->maxLevel() < value1) + if (static_cast<const Pokemod*>(pokemod())->rules()->maxLevel() < value1) error<BoundsException>("value1"); break; case B_Master: @@ -512,7 +512,7 @@ void ItemEffect::setValue2(const int value2) throw(Exception) error<BoundsException>("value2"); break; case E_TypeBoost: - if (pokemod()->typeIndex(value2) == INT_MAX) + if (static_cast<const Pokemod*>(pokemod())->typeIndex(value2) == INT_MAX) error<BoundsException>("value2"); break; case E_PPRestore: @@ -529,7 +529,7 @@ void ItemEffect::setValue2(const int value2) throw(Exception) break; case E_TM: case E_HM: - if (pokemod()->moveIndex(value2) == INT_MAX) + if (static_cast<const Pokemod*>(pokemod())->moveIndex(value2) == INT_MAX) error<BoundsException>("value2"); break; case E_Ball: @@ -548,7 +548,7 @@ void ItemEffect::setValue2(const int value2) throw(Exception) error<BoundsException>("value2"); break; case E_Acorn: - if (pokemod()->itemIndex(value2) == INT_MAX) + if (static_cast<const Pokemod*>(pokemod())->itemIndex(value2) == INT_MAX) error<BoundsException>("value2"); break; default: @@ -563,7 +563,7 @@ void ItemEffect::setValue3(const int value3) throw(Exception) switch (m_effect) { case E_StatBoost: - if ((pokemod()->rules()->specialSplit() ? Pokemod::ST_End_GSC : Pokemod::ST_End_RBY) <= value3) + if ((static_cast<const Pokemod*>(pokemod())->rules()->specialSplit() ? Pokemod::ST_End_GSC : Pokemod::ST_End_RBY) <= value3) error<BoundsException>("value3"); break; case E_Ball: @@ -578,15 +578,15 @@ void ItemEffect::setValue3(const int value3) throw(Exception) error<BoundsException>("value3"); break; case B_Time: - if (pokemod()->timeIndex(value3) == INT_MAX) + if (static_cast<const Pokemod*>(pokemod())->timeIndex(value3) == INT_MAX) error<BoundsException>("value3"); break; case B_Stat: - if ((pokemod()->rules()->specialSplit() ? Pokemod::ST_End_GSC : Pokemod::ST_End_RBY) <= value3) + if ((static_cast<const Pokemod*>(pokemod())->rules()->specialSplit() ? Pokemod::ST_End_GSC : Pokemod::ST_End_RBY) <= value3) error<BoundsException>("value3"); break; case B_Type: - if (pokemod()->typeIndex(value3) == INT_MAX) + if (static_cast<const Pokemod*>(pokemod())->typeIndex(value3) == INT_MAX) error<BoundsException>("value3"); break; case B_Regular: |
