diff options
-rw-r--r-- | sigmod/Badge.cpp | 14 | ||||
-rw-r--r-- | sigmod/CoinListItem.cpp | 6 | ||||
-rw-r--r-- | sigmod/Item.cpp | 8 | ||||
-rw-r--r-- | sigmod/ItemType.cpp | 6 | ||||
-rw-r--r-- | sigmod/Map.cpp | 6 | ||||
-rw-r--r-- | sigmod/MapEffect.cpp | 7 | ||||
-rw-r--r-- | sigmod/MapTile.cpp | 7 | ||||
-rw-r--r-- | sigmod/MapTrainer.cpp | 12 | ||||
-rw-r--r-- | sigmod/MapTrainerTeamMember.cpp | 14 | ||||
-rw-r--r-- | sigmod/MapWarp.cpp | 12 | ||||
-rw-r--r-- | sigmod/MapWildListEncounter.cpp | 10 | ||||
-rw-r--r-- | sigmod/Move.cpp | 10 | ||||
-rw-r--r-- | sigmod/Nature.cpp | 8 | ||||
-rw-r--r-- | sigmod/Object.cpp | 50 | ||||
-rw-r--r-- | sigmod/Object.h | 7 | ||||
-rw-r--r-- | sigmod/Rules.cpp | 36 | ||||
-rw-r--r-- | sigmod/Sigmod.cpp | 6 | ||||
-rw-r--r-- | sigmod/Species.cpp | 60 | ||||
-rw-r--r-- | sigmod/Species.h | 1 | ||||
-rw-r--r-- | sigmod/SpeciesAbility.cpp | 6 | ||||
-rw-r--r-- | sigmod/SpeciesItem.cpp | 6 | ||||
-rw-r--r-- | sigmod/SpeciesMove.cpp | 10 | ||||
-rw-r--r-- | sigmod/Store.cpp | 2 | ||||
-rw-r--r-- | sigmod/Time.cpp | 8 | ||||
-rw-r--r-- | sigmod/Trainer.cpp | 4 | ||||
-rw-r--r-- | sigmod/Type.cpp | 2 |
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); } |