summaryrefslogtreecommitdiffstats
path: root/pokemod/Dialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pokemod/Dialog.cpp')
-rw-r--r--pokemod/Dialog.cpp563
1 files changed, 394 insertions, 169 deletions
diff --git a/pokemod/Dialog.cpp b/pokemod/Dialog.cpp
index 53e3afc0..6f7210d9 100644
--- a/pokemod/Dialog.cpp
+++ b/pokemod/Dialog.cpp
@@ -45,11 +45,7 @@ PokeGen::PokeMod::Dialog::~Dialog()
LogDtor("Dialog", id);
}
-#ifdef PG_DEBUG_WINDOW
-void PokeGen::PokeMod::Dialog::Validate(const wxListBox &output)
-#else
void PokeGen::PokeMod::Dialog::Validate()
-#endif
{
LogValidateStart("Dialog", id);
if (dialog == "")
@@ -59,7 +55,7 @@ void PokeGen::PokeMod::Dialog::Validate()
}
if (dialog.Count('%') % 2)
{
- Log(String("Dialog: Command delimiter mismatch in %u", id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Command delimiter mismatch in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
else
@@ -76,14 +72,14 @@ void PokeGen::PokeMod::Dialog::Validate()
case DC_FLIP_FLAG ... DC_EXIT:
if (numArgs != DialogCommandNumArgs[curCmd])
{
- Log(String("Dialog: Invalid number of arguments (%u) for %s (%u wanted) in %u", numArgs, DialogCommandStr[curCmd], DialogCommandNumArgs[curCmd], id), PM_DEBUG_ERROR);
+ 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(String("Dialog: Argument mismatch for Menu in %u", id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Argument mismatch for Menu in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
break;
@@ -95,13 +91,14 @@ void PokeGen::PokeMod::Dialog::Validate()
{
if (curCmdStr != "")
{
- Log(String("Dialog: Invalid command \"%s\" in %u", curCmdStr.c_str(), id), PM_DEBUG_ERROR);
+ 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)
{
@@ -112,7 +109,6 @@ void PokeGen::PokeMod::Dialog::Validate()
for (; (dialog[i] != '%') && (dialog[i] != '#'); ++i)
arg.append(1, dialog[i]);
++numArgs;
- // TODO (Ben#1#): Argument parsing checks
switch (curCmd)
{
case DC_FLIP_FLAG:
@@ -123,73 +119,53 @@ void PokeGen::PokeMod::Dialog::Validate()
{
if (!arg.Convert(tempUL))
{
- Log(String("Dialog: Bad flag in \"%s\" on %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Bad flag in \"%s\" on %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
}
- else
- {
- Log(String("Dialog: Too many arguments (%u) for \"%s\" in %u", numArgs, DialogCommandStr[curCmd], id), PM_DEBUG_ERROR);
- isValid = false;
- }
break;
case DC_TEST_FLAG:
switch (numArgs)
{
case 1:
- if ((arg != "Call") || (arg != "Goto") || (arg != "0") || (arg != "1"))
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
{
- Log(String("Dialog: Invalid argument #1 in \"Test Flag\" in %u", id), PM_DEBUG_ERROR);
+ 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 != "Unset") || (arg != "Set") || (arg != "0") || (arg != "1"))
- {
- Log(String("Dialog: Invalid argument #2 in \"Test Flag\" in %u", id), PM_DEBUG_ERROR);
- isValid = false;
- }
- break;
- case 3:
if (!arg.Convert(tempUL))
{
- Log(String("Dialog: Bad flag in \"Test Flag\" in %u", id), PM_DEBUG_ERROR);
+ 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:
- case 5:
if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
{
- Log(String("Dialog: Invalid argument #%u in \"Test Flag\" in %u", numArgs, id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #%u in \"Test Flag\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
- break;
- default:
- Log(String("Dialog: Too many arguments (%u) for \"Test Flag\" in %u", numArgs, id), PM_DEBUG_ERROR);
- isValid = false;
}
break;
case DC_DIALOG:
- switch (numArgs)
+ if (numArgs == 1)
{
- case 1:
- if ((arg != "Call") || (arg != "Goto") || (arg != "0") || (arg != "1"))
- {
- Log(String("Dialog: Invalid argument #1 in \"Dialog\" in %u", id), PM_DEBUG_ERROR);
- isValid = false;
- }
- break;
- case 2:
- if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
- {
- Log(String("Dialog: Invalid argument #%u in \"Dialog\" in %u", numArgs, id), PM_DEBUG_ERROR);
- isValid = false;
- }
- break;
- default:
- Log(String("Dialog: Too many arguments (%u) for \"Dialog\" in %u", numArgs, id), PM_DEBUG_ERROR);
+ 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:
@@ -197,9 +173,9 @@ void PokeGen::PokeMod::Dialog::Validate()
switch (numArgs)
{
case 1:
- if ((arg != "Call") || (arg != "Goto") || (arg != "0") || (arg != "1"))
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
{
- Log(String("Dialog: Invalid argument #1 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #1 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
break;
@@ -207,13 +183,9 @@ void PokeGen::PokeMod::Dialog::Validate()
case 3:
if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
{
- Log(String("Dialog: Invalid argument #%u in \"%s\" in %u", numArgs, DialogCommandStr[curCmd], id), PM_DEBUG_ERROR);
+ 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;
- default:
- Log(String("Dialog: Too many arguments (%u) for \"%s\" in %u", numArgs, DialogCommandStr[curCmd], id), PM_DEBUG_ERROR);
- isValid = false;
}
break;
case DC_ITEM_SHOP:
@@ -221,15 +193,10 @@ void PokeGen::PokeMod::Dialog::Validate()
{
if (!(arg.Convert(tempU) ? pokemod->GetStore(tempU) : pokemod->GetStore(arg)))
{
- Log(String("Dialog: Invalid argument #1 in \"Test Flag\" in %u", id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #1 in \"Test Flag\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
}
- else
- {
- Log(String("Dialog: Too many arguments (%u) for \"Test Flag\" in %u", numArgs, id), PM_DEBUG_ERROR);
- isValid = false;
- }
break;
case DC_GIVE_ITEM:
case DC_TAKE_ITEM:
@@ -237,16 +204,16 @@ void PokeGen::PokeMod::Dialog::Validate()
switch (numArgs)
{
case 1:
- if ((arg != "Call") || (arg != "Goto") || (arg != "0") || (arg != "1"))
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
{
- Log(String("Dialog: Invalid argument #1 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR);
+ 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(String("Dialog: Invalid argument #2 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #2 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
break;
@@ -254,13 +221,9 @@ void PokeGen::PokeMod::Dialog::Validate()
case 4:
if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
{
- Log(String("Dialog: Invalid argument #%u in \"%s\" in %u", numArgs, DialogCommandStr[curCmd], id), PM_DEBUG_ERROR);
+ 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;
- default:
- Log(String("Dialog: Too many arguments (%u) for \"%s\" in %u", numArgs, DialogCommandStr[curCmd], id), PM_DEBUG_ERROR);
- isValid = false;
}
break;
case DC_COIN_LIST:
@@ -268,30 +231,25 @@ void PokeGen::PokeMod::Dialog::Validate()
{
if (!(arg.Convert(tempU) ? pokemod->GetCoinList(tempU) : pokemod->GetCoinList(arg)))
{
- Log(String("Dialog: Invalid argument #1 in \"Coin List\" in %u", id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #1 in \"Coin List\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
}
- else
- {
- Log(String("Dialog: Too many arguments (%u) for \"Coin List\" in %u", numArgs, id), PM_DEBUG_ERROR);
- isValid = false;
- }
break;
case DC_TEACH_MOVE:
switch (numArgs)
{
case 1:
- if ((arg != "Call") || (arg != "Goto") || (arg != "0") || (arg != "1"))
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
{
- Log(String("Dialog: Invalid argument #1 in \"Teach Move\" in %u", id), PM_DEBUG_ERROR);
+ 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(String("Dialog: Invalid argument #2 in \"Teach Move\" in %u", id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #2 in \"Teach Move\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
break;
@@ -300,36 +258,32 @@ void PokeGen::PokeMod::Dialog::Validate()
case 5:
if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
{
- Log(String("Dialog: Invalid argument #%u in \"Teach Move\" in %u", numArgs, id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #%u in \"Teach Move\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
- break;
- default:
- Log(String("Dialog: Too many arguments (%u) for \"Teach Move\" in %u", numArgs, id), PM_DEBUG_ERROR);
- isValid = false;
}
break;
case DC_CHECK_MOVE:
switch (numArgs)
{
case 1:
- if ((arg != "Call") || (arg != "Goto") || (arg != "0") || (arg != "1"))
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
{
- Log(String("Dialog: Invalid argument #1 in \"Check Move\" in %u", id), PM_DEBUG_ERROR);
+ 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"))
+ if ((arg != "Lead") && (arg != "All") && (arg != "0") && (arg != "1"))
{
- Log(String("Dialog: Invalid argument #2 in \"Check Move\" in %u", id), PM_DEBUG_ERROR);
+ 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(String("Dialog: Invalid argument #3 in \"Check Move\" in %u", id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #3 in \"Check Move\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
break;
@@ -337,22 +291,103 @@ void PokeGen::PokeMod::Dialog::Validate()
case 5:
if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
{
- Log(String("Dialog: Invalid argument #%u in \"Check Move\" in %u", numArgs, id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #%u in \"Check Move\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
- break;
- default:
- Log(String("Dialog: Too many arguments (%u) for \"Check Move\" in %u", numArgs, id), PM_DEBUG_ERROR);
- 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:
- break;
- case DC_VIEW_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)
@@ -361,29 +396,24 @@ void PokeGen::PokeMod::Dialog::Validate()
{
if (pokemod->GetMaxMoney() < tempUL)
{
- Log(String("Dialog: More money given than can be held in \"Give Money\" in %u", id), PM_DEBUG_ERROR);
+ 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(String("Dialog: Invalid argument #1 in \"Give Money\" in %u", id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #1 in \"Give Money\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
}
- else
- {
- Log(String("Dialog: Too many arguments (%u) for \"Give Money\" in %u", numArgs, id), PM_DEBUG_ERROR);
- isValid = false;
- }
break;
case DC_TAKE_MONEY:
switch (numArgs)
{
case 1:
- if ((arg != "Call") || (arg != "Goto") || (arg != "0") || (arg != "1"))
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
{
- Log(String("Dialog: Invalid argument #1 in \"Take Money\" in %u", id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #1 in \"Take Money\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
break;
@@ -392,13 +422,13 @@ void PokeGen::PokeMod::Dialog::Validate()
{
if (pokemod->GetMaxMoney() < tempUL)
{
- Log(String("Dialog: More money taken than can be held in \"Take Money\" in %u", id), PM_DEBUG_ERROR);
+ 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(String("Dialog: Invalid argument #2 in \"Take Money\" in %u", id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #2 in \"Take Money\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
break;
@@ -406,58 +436,118 @@ void PokeGen::PokeMod::Dialog::Validate()
case 4:
if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
{
- Log(String("Dialog: Invalid argument #%u in \"Take Money\" in %u", numArgs, id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #%u in \"Take Money\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
- break;
- default:
- Log(String("Dialog: Too many arguments (%u) for \"Take Money\" in %u", numArgs, id), PM_DEBUG_ERROR);
- 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:
- break;
- case DC_CHECK_DIRECTION:
+ 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:
- break;
case DC_CHECK_LEVELS:
- break;
- case DC_CHECK_SPECIES:
- break;
- case DC_CHECK_HELD_ITEMS:
- break;
case DC_CHECK_MONEY:
switch (numArgs)
{
case 1:
- if ((arg != "Call") || (arg != "Goto") || (arg != "0") || (arg != "1"))
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
{
- Log(String("Dialog: Invalid argument #1 in \"Check Money\" in %u", id), PM_DEBUG_ERROR);
+ 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 != "="))
+ if ((arg != "<") && (arg != ">") && (arg != "="))
{
- Log(String("Dialog: Invalid argument #2 in \"Check Money\" in %u", id), PM_DEBUG_ERROR);
+ 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 (pokemod->GetMaxMoney() < tempUL)
+ if (((curCmd == DC_CHECK_ROSTER) ? pokemod->GetMaxParty() : ((curCmd == DC_CHECK_LEVELS) ? pokemod->GetMaxLevel() : pokemod->GetMaxMoney())) < tempUL)
{
- Log(String("Dialog: More money than can be held in \"Check Money\" in %u", id), PM_DEBUG_ERROR);
+ 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(String("Dialog: Invalid argument #3 in \"Check Money\" in %u", id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #3 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
break;
@@ -465,63 +555,140 @@ void PokeGen::PokeMod::Dialog::Validate()
case 5:
if (!arg.Convert(tempU) || !pokemod->GetDialog(tempU))
{
- Log(String("Dialog: Invalid argument #%u in \"Check Money\" in %u", numArgs, id), PM_DEBUG_ERROR);
+ 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;
- default:
- Log(String("Dialog: Too many arguments (%u) for \"Check Money\" in %u", numArgs, id), PM_DEBUG_ERROR);
- isValid = false;
+ 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)))
+ if (!(map = (arg.Convert(tempU) ? (Map *)pokemod->GetMap(tempU) : (Map *)pokemod->GetMap(arg))))
{
- Log(String("Dialog: Invalid argument #1 in \"Warp\" in %u", id), PM_DEBUG_ERROR);
- isValid = false;
+ 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->GetWarp(tempU) : map->GetWarp(arg)))
+ if (!(arg.Convert(tempU) ? map->GetMapWarp(tempU) : map->GetMapWarp(arg)))
{
- Log(String("Dialog: Invalid argument #3 in \"Warp\" in %u", id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #2 in \"Warp\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
}
else
- Log(String("Dialog: Unable to validate argument #2 in \"Warp\" in %u", id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Unable to validate argument #2 in \"Warp\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
}
- else
- Log(String("Dialog: Too many arguments (%u) for \"Warp\" in %u", numArgs, id), PM_DEBUG_ERROR);
- isValid = false;
break;
case DC_NAME:
+ case DC_MAP_SIGN:
if (numArgs == 1)
{
if (arg == "")
{
- Log(String("Dialog: Invalid argument #1 in \"Name\" in %u", id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #1 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
}
- else
- {
- Log(String("Dialog: Too many arguments (%u) for \"Name\" in %u", numArgs, id), PM_DEBUG_ERROR);
- isValid = false;
- }
break;
case DC_MUSIC:
case DC_SOUND_EFFECT:
@@ -529,39 +696,97 @@ void PokeGen::PokeMod::Dialog::Validate()
{
if (!Path(pokemod->GetPath() + "sound/" + arg).DoesExist())
{
- Log(String("Dialog: Invalid argument #1 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #1 in \"%s\" in %u", DialogCommandStr[curCmd], id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
}
- else
- {
- Log(String("Dialog: Too many arguments (%u) for \"%s\" in %u", numArgs, DialogCommandStr[curCmd], id), PM_DEBUG_ERROR);
- isValid = false;
- }
break;
case DC_TIMER:
- break;
- case DC_MAP_SIGN:
+ 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:
- break;
- case DC_HEAL_PARTY:
- case DC_REFRESH:
- case DC_CLEAR:
- case DC_PAUSE:
- case DC_NEW_LINE:
- case DC_EXIT:
- Log(String("Dialog: Too many arguments (%u) for \"%s\" in %u", numArgs, DialogCommandStr[curCmd], id), PM_DEBUG_ERROR);
- isValid = false;
+ 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"))
+ if ((arg != "Call") && (arg != "Goto") && (arg != "0") && (arg != "1"))
{
- Log(String("Dialog: Invalid argument #1 in \"Menu\" in %u", id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #1 in \"Menu\" in %u", id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
}
@@ -571,19 +796,19 @@ void PokeGen::PokeMod::Dialog::Validate()
{
if (!pokemod->GetDialog(tempU))
{
- Log(String("Dialog: Invalid argument #%u in \"Menu\" in %u", numArgs, id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #%u in \"Menu\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
}
else
{
- Log(String("Dialog: Invalid argument #%u in \"Menu\" in %u", numArgs, id), PM_DEBUG_ERROR);
+ 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(String("Dialog: Invalid argument #%u in \"Menu\" in %u", numArgs, id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog Validation: Invalid argument #%u in \"Menu\" in %u", numArgs, id), PM_DEBUG_ERROR | PM_DEBUG_VALIDATION);
isValid = false;
}
}
@@ -633,10 +858,10 @@ PokeGen::PokeMod::String PokeGen::PokeMod::Dialog::GetDialog() const
void PokeGen::PokeMod::Dialog::InsertDialogCommand(const String &cmd, const unsigned pos)
{
- Log(String("Dialog: Inserting dialog command %s into %u at %u", cmd.c_str(), id, pos), PM_DEBUG_INFO);
+ Log::Write(String("Dialog: Inserting dialog command %s into %u at %u", cmd.c_str(), id, pos), PM_DEBUG_INFO);
if (dialog.length() < pos)
{
- Log(String("Dialog: Position out-of-range in %u", id), PM_DEBUG_ERROR);
+ Log::Write(String("Dialog: Position out-of-range in %u", id), PM_DEBUG_ERROR);
return;
}
dialog.insert(pos, cmd);