From 5b55d13ead7e352ee1feaae72009e8abf5bd071a Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Fri, 21 Sep 2007 15:36:22 +0000 Subject: [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 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@24 6ecfd1a5-f3ed-3746-8530-beee90d26b22 --- pokemod/ItemEffect.cpp | 1268 ++++++++++++++++-------------------------------- 1 file changed, 408 insertions(+), 860 deletions(-) (limited to 'pokemod/ItemEffect.cpp') 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 . -///////////////////////////////////////////////////////////////////////////// - -#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 . +///////////////////////////////////////////////////////////////////////////// + +#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; +} -- cgit