summaryrefslogtreecommitdiffstats
path: root/pokemod/ItemEffect.cpp
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2007-09-21 15:36:22 +0000
committerBen Boeckel <MathStuf@gmail.com>2007-09-21 15:36:22 +0000
commit5b55d13ead7e352ee1feaae72009e8abf5bd071a (patch)
tree6c2838312dd7f42769280e24e8abc16b53c165cb /pokemod/ItemEffect.cpp
parente94d9893b8753e72adb92b2c5eb203830ddf641c (diff)
[FIX] Neural Network methods complete
[FIX] Wrapped Node up into the layer [FIX] Wrapped NatureEffect into Nature [FIX] Getting around to fixing up the design of the PokéMod stuff [FIX] Creating new subclasses now returns pointer to new subclass [FIX] Simplified interfaces [FIX] Minor style issues [FIX] Renamed CoinItem to CoinListObject [FIX] Renamed MapTrainerTeam to MapTrainerPokemon [FIX] Renamed MapWildPokemon to MapWildListPokemon [FIX] Moved global enums to relevant classes [FIX] Removed general logging features [DEL] pokemod/Debug.{h, cpp} [DEL] pokemod/Path.{h, cpp} [FIX] Using QFile rather than custom Path class for checking for files [FIX] Set* methods now return a bool to let the caller know if anything actually changed (if it can fail, otherwise it is void) [ADD] Compliation without errors is required for pokemod from now on before commits git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@24 6ecfd1a5-f3ed-3746-8530-beee90d26b22
Diffstat (limited to 'pokemod/ItemEffect.cpp')
-rw-r--r--pokemod/ItemEffect.cpp1268
1 files changed, 408 insertions, 860 deletions
diff --git a/pokemod/ItemEffect.cpp b/pokemod/ItemEffect.cpp
index e1870769..dcbfc737 100644
--- a/pokemod/ItemEffect.cpp
+++ b/pokemod/ItemEffect.cpp
@@ -1,860 +1,408 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name: pokemod/ItemEffect.cpp
-// Purpose: Define an effect of an item
-// Author: Ben Boeckel
-// Modified by: Ben Boeckel
-// Created: Tue Mar 20 18:25:26 2007
-// Copyright: ©2007 Ben Boeckel and Nerdy Productions
-// Licence:
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this program. If not, see <http://www.gnu.org/licenses/>.
-/////////////////////////////////////////////////////////////////////////////
-
-#include "ItemEffect.h"
-
-PokeGen::PokeMod::ItemEffect::ItemEffect(const Pokemod *par, const unsigned _id) :
- overworld(false),
- battle(false),
- held(false),
- effect(UINT_MAX),
- val1(UINT_MAX),
- val2(UINT_MAX),
- val3(1, 1),
- val4(UINT_MAX),
- val5(UINT_MAX)
-{
- LogCtor("ItemEffect", _id);
- id = _id;
- pokemod = par;
-}
-
-PokeGen::PokeMod::ItemEffect::ItemEffect(const Pokemod *par, Ini &ini, const unsigned _id)
-{
- LogCtorIni("ItemEffect", _id);
- pokemod = par;
- ImportIni(ini, _id);
- if (id == UINT_MAX)
- LogIdError("ItemEffect");
-}
-
-PokeGen::PokeMod::ItemEffect::~ItemEffect()
-{
- LogDtor("ItemEffect", id);
-}
-
-void PokeGen::PokeMod::ItemEffect::Validate()
-{
- LogValidateStart("ItemEffect", id);
- // TODO (Validation#1#): ItemEffect Validation
-# warning "ItemEffect Validation"
- LogValidateOver("ItemEffect", id, isValid);
-}
-
-void PokeGen::PokeMod::ItemEffect::ImportIni(Ini &ini, const unsigned _id)
-{
- LogImportStart("ItemEffect");
- if (_id == UINT_MAX)
- {
- ini.GetValue("id", id);
- if (id == UINT_MAX)
- LogIdNotFound("ItemEffect");
- }
- else
- id = _id;
- unsigned i;
- unsigned j;
- ini.GetValue("overworld", overworld, false);
- ini.GetValue("battle", battle, false);
- ini.GetValue("held", held, false);
- ini.GetValue("effect", effect);
- ini.GetValue("val1", val1);
- ini.GetValue("val2", val2);
- ini.GetValue("val3-n", i, 1);
- ini.GetValue("val3-n", j, 1);
- val3.Set(i, j);
- ini.GetValue("val4", val4);
- ini.GetValue("val5", val5);
- LogImportOver("ItemEffect", id);
-}
-
-void PokeGen::PokeMod::ItemEffect::ExportIni(QFile &fout, const QString &item) const
-{
- LogExportStart("ItemEffect", id);
- Ini exItemEffect(item + " itemEffect");
- exItemEffect.AddField("id", id);
- exItemEffect.AddField("overworld", overworld);
- exItemEffect.AddField("battle", battle);
- exItemEffect.AddField("held", held);
- exItemEffect.AddField("effect", effect);
- exItemEffect.AddField("val1", val1);
- exItemEffect.AddField("val2", val2);
- exItemEffect.AddField("val3-n", val3.GetNum());
- exItemEffect.AddField("val3-d", val3.GetDenom());
- exItemEffect.AddField("val4", val4);
- exItemEffect.AddField("val5", val5);
- exItemEffect.Export(fout);
- LogExportOver("ItemEffect", id);
-}
-
-void PokeGen::PokeMod::ItemEffect::SetOverworld(const bool o)
-{
- LogSetVar("ItemEffect", id, "overworld", o);
- overworld = o;
-}
-
-void PokeGen::PokeMod::ItemEffect::SetBattle(const bool b)
-{
- LogSetVar("ItemEffect", id, "battle", b);
- battle = b;
-}
-
-void PokeGen::PokeMod::ItemEffect::SetHeld(const bool h)
-{
- LogSetVar("ItemEffect", id, "held", h);
- held = h;
-}
-
-void PokeGen::PokeMod::ItemEffect::SetEffect(const unsigned e)
-{
- LogSetVar("ItemEffect", id, "effect", e);
- if (e < IE_END)
- {
- effect = e;
- val1 = INT_MAX;
- val2 = INT_MAX;
- val3.Set(1, 1, (e == IE_BALL) || (e == IE_TYPE_BOOST) || (e == IE_PP_BOOST));
- val4 = UINT_MAX;
- val5 = UINT_MAX;
- }
-}
-
-void PokeGen::PokeMod::ItemEffect::SetEffect(const QString &e)
-{
- SetEffect(FindIn(IE_END, e, ItemEffectStr));
-}
-
-void PokeGen::PokeMod::ItemEffect::SetVal1(const int v1)
-{
- LogSetVar("ItemEffect", id, "val1", v1);
- switch (effect)
- {
- case IE_HP_CURE:
- case IE_REVIVE:
- if (val4 == REL_ABSOLUTE)
- {
- if (v1)
- val1 = v1;
- else
- LogOutOfRange("ItemEffect", id, "val1", v1, "effect", ItemEffectStr[effect]);
- break;
- }
- case IE_CURE_STATUS:
- case IE_FLINCH:
- case IE_FIRST:
- case IE_KEEP_ALIVE:
- case IE_RUN_BAT:
- case IE_TYPE_BOOST:
- case IE_PP_RESTORE:
- case IE_EXP_SHARE:
- case IE_ESCAPE:
- case IE_TM:
- case IE_HM:
- case IE_MAP:
- case IE_ITEMFINDER:
- case IE_BIKE:
- case IE_SCOPE:
- LogNoUse("ItemEffect", id, "val1", v1, "effect", ItemEffectStr[effect]);
- break;
- case IE_LEVEL_BOOST:
- case IE_SHIELD_BAT:
- case IE_PP_BOOST:
- case IE_REPEL:
- if (v1)
- val1 = v1;
- else
- LogOutOfRange("ItemEffect", id, "val1", v1, "effect", ItemEffectStr[effect]);
- break;
- case IE_STAT_BOOST:
- case IE_ACORN:
- if ((0 <= v1) && (v1 < 65536))
- val1 = v1;
- else
- LogOutOfRange("ItemEffect", id, "val1", v1, "effect", ItemEffectStr[effect]);
- break;
- case IE_MODIFY_STAT_BAT:
- if ((-6 <= v1) && (v1 <= 6))
- val1 = v1;
- else
- LogOutOfRange("ItemEffect", id, "val1", v1, "effect", "Modify Stat (Battle)");
- break;
- case IE_FISH:
- case IE_COIN:
- case IE_COIN_CASE:
- val1 = v1;
- break;
- case IE_BALL:
- switch (val4)
- {
- case BLT_REGULAR:
- if ((unsigned)v1 < 256)
- val1 = (unsigned)v1;
- else
- LogOutOfRange("ItemEffect", id, "val1", v1, "effect", "Ball");
- break;
- case BLT_LEVEL:
- if ((unsigned)v1 <= pokemod->GetMaxLevel())
- val1 = (unsigned)v1;
- else
- LogOutOfRange("ItemEffect", id, "val1", v1, "effect", "Ball");
- break;
- case BLT_BATTLE:
- case BLT_FRIEND:
- case BLT_STAT:
- val1 = v1;
- break;
- default:
- LogNoUse("ItemEffect", id, "val1", v1, "effect", ItemEffectStr[effect]);
- }
- break;
- case IE_BERRY:
- // TODO (Ben#1#): Berry Effect val1
- // Depends on val4
- break;
- default:
- LogNotSet("ItemEffect", id, "val1", v1, "effect");
- }
-}
-
-void PokeGen::PokeMod::ItemEffect::SetVal2(const int v2)
-{
- LogSetVar("ItemEffect", id, "val2", v2);
- switch (effect)
- {
- case IE_HP_CURE:
- case IE_REVIVE:
- case IE_CURE_STATUS:
- case IE_LEVEL_BOOST:
- case IE_FLINCH:
- case IE_FIRST:
- case IE_KEEP_ALIVE:
- case IE_MODIFY_STAT_BAT:
- case IE_SHIELD_BAT:
- case IE_RUN_BAT:
- case IE_PP_BOOST:
- case IE_TYPE_BOOST:
- case IE_PP_RESTORE:
- case IE_EXP_SHARE:
- case IE_FISH:
- case IE_REPEL:
- case IE_ESCAPE:
- case IE_TM:
- case IE_HM:
- case IE_MAP:
- case IE_ITEMFINDER:
- case IE_BIKE:
- case IE_SCOPE:
- case IE_BERRY:
- case IE_ACORN:
- LogNoUse("ItemEffect", id, "val2", v2, "effect", ItemEffectStr[effect]);
- break;
- case IE_STAT_BOOST:
- if ((0 < v2) && (v2 < 65536))
- val2 = v2;
- else
- LogOutOfRange("ItemEffect", id, "val2", v2, "effect", "Stat Boost");
- break;
- case IE_BALL:
- // TODO (Ben#1#): Ball Effect val2
- // Depends on val4
- break;
- case IE_COIN:
- case IE_COIN_CASE:
- if (0 < v2)
- val2 = v2;
- else
- LogOutOfRange("ItemEffect", id, "val2", v2, "effect", ItemEffectStr[effect]);
- break;
- default:
- LogNotSet("ItemEffect", id, "val2", v2, "effect");
- }
-}
-
-void PokeGen::PokeMod::ItemEffect::SetVal3(const Frac &v3)
-{
- LogSetVar("ItemEffect", id, "val3", v3.GetNum(), v3.GetDenom());
- switch (effect)
- {
- case IE_HP_CURE:
- case IE_REVIVE:
- case IE_FLINCH:
- case IE_FIRST:
- case IE_KEEP_ALIVE:
- case IE_SHIELD_BAT:
- case IE_RUN_BAT:
- case IE_PP_BOOST:
- case IE_TYPE_BOOST:
- case IE_PP_RESTORE:
- case IE_EXP_SHARE:
- case IE_REPEL:
- val3 = v3;
- break;
- case IE_CURE_STATUS:
- case IE_LEVEL_BOOST:
- case IE_STAT_BOOST:
- case IE_MODIFY_STAT_BAT:
- case IE_FISH:
- case IE_ESCAPE:
- case IE_TM:
- case IE_HM:
- case IE_MAP:
- case IE_ITEMFINDER:
- case IE_BIKE:
- case IE_SCOPE:
- case IE_COIN:
- case IE_COIN_CASE:
- case IE_ACORN:
- LogNoUse("ItemEffect", id, "val3", 0, "effect", ItemEffectStr[effect]);
- break;
- case IE_BALL:
- // TODO (Ben#1#): Ball Effect val3
- // Depends on val4
- break;
- case IE_BERRY:
- // TODO (Ben#1#): Berry Effect val3
- // Depends on val4
- break;
- default:
- LogNotSet("ItemEffect", id, "val3", 0, "effect");
- }
-}
-
-void PokeGen::PokeMod::ItemEffect::SetVal3(const unsigned n, const unsigned d)
-{
- LogSetVar("ItemEffect", id, "val3", n, d);
- switch (effect)
- {
- case IE_HP_CURE:
- case IE_REVIVE:
- case IE_FLINCH:
- case IE_FIRST:
- case IE_KEEP_ALIVE:
- case IE_SHIELD_BAT:
- case IE_RUN_BAT:
- case IE_PP_BOOST:
- case IE_TYPE_BOOST:
- case IE_PP_RESTORE:
- case IE_EXP_SHARE:
- case IE_REPEL:
- val3.Set(n, d);
- break;
- case IE_CURE_STATUS:
- case IE_LEVEL_BOOST:
- case IE_STAT_BOOST:
- case IE_MODIFY_STAT_BAT:
- case IE_FISH:
- case IE_ESCAPE:
- case IE_TM:
- case IE_HM:
- case IE_MAP:
- case IE_ITEMFINDER:
- case IE_BIKE:
- case IE_SCOPE:
- case IE_COIN:
- case IE_COIN_CASE:
- case IE_ACORN:
- LogNoUse("ItemEffect", id, "val3", 0, "effect", ItemEffectStr[effect]);
- break;
- case IE_BALL:
- // TODO (Ben#1#): Ball Effect val3
- // Depends on val4
- break;
- case IE_BERRY:
- // TODO (Ben#1#): Berry Effect val3
- // Depends on val4
- break;
- default:
- LogNotSet("ItemEffect", id, "val3", 0, "effect");
- }
-}
-
-void PokeGen::PokeMod::ItemEffect::SetVal3Num(const unsigned n)
-{
- LogSetVar("ItemEffect", id, "val3 numerator", n);
- switch (effect)
- {
- case IE_HP_CURE:
- case IE_REVIVE:
- case IE_FLINCH:
- case IE_FIRST:
- case IE_KEEP_ALIVE:
- case IE_SHIELD_BAT:
- case IE_RUN_BAT:
- case IE_PP_BOOST:
- case IE_TYPE_BOOST:
- case IE_PP_RESTORE:
- case IE_EXP_SHARE:
- case IE_REPEL:
- val3.SetNum(n);
- break;
- case IE_CURE_STATUS:
- case IE_LEVEL_BOOST:
- case IE_STAT_BOOST:
- case IE_MODIFY_STAT_BAT:
- case IE_FISH:
- case IE_ESCAPE:
- case IE_TM:
- case IE_HM:
- case IE_MAP:
- case IE_ITEMFINDER:
- case IE_BIKE:
- case IE_SCOPE:
- case IE_COIN:
- case IE_COIN_CASE:
- case IE_ACORN:
- LogNoUse("ItemEffect", id, "val3", n, "effect", ItemEffectStr[effect]);
- break;
- case IE_BALL:
- // TODO (Ben#1#): Ball Effect val3
- // Depends on val4
- break;
- case IE_BERRY:
- // TODO (Ben#1#): Berry Effect val3
- // Depends on val4
- break;
- default:
- LogNotSet("ItemEffect", id, "val3 numerator", n, "effect");
- }
-}
-
-void PokeGen::PokeMod::ItemEffect::SetVal3Denom(const unsigned d)
-{
- LogSetVar("ItemEffect", id, "val3 denominator", d);
- switch (effect)
- {
- case IE_HP_CURE:
- case IE_REVIVE:
- case IE_FLINCH:
- case IE_FIRST:
- case IE_KEEP_ALIVE:
- case IE_SHIELD_BAT:
- case IE_RUN_BAT:
- case IE_PP_BOOST:
- case IE_TYPE_BOOST:
- case IE_PP_RESTORE:
- case IE_EXP_SHARE:
- case IE_REPEL:
- val3.SetDenom(d);
- break;
- case IE_CURE_STATUS:
- case IE_LEVEL_BOOST:
- case IE_STAT_BOOST:
- case IE_MODIFY_STAT_BAT:
- case IE_FISH:
- case IE_ESCAPE:
- case IE_TM:
- case IE_HM:
- case IE_MAP:
- case IE_ITEMFINDER:
- case IE_BIKE:
- case IE_SCOPE:
- case IE_COIN:
- case IE_COIN_CASE:
- case IE_ACORN:
- LogNoUse("ItemEffect", id, "val3", d, "effect", ItemEffectStr[effect]);
- break;
- case IE_BALL:
- // TODO (Ben#1#): Ball Effect val3
- // Depends on val4
- break;
- case IE_BERRY:
- // TODO (Ben#1#): Berry Effect val3
- // Depends on val4
- break;
- default:
- LogNotSet("ItemEffect", id, "val3 denominator", d, "effect");
- }
-}
-
-void PokeGen::PokeMod::ItemEffect::SetVal4(const unsigned v4)
-{
- LogSetVar("ItemEffect", id, "val4", v4);
- switch (effect)
- {
- case IE_HP_CURE:
- case IE_REVIVE:
- if (v4 < REL_END)
- val4 = v4;
- else
- LogOutOfRange("ItemEffect", id, "val4", v4, "effect", ItemEffectStr[effect]);
- break;
- case IE_CURE_STATUS:
- if (pokemod->GetStatus(v4))
- val4 = v4;
- else
- LogOutOfRange("ItemEffect", id, "val4", v4, "effect", "Cure Status");
- break;
- case IE_LEVEL_BOOST:
- case IE_FLINCH:
- case IE_FIRST:
- case IE_KEEP_ALIVE:
- case IE_RUN_BAT:
- case IE_PP_BOOST:
- case IE_EXP_SHARE:
- case IE_FISH:
- case IE_MAP:
- case IE_ITEMFINDER:
- case IE_BIKE:
- case IE_SCOPE:
- case IE_COIN:
- case IE_COIN_CASE:
- LogNoUse("ItemEffect", id, "val4", v4, "effect", ItemEffectStr[effect]);
- break;
- case IE_STAT_BOOST:
- case IE_MODIFY_STAT_BAT:
- // Stat
- break;
- case IE_SHIELD_BAT:
- // Special/Physical
- break;
- case IE_TYPE_BOOST:
- if (pokemod->GetType(v4))
- val4 = v4;
- else
- LogOutOfRange("ItemEffect", id, "val4", v4, "effect", "Type Boost");
- break;
- case IE_PP_RESTORE:
- // All/One
- break;
- case IE_REPEL:
- // First/Max/All
- break;
- case IE_ESCAPE:
- // Anywhere/Dungeon
- break;
- case IE_TM:
- case IE_HM:
- if (pokemod->GetMove(v4))
- val4 = v4;
- else
- LogOutOfRange("ItemEffect", id, "val4", v4, "effect", "TM/HM");
- break;
- case IE_BALL:
- // BallType
- break;
- case IE_BERRY:
- // BerryType
- break;
- case IE_ACORN:
- if (pokemod->GetItem(v4))
- val4 = v4;
- else
- LogOutOfRange("ItemEffect", id, "val4", v4, "effect", "Acorn");
- break;
- default:
- LogNotSet("ItemEffect", id, "val4", v4, "effect");
- }
-}
-
-void PokeGen::PokeMod::ItemEffect::SetVal4(const QString &v4)
-{
- LogSetVar("ItemEffect", id, "val4 string", v4);
- switch (effect)
- {
- case IE_HP_CURE:
- case IE_REVIVE:
- // Percent/Abs
- break;
- case IE_CURE_STATUS:
- // Status
- break;
- case IE_LEVEL_BOOST:
- case IE_FLINCH:
- case IE_FIRST:
- case IE_KEEP_ALIVE:
- case IE_RUN_BAT:
- case IE_PP_BOOST:
- case IE_EXP_SHARE:
- case IE_FISH:
- case IE_MAP:
- case IE_ITEMFINDER:
- case IE_BIKE:
- case IE_SCOPE:
- case IE_COIN:
- case IE_COIN_CASE:
- LogNoUse("ItemEffect", id, "val4", v4, "effect", ItemEffectStr[effect]);
- break;
- case IE_STAT_BOOST:
- case IE_MODIFY_STAT_BAT:
- // Stat
- break;
- case IE_SHIELD_BAT:
- // Special/Physical
- break;
- case IE_TYPE_BOOST:
- // Type
- break;
- case IE_PP_RESTORE:
- // All/One
- break;
- case IE_REPEL:
- // First/Max/All
- break;
- case IE_ESCAPE:
- // Anywhere/Dungeon
- break;
- case IE_TM:
- case IE_HM:
- // Move
- break;
- case IE_BALL:
- // BallType
- break;
- case IE_BERRY:
- // BerryType
- break;
- case IE_ACORN:
- // Item
- break;
- default:
- LogNotSet("ItemEffect", id, "val4", v4, "effect");
- }
-}
-
-void PokeGen::PokeMod::ItemEffect::SetVal5(const unsigned v5)
-{
- LogSetVar("ItemEffect", id, "val5", v5);
- switch (effect)
- {
- case IE_HP_CURE:
- case IE_REVIVE:
- case IE_CURE_STATUS:
- case IE_LEVEL_BOOST:
- case IE_STAT_BOOST:
- case IE_FLINCH:
- case IE_FIRST:
- case IE_KEEP_ALIVE:
- case IE_MODIFY_STAT_BAT:
- case IE_SHIELD_BAT:
- case IE_RUN_BAT:
- case IE_PP_BOOST:
- case IE_TYPE_BOOST:
- case IE_PP_RESTORE:
- case IE_EXP_SHARE:
- case IE_FISH:
- case IE_REPEL:
- case IE_ESCAPE:
- case IE_TM:
- case IE_HM:
- case IE_MAP:
- case IE_ITEMFINDER:
- case IE_BIKE:
- case IE_SCOPE:
- case IE_COIN:
- case IE_COIN_CASE:
- case IE_ACORN:
- LogNoUse("ItemEffect", id, "val5", v5, "effect", ItemEffectStr[effect]);
- break;
- case IE_BALL:
- // TODO (Ben#1#): Ball Effect val5
- // Depends on val4
- break;
- case IE_BERRY:
- // TODO (Ben#1#): Berry Effect val5
- // Depends on val4
- break;
- default:
- LogNotSet("ItemEffect", id, "val5", v5, "effect");
- }
-}
-
-void PokeGen::PokeMod::ItemEffect::SetVal5(const QString &v5)
-{
- LogSetVar("ItemEffect", id, "val5", v5);
- switch (effect)
- {
- case IE_HP_CURE:
- case IE_REVIVE:
- case IE_CURE_STATUS:
- case IE_LEVEL_BOOST:
- case IE_STAT_BOOST:
- case IE_FLINCH:
- case IE_FIRST:
- case IE_KEEP_ALIVE:
- case IE_MODIFY_STAT_BAT:
- case IE_SHIELD_BAT:
- case IE_RUN_BAT:
- case IE_PP_BOOST:
- case IE_TYPE_BOOST:
- case IE_PP_RESTORE:
- case IE_EXP_SHARE:
- case IE_FISH:
- case IE_REPEL:
- case IE_ESCAPE:
- case IE_TM:
- case IE_HM:
- case IE_MAP:
- case IE_ITEMFINDER:
- case IE_BIKE:
- case IE_SCOPE:
- case IE_COIN:
- case IE_COIN_CASE:
- case IE_ACORN:
- LogNoUse("ItemEffect", id, "val5", v5, "effect", ItemEffectStr[effect]);
- break;
- case IE_BALL:
- // TODO (Ben#1#): Ball Effect val5
- // Depends on val4
- break;
- case IE_BERRY:
- // TODO (Ben#1#): Berry Effect val5
- // Depends on val4
- break;
- default:
- LogNotSet("ItemEffect", id, "val5", v5, "effect");
- }
-}
-
-bool PokeGen::PokeMod::ItemEffect::GetOverworld() const
-{
- LogFetchVar("ItemEffect", id, "overworld", overworld);
- return overworld;
-}
-
-bool PokeGen::PokeMod::ItemEffect::GetBattle() const
-{
- LogFetchVar("ItemEffect", id, "battle", battle);
- return battle;
-}
-
-bool PokeGen::PokeMod::ItemEffect::GetHeld() const
-{
- LogFetchVar("ItemEffect", id, "held", held);
- return held;
-}
-
-unsigned PokeGen::PokeMod::ItemEffect::GetEffect() const
-{
- LogFetchVar("ItemEffect", id, "effect", effect);
- return effect;
-}
-
-// TODO (Ben#1#): Values fetching
-int PokeGen::PokeMod::ItemEffect::GetVal1() const
-{
- LogFetchVar("ItemEffect", id, "val1", val1);
- return val1;
-}
-
-int PokeGen::PokeMod::ItemEffect::GetVal2() const
-{
- LogFetchVar("ItemEffect", id, "val2", val2);
- return val2;
-}
-
-PokeGen::PokeMod::Frac PokeGen::PokeMod::ItemEffect::GetVal3() const
-{
- LogFetchVar("ItemEffect", id, "val3", val3.GetNum(), val3.GetDenom());
- return val3;
-}
-
-unsigned PokeGen::PokeMod::ItemEffect::GetVal3Num() const
-{
- LogFetchVar("ItemEffect", id, "val3 numerator", val3.GetNum());
- return val3.GetNum();
-}
-
-unsigned PokeGen::PokeMod::ItemEffect::GetVal3Denom() const
-{
- LogFetchVar("ItemEffect", id, "val3 denominator", val3.GetDenom());
- return val3.GetDenom();
-}
-
-unsigned PokeGen::PokeMod::ItemEffect::GetVal4() const
-{
- LogFetchVar("ItemEffect", id, "val4", val4);
- return val4;
-}
-
-QString PokeGen::PokeMod::ItemEffect::GetVal4String() const
-{
- LogFetchVar("ItemEffect", id, "val4 string", val4);
- QString ret;
- switch (effect)
- {
- case IE_HP_CURE:
- case IE_REVIVE:
- // Percent/Abs
- break;
- case IE_CURE_STATUS:
- // Status
- break;
- case IE_STAT_BOOST:
- case IE_MODIFY_STAT_BAT:
- // Stat
- break;
- case IE_SHIELD_BAT:
- // Special/Physical
- break;
- case IE_TYPE_BOOST:
- // Type
- break;
- case IE_PP_RESTORE:
- // All/One
- break;
- case IE_REPEL:
- // First/Max/All
- break;
- case IE_ESCAPE:
- // Anywhere/Dungeon
- break;
- case IE_TM:
- case IE_HM:
- // Move
- break;
- case IE_BALL:
- // BallType
- break;
- case IE_BERRY:
- // BerryType
- break;
- case IE_ACORN:
- // Item
- break;
- }
- return ret;
-}
-
-unsigned PokeGen::PokeMod::ItemEffect::GetVal5() const
-{
- LogFetchVar("ItemEffect", id, "val5", val5);
- return val5;
-}
-
-QString PokeGen::PokeMod::ItemEffect::GetVal5String() const
-{
- LogFetchVar("ItemEffect", id, "val5 string", val5);
- QString ret;
- switch (effect)
- {
- case IE_BALL:
- // TODO (Ben#1#): Dependant
- if ((val4 == 0) && (val5 < 0))
- ret = BallEffectStr[val5];
- break;
- case IE_BERRY:
- if ((val4 == 0) && (val5 < 0))
- ret = BallEffectStr[val5];
- break;
- }
- return ret;
-}
+/////////////////////////////////////////////////////////////////////////////
+// Name: pokemod/ItemEffect.cpp
+// Purpose: Define an effect of an item
+// Author: Ben Boeckel
+// Modified by: Ben Boeckel
+// Created: Tue Mar 20 18:25:26 2007
+// Copyright: ©2007 Ben Boeckel and Nerdy Productions
+// Licence:
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program. If not, see <http://www.gnu.org/licenses/>.
+/////////////////////////////////////////////////////////////////////////////
+
+#include "ItemEffect.h"
+
+PokeGen::PokeMod::ItemEffect::ItemEffect(const Pokemod* par, const unsigned _id) :
+ Object(_id, par),
+ overworld(false),
+ battle(false),
+ held(false),
+ effect(UINT_MAX),
+ val1(UINT_MAX),
+ val2(UINT_MAX),
+ val3(1, 1),
+ val4(UINT_MAX),
+ val5(UINT_MAX)
+{
+}
+
+PokeGen::PokeMod::ItemEffect::ItemEffect(const Pokemod* par, Ini& ini, const unsigned _id) :
+ Object(_id, par)
+{
+ ImportIni(ini, _id);
+}
+
+bool PokeGen::PokeMod::ItemEffect::Validate()
+{
+ pokemod->ValidationMsg(QString("------Effect with id %1---").arg(id), Pokemod::V_Msg);
+ // TODO (Ben#1#): Item Effect validation
+ return isValid;
+}
+
+void PokeGen::PokeMod::ItemEffect::ImportIni(Ini& ini, const unsigned _id)
+{
+ if (_id == UINT_MAX)
+ ini.GetValue("id", id);
+ else
+ id = _id;
+ unsigned i;
+ unsigned j;
+ ini.GetValue("overworld", overworld, false);
+ ini.GetValue("battle", battle, false);
+ ini.GetValue("held", held, false);
+ ini.GetValue("effect", effect);
+ ini.GetValue("val1", val1);
+ ini.GetValue("val2", val2);
+ 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
+{
+ Ini exItemEffect(item + " itemEffect");
+ exItemEffect.AddField("id", id);
+ exItemEffect.AddField("overworld", overworld);
+ exItemEffect.AddField("battle", battle);
+ exItemEffect.AddField("held", held);
+ exItemEffect.AddField("effect", effect);
+ exItemEffect.AddField("val1", val1);
+ exItemEffect.AddField("val2", val2);
+ exItemEffect.AddField("val3-n", val3.GetNum());
+ exItemEffect.AddField("val3-d", val3.GetDenom());
+ exItemEffect.AddField("val4", val4);
+ exItemEffect.AddField("val5", val5);
+ exItemEffect.Export(fout);
+}
+
+void PokeGen::PokeMod::ItemEffect::SetOverworld(const bool o)
+{
+ overworld = o;
+}
+
+void PokeGen::PokeMod::ItemEffect::SetBattle(const bool b)
+{
+ battle = b;
+}
+
+void PokeGen::PokeMod::ItemEffect::SetHeld(const bool h)
+{
+ held = h;
+}
+
+bool PokeGen::PokeMod::ItemEffect::SetEffect(const unsigned e)
+{
+ if (e < E_End)
+ {
+ effect = e;
+ 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);
+}
+
+bool PokeGen::PokeMod::ItemEffect::SetVal1(const int v1)
+{
+ switch (effect)
+ {
+ case E_HPCure:
+ case E_Revive:
+ if (val4 == R_Absolute)
+ {
+ if (v1)
+ val1 = v1;
+ break;
+ }
+ case E_LevelBoost:
+ case E_ShieldBattle:
+ case E_PPBoost:
+ case E_Repel:
+ if (v1)
+ val1 = v1;
+ break;
+ case E_StatBoost:
+ case E_Acorn:
+ if ((0 <= v1) && (v1 < 65536))
+ val1 = v1;
+ break;
+ case E_ModifyStatBattle:
+ if ((-6 <= v1) && (v1 <= 6))
+ val1 = v1;
+ break;
+ case E_Fish:
+ case E_Coin:
+ case E_CoinCase:
+ val1 = v1;
+ break;
+ case E_Ball:
+ switch (val4)
+ {
+ case B_Regular:
+ if ((unsigned)v1 < 256)
+ val1 = (unsigned)v1;
+ break;
+ case B_Level:
+ if ((unsigned)v1 <= pokemod->GetMaxLevel())
+ val1 = (unsigned)v1;
+ break;
+ case B_Battle:
+ case B_Friend:
+ case B_Stat:
+ val1 = 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 int v2)
+{
+ switch (effect)
+ {
+ case E_StatBoost:
+ if ((0 < v2) && (v2 < 65536))
+ val2 = v2;
+ break;
+ case E_Ball:
+ // TODO (Ben#1#): Ball Effect val2
+ // Depends on val4
+ break;
+ case E_Coin:
+ case E_CoinCase:
+ if (0 < v2)
+ val2 = v2;
+ break;
+ }
+ return (val2 == v2);
+}
+
+bool PokeGen::PokeMod::ItemEffect::SetVal3(const unsigned n, const unsigned d)
+{
+ switch (effect)
+ {
+ 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:
+ // TODO (Ben#1#): Ball Effect val3
+ // Depends on val4
+ break;
+ case E_Berry:
+ // TODO (Ben#1#): Berry Effect val3
+ // Depends on val4
+ break;
+ }
+ return false;
+}
+
+bool PokeGen::PokeMod::ItemEffect::SetVal3Num(const unsigned n)
+{
+ switch (effect)
+ {
+ 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.SetNum(n);
+ case E_Ball:
+ // TODO (Ben#1#): Ball Effect val3
+ // Depends on val4
+ break;
+ case E_Berry:
+ // TODO (Ben#1#): Berry Effect val3
+ // Depends on val4
+ break;
+ }
+ return false;
+}
+
+bool PokeGen::PokeMod::ItemEffect::SetVal3Denom(const unsigned d)
+{
+ switch (effect)
+ {
+ 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.SetDenom(d);
+ case E_Ball:
+ // TODO (Ben#1#): Ball Effect val3
+ // Depends on val4
+ break;
+ case E_Berry:
+ // TODO (Ben#1#): Berry Effect val3
+ // Depends on val4
+ break;
+ }
+ return true;
+}
+
+bool PokeGen::PokeMod::ItemEffect::SetVal4(const unsigned v4)
+{
+ switch (effect)
+ {
+ case E_HPCure:
+ case E_Revive:
+ 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:
+ // Special/Physical
+ break;
+ case E_TypeBoost:
+ if (pokemod->GetType(v4))
+ val4 = v4;
+ break;
+ case E_PPRestore:
+ // All/One
+ break;
+ case E_Repel:
+ // 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:
+ // BallType
+ break;
+ case E_Berry:
+ // BerryType
+ break;
+ case E_Acorn:
+ if (pokemod->GetItem(v4))
+ val4 = v4;
+ break;
+ }
+ 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
+{
+ return overworld;
+}
+
+bool PokeGen::PokeMod::ItemEffect::GetBattle() const
+{
+ return battle;
+}
+
+bool PokeGen::PokeMod::ItemEffect::GetHeld() const
+{
+ return held;
+}
+
+unsigned PokeGen::PokeMod::ItemEffect::GetEffect() const
+{
+ return effect;
+}
+
+// TODO (Ben#1#): Values fetching
+int PokeGen::PokeMod::ItemEffect::GetVal1() const
+{
+ return val1;
+}
+
+int PokeGen::PokeMod::ItemEffect::GetVal2() const
+{
+ return val2;
+}
+
+PokeGen::PokeMod::Frac PokeGen::PokeMod::ItemEffect::GetVal3() const
+{
+ return val3;
+}
+
+unsigned PokeGen::PokeMod::ItemEffect::GetVal3Num() const
+{
+ return val3.GetNum();
+}
+
+unsigned PokeGen::PokeMod::ItemEffect::GetVal3Denom() const
+{
+ return val3.GetDenom();
+}
+
+unsigned PokeGen::PokeMod::ItemEffect::GetVal4() const
+{
+ return val4;
+}
+
+unsigned PokeGen::PokeMod::ItemEffect::GetVal5() const
+{
+ return val5;
+}