From 4385af885daf460a18e236f08509358f764b2c8c Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Fri, 26 Oct 2007 20:46:09 +0000 Subject: 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 --- pokemod/ItemEffect.cpp | 594 ++++++++++++------------------------------------- 1 file changed, 138 insertions(+), 456 deletions(-) (limited to 'pokemod/ItemEffect.cpp') 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; } -- cgit