summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sigmod/Badge.cpp14
-rw-r--r--sigmod/CoinListItem.cpp6
-rw-r--r--sigmod/Item.cpp8
-rw-r--r--sigmod/ItemType.cpp6
-rw-r--r--sigmod/Map.cpp6
-rw-r--r--sigmod/MapEffect.cpp7
-rw-r--r--sigmod/MapTile.cpp7
-rw-r--r--sigmod/MapTrainer.cpp12
-rw-r--r--sigmod/MapTrainerTeamMember.cpp14
-rw-r--r--sigmod/MapWarp.cpp12
-rw-r--r--sigmod/MapWildListEncounter.cpp10
-rw-r--r--sigmod/Move.cpp10
-rw-r--r--sigmod/Nature.cpp8
-rw-r--r--sigmod/Object.cpp50
-rw-r--r--sigmod/Object.h7
-rw-r--r--sigmod/Rules.cpp36
-rw-r--r--sigmod/Sigmod.cpp6
-rw-r--r--sigmod/Species.cpp60
-rw-r--r--sigmod/Species.h1
-rw-r--r--sigmod/SpeciesAbility.cpp6
-rw-r--r--sigmod/SpeciesItem.cpp6
-rw-r--r--sigmod/SpeciesMove.cpp10
-rw-r--r--sigmod/Store.cpp2
-rw-r--r--sigmod/Time.cpp8
-rw-r--r--sigmod/Trainer.cpp4
-rw-r--r--sigmod/Type.cpp2
26 files changed, 192 insertions, 126 deletions
diff --git a/sigmod/Badge.cpp b/sigmod/Badge.cpp
index 542bc09e..a3936c87 100644
--- a/sigmod/Badge.cpp
+++ b/sigmod/Badge.cpp
@@ -105,7 +105,7 @@ void Sigmod::Badge::setName(const QString& name)
void Sigmod::Badge::setFace(const int face)
{
if (!sigmod()->spriteById(face))
- emit(error(bounds("face")));
+ emit(error(bounds("face", face)));
else
CHECK(face);
}
@@ -113,7 +113,7 @@ void Sigmod::Badge::setFace(const int face)
void Sigmod::Badge::setBadge(const int badge)
{
if (!sigmod()->spriteById(badge))
- emit(error(bounds("badge")));
+ emit(error(bounds("badge", badge)));
else
CHECK(badge);
}
@@ -121,7 +121,7 @@ void Sigmod::Badge::setBadge(const int badge)
void Sigmod::Badge::setObey(const int obey)
{
if (sigmod()->rules()->maxLevel() < obey)
- emit(error(bounds("obey")));
+ emit(error(bounds("obey", INT_MIN, sigmod()->rules()->maxLevel(), obey)));
else
CHECK(obey);
}
@@ -130,7 +130,7 @@ void Sigmod::Badge::setStat(const Stat stat, const Sigcore::Fraction& multiplier
{
if (multiplier < 1)
{
- emit(error(bounds("stat multiplier")));
+ emit(error(bounds("stat multiplier", 1, INT_MAX, multiplier)));
return;
}
switch (stat)
@@ -140,7 +140,7 @@ void Sigmod::Badge::setStat(const Stat stat, const Sigcore::Fraction& multiplier
case ST_Attack ... ST_Special:
break;
default:
- emit(warning(bounds("stat")));
+ emit(warning(bounds("stat", "Attack", sigmod()->rules()->specialSplit() ? "SpecialDefense" : "Special", stat)));
return;
}
CHECK_ARRAY(stat[stat - ST_Attack], multiplier);
@@ -149,7 +149,7 @@ void Sigmod::Badge::setStat(const Stat stat, const Sigcore::Fraction& multiplier
void Sigmod::Badge::setStat(const Sigcore::Fraction& multiplier)
{
if (multiplier < 1)
- emit(error(bounds("stat multiplier")));
+ emit(error(bounds("stat multiplier", 1, INT_MAX, multiplier)));
}
QString Sigmod::Badge::name() const
@@ -181,7 +181,7 @@ Sigcore::Fraction Sigmod::Badge::stat(const Stat stat) const
case ST_Attack ... ST_Special:
return m_stat[stat - ST_Attack];
default:
- emit(warning(bounds("stat")));
+ emit(warning(bounds("stat", "Attack", sigmod()->rules()->specialSplit() ? "SpecialDefense" : "Special", stat)));
return Sigcore::Fraction();
}
}
diff --git a/sigmod/CoinListItem.cpp b/sigmod/CoinListItem.cpp
index 7436cfaf..c015b6f9 100644
--- a/sigmod/CoinListItem.cpp
+++ b/sigmod/CoinListItem.cpp
@@ -89,15 +89,15 @@ void Sigmod::CoinListItem::setType(const Type type)
void Sigmod::CoinListItem::setObject(const int object)
{
if (((Item == m_type) && !sigmod()->itemById(object)) || ((Species == m_type) && !sigmod()->speciesById(object)))
- emit(error(bounds("object")));
+ emit(error(bounds("object", object)));
else
CHECK(object);
}
void Sigmod::CoinListItem::setCost(const int cost)
{
- if (!cost)
- emit(error(bounds("cost")));
+ if (cost <= 0)
+ emit(error(bounds("cost", 1, INT_MAX, cost)));
else
CHECK(cost);
}
diff --git a/sigmod/Item.cpp b/sigmod/Item.cpp
index 135590bc..af96cb60 100644
--- a/sigmod/Item.cpp
+++ b/sigmod/Item.cpp
@@ -116,7 +116,7 @@ void Sigmod::Item::setSellable(const bool sellable)
void Sigmod::Item::setType(const int type)
{
if (!sigmod()->itemTypeById(type))
- emit(error(bounds("type")));
+ emit(error(bounds("type", type)));
else
CHECK(type);
}
@@ -124,7 +124,7 @@ void Sigmod::Item::setType(const int type)
void Sigmod::Item::setPrice(const int price)
{
if ((price <= 0) || (sigmod()->rules()->maxMoney() < price))
- emit(error(bounds("price")));
+ emit(error(bounds("price", 1, sigmod()->rules()->maxMoney(), price)));
else
CHECK(price);
}
@@ -132,7 +132,7 @@ void Sigmod::Item::setPrice(const int price)
void Sigmod::Item::setSellPrice(const int sellPrice)
{
if ((sellPrice < 0) || (m_price < sellPrice))
- emit(error(bounds("sellPrice")));
+ emit(error(bounds("sellPrice", 0, m_price, sellPrice)));
else
CHECK(sellPrice);
}
@@ -143,7 +143,7 @@ void Sigmod::Item::setWeight(const int weight)
if (type)
{
if ((weight < 0) || (type->maxWeight() < weight))
- emit(error(bounds("weight")));
+ emit(error(bounds("weight", 0, type->maxWeight(), weight)));
else
CHECK(weight);
}
diff --git a/sigmod/ItemType.cpp b/sigmod/ItemType.cpp
index 71bcf97e..e18b8c82 100644
--- a/sigmod/ItemType.cpp
+++ b/sigmod/ItemType.cpp
@@ -94,7 +94,7 @@ void Sigmod::ItemType::setName(const QString& name)
void Sigmod::ItemType::setComputer(const int computer)
{
if (computer < 0)
- emit(error(bounds("computer")));
+ emit(error(bounds("computer", 0, INT_MAX, computer)));
else
CHECK(computer);
}
@@ -102,7 +102,7 @@ void Sigmod::ItemType::setComputer(const int computer)
void Sigmod::ItemType::setPlayer(const int player)
{
if (player <= 0)
- emit(error(bounds("player")));
+ emit(error(bounds("player", 1, INT_MAX, player)));
else
CHECK(player);
}
@@ -110,7 +110,7 @@ void Sigmod::ItemType::setPlayer(const int player)
void Sigmod::ItemType::setMaxWeight(const int maxWeight)
{
if ((maxWeight < 0) || (sigmod()->rules()->maxTotalWeight() < maxWeight))
- emit(error(bounds("maxWeight")));
+ emit(error(bounds("maxWeight", 0, sigmod()->rules()->maxTotalWeight(), maxWeight)));
else
CHECK(maxWeight);
}
diff --git a/sigmod/Map.cpp b/sigmod/Map.cpp
index bea4f227..667b5524 100644
--- a/sigmod/Map.cpp
+++ b/sigmod/Map.cpp
@@ -155,7 +155,7 @@ void Sigmod::Map::setName(const QString& name)
void Sigmod::Map::setFlyWarp(const int flyWarp)
{
if ((flyWarp != -1) && !warpById(flyWarp))
- emit(error(bounds("flyWarp")));
+ emit(error(bounds("flyWarp", flyWarp)));
else
CHECK(flyWarp);
}
@@ -168,7 +168,7 @@ void Sigmod::Map::setType(const Type type)
void Sigmod::Map::setWidth(const int width)
{
if (width <= 0)
- emit(error(bounds("width")));
+ emit(error(bounds("width", 1, INT_MAX, width)));
else
CHECK(width);
}
@@ -176,7 +176,7 @@ void Sigmod::Map::setWidth(const int width)
void Sigmod::Map::setHeight(const int height)
{
if (height <= 0)
- emit(error(bounds("height")));
+ emit(error(bounds("height", 1, INT_MAX, height)));
else
CHECK(height);
}
diff --git a/sigmod/MapEffect.cpp b/sigmod/MapEffect.cpp
index 2d9cfd71..7b992892 100644
--- a/sigmod/MapEffect.cpp
+++ b/sigmod/MapEffect.cpp
@@ -90,8 +90,9 @@ void Sigmod::MapEffect::setName(const QString& name)
void Sigmod::MapEffect::setCoordinate(const QPoint& coordinate)
{
- if ((qobject_cast<const Map*>(parent())->width() <= coordinate.x()) || (qobject_cast<const Map*>(parent())->height() <= coordinate.y()))
- emit(error(bounds("coordinate")));
+ const Map* map = qobject_cast<const Map*>(parent());
+ if ((coordinate.x() < 0) || (coordinate.y() < 0) || (map->width() <= coordinate.x()) || (map->height() <= coordinate.y()))
+ emit(error(bounds("coordinate", QPoint(0, 0), QPoint(map->width(), map->height()), coordinate)));
else
CHECK(coordinate);
}
@@ -99,7 +100,7 @@ void Sigmod::MapEffect::setCoordinate(const QPoint& coordinate)
void Sigmod::MapEffect::setSkin(const int skin)
{
if (!sigmod()->skinById(skin))
- emit(error(bounds("skin")));
+ emit(error(bounds("skin", skin)));
else
CHECK(skin);
}
diff --git a/sigmod/MapTile.cpp b/sigmod/MapTile.cpp
index c6471969..c407c5e2 100644
--- a/sigmod/MapTile.cpp
+++ b/sigmod/MapTile.cpp
@@ -83,15 +83,16 @@ QDomElement Sigmod::MapTile::save() const
void Sigmod::MapTile::setTile(const int tile)
{
if (!sigmod()->tileById(tile))
- emit(error(bounds("tile")));
+ emit(error(bounds("tile", tile)));
else
CHECK(tile);
}
void Sigmod::MapTile::setPosition(const QPoint& position)
{
- if ((qobject_cast<const Map*>(parent())->width() <= position.x()) || (qobject_cast<const Map*>(parent())->height() <= position.y()))
- emit(error(bounds("coordinate")));
+ const Map* map = qobject_cast<const Map*>(parent());
+ if ((position.x() < 0) || (position.y() < 0) || (map->width() <= position.x()) || (map->height() <= position.y()))
+ emit(error(bounds("position", QPoint(0, 0), QPoint(map->width(), map->height()), position)));
else
CHECK(position);
}
diff --git a/sigmod/MapTrainer.cpp b/sigmod/MapTrainer.cpp
index 1722df8d..b4b5fa33 100644
--- a/sigmod/MapTrainer.cpp
+++ b/sigmod/MapTrainer.cpp
@@ -113,7 +113,7 @@ void Sigmod::MapTrainer::setName(const QString& name)
void Sigmod::MapTrainer::setTrainerClass(const int trainerClass)
{
if (!sigmod()->trainerById(trainerClass))
- emit(error(bounds("trainerClass")));
+ emit(error(bounds("trainerClass", trainerClass)));
else
CHECK(trainerClass);
}
@@ -121,16 +121,16 @@ void Sigmod::MapTrainer::setTrainerClass(const int trainerClass)
void Sigmod::MapTrainer::setCoordinate(const QPoint& coordinate)
{
const Map* map = qobject_cast<const Map*>(parent());
- if ((map->width() <= coordinate.x()) || (map->height() <= coordinate.y()))
- emit(error(bounds("coordinate")));
+ if ((coordinate.x() < 0) || (coordinate.y() < 0) || (map->width() <= coordinate.x()) || (map->height() <= coordinate.y()))
+ emit(error(bounds("coordinate", QPoint(0, 0), QPoint(map->width(), map->height()), coordinate)));
else
CHECK(coordinate);
}
void Sigmod::MapTrainer::setNumberFight(const int numberFight)
{
- if (!numberFight || (sigmod()->rules()->maxFight() < numberFight))
- emit(error(bounds("numberFight")));
+ if ((numberFight <= 0) || (sigmod()->rules()->maxFight() < numberFight))
+ emit(error(bounds("numberFight", 1, sigmod()->rules()->maxFight(), numberFight)));
else
CHECK(numberFight);
}
@@ -143,7 +143,7 @@ void Sigmod::MapTrainer::setScript(const Sigcore::Script& script)
void Sigmod::MapTrainer::setLeadTeamMember(const int leadTeamMember)
{
if (!teamMemberById(leadTeamMember))
- emit(error(bounds("leadTeamMember")));
+ emit(error(bounds("leadTeamMember", leadTeamMember)));
else
CHECK(leadTeamMember);
}
diff --git a/sigmod/MapTrainerTeamMember.cpp b/sigmod/MapTrainerTeamMember.cpp
index 3a72811e..dfeb84f8 100644
--- a/sigmod/MapTrainerTeamMember.cpp
+++ b/sigmod/MapTrainerTeamMember.cpp
@@ -102,15 +102,15 @@ QDomElement Sigmod::MapTrainerTeamMember::save() const
void Sigmod::MapTrainerTeamMember::setSpecies(const int species)
{
if (!sigmod()->speciesById(species))
- emit(error(bounds("species")));
+ emit(error(bounds("species", species)));
else
CHECK(species);
}
void Sigmod::MapTrainerTeamMember::setLevel(const int level)
{
- if (sigmod()->rules()->maxLevel() < level)
- emit(error(bounds("level")));
+ if ((level <= 0) || (sigmod()->rules()->maxLevel() < level))
+ emit(error(bounds("level", 0, sigmod()->rules()->maxLevel(), level)));
else
CHECK(level);
}
@@ -118,7 +118,7 @@ void Sigmod::MapTrainerTeamMember::setLevel(const int level)
void Sigmod::MapTrainerTeamMember::setAbility(const int ability, const bool state)
{
if (!sigmod()->abilityById(ability))
- emit(error(bounds("ability")));
+ emit(error(bounds("ability", ability)));
else if (state && !m_ability.contains(ability))
{
if (m_ability.size() < sigmod()->rules()->maxAbilities())
@@ -139,7 +139,7 @@ void Sigmod::MapTrainerTeamMember::setAbility(const int ability, const bool stat
void Sigmod::MapTrainerTeamMember::setItem(const int item, const bool state)
{
if (!sigmod()->itemById(item))
- emit(error(bounds("item")));
+ emit(error(bounds("item", item)));
else if (state && !m_item.contains(item))
{
if (m_item.size() < sigmod()->rules()->maxHeldItems())
@@ -165,7 +165,7 @@ void Sigmod::MapTrainerTeamMember::setItem(const int item, const bool state)
void Sigmod::MapTrainerTeamMember::setMove(const int move, const bool state)
{
if (!sigmod()->moveById(move))
- emit(error(bounds("move")));
+ emit(error(bounds("move", move)));
else if (state && !m_move.contains(move))
{
const Species* species = sigmod()->speciesById(move);
@@ -196,7 +196,7 @@ void Sigmod::MapTrainerTeamMember::setMove(const int move, const bool state)
void Sigmod::MapTrainerTeamMember::setNature(const int nature, const bool state)
{
if (!sigmod()->natureById(nature))
- emit(error(bounds("nature")));
+ emit(error(bounds("nature", nature)));
else if (state && !m_nature.contains(nature))
{
if (m_nature.size() < sigmod()->rules()->maxNatures())
diff --git a/sigmod/MapWarp.cpp b/sigmod/MapWarp.cpp
index e0482f14..137c5f98 100644
--- a/sigmod/MapWarp.cpp
+++ b/sigmod/MapWarp.cpp
@@ -98,9 +98,9 @@ void Sigmod::MapWarp::setArea(const QRect& area)
{
const Map* map = qobject_cast<const Map*>(parent());
if ((map->width() <= area.x()) || (map->height() <= area.y()))
- emit(error(bounds("area")));
- else if ((area.width() <= 0) || (area.height() <= 0))
- emit(error(bounds("area")));
+ emit(error(bounds("area", QPoint(0, 0), QPoint(map->width(), map->height()), area.topLeft())));
+ else if ((area.width() <= 0) || (area.height() <= 0) || ((map->width() - area.x()) < area.width()) || ((map->height() - area.y()) < area.height()))
+ emit(error(bounds("area size", QPoint(0, 0), QPoint(map->width() - area.x(), map->height() - area.y()), area.translated(-area.topLeft()).bottomRight())));
else
CHECK(area);
}
@@ -113,7 +113,7 @@ void Sigmod::MapWarp::setType(const Type type)
void Sigmod::MapWarp::setToMap(const int toMap)
{
if (!sigmod()->mapById(toMap))
- emit(error(bounds("toMap")));
+ emit(error(bounds("toMap", toMap)));
else
CHECK(toMap);
}
@@ -122,9 +122,9 @@ void Sigmod::MapWarp::setToWarp(const int toWarp)
{
const Map* map = sigmod()->mapById(m_toMap);
if (!map)
- emit(error(bounds("toMap")));
+ emit(error(bounds("toMap", m_toMap)));
else if (!map->warpById(toWarp))
- emit(error(bounds("toWarp")));
+ emit(error(bounds("toWarp", toWarp)));
else
CHECK(toWarp);
}
diff --git a/sigmod/MapWildListEncounter.cpp b/sigmod/MapWildListEncounter.cpp
index 0fb44e02..39b5a79e 100644
--- a/sigmod/MapWildListEncounter.cpp
+++ b/sigmod/MapWildListEncounter.cpp
@@ -81,23 +81,23 @@ QDomElement Sigmod::MapWildListEncounter::save() const
void Sigmod::MapWildListEncounter::setSpecies(const int species)
{
if (!sigmod()->speciesById(species))
- emit(error(bounds("species")));
+ emit(error(bounds("species", species)));
else
CHECK(species);
}
void Sigmod::MapWildListEncounter::setLevel(const int level)
{
- if (!level || (sigmod()->rules()->maxLevel() <= level))
- emit(error(bounds("level")));
+ if ((level <= 0) || (sigmod()->rules()->maxLevel() <= level))
+ emit(error(bounds("level", 1, sigmod()->rules()->maxLevel(), level)));
else
CHECK(level);
}
void Sigmod::MapWildListEncounter::setWeight(const int weight)
{
- if (!weight)
- emit(error(bounds("weight")));
+ if (weight <= 0)
+ emit(error(bounds("weight", 1, INT_MAX, weight)));
else
CHECK(weight);
}
diff --git a/sigmod/Move.cpp b/sigmod/Move.cpp
index 6d7a3aa0..76fdc7f3 100644
--- a/sigmod/Move.cpp
+++ b/sigmod/Move.cpp
@@ -116,8 +116,8 @@ void Sigmod::Move::setName(const QString& name)
void Sigmod::Move::setAccuracy(const Sigcore::Fraction& accuracy)
{
- if (!accuracy || (1 < accuracy))
- emit(error(bounds("accuracy")));
+ if ((accuracy < 0) || (1 < accuracy))
+ emit(error(bounds("accuracy", 0, 1, accuracy)));
else
CHECK(accuracy);
}
@@ -130,7 +130,7 @@ void Sigmod::Move::setPower(const int power)
void Sigmod::Move::setType(const int type)
{
if (!sigmod()->typeById(type))
- emit(error(bounds("type")));
+ emit(error(bounds("type", type)));
else
CHECK(type);
}
@@ -142,8 +142,8 @@ void Sigmod::Move::setSpecial(const bool special)
void Sigmod::Move::setPowerPoints(const int powerPoints)
{
- if (!powerPoints)
- emit(error(bounds("powerPoints")));
+ if (powerPoints <= 0)
+ emit(error(bounds("powerPoints", 1, INT_MAX, powerPoints)));
else
CHECK(powerPoints);
}
diff --git a/sigmod/Nature.cpp b/sigmod/Nature.cpp
index 3238ba9d..f69dcda8 100644
--- a/sigmod/Nature.cpp
+++ b/sigmod/Nature.cpp
@@ -95,7 +95,7 @@ void Sigmod::Nature::setStat(const Stat stat, const Sigcore::Fraction& multiplie
case ST_Attack ... ST_Special:
break;
default:
- emit(warning(bounds("stat")));
+ emit(warning(bounds("stat", "Attack", sigmod()->rules()->specialSplit() ? "SpecialDefense" : "Special", stat)));
return;
}
CHECK_ARRAY(stat[stat - ST_Attack], multiplier);
@@ -103,8 +103,8 @@ void Sigmod::Nature::setStat(const Stat stat, const Sigcore::Fraction& multiplie
void Sigmod::Nature::setWeight(const int weight)
{
- if (!weight)
- emit(error(bounds("weight")));
+ if (weight <= 0)
+ emit(error(bounds("weight", 1, INT_MAX, weight)));
else
CHECK(weight);
}
@@ -123,7 +123,7 @@ Sigcore::Fraction Sigmod::Nature::stat(const Stat stat) const
case ST_Attack ... ST_Special:
return m_stat[stat - ST_Attack];
default:
- emit(warning(bounds("stat")));
+ emit(warning(bounds("stat", "Attack", sigmod()->rules()->specialSplit() ? "SpecialDefense" : "Special", stat)));
return Sigcore::Fraction();
}
}
diff --git a/sigmod/Object.cpp b/sigmod/Object.cpp
index fd1c3621..9c45d8c6 100644
--- a/sigmod/Object.cpp
+++ b/sigmod/Object.cpp
@@ -71,9 +71,55 @@ QString Sigmod::Object::unused(const QString& variable)
return QString("Setting unused variable %1").arg(variable);
}
-QString Sigmod::Object::bounds(const QString& variable)
+QString Sigmod::Object::bounds(const QString& variable, const int min, const int max, const int value)
{
- return QString("Value for %1 out-of-bounds").arg(variable);
+ QString msg = QString("Value for %1 out-of-bounds (%2 -- %3) (%4)");
+ msg.arg(variable);
+ if (min == INT_MIN)
+ msg.arg(QString::fromUtf8("-∞"));
+ else
+ msg.arg(min);
+ if (max == INT_MAX)
+ msg.arg(QString::fromUtf8("∞"));
+ else
+ msg.arg(max);
+ return msg.arg(value);
+}
+
+QString Sigmod::Object::bounds(const QString& variable, const int min, const int max, const Sigcore::Fraction& value)
+{
+ QString msg("Value for %1 out-of-bounds (%2 -- %3) (%4 / %5)");
+ msg.arg(variable);
+ if (min == INT_MIN)
+ msg.arg(QString::fromUtf8("-∞"));
+ else
+ msg.arg(min);
+ if (max == INT_MAX)
+ msg.arg(QString::fromUtf8("∞"));
+ else
+ msg.arg(max);
+ return msg.arg(value.numerator()).arg(value.denominator());
+}
+
+QString Sigmod::Object::bounds(const QString& variable, const QPoint& min, const QPoint& max, const QPoint& value)
+{
+ QString msg("Value for %1 out-of-bounds ((%2, %3) -- (%4, %5)) (%6 / %7)");
+ return msg.arg(variable).arg(min.x()).arg(min.y()).arg(max.x()).arg(max.y()).arg(value.x()).arg(value.y());
+}
+
+QString Sigmod::Object::bounds(const QString& variable, const QString& min, const QString& max, const int value)
+{
+ return QString("Value for %1 out-of-bounds (%2 -- %3) (%4)").arg(variable).arg(min).arg(max).arg(value);
+}
+
+QString Sigmod::Object::bounds(const QString& variable, const int value)
+{
+ return QString("Value for %1 out-of-bounds (%2)").arg(variable).arg(value);
+}
+
+QString Sigmod::Object::bounds(const QString& variable, const QString& value)
+{
+ return QString("Value for %1 out-of-bounds (%2)").arg(variable).arg(value);
}
QString Sigmod::Object::subclass(const QString& subclass, const int id)
diff --git a/sigmod/Object.h b/sigmod/Object.h
index c50a2e32..c6e857b7 100644
--- a/sigmod/Object.h
+++ b/sigmod/Object.h
@@ -154,7 +154,12 @@ class SIGMOD_EXPORT Object : public QObject
void setId(const int id);
static QString unused(const QString& variable);
- static QString bounds(const QString& variable);
+ static QString bounds(const QString& variable, const int min, const int max, const int value);
+ static QString bounds(const QString& variable, const int min, const int max, const Sigcore::Fraction& value);
+ static QString bounds(const QString& variable, const QString& min, const QString& max, const int value);
+ static QString bounds(const QString& variable, const QPoint& min, const QPoint& max, const QPoint& value);
+ static QString bounds(const QString& variable, const int value);
+ static QString bounds(const QString& variable, const QString& value);
static QString subclass(const QString& subclass, const int id);
static QString subclass(const QString& subclass, const QString& name);
diff --git a/sigmod/Rules.cpp b/sigmod/Rules.cpp
index 20fe5a95..0e3c260e 100644
--- a/sigmod/Rules.cpp
+++ b/sigmod/Rules.cpp
@@ -158,7 +158,7 @@ void Sigmod::Rules::setGenderAllowed(const bool genderAllowed)
void Sigmod::Rules::setBreedingAllowed(const bool breedingAllowed)
{
if (!m_genderAllowed && breedingAllowed)
- emit(error(bounds("breedingAllowed")));
+ emit(error(bounds("breedingAllowed", breedingAllowed)));
else
CHECK(breedingAllowed);
}
@@ -176,7 +176,7 @@ void Sigmod::Rules::setUseTurns(const bool useTurns)
void Sigmod::Rules::setPausedATB(const bool pausedATB)
{
if (m_useTurns && pausedATB)
- emit(error(bounds("pausedATB")));
+ emit(error(bounds("pausedATB", pausedATB)));
else
CHECK(pausedATB);
}
@@ -188,24 +188,24 @@ void Sigmod::Rules::setNumBoxes(const int numBoxes)
void Sigmod::Rules::setBoxSize(const int boxSize)
{
- if (m_numBoxes && !boxSize)
- emit(error(bounds("boxSize")));
+ if (m_numBoxes && (boxSize <= 0))
+ emit(error(bounds("boxSize", 1, INT_MAX, boxSize)));
else
CHECK(boxSize);
}
void Sigmod::Rules::setMaxParty(const int maxParty)
{
- if (!maxParty)
- emit(error(bounds("maxParty")));
+ if (maxParty <= 0)
+ emit(error(bounds("maxParty", 1, INT_MAX, maxParty)));
else
CHECK(maxParty);
}
void Sigmod::Rules::setMaxFight(const int maxFight)
{
- if (m_maxParty < maxFight)
- emit(error(bounds("maxFight")));
+ if ((maxFight <= 0) || (m_maxParty < maxFight))
+ emit(error(bounds("maxFight", 1, m_maxParty, maxFight)));
else
CHECK(maxFight);
}
@@ -213,7 +213,7 @@ void Sigmod::Rules::setMaxFight(const int maxFight)
void Sigmod::Rules::setMaxPlayers(const int maxPlayers)
{
if (maxPlayers < 2)
- emit(error(bounds("maxPlayers")));
+ emit(error(bounds("maxPlayers", 2, INT_MAX, maxPlayers)));
else
CHECK(maxPlayers);
}
@@ -235,16 +235,16 @@ void Sigmod::Rules::setMaxNatures(const int maxNatures)
void Sigmod::Rules::setMaxMoves(const int maxMoves)
{
- if (!maxMoves)
- emit(error(bounds("maxMoves")));
+ if (maxMoves <= 0)
+ emit(error(bounds("maxMoves", 1, INT_MAX, maxMoves)));
else
CHECK(maxMoves);
}
void Sigmod::Rules::setMaxLevel(const int maxLevel)
{
- if (!maxLevel)
- emit(error(bounds("maxLevel")));
+ if (maxLevel <= 0)
+ emit(error(bounds("maxLevel", 1, INT_MAX, maxLevel)));
else
CHECK(maxLevel);
}
@@ -277,7 +277,7 @@ void Sigmod::Rules::setSpecialSplit(const bool specialSplit)
void Sigmod::Rules::setSpecialDVSplit(const bool specialDVSplit)
{
if (!specialDVSplit && m_specialSplit)
- emit(error(bounds("specialDVSplit")));
+ emit(error(bounds("specialDVSplit", specialDVSplit)));
else
CHECK(specialDVSplit);
}
@@ -289,16 +289,16 @@ void Sigmod::Rules::setEffortValuesAllowed(const bool effortValuesAllowed)
void Sigmod::Rules::setMaxTotalEV(const int maxTotalEV)
{
- if (!maxTotalEV)
- emit(error(bounds("maxTotalEV")));
+ if (maxTotalEV <= 0)
+ emit(error(bounds("maxTotalEV", maxTotalEV)));
else
CHECK(maxTotalEV);
}
void Sigmod::Rules::setMaxEVPerStat(const int maxEVPerStat)
{
- if ((!maxEVPerStat && m_maxTotalEV) || (m_maxTotalEV < maxEVPerStat))
- emit(error(bounds("maxEVPerStat")));
+ if ((m_maxTotalEV && (maxEVPerStat <= 0)) || (m_maxTotalEV < maxEVPerStat))
+ emit(error(bounds("maxEVPerStat", 1, m_maxTotalEV, maxEVPerStat)));
else
CHECK(maxEVPerStat);
}
diff --git a/sigmod/Sigmod.cpp b/sigmod/Sigmod.cpp
index 26895d08..576eec0b 100644
--- a/sigmod/Sigmod.cpp
+++ b/sigmod/Sigmod.cpp
@@ -373,7 +373,7 @@ void Sigmod::Sigmod::setStartMap(const int startMap)
if (!m_singlePlayer)
emit(error(unused("startMap")));
if (!mapById(startMap))
- emit(error(bounds("startMap")));
+ emit(error(bounds("startMap", startMap)));
else
CHECK(startMap);
}
@@ -384,9 +384,9 @@ void Sigmod::Sigmod::setStartWarp(const int startWarp)
emit(error(unused("startWarp")));
const Map* map = mapById(m_startMap);
if (!map)
- emit(error(bounds("startMap")));
+ emit(error(bounds("startMap", m_startMap)));
else if (!map->warpById(startWarp))
- emit(error(bounds("startWarp")));
+ emit(error(bounds("startWarp", startWarp)));
else
CHECK(startWarp);
}
diff --git a/sigmod/Species.cpp b/sigmod/Species.cpp
index f7884170..3d0eb4fd 100644
--- a/sigmod/Species.cpp
+++ b/sigmod/Species.cpp
@@ -97,6 +97,7 @@ void Sigmod::Species::validate()
TEST_BEGIN();
if (m_name.isEmpty())
emit(error("Name is empty"));
+ TEST_ARRAY(setBaseStat, baseStat, ST_SpecialDefense - ST_HP + 1);
TEST_ARRAY(setEffortValue, effortValue, ST_SpecialDefense - ST_HP + 1);
TEST(setGrowth, growth);
TEST(setRunChance, runChance);
@@ -115,7 +116,7 @@ void Sigmod::Species::validate()
{
const Species* eggSpecies = sigmod()->speciesById(m_eggSpecies);
if (!eggSpecies)
- emit(error(bounds("egg species")));
+ emit(error(bounds("egg species", m_eggSpecies)));
else
{
if (eggSpecies->growth() != m_growth)
@@ -226,6 +227,11 @@ void Sigmod::Species::setName(const QString& name)
void Sigmod::Species::setBaseStat(const Stat stat, const int baseStat)
{
+ if (baseStat <= 0)
+ {
+ emit(error(bounds("baseStat", 1, INT_MAX, baseStat)));
+ return;
+ }
switch (stat)
{
case ST_SpecialDefense:
@@ -233,18 +239,24 @@ void Sigmod::Species::setBaseStat(const Stat stat, const int baseStat)
case ST_HP ... ST_Special:
break;
default:
- emit(warning(bounds("stat")));
+ emit(warning(bounds("stat", "HP", sigmod()->rules()->specialSplit() ? "SpecialDefense" : "Special", stat)));
return;
}
CHECK_ARRAY(baseStat[stat], baseStat);
}
+void Sigmod::Species::setBaseStat(const int baseStat)
+{
+ if (baseStat <= 0)
+ emit(error(bounds("baseStat", 1, INT_MAX, baseStat)));
+}
+
void Sigmod::Species::setEffortValue(const Stat stat, const int effortValue)
{
if (!sigmod()->rules()->effortValuesAllowed())
emit(error("Effort Values not allowed"));
- else if (sigmod()->rules()->maxEVPerStat() < effortValue)
- emit(error(bounds("effortValue")));
+ else if ((effortValue < 0) || (sigmod()->rules()->maxEVPerStat() < effortValue))
+ emit(error(bounds("effortValue", 0, sigmod()->rules()->maxEVPerStat(), effortValue)));
switch (stat)
{
case ST_SpecialDefense:
@@ -252,7 +264,7 @@ void Sigmod::Species::setEffortValue(const Stat stat, const int effortValue)
case ST_HP ... ST_Special:
break;
default:
- emit(warning(bounds("stat")));
+ emit(warning(bounds("stat", "HP", sigmod()->rules()->specialSplit() ? "SpecialDefense" : "Special", stat)));
return;
}
CHECK_ARRAY(effortValue[stat], effortValue);
@@ -261,7 +273,7 @@ void Sigmod::Species::setEffortValue(const Stat stat, const int effortValue)
void Sigmod::Species::setEffortValue(const int effortValue)
{
if (sigmod()->rules()->effortValuesAllowed() && sigmod()->rules()->maxEVPerStat() < effortValue)
- emit(error(bounds("effortValue")));
+ emit(error(bounds("effortValue", 0, sigmod()->rules()->maxEVPerStat(), effortValue)));
}
void Sigmod::Species::setGrowth(const Style growth)
@@ -276,8 +288,8 @@ void Sigmod::Species::setExperienceValue(const int experienceValue)
void Sigmod::Species::setCatchValue(const int catchValue)
{
- if (255 < catchValue)
- emit(error(bounds("catchValue")));
+ if ((catchValue <= 0) || (255 < catchValue))
+ emit(error(bounds("catchValue", 1, 255, catchValue)));
else
CHECK(catchValue);
}
@@ -289,24 +301,24 @@ void Sigmod::Species::setMaxHoldWeight(const int maxHoldWeight)
void Sigmod::Species::setRunChance(const Sigcore::Fraction& runChance)
{
- if (1 < runChance)
- emit(error(bounds("runChance")));
+ if ((runChance < 0) || (1 < runChance))
+ emit(error(bounds("runChance", 0, 1, runChance)));
else
CHECK(runChance);
}
void Sigmod::Species::setFleeChance(const Sigcore::Fraction& fleeChance)
{
- if (1 < fleeChance)
- emit(error(bounds("fleeChance")));
+ if ((fleeChance < 0) || (1 < fleeChance))
+ emit(error(bounds("fleeChance", 0, 1, fleeChance)));
else
CHECK(fleeChance);
}
void Sigmod::Species::setItemChance(const Sigcore::Fraction& itemChance)
{
- if (1 < itemChance)
- emit(error(bounds("itemChance")));
+ if ((itemChance < 0) || (1 < itemChance))
+ emit(error(bounds("itemChance", 0, 1, itemChance)));
else
CHECK(itemChance);
}
@@ -336,7 +348,7 @@ void Sigmod::Species::setFrontMaleSprite(const int frontMaleSprite)
if (m_genderFactor.numerator() == m_genderFactor.denominator())
emit(error("Cannot be male"));
else if (!sigmod()->spriteById(frontMaleSprite))
- emit(error(bounds("frontMaleSprite")));
+ emit(error(bounds("frontMaleSprite", frontMaleSprite)));
else
CHECK(frontMaleSprite);
}
@@ -346,7 +358,7 @@ void Sigmod::Species::setBackMaleSprite(const int backMaleSprite)
if (m_genderFactor.numerator() == m_genderFactor.denominator())
emit(error("Cannot be male"));
else if (!sigmod()->spriteById(backMaleSprite))
- emit(error(bounds("backMaleSprite")));
+ emit(error(bounds("backMaleSprite", backMaleSprite)));
else
CHECK(backMaleSprite);
}
@@ -360,7 +372,7 @@ void Sigmod::Species::setFrontFemaleSprite(const int frontFemaleSprite)
else if (1 < m_genderFactor)
emit(error("Genderless uses male sprites"));
else if (!sigmod()->spriteById(frontFemaleSprite))
- emit(error(bounds("frontFemaleSprite")));
+ emit(error(bounds("frontFemaleSprite", frontFemaleSprite)));
else
CHECK(frontFemaleSprite);
}
@@ -374,7 +386,7 @@ void Sigmod::Species::setBackFemaleSprite(const int backFemaleSprite)
else if (1 < m_genderFactor)
emit(error("Genderless uses male sprites"));
else if (!sigmod()->spriteById(backFemaleSprite))
- emit(error(bounds("backFemaleSprite")));
+ emit(error(bounds("backFemaleSprite", backFemaleSprite)));
else
CHECK(backFemaleSprite);
}
@@ -382,7 +394,7 @@ void Sigmod::Species::setBackFemaleSprite(const int backFemaleSprite)
void Sigmod::Species::setSkin(const int skin)
{
if (!sigmod()->skinById(skin))
- emit(error(bounds("skin")));
+ emit(error(bounds("skin", skin)));
else
CHECK(skin);
}
@@ -395,7 +407,7 @@ void Sigmod::Species::setGenderFactor(const Sigcore::Fraction& genderFactor)
void Sigmod::Species::setEggSpecies(const int eggSpecies)
{
if (!sigmod()->speciesById(eggSpecies))
- emit(error(bounds("eggSpecies")));
+ emit(error(bounds("eggSpecies", eggSpecies)));
else
CHECK(eggSpecies);
}
@@ -408,7 +420,7 @@ void Sigmod::Species::setEggSteps(const int eggSteps)
void Sigmod::Species::setType(const int type, const bool state)
{
if (!sigmod()->typeById(type))
- emit(error(bounds("type")));
+ emit(error(bounds("type", type)));
else if (state && !m_type.contains(type))
{
m_type.append(type);
@@ -424,7 +436,7 @@ void Sigmod::Species::setType(const int type, const bool state)
void Sigmod::Species::setEggGroup(const int eggGroup, const bool state)
{
if (!sigmod()->eggGroupById(eggGroup))
- emit(error(bounds("egg group")));
+ emit(error(bounds("egg group", eggGroup)));
else if (state && !m_eggGroup.contains(eggGroup))
{
m_eggGroup.append(eggGroup);
@@ -456,7 +468,7 @@ int Sigmod::Species::baseStat(const Stat stat) const
case ST_HP ... ST_Special:
return m_effortValue[stat];
default:
- emit(warning(bounds("base stat")));
+ emit(warning(bounds("base stat", "Attack", sigmod()->rules()->specialSplit() ? "SpecialDefense" : "Special", stat)));
return -1;
}
}
@@ -470,7 +482,7 @@ int Sigmod::Species::effortValue(const Stat stat) const
case ST_HP ... ST_Special:
return m_effortValue[stat];
default:
- emit(warning(bounds("effort value")));
+ emit(warning(bounds("effort value", "Attack", sigmod()->rules()->specialSplit() ? "SpecialDefense" : "Special", stat)));
return -1;
}
}
diff --git a/sigmod/Species.h b/sigmod/Species.h
index 6ed8cdc4..9d00eb4f 100644
--- a/sigmod/Species.h
+++ b/sigmod/Species.h
@@ -156,6 +156,7 @@ class SIGMOD_EXPORT Species : public Object
Species& operator=(const Species& rhs);
private:
+ void setBaseStat(const int baseStat);
void setEffortValue(const int effortValue);
int newAbilityId() const;
diff --git a/sigmod/SpeciesAbility.cpp b/sigmod/SpeciesAbility.cpp
index 355394ed..eea7a057 100644
--- a/sigmod/SpeciesAbility.cpp
+++ b/sigmod/SpeciesAbility.cpp
@@ -75,15 +75,15 @@ QDomElement Sigmod::SpeciesAbility::save() const
void Sigmod::SpeciesAbility::setAbility(const int ability)
{
if (!sigmod()->abilityById(ability))
- emit(error(bounds("ability")));
+ emit(error(bounds("ability", ability)));
else
CHECK(ability);
}
void Sigmod::SpeciesAbility::setWeight(const int weight)
{
- if (!weight)
- emit(error(bounds("weight")));
+ if (weight <= 0)
+ emit(error(bounds("weight", 1, INT_MAX, weight)));
else
CHECK(weight);
}
diff --git a/sigmod/SpeciesItem.cpp b/sigmod/SpeciesItem.cpp
index db832470..55e0a657 100644
--- a/sigmod/SpeciesItem.cpp
+++ b/sigmod/SpeciesItem.cpp
@@ -75,15 +75,15 @@ QDomElement Sigmod::SpeciesItem::save() const
void Sigmod::SpeciesItem::setItem(const int item)
{
if (!sigmod()->itemById(item))
- emit(error(bounds("item")));
+ emit(error(bounds("item", item)));
else
CHECK(item);
}
void Sigmod::SpeciesItem::setWeight(const int weight)
{
- if (!weight)
- emit(error(bounds("weight")));
+ if (weight <= 0)
+ emit(error(bounds("weight", 1, INT_MAX, weight)));
else
CHECK(weight);
}
diff --git a/sigmod/SpeciesMove.cpp b/sigmod/SpeciesMove.cpp
index f2b81dcf..e15d28bf 100644
--- a/sigmod/SpeciesMove.cpp
+++ b/sigmod/SpeciesMove.cpp
@@ -80,23 +80,23 @@ QDomElement Sigmod::SpeciesMove::save() const
void Sigmod::SpeciesMove::setMove(const int move)
{
if (!sigmod()->moveById(move))
- emit(error(bounds("move")));
+ emit(error(bounds("move", move)));
else
CHECK(move);
}
void Sigmod::SpeciesMove::setLevel(const int level)
{
- if (sigmod()->rules()->maxLevel() <= level)
- emit(error(bounds("level")));
+ if ((level <= 0) || (sigmod()->rules()->maxLevel() <= level))
+ emit(error(bounds("level", 1, sigmod()->rules()->maxLevel() - 1, level)));
else
CHECK(level);
}
void Sigmod::SpeciesMove::setWild(const int wild)
{
- if (!wild || (sigmod()->rules()->maxLevel() <= wild))
- emit(error(bounds("wild")));
+ if ((wild <= 0) || (sigmod()->rules()->maxLevel() <= wild))
+ emit(error(bounds("wild", 1, sigmod()->rules()->maxLevel() - 1, wild)));
else
CHECK(wild);
}
diff --git a/sigmod/Store.cpp b/sigmod/Store.cpp
index 96558cc0..f5778dd4 100644
--- a/sigmod/Store.cpp
+++ b/sigmod/Store.cpp
@@ -80,7 +80,7 @@ void Sigmod::Store::setName(const QString& name)
void Sigmod::Store::setItem(const int item, const bool state)
{
if (!sigmod()->itemById(item))
- emit(error(bounds("item")));
+ emit(error(bounds("item", item)));
else if (state && !m_item.contains(item))
{
m_item.append(item);
diff --git a/sigmod/Time.cpp b/sigmod/Time.cpp
index 32939e92..b4172405 100644
--- a/sigmod/Time.cpp
+++ b/sigmod/Time.cpp
@@ -83,16 +83,16 @@ void Sigmod::Time::setName(const QString& name)
void Sigmod::Time::setHour(const int hour)
{
- if (24 <= hour)
- emit(error(bounds("hour")));
+ if ((hour < 0) || (24 <= hour))
+ emit(error(bounds("hour", 0, 23, hour)));
else
CHECK(hour);
}
void Sigmod::Time::setMinute(const int minute)
{
- if (60 <= minute)
- emit(error(bounds("minute")));
+ if ((minute < 0) || (60 <= minute))
+ emit(error(bounds("minute", 0, 59, minute)));
else
CHECK(minute);
}
diff --git a/sigmod/Trainer.cpp b/sigmod/Trainer.cpp
index b67a932b..702c6f5e 100644
--- a/sigmod/Trainer.cpp
+++ b/sigmod/Trainer.cpp
@@ -104,7 +104,7 @@ void Sigmod::Trainer::setName(const QString& name)
void Sigmod::Trainer::setMoneyFactor(const int moneyFactor)
{
if (moneyFactor < 0)
- emit(error(bounds("moneyFactor")));
+ emit(error(bounds("moneyFactor", 0, INT_MAX, moneyFactor)));
else
CHECK(moneyFactor);
}
@@ -112,7 +112,7 @@ void Sigmod::Trainer::setMoneyFactor(const int moneyFactor)
void Sigmod::Trainer::setSkin(const int skin)
{
if (!sigmod()->skinById(skin))
- emit(error(bounds("skin")));
+ emit(error(bounds("skin", skin)));
else
CHECK(skin);
}
diff --git a/sigmod/Type.cpp b/sigmod/Type.cpp
index 1219d801..6205b965 100644
--- a/sigmod/Type.cpp
+++ b/sigmod/Type.cpp
@@ -79,7 +79,7 @@ void Sigmod::Type::setName(const QString& name)
void Sigmod::Type::setStab(const Sigcore::Fraction& stab)
{
if (stab < 1)
- emit(error(bounds("stab")));
+ emit(error(bounds("stab", 1, INT_MAX, stab)));
else
CHECK(stab);
}