summaryrefslogtreecommitdiffstats
path: root/pokemod/Dialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pokemod/Dialog.cpp')
-rw-r--r--pokemod/Dialog.cpp1360
1 files changed, 580 insertions, 780 deletions
diff --git a/pokemod/Dialog.cpp b/pokemod/Dialog.cpp
index 6f7210d9..41ed2dea 100644
--- a/pokemod/Dialog.cpp
+++ b/pokemod/Dialog.cpp
@@ -6,19 +6,18 @@
// Created: Wed Feb 28 21:05:56 2007
// Copyright: ©2007 Ben Boeckel and Nerdy Productions
// Licence:
-// This program is free software; you can redistribute it and/or modify
+// 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 2 of the License, or
+// 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, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+// with this program. If not, see <http://www.gnu.org/licenses/>.
/////////////////////////////////////////////////////////////////////////////
#include "Dialog.h"
@@ -47,774 +46,575 @@ PokeGen::PokeMod::Dialog::~Dialog()
void PokeGen::PokeMod::Dialog::Validate()
{
- LogValidateStart("Dialog", id);
- if (dialog == "")
- {
- LogVarNotSet("Dialog", id, "dialog");
- isValid = false;
- }
- if (dialog.Count('%') % 2)
- {
- Log::Write(String("Dialog Validation: Command delimiter mismatch in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- else
- {
- unsigned curCmd = DC_END;
- unsigned numArgs = 0;
- for (unsigned i = 0; i < dialog.length(); ++i)
- {
- switch (dialog[i])
- {
- case '%':
- switch (curCmd)
- {
- case DC_FLIP_FLAG ... DC_EXIT:
- if (numArgs != DialogCommandNumArgs[curCmd])
- {
- Log::Write(String("Dialog Validation: Invalid number of arguments (%u) for %s (%u wanted) in %u", numArgs, DialogCommandStr[curCmd], DialogCommandNumArgs[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case DC_MENU:
- if (!(numArgs % 2))
- {
- Log::Write(String("Dialog Validation: Argument mismatch for Menu in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case DC_END:
- String curCmdStr;
- for (; (dialog[i] != '%') && (dialog[i] != '#'); ++i)
- curCmdStr.append(1, dialog[i]);
- if (((curCmd = FindIn(DC_END, curCmdStr, DialogCommandAbbrStr)) == DC_END))
- {
- if (curCmdStr != "")
- {
- Log::Write(String("Dialog Validation: Invalid command \"%s\" in %u", curCmdStr.c_str(), id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- curCmd = DC_END;
- }
- numArgs = 0;
- }
- break;
- case '#':
- if (curCmd != DC_END)
- {
- String arg;
- unsigned tempU;
- unsigned long tempUL;
- Map *map = NULL;
- for (; (dialog[i] != '%') && (dialog[i] != '#'); ++i)
- arg.append(1, dialog[i]);
- ++numArgs;
- switch (curCmd)
- {
- case DC_FLIP_FLAG:
- case DC_SET_FLAG:
- case DC_UNSET_FLAG:
- case DC_RANDOMIZE_FLAG:
- if (numArgs == 1)
- {
- if (!arg.Convert(tempUL))
- {
- Log::Write(String("Dialog Validation: Bad flag in \"%s\" on %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_TEST_FLAG:
- switch (numArgs)
- {
- case 1:
- if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Test Flag\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 2:
- if (!arg.Convert(tempUL))
- {
- Log::Write(String("Dialog Validation: Bad flag in \"Test Flag\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 3:
- case 4:
- if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"Test Flag\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_DIALOG:
- if (numArgs == 1)
- {
- if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Dialog\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- else if (numArgs == 2)
- {
- if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"Dialog\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_YES_NO:
- case DC_DELETE_MOVE:
- switch (numArgs)
- {
- case 1:
- if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 2:
- case 3:
- if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"%s\" in %u", numArgs, DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_ITEM_SHOP:
- if (numArgs == 1)
- {
- if (!(arg.Convert(tempU) ? pokemod->GetStore(tempU) : pokemod->GetStore(arg)))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Test Flag\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_GIVE_ITEM:
- case DC_TAKE_ITEM:
- case DC_CHECK_ITEM:
- switch (numArgs)
- {
- case 1:
- if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 2:
- if (!(arg.Convert(tempU) ? pokemod->GetItem(tempU) : pokemod->GetItem(arg)))
- {
- Log::Write(String("Dialog Validation: Invalid argument #2 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 3:
- case 4:
- if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"%s\" in %u", numArgs, DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_COIN_LIST:
- if (numArgs == 1)
- {
- if (!(arg.Convert(tempU) ? pokemod->GetCoinList(tempU) : pokemod->GetCoinList(arg)))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Coin List\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_TEACH_MOVE:
- switch (numArgs)
- {
- case 1:
- if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Teach Move\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 2:
- if (!(arg.Convert(tempU) ? pokemod->GetMove(tempU) : pokemod->GetMove(arg)))
- {
- Log::Write(String("Dialog Validation: Invalid argument #2 in \"Teach Move\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 3:
- case 4:
- case 5:
- if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"Teach Move\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_CHECK_MOVE:
- switch (numArgs)
- {
- case 1:
- if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Check Move\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 2:
- if ((arg != "Lead") && (arg != "All") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #2 in \"Check Move\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 3:
- if (!(arg.Convert(tempU) ? pokemod->GetMove(tempU) : pokemod->GetMove(arg)))
- {
- Log::Write(String("Dialog Validation: Invalid argument #3 in \"Check Move\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 4:
- case 5:
- if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"Check Move\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_GIVE_POKEMON:
- switch (numArgs)
- {
- case 1:
- if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Give Pokémon\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 2:
- if (!(arg.Convert(tempU) ? pokemod->GetPokemon(tempU) : pokemod->GetPokemon(arg)))
- {
- Log::Write(String("Dialog Validation: Invalid argument #3 in \"Give Pokémon\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 3:
- if ((arg != "false") && (arg != "true") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #3 in \"Give Pokémon\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 4:
- if (arg.Convert(tempUL))
- {
- if (pokemod->GetMaxLevel() < tempUL)
- {
- Log::Write(String("Dialog Validation: Higher level than allowed in \"Give Pokémon\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- else
- {
- Log::Write(String("Dialog Validation: Invalid argument #4 in \"Give Pokémon\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 5:
- if (!arg.Convert(tempUL))
- {
- Log::Write(String("Dialog Validation: Invalid argument #5 in \"Give Pokémon\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 6:
- case 7:
- if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"Give Pokémon\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_TAKE_POKEMON:
- case DC_VIEW_POKEMON:
- case DC_CHECK_SPECIES:
- switch (numArgs)
- {
- case 1:
- if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 2:
- if (!(arg.Convert(tempU) ? pokemod->GetPokemon(tempU) : pokemod->GetPokemon(arg)))
- {
- Log::Write(String("Dialog Validation: Invalid argument #2 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 3:
- case 4:
- if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"%s\" in %u", numArgs, DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_SHOW_POKEMON:
- if (numArgs == 1)
- {
- if (!(arg.Convert(tempU) ? pokemod->GetPokemon(tempU) : pokemod->GetPokemon(arg)))
- {
- Log::Write(String("Dialog Validation: Invalid argument #2 in \"Show Pokémon\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_GIVE_MONEY:
- if (numArgs == 1)
- {
- if (arg.Convert(tempUL))
- {
- if (pokemod->GetMaxMoney() < tempUL)
- {
- Log::Write(String("Dialog Validation: More money given than can be held in \"Give Money\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- else
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Give Money\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_TAKE_MONEY:
- switch (numArgs)
- {
- case 1:
- if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Take Money\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 2:
- if (arg.Convert(tempUL))
- {
- if (pokemod->GetMaxMoney() < tempUL)
- {
- Log::Write(String("Dialog Validation: More money taken than can be held in \"Take Money\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- else
- {
- Log::Write(String("Dialog Validation: Invalid argument #2 in \"Take Money\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 3:
- case 4:
- if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"Take Money\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_MOVE_EFFECT:
- case DC_CHECK_DIRECTION:
- switch (numArgs)
- {
- case 1:
- if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 2:
- if (!(map = (arg.Convert(tempU) ? (Map *)pokemod->GetMap(tempU) : (Map *)pokemod->GetMap(arg))))
- {
- Log::Write(String("Dialog Validation: Invalid argument #2 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 3:
- if (map)
- {
- if (!(arg.Convert(tempU) ? map->GetMapEffect(tempU) : map->GetMapEffect(arg)))
- {
- Log::Write(String("Dialog Validation: Invalid argument #3 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- else if ((arg != "Player") && (arg != "-1"))
- Log::Write(String("Dialog Validation: Unable to validate argument #3 in \"%s\" in %u", id), PM_DEBUG_ERROR);
- break;
- case 4:
- if ((arg != "Up") && (arg != "Down") && (arg != "Left") && (arg != "Right") && ((arg != "Random") || (curCmd == DC_CHECK_DIRECTION)) && (arg != "0") && (arg != "1") && (arg != "2") && (arg != "3") && ((arg != "4") || (curCmd == DC_CHECK_DIRECTION)))
- {
- Log::Write(String("Dialog Validation: Invalid argument #4 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 5:
- case 6:
- if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"%s\" in %u", numArgs, DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_TURN_EFFECT:
- switch (numArgs)
- {
- case 1:
- if (!(map = (arg.Convert(tempU) ? (Map *)pokemod->GetMap(tempU) : (Map *)pokemod->GetMap(arg))))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Turn Effect\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 2:
- if (map)
- {
- if (!(arg.Convert(tempU) ? map->GetMapEffect(tempU) : map->GetMapEffect(arg)))
- {
- Log::Write(String("Dialog Validation: Invalid argument #2 in \"Turn Effect\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- else if ((arg != "Player") && (arg != "-1"))
- Log::Write(String("Dialog Validation: Unable to validate argument #2 in \"Turn Effect\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- break;
- case 4:
- if ((arg != "Up") && (arg != "Down") && (arg != "Left") && (arg != "Right") && (arg != "Random") && (arg != "0") && (arg != "1") && (arg != "2") && (arg != "3") && (arg != "4"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #3 in \"Turn Effect\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_CHECK_ROSTER:
- case DC_CHECK_LEVELS:
- case DC_CHECK_MONEY:
- switch (numArgs)
- {
- case 1:
- if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 2:
- if ((arg != "<") && (arg != ">") && (arg != "="))
- {
- Log::Write(String("Dialog Validation: Invalid argument #2 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 3:
- if (arg.Convert(tempUL))
- {
- if (((curCmd == DC_CHECK_ROSTER) ? pokemod->GetMaxParty() : ((curCmd == DC_CHECK_LEVELS) ? pokemod->GetMaxLevel() : pokemod->GetMaxMoney())) < tempUL)
- {
- Log::Write(String("Dialog Validation: More %s than can be carried in \"%s\" in %u", (curCmd == DC_CHECK_ROSTER) ? "party members" : ((curCmd == DC_CHECK_LEVELS) ? "level" : "money"), DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- else
- {
- Log::Write(String("Dialog Validation: Invalid argument #3 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 4:
- case 5:
- if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"%s\" in %u", numArgs, DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_CHECK_HELD_ITEMS:
- switch (numArgs)
- {
- case 1:
- if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Check Held Items\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 2:
- case 3:
- case 4:
- if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"Check Held Items\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_TRADE:
- switch (numArgs)
- {
- case 1:
- if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Trade\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 2:
- case 3:
- if (!(arg.Convert(tempU) ? pokemod->GetPokemon(tempU) : pokemod->GetPokemon(arg)))
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"Trade\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- case 4:
- if (!arg.Convert(tempUL))
- {
- Log::Write(String("Dialog Validation: Invalid argument #4 in \"Trade\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 5:
- case 6:
- if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"Trade\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_DAYCARE:
- if (numArgs == 1)
- {
- if (!arg.Convert(tempUL))
- {
- Log::Write(String("Dialog Validation: Invalid argument #4 in \"Daycare\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_BATTLE:
- if (numArgs == 1)
- {
- if (!(map = (arg.Convert(tempU) ? (Map *)pokemod->GetMap(tempU) : (Map *)pokemod->GetMap(arg))))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Battle\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- else if (numArgs == 2)
- {
- if (map)
- {
- if (!(arg.Convert(tempU) ? map->GetMapTrainer(tempU) : map->GetMapTrainer(arg)))
- {
- Log::Write(String("Dialog Validation: Invalid argument #2 in \"Battle\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- else
- Log::Write(String("Dialog Validation: Unable to validate argument #2 in \"Battle\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- }
- break;
- case DC_BADGE:
- if (numArgs == 1)
- {
- if (!(arg.Convert(tempU) ? pokemod->GetBadge(tempU) : pokemod->GetBadge(arg)))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Badge\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_WARP:
- if (numArgs == 1)
- {
- if (!(map = (arg.Convert(tempU) ? (Map *)pokemod->GetMap(tempU) : (Map *)pokemod->GetMap(arg))))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Warp\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- else if (numArgs == 2)
- {
- if (map)
- {
- if (!(arg.Convert(tempU) ? map->GetMapWarp(tempU) : map->GetMapWarp(arg)))
- {
- Log::Write(String("Dialog Validation: Invalid argument #2 in \"Warp\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- else
- Log::Write(String("Dialog Validation: Unable to validate argument #2 in \"Warp\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- }
- break;
- case DC_NAME:
- case DC_MAP_SIGN:
- if (numArgs == 1)
- {
- if (arg == "")
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_MUSIC:
- case DC_SOUND_EFFECT:
- if (numArgs == 1)
- {
- if (!Path(pokemod->GetPath() + "sound/" + arg).DoesExist())
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_TIMER:
- switch (numArgs)
- {
- case 1:
- if ((arg != "Time") && (arg != "Step") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Timer\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 2:
- if (!arg.Convert(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #2 in \"Timer\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 3:
- if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #3 in \"Timer\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_WILD_SCOPE:
- if (numArgs == 1)
- {
- if (!arg.Convert(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Wild Scope\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_SAFARI:
- switch (numArgs)
- {
- case 1:
- if (const Item *item = (arg.Convert(tempU) ? pokemod->GetItem(tempU) : pokemod->GetItem(arg)))
- {
- unsigned i = 0;
- unsigned j = 0;
- bool temp = false;
- while ((i < item->GetItemEffectCount()) || !temp)
- {
- if (const ItemEffect *e = item->GetItemEffect(j++))
- {
- ++i;
- if (e->GetEffect() == IE_BALL)
- temp = true;
- }
- }
- if (!temp)
- {
- Log::Write(String("Dialog Validation: Item in argument #1 in \"Safari\" in %u isn\'t a PokéBall", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- else
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Safari\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 2:
- if (!arg.Convert(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #2 in \"Safari\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- break;
- case 3:
- if (!arg.Convert(tempU) || (pokemod->GetMaxParty() < tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #3 in \"Safari\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- break;
- case DC_MENU:
- if (numArgs == 1)
- {
- if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
- {
- Log::Write(String("Dialog Validation: Invalid argument #1 in \"Menu\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- else if (numArgs % 2)
- {
- if (arg.Convert(tempU))
- {
- if (!pokemod->GetDialog(tempU))
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"Menu\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- else
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"Menu\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- else if (arg == "")
- {
- Log::Write(String("Dialog Validation: Invalid argument #%u in \"Menu\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
- isValid = false;
- }
- }
- }
- }
- }
+ LogValidateStart("Dialog", id);
+ if (dialog == "")
+ {
+ LogVarNotSet("Dialog", id, "dialog");
+ isValid = false;
+ }
+ if (dialog.count('%') % 2)
+ {
+ Log::Write(QString("Dialog Validation: Command delimiter mismatch in %1").arg(id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
+ isValid = false;
+ }
+ else
+ {
+ unsigned curCmd = DC_END;
+ unsigned numArgs = 0;
+ for (long i = 0; i < dialog.length(); ++i)
+ {
+ switch (dialog.at(i).toAscii())
+ {
+ case '%':
+ switch (curCmd)
+ {
+ case DC_FLIP_FLAG ... DC_EXIT:
+ if (numArgs != DialogCommandNumArgs[curCmd])
+ {
+ Log::Write(QString("Dialog Validation: Invalid number of arguments (%1) for %2 (%3 wanted) in %4").arg(numArgs).arg(DialogCommandStr[curCmd]).arg(DialogCommandNumArgs[curCmd]).arg(id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
+ isValid = false;
+ }
+ break;
+ case DC_MENU:
+ if (!(numArgs % 2))
+ {
+ Log::Write(QString("Dialog Validation: Argument mismatch for Menu in %1").arg(id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
+ isValid = false;
+ }
+ break;
+ case DC_END:
+ QString curCmdStr;
+ for (; (dialog.at(i) != '%') && (dialog.at(i) != '#'); ++i)
+ curCmdStr += dialog.at(i);
+ if (((curCmd = FindIn(DC_END, curCmdStr, DialogCommandAbbrStr)) == DC_END))
+ {
+ if (curCmdStr != "")
+ {
+ Log::Write(QString("Dialog Validation: Invalid command \"%1\" in %2").arg(curCmdStr).arg(id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
+ isValid = false;
+ }
+ curCmd = DC_END;
+ }
+ numArgs = 0;
+ }
+ break;
+ case '#':
+ if (curCmd != DC_END)
+ {
+ QString arg;
+ for (; (dialog.at(i) != '%') && (dialog.at(i) != '#'); ++i)
+ arg += dialog.at(i);
+ bool okU;
+ bool okUL;
+ unsigned tempU = arg.toUInt(&okU);
+ unsigned long tempUL = arg.toULong(&okUL);
+ unsigned invError = 0;
+ Map *map = NULL;
+ ++numArgs;
+ switch (curCmd)
+ {
+ case DC_FLIP_FLAG:
+ case DC_SET_FLAG:
+ case DC_UNSET_FLAG:
+ case DC_RANDOMIZE_FLAG:
+ if (numArgs == 1)
+ {
+ if (!okUL)
+ {
+ Log::Write(QString("Dialog Validation: Bad flag in \"%1\" on %2").arg(DialogCommandStr[curCmd]).arg(id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
+ isValid = false;
+ }
+ }
+ break;
+ case DC_TEST_FLAG:
+ switch (numArgs)
+ {
+ case 1:
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
+ invError = 1;
+ break;
+ case 2:
+ if (!okUL)
+ {
+ Log::Write(QString("Dialog Validation: Bad flag in \"Test Flag\" in %1").arg(id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
+ isValid = false;
+ }
+ break;
+ case 3:
+ case 4:
+ if (!okU || !pokemod->GetDialog(tempU))
+ invError = numArgs;
+ }
+ break;
+ case DC_DIALOG:
+ if (numArgs == 1)
+ {
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
+ invError = 1;
+ }
+ else if (numArgs == 2)
+ {
+ if (!okU || !pokemod->GetDialog(tempU))
+ invError = 2;
+ }
+ break;
+ case DC_YES_NO:
+ case DC_DELETE_MOVE:
+ switch (numArgs)
+ {
+ case 1:
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
+ invError = 1;
+ break;
+ case 2:
+ case 3:
+ if (!okU || !pokemod->GetDialog(tempU))
+ invError = numArgs;
+ }
+ break;
+ case DC_ITEM_SHOP:
+ if (numArgs == 1)
+ {
+ if (!(okU ? pokemod->GetStore(tempU) : pokemod->GetStore(arg)))
+ invError = 1;
+ }
+ break;
+ case DC_GIVE_ITEM:
+ case DC_TAKE_ITEM:
+ case DC_CHECK_ITEM:
+ switch (numArgs)
+ {
+ case 1:
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
+ invError = 1;
+ break;
+ case 2:
+ if (!(okU ? pokemod->GetItem(tempU) : pokemod->GetItem(arg)))
+ invError = 2;
+ break;
+ case 3:
+ case 4:
+ if (!okU || !pokemod->GetDialog(tempU))
+ invError = numArgs;
+ }
+ break;
+ case DC_COIN_LIST:
+ if (numArgs == 1)
+ {
+ if (!(okU ? pokemod->GetCoinList(tempU) : pokemod->GetCoinList(arg)))
+ invError = 1;
+ }
+ break;
+ case DC_TEACH_MOVE:
+ switch (numArgs)
+ {
+ case 1:
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
+ invError = 1;
+ break;
+ case 2:
+ if (!(okU ? pokemod->GetMove(tempU) : pokemod->GetMove(arg)))
+ invError = 2;
+ break;
+ case 3:
+ case 4:
+ case 5:
+ if (!okU || !pokemod->GetDialog(tempU))
+ invError = numArgs;
+ }
+ break;
+ case DC_CHECK_MOVE:
+ switch (numArgs)
+ {
+ case 1:
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
+ invError = 1;
+ break;
+ case 2:
+ if ((arg != "Lead") && (arg != "All") && (arg != "0") && (arg != "1"))
+ invError = 2;
+ break;
+ case 3:
+ if (!(okU ? pokemod->GetMove(tempU) : pokemod->GetMove(arg)))
+ invError = 3;
+ break;
+ case 4:
+ case 5:
+ if (!okU || !pokemod->GetDialog(tempU))
+ invError = numArgs;
+ }
+ break;
+ case DC_GIVE_POKEMON:
+ switch (numArgs)
+ {
+ case 1:
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
+ invError = 1;
+ break;
+ case 2:
+ if (!(okU ? pokemod->GetPokemon(tempU) : pokemod->GetPokemon(arg)))
+ invError = 2;
+ break;
+ case 3:
+ if ((arg != "false") && (arg != "true") && (arg != "0") && (arg != "1"))
+ invError = 3;
+ break;
+ case 4:
+ if (okUL)
+ {
+ if (pokemod->GetMaxLevel() < tempUL)
+ {
+ Log::Write(QString("Dialog Validation: Higher level than allowed in \"Give Pok�mon\" in %1").arg(id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
+ isValid = false;
+ }
+ }
+ else
+ invError = 4;
+ break;
+ case 5:
+ if (!okUL)
+ invError = 5;
+ break;
+ case 6:
+ case 7:
+ if (!okU || !pokemod->GetDialog(tempU))
+ invError = numArgs;
+ }
+ break;
+ case DC_TAKE_POKEMON:
+ case DC_VIEW_POKEMON:
+ case DC_CHECK_SPECIES:
+ switch (numArgs)
+ {
+ case 1:
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
+ invError = 1;
+ break;
+ case 2:
+ if (!(okU ? pokemod->GetPokemon(tempU) : pokemod->GetPokemon(arg)))
+ invError = 2;
+ break;
+ case 3:
+ case 4:
+ if (!okU || !pokemod->GetDialog(tempU))
+ invError = numArgs;
+ }
+ break;
+ case DC_SHOW_POKEMON:
+ if (numArgs == 1)
+ {
+ if (!(okU ? pokemod->GetPokemon(tempU) : pokemod->GetPokemon(arg)))
+ invError = 1;
+ }
+ break;
+ case DC_GIVE_MONEY:
+ if (numArgs == 1)
+ {
+ if (okUL)
+ {
+ if (pokemod->GetMaxMoney() < tempUL)
+ {
+ Log::Write(QString("Dialog Validation: More money given than can be held in \"Give Money\" in %1").arg(id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
+ isValid = false;
+ }
+ }
+ else
+ invError = 1;
+ }
+ break;
+ case DC_TAKE_MONEY:
+ switch (numArgs)
+ {
+ case 1:
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
+ invError = 1;
+ break;
+ case 2:
+ if (okUL)
+ {
+ if (pokemod->GetMaxMoney() < tempUL)
+ {
+ Log::Write(QString("Dialog Validation: More money taken than can be held in \"Take Money\" in %1").arg(id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
+ isValid = false;
+ }
+ }
+ else
+ invError = 2;
+ break;
+ case 3:
+ case 4:
+ if (!okU || !pokemod->GetDialog(tempU))
+ invError = numArgs;
+ }
+ break;
+ case DC_MOVE_EFFECT:
+ case DC_CHECK_DIRECTION:
+ switch (numArgs)
+ {
+ case 1:
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
+ invError = 1;
+ break;
+ case 2:
+ if (!(map = (okU ? (Map *)pokemod->GetMap(tempU) : (Map *)pokemod->GetMap(arg))))
+ invError = 2;
+ break;
+ case 3:
+ if (map)
+ {
+ if (!(okU ? map->GetMapEffect(tempU) : map->GetMapEffect(arg)))
+ invError = 3;
+ }
+ else if ((arg != "Player") && (arg != "-1"))
+ Log::Write(QString("Dialog Validation: Unable to validate argument #3 in \"%1\" in %2").arg(DialogCommandStr[curCmd]).arg(id), PM_DEBUG_ERROR);
+ break;
+ case 4:
+ if ((arg != "Up") && (arg != "Down") && (arg != "Left") && (arg != "Right") && ((arg != "Random") || (curCmd == DC_CHECK_DIRECTION)) && (arg != "0") && (arg != "1") && (arg != "2") && (arg != "3") && ((arg != "4") || (curCmd == DC_CHECK_DIRECTION)))
+ invError = 4;
+ break;
+ case 5:
+ case 6:
+ if (!okU || !pokemod->GetDialog(tempU))
+ invError = numArgs;
+ }
+ break;
+ case DC_TURN_EFFECT:
+ switch (numArgs)
+ {
+ case 1:
+ if (!(map = (okU ? (Map *)pokemod->GetMap(tempU) : (Map *)pokemod->GetMap(arg))))
+ invError = 1;
+ break;
+ case 2:
+ if (map)
+ {
+ if (!(okU ? map->GetMapEffect(tempU) : map->GetMapEffect(arg)))
+ invError = 2;
+ }
+ else if ((arg != "Player") && (arg != "-1"))
+ Log::Write(QString("Dialog Validation: Unable to validate argument #2 in \"Turn Effect\" in %1").arg(id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
+ break;
+ case 3:
+ if ((arg != "Up") && (arg != "Down") && (arg != "Left") && (arg != "Right") && (arg != "Random") && (arg != "0") && (arg != "1") && (arg != "2") && (arg != "3") && (arg != "4"))
+ invError = 3;
+ }
+ break;
+ case DC_CHECK_ROSTER:
+ case DC_CHECK_LEVELS:
+ case DC_CHECK_MONEY:
+ switch (numArgs)
+ {
+ case 1:
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
+ invError = 1;
+ break;
+ case 2:
+ if ((arg != "<") && (arg != ">") && (arg != "="))
+ invError = 2;
+ break;
+ case 3:
+ if (okUL)
+ {
+ if (((curCmd == DC_CHECK_ROSTER) ? pokemod->GetMaxParty() : ((curCmd == DC_CHECK_LEVELS) ? pokemod->GetMaxLevel() : pokemod->GetMaxMoney())) < tempUL)
+ {
+ Log::Write(QString("Dialog Validation: More %1 than can be carried in \"%2\" in %3").arg((curCmd == DC_CHECK_ROSTER) ? "party members" : ((curCmd == DC_CHECK_LEVELS) ? "level" : "money")).arg(DialogCommandStr[curCmd]).arg(id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
+ isValid = false;
+ }
+ }
+ else
+ invError = 3;
+ break;
+ case 4:
+ case 5:
+ if (!okU || !pokemod->GetDialog(tempU))
+ invError = numArgs;
+ }
+ break;
+ case DC_CHECK_HELD_ITEMS:
+ switch (numArgs)
+ {
+ case 1:
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
+ invError = 1;
+ break;
+ case 2:
+ case 3:
+ case 4:
+ if (!okU || !pokemod->GetDialog(tempU))
+ invError = numArgs;
+ }
+ break;
+ case DC_TRADE:
+ switch (numArgs)
+ {
+ case 1:
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
+ invError = 1;
+ break;
+ case 2:
+ case 3:
+ if (!(okU ? pokemod->GetPokemon(tempU) : pokemod->GetPokemon(arg)))
+ invError = numArgs;
+ case 4:
+ if (!okUL)
+ invError = 4;
+ break;
+ case 5:
+ case 6:
+ if (!okU || !pokemod->GetDialog(tempU))
+ invError = numArgs;
+ }
+ break;
+ case DC_DAYCARE:
+ if (numArgs == 1)
+ {
+ if (!okUL)
+ invError = 1;
+ }
+ break;
+ case DC_BATTLE:
+ if (numArgs == 1)
+ {
+ if (!(map = (okU ? (Map *)pokemod->GetMap(tempU) : (Map *)pokemod->GetMap(arg))))
+ invError = 1;
+ }
+ else if (numArgs == 2)
+ {
+ if (map)
+ {
+ if (!(okU ? map->GetMapTrainer(tempU) : map->GetMapTrainer(arg)))
+ invError = 2;
+ }
+ else
+ Log::Write(QString("Dialog Validation: Unable to validate argument #2 in \"Battle\" in %1").arg(id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
+ }
+ break;
+ case DC_BADGE:
+ if (numArgs == 1)
+ {
+ if (!(okU ? pokemod->GetBadge(tempU) : pokemod->GetBadge(arg)))
+ invError = 1;
+ }
+ break;
+ case DC_WARP:
+ if (numArgs == 1)
+ {
+ if (!(map = (okU ? (Map *)pokemod->GetMap(tempU) : (Map *)pokemod->GetMap(arg))))
+ invError = 1;
+ }
+ else if (numArgs == 2)
+ {
+ if (map)
+ {
+ if (!(okU ? map->GetMapWarp(tempU) : map->GetMapWarp(arg)))
+ invError = 2;
+ }
+ else
+ Log::Write(QString("Dialog Validation: Unable to validate argument #2 in \"Warp\" in %1").arg(id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
+ }
+ break;
+ case DC_NAME:
+ case DC_MAP_SIGN:
+ if (numArgs == 1)
+ {
+ if (arg == "")
+ invError = 1;
+ }
+ break;
+ case DC_MUSIC:
+ case DC_SOUND_EFFECT:
+ if (numArgs == 1)
+ {
+ if (!Path(pokemod->GetPath() + "sound/" + arg).DoesExist())
+ invError = 1;
+ }
+ break;
+ case DC_TIMER:
+ switch (numArgs)
+ {
+ case 1:
+ if ((arg != "Time") && (arg != "Step") && (arg != "0") && (arg != "1"))
+ invError = 1;
+ break;
+ case 2:
+ if (!okU)
+ invError = 2;
+ break;
+ case 3:
+ if (!okU || !pokemod->GetDialog(tempU))
+ invError = 3;
+ }
+ break;
+ case DC_WILD_SCOPE:
+ if (numArgs == 1)
+ {
+ if (!okU)
+ invError = 1;
+ }
+ break;
+ case DC_SAFARI:
+ switch (numArgs)
+ {
+ case 1:
+ if (const Item *item = (okU ? pokemod->GetItem(tempU) : pokemod->GetItem(arg)))
+ {
+ unsigned i = 0;
+ unsigned j = 0;
+ bool temp = false;
+ while ((i < item->GetItemEffectCount()) || !temp)
+ {
+ if (const ItemEffect *e = item->GetItemEffect(j++))
+ {
+ ++i;
+ if (e->GetEffect() == IE_BALL)
+ temp = true;
+ }
+ }
+ if (!temp)
+ {
+ Log::Write(QString("Dialog Validation: Item in argument #1 in \"Safari\" in %1 isn\'t a Pok�Ball").arg(id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
+ isValid = false;
+ }
+ }
+ else
+ invError = 1;
+ break;
+ case 2:
+ if (!okU)
+ invError = 2;
+ break;
+ case 3:
+ if (!okU || (pokemod->GetMaxParty() < tempU))
+ invError = 3;
+ }
+ break;
+ case DC_MENU:
+ if (numArgs == 1)
+ {
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
+ invError = 1;
+ }
+ else if (numArgs % 2)
+ {
+ if (okU)
+ {
+ if (!pokemod->GetDialog(tempU))
+ invError = numArgs;
+ }
+ else
+ invError = numArgs;
+ }
+ else if (arg == "")
+ invError = numArgs;
+ }
+ if (invError)
+ {
+ Log::Write(QString("Dialog Validation: Invalid argument %1 in \"%2\" in %3").arg(invError).arg(DialogCommandStr[curCmd]).arg(id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
+ isValid = false;
+ }
+ }
+ }
+ }
}
LogValidateOver("Dialog", id, isValid);
}
@@ -834,7 +634,7 @@ void PokeGen::PokeMod::Dialog::ImportIni(Ini &ini, const unsigned _id)
LogImportOver("Dialog", id);
}
-void PokeGen::PokeMod::Dialog::ExportIni(std::ofstream &fout) const
+void PokeGen::PokeMod::Dialog::ExportIni(QFile &fout) const
{
LogExportStart("Dialog", id);
Ini exDialog("dialog");
@@ -844,24 +644,24 @@ void PokeGen::PokeMod::Dialog::ExportIni(std::ofstream &fout) const
LogExportOver("Dialog", id);
}
-void PokeGen::PokeMod::Dialog::SetDialog(const String &d)
+void PokeGen::PokeMod::Dialog::SetDialog(const QString &d)
{
LogSetVar("Dialog", id, "dialog", d);
dialog = d;
}
-PokeGen::PokeMod::String PokeGen::PokeMod::Dialog::GetDialog() const
+QString PokeGen::PokeMod::Dialog::GetDialog() const
{
LogFetchVar("Dialog", id, "dialog", dialog);
return dialog;
}
-void PokeGen::PokeMod::Dialog::InsertDialogCommand(const String &cmd, const unsigned pos)
+void PokeGen::PokeMod::Dialog::InsertDialogCommand(const QString &cmd, const long pos)
{
- Log::Write(String("Dialog: Inserting dialog command %s into %u at %u", cmd.c_str(), id, pos), PM_DEBUG_INFO);
+ Log::Write(QString("Dialog: Inserting dialog command %1 into %2 at %3").arg(cmd).arg(id).arg(pos), PM_DEBUG_INFO);
if (dialog.length() < pos)
{
- Log::Write(String("Dialog: Position out-of-range in %u", id), PM_DEBUG_ERROR);
+ Log::Write(QString("Dialog: Position out-of-range in %1").arg(id), PM_DEBUG_ERROR);
return;
}
dialog.insert(pos, cmd);