Author: cazfi
Date: Sat Oct 31 19:37:35 2015
New Revision: 30330

URL: http://svn.gna.org/viewcvs/freeciv?rev=30330&view=rev
Log:
Added server setting 'traitdistribution'.

Requested by Jacob Nevins <jtn>

See patch #5028

Modified:
    trunk/ai/aitraits.c
    trunk/common/fc_types.h
    trunk/common/game.c
    trunk/common/game.h
    trunk/common/traits.h
    trunk/data/alien/nations.ruleset
    trunk/data/civ1/nations.ruleset
    trunk/data/civ2/nations.ruleset
    trunk/data/civ2civ3/nations.ruleset
    trunk/data/classic/nations.ruleset
    trunk/data/experimental/game.ruleset
    trunk/data/experimental/nations.ruleset
    trunk/data/multiplayer/nations.ruleset
    trunk/data/stub/nations.ruleset
    trunk/fc_version
    trunk/server/ruleset.c
    trunk/server/settings.c

Modified: trunk/ai/aitraits.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/ai/aitraits.c?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/ai/aitraits.c (original)
+++ trunk/ai/aitraits.c Sat Oct 31 19:37:35 2015
@@ -20,6 +20,7 @@
 #include "rand.h"
 
 /* common */
+#include "game.h"
 #include "player.h"
 #include "traits.h"
 
@@ -39,7 +40,14 @@
     int min = pplayer->nation->server.traits[tr].min;
     int max = pplayer->nation->server.traits[tr].max;
 
-    pplayer->ai_common.traits[tr].val = fc_rand(max + 1 - min) + min;
+    switch (game.server.trait_dist) {
+    case TDM_FIXED:
+      pplayer->ai_common.traits[tr].val = 
pplayer->nation->server.traits[tr].fixed;
+      break;
+    case TDM_EVEN:
+      pplayer->ai_common.traits[tr].val = fc_rand(max + 1 - min) + min;
+      break;
+    }
     pplayer->ai_common.traits[tr].mod = 0;
   }
 }

Modified: trunk/common/fc_types.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/fc_types.h?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/common/fc_types.h     (original)
+++ trunk/common/fc_types.h     Sat Oct 31 19:37:35 2015
@@ -588,7 +588,12 @@
   BORDERS_DISABLED = 0,
   BORDERS_ENABLED,
   BORDERS_SEE_INSIDE,
-  BORDERS_EXPAND,
+  BORDERS_EXPAND
+};
+
+enum trait_dist_mode {
+  TDM_FIXED = 0,
+  TDM_EVEN
 };
 
 /* Used in the network protocol. */

Modified: trunk/common/game.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/game.c?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/common/game.c (original)
+++ trunk/common/game.c Sat Oct 31 19:37:35 2015
@@ -395,6 +395,7 @@
     game.server.mgr_turninterval  = GAME_DEFAULT_MGR_TURNINTERVAL;
     game.server.mgr_worldchance   = GAME_DEFAULT_MGR_WORLDCHANCE;
     game.server.migration         = GAME_DEFAULT_MIGRATION;
+    game.server.trait_dist        = GAME_DEFAULT_TRAIT_DIST_MODE;
     game.server.min_players       = GAME_DEFAULT_MIN_PLAYERS;
     game.server.natural_city_names = GAME_DEFAULT_NATURALCITYNAMES;
     game.server.plrcolormode      = GAME_DEFAULT_PLRCOLORMODE;

Modified: trunk/common/game.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/game.h?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/common/game.h (original)
+++ trunk/common/game.h Sat Oct 31 19:37:35 2015
@@ -154,6 +154,7 @@
       int mgr_turninterval;
       int mgr_worldchance;
       bool migration;
+      enum trait_dist_mode trait_dist;
       int min_players;
       bool natural_city_names;
       int netwait;
@@ -425,7 +426,9 @@
 #define GAME_DEFAULT_DISASTERS       10
 #define GAME_MIN_DISASTERS           0
 #define GAME_MAX_DISASTERS           1000
- 
+
+#define GAME_DEFAULT_TRAIT_DIST_MODE TDM_FIXED
+
 #define GAME_DEFAULT_SAVEPALACE      TRUE
 
 #define GAME_DEFAULT_HOMECAUGHTUNITS TRUE

Modified: trunk/common/traits.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/traits.h?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/common/traits.h       (original)
+++ trunk/common/traits.h       Sat Oct 31 19:37:35 2015
@@ -41,6 +41,7 @@
 {
   int min;
   int max;
+  int fixed;
 };
 
 #ifdef __cplusplus

Modified: trunk/data/alien/nations.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/alien/nations.ruleset?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/data/alien/nations.ruleset    (original)
+++ trunk/data/alien/nations.ruleset    Sat Oct 31 19:37:35 2015
@@ -32,10 +32,13 @@
 [default_traits]
 ;expansionist_min = 50
 ;expansionist_max = 50
+;expansionist_default = 50
 ;trader_min = 50
 ;trader_max = 50
