diff options
| author | Ben Boeckel <MathStuf@gmail.com> | 2007-09-21 15:36:22 +0000 |
|---|---|---|
| committer | Ben Boeckel <MathStuf@gmail.com> | 2007-09-21 15:36:22 +0000 |
| commit | 5b55d13ead7e352ee1feaae72009e8abf5bd071a (patch) | |
| tree | 6c2838312dd7f42769280e24e8abc16b53c165cb /pokemod/ItemEffect.cpp | |
| parent | e94d9893b8753e72adb92b2c5eb203830ddf641c (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.cpp | 1268 |
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; +} |
