Author: sveinung Date: Tue Mar 15 12:36:52 2016 New Revision: 32241 URL: http://svn.gna.org/viewcvs/freeciv?rev=32241&view=rev Log: Base flag to extra flag ruleset upgrade support.
See patch #7059 Modified: trunk/common/base.c trunk/common/base.h trunk/server/rscompat.c trunk/server/rssanity.c trunk/server/ruleset.c Modified: trunk/common/base.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/base.c?rev=32241&r1=32240&r2=32241&view=diff ============================================================================== --- trunk/common/base.c (original) +++ trunk/common/base.c Tue Mar 15 12:36:52 2016 @@ -70,6 +70,18 @@ return FALSE; } +/*************************************************************************** + Returns TRUE iff the given flag is retired. + + If a base flag is retired without being replaced by an extra flag before + 3.0 is released rscompat_req_type_name_3_0() must be updated. +***************************************************************************/ +bool base_flag_is_retired(enum base_flag_id flag) +{ + /* No base flags have been retired yet. */ + return FALSE; +} + /**************************************************************************** Is tile native to base? ****************************************************************************/ Modified: trunk/common/base.h URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/base.h?rev=32241&r1=32240&r2=32241&view=diff ============================================================================== --- trunk/common/base.h (original) +++ trunk/common/base.h Tue Mar 15 12:36:52 2016 @@ -87,6 +87,7 @@ enum base_flag_id flag); bool is_base_flag_near_tile(const struct tile *ptile, enum base_flag_id flag); +bool base_flag_is_retired(enum base_flag_id flag); bool base_has_flag_for_utype(const struct base_type *pbase, enum base_flag_id flag, const struct unit_type *punittype); Modified: trunk/server/rscompat.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/rscompat.c?rev=32241&r1=32240&r2=32241&view=diff ============================================================================== --- trunk/server/rscompat.c (original) +++ trunk/server/rscompat.c Tue Mar 15 12:36:52 2016 @@ -712,6 +712,29 @@ TRUE, TRUE, "Targeted Sabotage City")); } + if (info->ver_terrain < 10) { + /* Map from retired base flag to current extra flag. */ + const struct { + enum base_flag_id from; + enum extra_flag_id to; + } base_to_extra_flag_map_3_0[] = { + }; + + extra_type_by_cause_iterate(EC_BASE, pextra) { + int i; + struct base_type *pbase = extra_base_get(pextra); + + for (i = 0; i < ARRAY_SIZE(base_to_extra_flag_map_3_0); i++) { + if (BV_ISSET(pbase->flags, base_to_extra_flag_map_3_0[i].from)) { + /* Set the *extra* user flag */ + BV_SET(pextra->flags, base_to_extra_flag_map_3_0[i].to); + /* Remove the retired *base* flag. */ + BV_CLR(pbase->flags, base_to_extra_flag_map_3_0[i].from); + } + } + } extra_type_by_cause_iterate_end; + } + /* Upgrade existing effects. */ iterate_effect_cache(effect_list_compat_cb, info); } @@ -776,5 +799,11 @@ return "Extra"; } + if (!fc_strcasecmp("BaseFlag", old_type) + && base_flag_is_retired(base_flag_id_by_name(old_value, + fc_strcasecmp))) { + return "ExtraFlag"; + } + return old_type; } Modified: trunk/server/rssanity.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/rssanity.c?rev=32241&r1=32240&r2=32241&view=diff ============================================================================== --- trunk/server/rssanity.c (original) +++ trunk/server/rssanity.c Tue Mar 15 12:36:52 2016 @@ -857,6 +857,26 @@ } extra_type_list_iterate_end; } extra_type_by_cause_iterate_end; + /* Bases */ + extra_type_by_cause_iterate(EC_BASE, pextra) { + int bfi; + struct base_type *pbase = extra_base_get(pextra); + + for (bfi = 0; bfi < BF_COUNT; bfi++) { + if (!base_flag_is_retired(bfi)) { + /* Still valid. */ + continue; + } + + if (BV_ISSET(pbase->flags, bfi)) { + ruleset_error(LOG_ERROR, + "Base %s uses the retired base flag %s!", + extra_name_translation(pextra), + base_flag_id_name(bfi)); + } + } + } extra_type_by_cause_iterate_end; + /* City styles */ for (i = 0; i < game.control.styles_count; i++) { if (!sanity_check_req_vec(&city_styles[i].reqs, TRUE, -1, Modified: trunk/server/ruleset.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/ruleset.c?rev=32241&r1=32240&r2=32241&view=diff ============================================================================== --- trunk/server/ruleset.c (original) +++ trunk/server/ruleset.c Tue Mar 15 12:36:52 2016 @@ -3276,6 +3276,14 @@ sval); ok = FALSE; break; + } else if ((!compat->compat_mode || compat->ver_terrain >= 10) + && base_flag_is_retired(flag)) { + ruleset_error(LOG_ERROR, "\"%s\" base \"%s\": retired flag " + "\"%s\". Please update the ruleset.", + filename, + extra_rule_name(pextra), + sval); + ok = FALSE; } else { BV_SET(pbase->flags, flag); } _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits