Author: cazfi
Date: Thu May 22 00:29:49 2014
New Revision: 24920

URL: http://svn.gna.org/viewcvs/freeciv?rev=24920&view=rev
Log:
Added server setting 'revolentype' to control the way revolution length is 
determined.

See patch #4700

Modified:
    trunk/common/game.c
    trunk/common/game.h
    trunk/fc_version
    trunk/server/plrhand.c
    trunk/server/savecompat.c
    trunk/server/savegame.c
    trunk/server/settings.c

Modified: trunk/common/game.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/game.c?rev=24920&r1=24919&r2=24920&view=diff
==============================================================================
--- trunk/common/game.c (original)
+++ trunk/common/game.c Thu May 22 00:29:49 2014
@@ -393,6 +393,7 @@
     game.server.pingtimeout       = GAME_DEFAULT_PINGTIMEOUT;
     game.server.razechance        = GAME_DEFAULT_RAZECHANCE;
     game.server.revealmap         = GAME_DEFAULT_REVEALMAP;
+    game.server.revolentype       = GAME_DEFAULT_REVOLENTYPE;
     game.server.revolution_length = GAME_DEFAULT_REVOLUTION_LENGTH;
     sz_strlcpy(game.server.rulesetdir, GAME_DEFAULT_RULESETDIR);
     game.server.save_compress_level = GAME_DEFAULT_COMPRESS_LEVEL;

Modified: trunk/common/game.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/game.h?rev=24920&r1=24919&r2=24920&view=diff
==============================================================================
--- trunk/common/game.h (original)
+++ trunk/common/game.h Thu May 22 00:29:49 2014
@@ -52,6 +52,11 @@
   BARBS_NORMAL,
   BARBS_FREQUENT,
   BARBS_HORDES
+};
+
+enum revolen_type {
+  REVOLEN_FIXED = 0,
+  REVOLEN_RANDOM
 };
 
 enum autosave_type {
@@ -152,6 +157,7 @@
       int ransom_gold;
       int razechance;
       unsigned revealmap;
+      enum revolen_type revolentype;
       int revolution_length;
       int save_compress_level;
       enum fz_method save_compress_type;
@@ -593,9 +599,10 @@
 
 #define GAME_DEFAULT_PLRCOLORMODE PLRCOL_PLR_ORDER
 
-#define GAME_DEFAULT_REVOLUTION_LENGTH 0
-#define GAME_MIN_REVOLUTION_LENGTH 0
-#define GAME_MAX_REVOLUTION_LENGTH 10
+#define GAME_DEFAULT_REVOLENTYPE        REVOLEN_RANDOM
+#define GAME_DEFAULT_REVOLUTION_LENGTH  5
+#define GAME_MIN_REVOLUTION_LENGTH      1
+#define GAME_MAX_REVOLUTION_LENGTH      20
 
 #define GAME_START_YEAR -4000
 

Modified: trunk/fc_version
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/fc_version?rev=24920&r1=24919&r2=24920&view=diff
==============================================================================
--- trunk/fc_version    (original)
+++ trunk/fc_version    Thu May 22 00:29:49 2014
@@ -52,7 +52,7 @@
 #   - Avoid adding a new mandatory capability to the development branch for
 #     as long as possible.  We want to maintain network compatibility with
 #     the stable branch for as long as possible.
-NETWORK_CAPSTRING_MANDATORY="+Freeciv.Devel-2.6-2014.May.21"
+NETWORK_CAPSTRING_MANDATORY="+Freeciv.Devel-2.6-2014.May.22"
 NETWORK_CAPSTRING_OPTIONAL=""
 
 FREECIV_DISTRIBUTOR=""

Modified: trunk/server/plrhand.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/plrhand.c?rev=24920&r1=24919&r2=24920&view=diff
==============================================================================
--- trunk/server/plrhand.c      (original)
+++ trunk/server/plrhand.c      Thu May 22 00:29:49 2014
@@ -392,10 +392,16 @@
             || get_player_bonus(pplayer, EFT_NO_ANARCHY)) {
     /* AI players without the H_REVOLUTION handicap can skip anarchy */
     turns = 0;
-  } else if (game.server.revolution_length == 0) {
-    turns = fc_rand(5) + 1;
   } else {
-    turns = game.server.revolution_length;
+    turns = GAME_DEFAULT_REVOLUTION_LENGTH; /* To avoid compiler warning */
+    switch (game.server.revolentype) {
+    case REVOLEN_FIXED:
+      turns = game.server.revolution_length;
+      break;
+    case REVOLEN_RANDOM:
+      turns = fc_rand(game.server.revolution_length) + 1;
+      break;
+    }
   }
 
   pplayer->government = game.government_during_revolution;

Modified: trunk/server/savecompat.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/savecompat.c?rev=24920&r1=24919&r2=24920&view=diff
==============================================================================
--- trunk/server/savecompat.c   (original)
+++ trunk/server/savecompat.c   Thu May 22 00:29:49 2014
@@ -483,6 +483,21 @@
 }
 
 /****************************************************************************
+  Return string representation of revolentype
+****************************************************************************/
+static char *revolentype_str(enum revolen_type type)
+{
+  switch (type) {
+  case REVOLEN_FIXED:
+    return "FIXED";
+  case REVOLEN_RANDOM:
+    return "RANDOM";
+  }
+
+  return "";
+}
+
+/****************************************************************************
   Translate savegame secfile data from 2.5.x to 2.6.0 format.
 ****************************************************************************/
 static void compat_load_020600(struct loaddata *loading)
