summaryrefslogtreecommitdiffstats
path: root/pokemod/ItemEffect.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pokemod/ItemEffect.cpp')
-rw-r--r--pokemod/ItemEffect.cpp508
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: