summaryrefslogtreecommitdiffstats
path: root/pokemod/ItemEffect.cpp
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2007-10-26 20:46:09 +0000
committerBen Boeckel <MathStuf@gmail.com>2007-10-26 20:46:09 +0000
commit4385af885daf460a18e236f08509358f764b2c8c (patch)
tree6c2838312dd7f42769280e24e8abc16b53c165cb /pokemod/ItemEffect.cpp
parent1f08afc80c73087bf9bde639754670548b89fc9f (diff)
Reverted repo back to rev24 because committing of rev25 messed up
git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@26 6ecfd1a5-f3ed-3746-8530-beee90d26b22
Diffstat (limited to 'pokemod/ItemEffect.cpp')
-rw-r--r--pokemod/ItemEffect.cpp594
1 files changed, 138 insertions, 456 deletions
diff --git a/pokemod/ItemEffect.cpp b/pokemod/ItemEffect.cpp
index 83b30dc9..dcbfc737 100644
--- a/pokemod/ItemEffect.cpp
+++ b/pokemod/ItemEffect.cpp
@@ -22,25 +22,17 @@
#include "ItemEffect.h"
-const char* PokeGen::PokeMod::ItemEffect::EffectStr[PokeGen::PokeMod::ItemEffect::E_End] = {"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 char* PokeGen::PokeMod::ItemEffect::RelativeStr[PokeGen::PokeMod::ItemEffect::R_End] = {"Absolute", "Relative"};
-const char* PokeGen::PokeMod::ItemEffect::EscapeStr[PokeGen::PokeMod::ItemEffect::ES_End] = {"Anywhere", "Dungeon"};
-const char* PokeGen::PokeMod::ItemEffect::RepelStr[PokeGen::PokeMod::ItemEffect::RP_End] = {"First", "Max", "All"};
-const char* PokeGen::PokeMod::ItemEffect::AmountStr[PokeGen::PokeMod::ItemEffect::A_End] = {"All", "One"};
-const char* PokeGen::PokeMod::ItemEffect::SpecialPhysicalStr[PokeGen::PokeMod::ItemEffect::SP_End] = {"Special", "Physical"};
-const char* PokeGen::PokeMod::ItemEffect::BallTypeStr[PokeGen::PokeMod::ItemEffect::B_End] = {"Regular", "Master", "Level", "Love", "Area", "Time", "Battle", "Friend", "Stat", "Type", "Weight"};
-const char* PokeGen::PokeMod::ItemEffect::BerryTypeStr[PokeGen::PokeMod::ItemEffect::B2_End] = {"HP Cure", "Status Cure"};
-
PokeGen::PokeMod::ItemEffect::ItemEffect(const Pokemod* par, const unsigned _id) :
Object(_id, par),
overworld(false),
battle(false),
held(false),
effect(UINT_MAX),
- val1(INT_MIN),
+ val1(UINT_MAX),
val2(UINT_MAX),
- val3(UINT_MAX),
- val4(1, 1)
+ val3(1, 1),
+ val4(UINT_MAX),
+ val5(UINT_MAX)
{
}
@@ -53,238 +45,7 @@ PokeGen::PokeMod::ItemEffect::ItemEffect(const Pokemod* par, Ini& ini, const uns
bool PokeGen::PokeMod::ItemEffect::Validate()
{
pokemod->ValidationMsg(QString("------Effect with id %1---").arg(id), Pokemod::V_Msg);
- switch (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 (!overworld)
- {
- isValid = false;
- pokemod->ValidationMsg("Effect only works in the overworld");
- }
- 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 (overworld)
- {
- isValid = false;
- pokemod->ValidationMsg("Effect cannot work in the overworld");
- }
- break;
- }
- if (effect < E_End)
- {
- bool ok = true;
- switch (effect)
- {
- case E_HPCure:
- case E_Revive:
- if ((val4 != R_Absolute) || !val1)
- ok = false;;
- break;
- case E_LevelBoost:
- case E_ShieldBattle:
- case E_PPBoost:
- case E_Repel:
- if (!val1)
- ok = false;
- break;
- case E_StatBoost:
- case E_Acorn:
- if ((val1 < 0) || (65536 <= val1))
- ok = false;
- break;
- case E_ModifyStatBattle:
- if ((val1 < -6) || (6 < val1))
- ok = false;
- break;
- case E_Ball:
- switch (val2)
- {
- case B_Regular:
- if (256 <= (unsigned)val1)
- ok = false;
- break;
- case B_Level:
- if (pokemod->GetMaxLevel() < (unsigned)val1)
- 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 val1");
- isValid = false;
- ok = true;
- }
- switch (effect)
- {
- case E_HPCure:
- case E_Revive:
- if (R_End <= val2)
- ok = false;
- break;
- case E_CureStatus:
- if (STS_End <= val2)
- ok = false;
- break;
- case E_StatBoost:
- if ((val2 <= 0) || (65536 <= val2))
- ok = false;
- break;
- case E_ModifyStatBattle:
- if (ST_End_Battle <= val2)
- ok = false;
- break;
- case E_ShieldBattle:
- if (SP_End <= val2)
- ok = false;
- break;
- case E_TypeBoost:
- if (pokemod->GetTypeByID(val2) == UINT_MAX)
- ok = false;
- break;
- case E_PPRestore:
- if (A_End <= val2)
- ok = false;
- break;
- case E_Repel:
- if (RP_End <= val2)
- ok = false;
- break;
- case E_Escape:
- if (ES_End <= val2)
- ok = false;
- break;
- case E_TM:
- case E_HM:
- if (pokemod->GetMoveByID(val2) == UINT_MAX)
- ok = false;
- break;
- case E_Ball:
- if (B_End <= val2)
- ok = false;
- break;
- case E_Berry:
- if (B2_End <= val2)
- ok = false;
- break;
- case E_Coin:
- case E_CoinCase:
- if (val2 <= 0)
- ok = false;
- break;
- case E_Acorn:
- if (pokemod->GetItemByID(val2) == UINT_MAX)
- ok = false;
- break;
- }
- if (!ok)
- {
- pokemod->ValidationMsg("Invalid val2");
- isValid = false;
- ok = true;
- }
- switch (effect)
- {
- case E_StatBoost:
- if ((pokemod->IsSpecialSplit() ? ST_End_GSC : ST_End_RBY) <= val3)
- ok = false;
- break;
- case E_Ball:
- switch (val2)
- {
- 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 <= val3)
- ok = false;
- break;
- case B_Time:
- if (pokemod->GetTimeByID(val3) == UINT_MAX)
- ok = false;
- break;
- case B_Stat:
- if ((pokemod->IsSpecialSplit() ? ST_End_GSC : ST_End_RBY) <= val3)
- ok = false;
- break;
- case B_Type:
- if (pokemod->GetTypeByID(val3) == UINT_MAX)
- ok = false;
- break;
- }
- break;
- case E_Berry:
- switch (val2)
- {
- case B2_HPCure:
- if (REL_End <= val3)
- ok = false;
- break;
- case B2_StatusCure:
- if (STS_End <= val3)
- ok = false;
- break;
- default:
- ok = false;
- }
- break;
- }
- if (!ok)
- {
- pokemod->ValidationMsg("Invalid val3");
- isValid = false;
- }
- }
- else
- {
- pokemod->ValidationMsg("Invalid effect");
- isValid = false;
- }
+ // TODO (Ben#1#): Item Effect validation
return isValid;
}
@@ -302,10 +63,11 @@ void PokeGen::PokeMod::ItemEffect::ImportIni(Ini& ini, const unsigned _id)
ini.GetValue("effect", effect);
ini.GetValue("val1", val1);
ini.GetValue("val2", val2);
- ini.GetValue("val3", val3);
- ini.GetValue("val4-n", i, 1);
- ini.GetValue("val4-n", j, 1);
- val4.Set(i, j);
+ ini.GetValue("val3-n", i, 1);
+ ini.GetValue("val3-n", j, 1);
+ val3.Set(i, j);
+ ini.GetValue("val4", val4);
+ ini.GetValue("val5", val5);
}
void PokeGen::PokeMod::ItemEffect::ExportIni(QFile& fout, const QString& item) const
@@ -318,50 +80,16 @@ void PokeGen::PokeMod::ItemEffect::ExportIni(QFile& fout, const QString& item) c
exItemEffect.AddField("effect", effect);
exItemEffect.AddField("val1", val1);
exItemEffect.AddField("val2", val2);
- exItemEffect.AddField("val3", val3);
- exItemEffect.AddField("val4-n", val4.GetNum());
- exItemEffect.AddField("val4-d", val4.GetDenom());
+ exItemEffect.AddField("val3-n", val3.GetNum());
+ exItemEffect.AddField("val3-d", val3.GetDenom());
+ exItemEffect.AddField("val4", val4);
+ exItemEffect.AddField("val5", val5);
exItemEffect.Export(fout);
}
-bool PokeGen::PokeMod::ItemEffect::SetOverworld(const bool o)
+void PokeGen::PokeMod::ItemEffect::SetOverworld(const bool o)
{
- switch (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 (!o)
- return false;
- 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 (o)
- return false;
- }
overworld = o;
- return true;
}
void PokeGen::PokeMod::ItemEffect::SetBattle(const bool b)
@@ -378,45 +106,12 @@ bool PokeGen::PokeMod::ItemEffect::SetEffect(const unsigned e)
{
if (e < E_End)
{
- switch (e)
- {
- 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 (!overworld)
- return false;
- 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 (overworld)
- return false;
- }
effect = e;
- val1 = INT_MIN;
- val2 = UINT_MAX;
- val3 = UINT_MAX;
- val4.Set(1, 1, ((e == E_TypeBoost) || (e == E_PPBoost)) ? Frac::Over1 : Frac::Proper);
+ val1 = INT_MAX;
+ val2 = INT_MAX;
+ val3.Set(1, 1, (e == E_Ball) || (e == E_TypeBoost) || (e == E_PPBoost));
+ val4 = UINT_MAX;
+ val5 = UINT_MAX;
}
return (effect == e);
}
@@ -427,9 +122,12 @@ bool PokeGen::PokeMod::ItemEffect::SetVal1(const int v1)
{
case E_HPCure:
case E_Revive:
- if ((val4 == R_Absolute) && v1)
- val1 = v1;
- break;
+ if (val4 == R_Absolute)
+ {
+ if (v1)
+ val1 = v1;
+ break;
+ }
case E_LevelBoost:
case E_ShieldBattle:
case E_PPBoost:
@@ -452,7 +150,7 @@ bool PokeGen::PokeMod::ItemEffect::SetVal1(const int v1)
val1 = v1;
break;
case E_Ball:
- switch (val2)
+ switch (val4)
{
case B_Regular:
if ((unsigned)v1 < 256)
@@ -469,132 +167,65 @@ bool PokeGen::PokeMod::ItemEffect::SetVal1(const int v1)
break;
}
break;
+ case E_Berry:
+ // TODO (Ben#1#): Berry Effect val1
+ // Depends on val4
+ break;
}
return (val1 == v1);
}
-bool PokeGen::PokeMod::ItemEffect::SetVal2(const unsigned v2)
+bool PokeGen::PokeMod::ItemEffect::SetVal2(const int v2)
{
switch (effect)
{
- case E_HPCure:
- case E_Revive:
- if (v2 < R_End)
- val2 = v2;
- break;
- case E_CureStatus:
- if (v2 < STS_End)
- val2 = v2;
- break;
case E_StatBoost:
if ((0 < v2) && (v2 < 65536))
val2 = v2;
break;
- case E_ModifyStatBattle:
- if (v2 < ST_End_Battle)
- val2 = v2;
- break;
- case E_ShieldBattle:
- if (v2 < SP_End)
- val2 = v2;
- break;
- case E_TypeBoost:
- if (pokemod->GetTypeByID(v2) != UINT_MAX)
- val2 = v2;
- break;
- case E_PPRestore:
- if (v2 < A_End)
- val2 = v2;
- break;
- case E_Repel:
- if (v2 < RP_End)
- val2 = v2;
- break;
- case E_Escape:
- if (v2 < ES_End)
- val2 = v2;
- break;
- case E_TM:
- case E_HM:
- if (pokemod->GetMoveByID(v2) != UINT_MAX)
- val2 = v2;
- break;
case E_Ball:
- if (v2 < B_End)
- {
- val2 = v2;
- val4.SetType(Frac::Improper);
- }
- break;
- case E_Berry:
- if (v2 < B2_End)
- val2 = v2;
+ // TODO (Ben#1#): Ball Effect val2
+ // Depends on val4
break;
case E_Coin:
case E_CoinCase:
if (0 < v2)
val2 = v2;
break;
- case E_Acorn:
- if (pokemod->GetItemByID(v2) != UINT_MAX)
- val2 = v2;
- break;
}
return (val2 == v2);
}
-bool PokeGen::PokeMod::ItemEffect::SetVal3(const unsigned v3)
+bool PokeGen::PokeMod::ItemEffect::SetVal3(const unsigned n, const unsigned d)
{
switch (effect)
{
- case E_StatBoost:
- if (v3 < (pokemod->IsSpecialSplit() ? ST_End_GSC : ST_End_RBY))
- val3 = v3;
- break;
+ case E_HPCure:
+ case E_Revive:
+ case E_Flinch:
+ case E_First:
+ case E_KeepAlive:
+ case E_ShieldBattle:
+ case E_RunBattle:
+ case E_PPBoost:
+ case E_TypeBoost:
+ case E_PPRestore:
+ case E_ExpShare:
+ case E_Repel:
+ return val3.Set(n, d);
case E_Ball:
- switch (val2)
- {
- case B_Level:
- case B_Friend:
- case B_Weight:
- val3 = v3;
- break;
- case B_Area:
- if (v3 < MapWildList::End)
- val3 = v3;
- break;
- case B_Time:
- if (pokemod->GetTimeByID(v3) != UINT_MAX)
- val3 = v3;
- break;
- case B_Stat:
- if (v3 < (pokemod->IsSpecialSplit() ? ST_End_GSC : ST_End_RBY))
- val3 = v3;
- break;
- case B_Type:
- if (pokemod->GetTypeByID(v3) != UINT_MAX)
- val3 = v3;
- break;
- }
+ // TODO (Ben#1#): Ball Effect val3
+ // Depends on val4
break;
case E_Berry:
- switch (val2)
- {
- case B2_HPCure:
- if (v3 < REL_End)
- val3 = v3;
- break;
- case B2_StatusCure:
- if (v3 < STS_End)
- val3 = v3;
- break;
- }
+ // TODO (Ben#1#): Berry Effect val3
+ // Depends on val4
break;
}
- return (val3 == v3);
+ return false;
}
-bool PokeGen::PokeMod::ItemEffect::SetVal4(const unsigned n, const unsigned d)
+bool PokeGen::PokeMod::ItemEffect::SetVal3Num(const unsigned n)
{
switch (effect)
{
@@ -610,18 +241,20 @@ bool PokeGen::PokeMod::ItemEffect::SetVal4(const unsigned n, const unsigned d)
case E_PPRestore:
case E_ExpShare:
case E_Repel:
- return val4.Set(n, d);
+ return val3.SetNum(n);
case E_Ball:
- if (val2 != B_Master)
- return val4.Set(n, d);
+ // TODO (Ben#1#): Ball Effect val3
+ // Depends on val4
+ break;
case E_Berry:
- if (val2 == B2_HPCure)
- return val4.Set(n, d);
+ // TODO (Ben#1#): Berry Effect val3
+ // Depends on val4
+ break;
}
return false;
}
-bool PokeGen::PokeMod::ItemEffect::SetVal4Num(const unsigned n)
+bool PokeGen::PokeMod::ItemEffect::SetVal3Denom(const unsigned d)
{
switch (effect)
{
@@ -637,42 +270,85 @@ bool PokeGen::PokeMod::ItemEffect::SetVal4Num(const unsigned n)
case E_PPRestore:
case E_ExpShare:
case E_Repel:
- return val4.SetNum(n);
+ return val3.SetDenom(d);
case E_Ball:
- if (val2 != B_Master)
- return val4.SetNum(n);
+ // TODO (Ben#1#): Ball Effect val3
+ // Depends on val4
+ break;
case E_Berry:
- if (val2 == B2_HPCure)
- return val4.SetNum(n);
+ // TODO (Ben#1#): Berry Effect val3
+ // Depends on val4
+ break;
}
- return false;
+ return true;
}
-bool PokeGen::PokeMod::ItemEffect::SetVal4Denom(const unsigned d)
+bool PokeGen::PokeMod::ItemEffect::SetVal4(const unsigned v4)
{
switch (effect)
{
case E_HPCure:
case E_Revive:
- case E_Flinch:
- case E_First:
- case E_KeepAlive:
+ if (v4 < R_End)
+ val4 = v4;
+ break;
+ case E_CureStatus:
+ if (pokemod->GetStatusByID(v4) != UINT_MAX)
+ val4 = v4;
+ break;
+ case E_StatBoost:
+ case E_ModifyStatBattle:
+ // Stat
+ break;
case E_ShieldBattle:
- case E_RunBattle:
- case E_PPBoost:
+ // Special/Physical
+ break;
case E_TypeBoost:
+ if (pokemod->GetType(v4))
+ val4 = v4;
+ break;
case E_PPRestore:
- case E_ExpShare:
+ // All/One
+ break;
case E_Repel:
- return val4.SetDenom(d);
+ // First/Max/All
+ break;
+ case E_Escape:
+ // Anywhere/Dungeon
+ break;
+ case E_TM:
+ case E_HM:
+ if (pokemod->GetMove(v4))
+ val4 = v4;
+ break;
case E_Ball:
- if (val2 != B_Master)
- return val4.SetDenom(d);
+ // BallType
+ break;
case E_Berry:
- if (val2 == B2_HPCure)
- return val4.SetDenom(d);
+ // BerryType
+ break;
+ case E_Acorn:
+ if (pokemod->GetItem(v4))
+ val4 = v4;
+ break;
}
- return true;
+ return (val4 == v4);
+}
+
+bool PokeGen::PokeMod::ItemEffect::SetVal5(const unsigned v5)
+{
+ switch (effect)
+ {
+ case E_Ball:
+ // TODO (Ben#1#): Ball Effect val5
+ // Depends on val4
+ break;
+ case E_Berry:
+ // TODO (Ben#1#): Berry Effect val5
+ // Depends on val4
+ break;
+ }
+ return (val5 == v5);
}
bool PokeGen::PokeMod::ItemEffect::GetOverworld() const
@@ -695,32 +371,38 @@ unsigned PokeGen::PokeMod::ItemEffect::GetEffect() const
return effect;
}
+// TODO (Ben#1#): Values fetching
int PokeGen::PokeMod::ItemEffect::GetVal1() const
{
return val1;
}
-unsigned PokeGen::PokeMod::ItemEffect::GetVal2() const
+int PokeGen::PokeMod::ItemEffect::GetVal2() const
{
return val2;
}
-unsigned PokeGen::PokeMod::ItemEffect::GetVal3() const
+PokeGen::PokeMod::Frac PokeGen::PokeMod::ItemEffect::GetVal3() const
{
return val3;
}
-PokeGen::Frac PokeGen::PokeMod::ItemEffect::GetVal4() const
+unsigned PokeGen::PokeMod::ItemEffect::GetVal3Num() const
{
- return val4;
+ return val3.GetNum();
+}
+
+unsigned PokeGen::PokeMod::ItemEffect::GetVal3Denom() const
+{
+ return val3.GetDenom();
}
-unsigned PokeGen::PokeMod::ItemEffect::GetVal4Num() const
+unsigned PokeGen::PokeMod::ItemEffect::GetVal4() const
{
- return val4.GetNum();
+ return val4;
}
-unsigned PokeGen::PokeMod::ItemEffect::GetVal4Denom() const
+unsigned PokeGen::PokeMod::ItemEffect::GetVal5() const
{
- return val4.GetDenom();
+ return val5;
}