@@ -500,6 +515,8 @@
       char value_buffer[1024] = "";
       char gamestart_buffer[1024] = "";
       int i;
+      enum revolen_type rlt = GAME_DEFAULT_REVOLENTYPE;
+      enum revolen_type gsrlt = GAME_DEFAULT_REVOLENTYPE;
       bool gamestart_valid
         = secfile_lookup_bool_default(loading->file, FALSE,
                                       "settings.gamestart_valid");
@@ -546,18 +563,45 @@
           if (value_start) {
             sz_strlcat(gamestart_buffer, "|ALLIED");
           }
+        } else if (!fc_strcasecmp("revolen", name)) {
+          int value, value_start;
+
+          (void) secfile_lookup_int(loading->file, &value,
+                                    "settings.set%d.value", i);
+          (void) secfile_lookup_int(loading->file, &value_start,
+                                    "settings.set%d.gamestart", i);
+
+          /* 0 meant RANDOM 1-5 */
+          if (value == 0) {
+            rlt = REVOLEN_RANDOM;
+            secfile_replace_int(loading->file, 5, "settings.set%d.value", i);
+          } else {
+            rlt = REVOLEN_FIXED;
+          }
+          if (value_start == 0) {
+            gsrlt = REVOLEN_RANDOM;
+            secfile_replace_int(loading->file, 5, "settings.set%d.gamestart", 
i);
+          } else {
+            gsrlt = REVOLEN_FIXED;
+          }
         }
       }
 
-      secfile_replace_int(loading->file, set_count + 1, "settings.set_count");
+      secfile_replace_int(loading->file, set_count + 2, "settings.set_count");
 
       secfile_insert_str(loading->file, "victories", "settings.set%d.name",
                          set_count);
       secfile_insert_str(loading->file, value_buffer, "settings.set%d.value",
                          set_count);
+      secfile_insert_str(loading->file, "revolentype", "settings.set%d.name",
+                         set_count + 1);
+      secfile_insert_str(loading->file, revolentype_str(rlt), 
"settings.set%d.value",
+                         set_count + 1);
       if (gamestart_valid) {
         secfile_insert_str(loading->file, gamestart_buffer, 
"settings.set%d.gamestart",
                            set_count);
+        secfile_insert_str(loading->file, revolentype_str(gsrlt), 
"settings.set%d.gamestart",
+                           set_count + 1);
       }
     }
   }

Modified: trunk/server/savegame.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/savegame.c?rev=24920&r1=24919&r2=24920&view=diff
==============================================================================
--- trunk/server/savegame.c     (original)
+++ trunk/server/savegame.c     Thu May 22 00:29:49 2014
@@ -3535,6 +3535,14 @@
     game.server.revolution_length =
       secfile_lookup_int_default(file, game.server.revolution_length,
                                  "game.revolen");
+    if (game.server.revolution_length == 0) {
+      /* Value 0 meant RANDOM 1-5 */
+      game.server.revolution_length = 5;
+      game.server.revolentype = REVOLEN_RANDOM;
+    } else {
+      game.server.revolentype = REVOLEN_FIXED;
+    }
+
     game.server.occupychance =
       secfile_lookup_int_default(file, game.server.occupychance,
                                  "game.occupychance");

Modified: trunk/server/settings.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/settings.c?rev=24920&r1=24919&r2=24920&view=diff
==============================================================================
--- trunk/server/settings.c     (original)
+++ trunk/server/settings.c     Thu May 22 00:29:49 2014
@@ -373,6 +373,18 @@
 }
 
 /****************************************************************************
+  Revolution length type setting names accessor.
+****************************************************************************/
+static const struct sset_val_name *revolentype_name(int revolentype)
+{
+  switch (revolentype) {
+  NAME_CASE(REVOLEN_FIXED, "FIXED", N_("Fixed to 'revolen' turns"));
+  NAME_CASE(REVOLEN_RANDOM, "RANDOM", N_("Randomly 1-'revolen' turns"));
+  }
+  return NULL;
+}
+
+/****************************************************************************
   Revealmap setting names accessor.
 ****************************************************************************/
 static const struct sset_val_name *revealmap_name(int bit)
@@ -1848,13 +1860,21 @@
          GAME_MIN_ONSETBARBARIAN, GAME_MAX_ONSETBARBARIAN, 
          GAME_DEFAULT_ONSETBARBARIAN)
 
+  GEN_ENUM("revolentype", game.server.revolentype,
+           SSET_RULES, SSET_SOCIOLOGY, SSET_RARE, SSET_TO_CLIENT,
+           N_("Way to determine revolution length"),
+           N_("Which method is used in determining how long period of anarchy "
+              "lasts when changing government. The actual value is set with "
+              "'revolen' setting."),
+           NULL, NULL, revolentype_name, GAME_DEFAULT_REVOLENTYPE)
+
   GEN_INT("revolen", game.server.revolution_length,
          SSET_RULES_FLEXIBLE, SSET_SOCIOLOGY, SSET_RARE, SSET_TO_CLIENT,
          N_("Length in turns of revolution"),
-         N_("When changing governments, a period of anarchy lasting this "
-            "many turns will occur. "
-             "Setting this value to 0 will give a random "
-             "length of 1-5 turns."), NULL, NULL,
+         N_("When changing governments, a period of anarchy will occur. "
+             "Value of this setting, used the way 'revolentype' setting "
+             "dictates, defines the length of the anarchy."),
+          NULL, NULL,
          GAME_MIN_REVOLUTION_LENGTH, GAME_MAX_REVOLUTION_LENGTH, 
          GAME_DEFAULT_REVOLUTION_LENGTH)
 


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

Reply via email to