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