+;trader_default = 50
 ;aggressive_min = 50
 ;aggressive_max = 50
+;aggressive_default = 50
 
 ; Descriptions of nation sets
 ; These are self-contained subsets of the available nations; one of these

Modified: trunk/data/civ1/nations.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/civ1/nations.ruleset?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/data/civ1/nations.ruleset     (original)
+++ trunk/data/civ1/nations.ruleset     Sat Oct 31 19:37:35 2015
@@ -35,10 +35,13 @@
 [default_traits]
 ;expansionist_min = 50
 ;expansionist_max = 50
+;expansionist_default = 50
 ;trader_min = 50
 ;trader_max = 50
+;trader_default = 50
 ;aggressive_min = 50
 ;aggressive_max = 50
+;aggressive_default = 50
 
 ; Descriptions of nation sets
 ; These are self-contained subsets of the available nations; one of these

Modified: trunk/data/civ2/nations.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/civ2/nations.ruleset?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/data/civ2/nations.ruleset     (original)
+++ trunk/data/civ2/nations.ruleset     Sat Oct 31 19:37:35 2015
@@ -37,10 +37,13 @@
 [default_traits]
 ;expansionist_min = 50
 ;expansionist_max = 50
+;expansionist_default = 50
 ;trader_min = 50
 ;trader_max = 50
+;trader_default = 50
 ;aggressive_min = 50
 ;aggressive_max = 50
+;aggressive_default = 50
 
 ; Descriptions of nation sets
 ; These are self-contained subsets of the available nations; one of these

Modified: trunk/data/civ2civ3/nations.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/civ2civ3/nations.ruleset?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/data/civ2civ3/nations.ruleset (original)
+++ trunk/data/civ2civ3/nations.ruleset Sat Oct 31 19:37:35 2015
@@ -32,10 +32,13 @@
 [default_traits]
 ;expansionist_min = 50
 ;expansionist_max = 50
+;expansionist_default = 50
 ;trader_min = 50
 ;trader_max = 50
+;trader_default = 50
 ;aggressive_min = 50
 ;aggressive_max = 50
+;aggressive_default = 50
 
 ; Please keep [ruledit] section in sync with these includes
 *include "default/nationlist.ruleset"

Modified: trunk/data/classic/nations.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/classic/nations.ruleset?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/data/classic/nations.ruleset  (original)
+++ trunk/data/classic/nations.ruleset  Sat Oct 31 19:37:35 2015
@@ -32,10 +32,13 @@
 [default_traits]
 ;expansionist_min = 50
 ;expansionist_max = 50
+;expansionist_default = 50
 ;trader_min = 50
 ;trader_max = 50
+;trader_default = 50
 ;aggressive_min = 50
 ;aggressive_max = 50
+;aggressive_default = 50
 
 ; Please keep [ruledit] section in sync with these includes
 *include "default/nationlist.ruleset"

Modified: trunk/data/experimental/game.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/experimental/game.ruleset?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/data/experimental/game.ruleset        (original)
+++ trunk/data/experimental/game.ruleset        Sat Oct 31 19:37:35 2015
@@ -823,4 +823,5 @@
       "ec_chat", TRUE, FALSE
       "ec_info", TRUE, FALSE
       "techlossforgiveness", 15, FALSE
-    }
+      "traitdistribution", "EVEN", FALSE
+    }

Modified: trunk/data/experimental/nations.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/experimental/nations.ruleset?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/data/experimental/nations.ruleset     (original)
+++ trunk/data/experimental/nations.ruleset     Sat Oct 31 19:37:35 2015
@@ -32,10 +32,13 @@
 [default_traits]
 expansionist_min = 35
 expansionist_max = 80
+expansionist_default = 50
 trader_min = 35
 trader_max = 80
+trader_default = 50
 aggressive_min = 35
 aggressive_max = 80
+aggressive_default = 50
 
 ; Please keep [ruledit] section in sync with these includes
 *include "default/nationlist.ruleset"

Modified: trunk/data/multiplayer/nations.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/multiplayer/nations.ruleset?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/data/multiplayer/nations.ruleset      (original)
+++ trunk/data/multiplayer/nations.ruleset      Sat Oct 31 19:37:35 2015
@@ -32,10 +32,13 @@
 [default_traits]
 ;expansionist_min = 50
 ;expansionist_max = 50
+;expansionist_default = 50
 ;trader_min = 50
 ;trader_max = 50
+;trader_default = 50
 ;aggressive_min = 50
 ;aggressive_max = 50
+;aggressive_default = 50
 
 ; Please keep [ruledit] section in sync with these includes
 *include "default/nationlist.ruleset"

Modified: trunk/data/stub/nations.ruleset
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/data/stub/nations.ruleset?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/data/stub/nations.ruleset     (original)
+++ trunk/data/stub/nations.ruleset     Sat Oct 31 19:37:35 2015
@@ -21,10 +21,13 @@
 [default_traits]
 ;expansionist_min = 50
 ;expansionist_max = 50
+;expansionist_default = 50
 ;trader_min       = 50
 ;trader_max       = 50
