Author: cazfi
Date: Sat Mar 21 08:59:49 2015
New Revision: 28594

URL: http://svn.gna.org/viewcvs/freeciv?rev=28594&view=rev
Log:
Sanity check boolean effects

See patch #5918

Modified:
    branches/S2_5/server/rssanity.c

Modified: branches/S2_5/server/rssanity.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_5/server/rssanity.c?rev=28594&r1=28593&r2=28594&view=diff
==============================================================================
--- branches/S2_5/server/rssanity.c     (original)
+++ branches/S2_5/server/rssanity.c     Sat Mar 21 08:59:49 2015
@@ -444,6 +444,58 @@
   return TRUE;
 }
 
+
+/**************************************************************************
+  Check that boolean effect types have sensible effects.
+**************************************************************************/
+static bool sanity_check_boolean_effects(void)
+{
+  enum effect_type boolean_effects[] =
+    {
+      EFT_ANY_GOVERNMENT,
+      EFT_CAPITAL_CITY,
+      EFT_ENABLE_NUKE,
+      EFT_ENABLE_SPACE,
+      EFT_HAVE_EMBASSIES,
+      EFT_NO_ANARCHY,
+      EFT_NUKE_PROOF,
+      EFT_REVEAL_CITIES,
+      EFT_REVEAL_MAP,
+      EFT_SIZE_UNLIMIT,
+      EFT_SS_STRUCTURAL,
+      EFT_SS_COMPONENT,
+      EFT_NO_UNHAPPY,
+      EFT_RAPTURE_GROW,
+      EFT_REVOLUTION_WHEN_UNHAPPY,
+      EFT_HAS_SENATE,
+      EFT_INSPIRE_PARTISANS,
+      EFT_HAPPINESS_TO_GOLD,
+      EFT_FANATICS,
+      EFT_NO_DIPLOMACY,
+      EFT_IRRIG_POSSIBLE,
+      EFT_GOV_CENTER,
+      EFT_TRANSFORM_POSSIBLE,
+      EFT_MINING_POSSIBLE,
+      EFT_IRRIG_TF_POSSIBLE,
+      EFT_MINING_TF_POSSIBLE,
+      EFT_NOT_TECH_SOURCE,
+      EFT_LAST
+    };
+  int i;
+  bool ret = TRUE;
+
+  for (i = 0; boolean_effects[i] != EFT_LAST; i++) {
+    if (effect_cumulative_min(boolean_effects[i], NULL) < 0
+        && effect_cumulative_max(boolean_effects[i], NULL) >= 0) {
+      ruleset_error(LOG_ERROR, "Boolean effect %s can get disabled, but it 
can't get "
+                    "enabled before that.", 
effect_type_name(boolean_effects[i]));
+      ret = FALSE;
+    }
+  }
+
+  return ret;
+}
+
 /**************************************************************************
   Some more sanity checking once all rulesets are loaded. These check
   for some cross-referencing which was impossible to do while only one
@@ -569,6 +621,10 @@
     ok = FALSE;
   }
 
+  if (!sanity_check_boolean_effects()) {
+    ok = FALSE;
+  }
+
   /* Others use requirement vectors */
 
   /* Disasters */


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to