+;trader_default   = 50
 ;aggressive_min   = 50
 ;aggressive_max   = 50
+;aggressive_default = 50
 
 ; Descriptions of nation sets
 ; These are self-contained subsets of the available nations; one of these

Modified: trunk/fc_version
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/fc_version?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/fc_version    (original)
+++ trunk/fc_version    Sat Oct 31 19:37:35 2015
@@ -54,7 +54,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-3.0-2015.Oct.30"
+NETWORK_CAPSTRING_MANDATORY="+Freeciv.Devel-3.0-2015.Oct.31"
 NETWORK_CAPSTRING_OPTIONAL=""
 
 FREECIV_DISTRIBUTOR=""

Modified: trunk/server/ruleset.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/ruleset.c?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/server/ruleset.c      (original)
+++ trunk/server/ruleset.c      Sat Oct 31 19:37:35 2015
@@ -972,6 +972,10 @@
                                              secname,
                                              field_prefix,
                                              trait_names[tr]);
+    out[tr].fixed = secfile_lookup_int_default(file, -1, "%s.%s%s_default",
+                                               secname,
+                                               field_prefix,
+                                               trait_names[tr]);
   }
 
   fc_assert(tr == trait_end()); /* number of trait_names correct */
@@ -3929,6 +3933,12 @@
     if (game.server.default_traits[tr].max < 0) {
       game.server.default_traits[tr].max = TRAIT_DEFAULT_VALUE;
     }
+    if (game.server.default_traits[tr].fixed < 0) {
+      int diff = game.server.default_traits[tr].max - 
game.server.default_traits[tr].min;
+
+      /* TODO: Should sometimes round the a / 2 = x.5 results up */
+      game.server.default_traits[tr].fixed = diff / 2 + 
game.server.default_traits[tr].min;
+    }
     if (game.server.default_traits[tr].max < 
game.server.default_traits[tr].min) {
       ruleset_error(LOG_ERROR, "Default values for trait %s not sane.",
                     trait_name(tr));
@@ -4234,11 +4244,27 @@
       /* Load nation traits */
       ruleset_load_traits(pnation->server.traits, file, sec_name, "trait_");
       for (tr = trait_begin(); tr != trait_end(); tr = trait_next(tr)) {
+        bool server_traits_used = TRUE;
+
         if (pnation->server.traits[tr].min < 0) {
           pnation->server.traits[tr].min = game.server.default_traits[tr].min;
+        } else {
+          server_traits_used = FALSE;
         }
         if (pnation->server.traits[tr].max < 0) {
           pnation->server.traits[tr].max = game.server.default_traits[tr].max;
+        } else {
+          server_traits_used = FALSE;
+        }
+        if (pnation->server.traits[tr].fixed < 0) {
+          if (server_traits_used) {
+            pnation->server.traits[tr].fixed = 
game.server.default_traits[tr].fixed;
+          } else {
+            int diff = pnation->server.traits[tr].max - 
pnation->server.traits[tr].min;
+
+            /* TODO: Should sometimes round the a / 2 = x.5 results up */
+            pnation->server.traits[tr].fixed = diff / 2 + 
pnation->server.traits[tr].min;
+          }
         }
         if (pnation->server.traits[tr].max < pnation->server.traits[tr].min) {
           ruleset_error(LOG_ERROR, "%s values for trait %s not sane.",

Modified: trunk/server/settings.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/settings.c?rev=30330&r1=30329&r2=30330&view=diff
==============================================================================
--- trunk/server/settings.c     (original)
+++ trunk/server/settings.c     Sat Oct 31 19:37:35 2015
@@ -354,6 +354,18 @@
 }
 
 /****************************************************************************
+  Trait distribution setting names accessor.
+****************************************************************************/
+static const struct sset_val_name *trait_dist_name(int trait_dist)
+{
+  switch (trait_dist) {
+  NAME_CASE(TDM_FIXED, "FIXED", N_("Fixed"));
+  NAME_CASE(TDM_EVEN, "EVEN", N_("Even"));
+  }
+  return NULL;
+}
+
+/****************************************************************************
   Player colors configuration setting names accessor.
 ****************************************************************************/
 static const struct sset_val_name *plrcol_name(int plrcol)
@@ -1909,6 +1921,12 @@
           NULL, NULL,
           GAME_MIN_DISASTERS, GAME_MAX_DISASTERS,
           GAME_DEFAULT_DISASTERS)
+
+  GEN_ENUM("traitdistribution", game.server.trait_dist,
+           SSET_RULES, SSET_SOCIOLOGY, SSET_RARE, SSET_TO_CLIENT,
+           N_("AI trait distribution method"),
+           N_("How trait values are given to AI players."),
+           NULL, NULL, NULL, trait_dist_name, GAME_DEFAULT_TRAIT_DIST_MODE)
 
   GEN_INT("razechance", game.server.razechance,
          SSET_RULES, SSET_MILITARY, SSET_RARE, SSET_TO_CLIENT,


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

Reply via email to