Author: sveinung Date: Fri Sep 11 10:47:24 2015 New Revision: 29857 URL: http://svn.gna.org/viewcvs/freeciv?rev=29857&view=rev Log: Add the new requirement type BuildingGenus
Limit it to the local range for now. See patch #6341 Modified: trunk/ai/default/daieffects.c trunk/client/helpdata.c trunk/common/fc_types.h trunk/common/improvement.h trunk/common/requirements.c trunk/doc/README.effects trunk/fc_version trunk/server/cityturn.c trunk/server/rssanity.c Modified: trunk/ai/default/daieffects.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/ai/default/daieffects.c?rev=29857&r1=29856&r2=29857&view=diff ============================================================================== --- trunk/ai/default/daieffects.c (original) +++ trunk/ai/default/daieffects.c Fri Sep 11 10:47:24 2015 @@ -719,6 +719,7 @@ case VUT_OTYPE: case VUT_CITYTILE: + case VUT_IMPR_GENUS: /* Can always be achieved. */ return TRUE; Modified: trunk/client/helpdata.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/client/helpdata.c?rev=29857&r1=29856&r2=29857&view=diff ============================================================================== --- trunk/client/helpdata.c (original) +++ trunk/client/helpdata.c Fri Sep 11 10:47:24 2015 @@ -619,6 +619,25 @@ cat_snprintf(buf, bufsz, _("Doesn't apply to the \"%s\"" " action.\n"), action_name_translation(preq->source.value.action)); + } + return TRUE; + default: + /* Not supported. */ + break; + } + break; + + case VUT_IMPR_GENUS: + switch (preq->range) { + case REQ_RANGE_LOCAL: + if (preq->present) { + cat_snprintf(buf, bufsz, _("Applies to \"%s\" buildings.\n"), + impr_genus_id_translated_name( + preq->source.value.impr_genus)); + } else { + cat_snprintf(buf, bufsz, _("Doesn't apply to \"%s\" buildings.\n"), + impr_genus_id_translated_name( + preq->source.value.impr_genus)); } return TRUE; default: Modified: trunk/common/fc_types.h URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/fc_types.h?rev=29857&r1=29856&r2=29857&view=diff ============================================================================== --- trunk/common/fc_types.h (original) +++ trunk/common/fc_types.h Fri Sep 11 10:47:24 2015 @@ -309,6 +309,18 @@ #define SPECENUM_VALUE3NAME N_("Hex") #include "specenum_gen.h" +/* Used in the network protocol. */ +#define SPECENUM_NAME impr_genus_id +#define SPECENUM_VALUE0 IG_GREAT_WONDER +#define SPECENUM_VALUE0NAME "GreatWonder" +#define SPECENUM_VALUE1 IG_SMALL_WONDER +#define SPECENUM_VALUE1NAME "SmallWonder" +#define SPECENUM_VALUE2 IG_IMPROVEMENT +#define SPECENUM_VALUE2NAME "Improvement" +#define SPECENUM_VALUE3 IG_SPECIAL +#define SPECENUM_VALUE3NAME "Special" +#include "specenum_gen.h" + /* Sometimes we don't know (or don't care) if some requirements for effect * are currently fulfilled or not. This enum tells lower level functions * how to handle uncertain requirements. @@ -358,6 +370,7 @@ int diplrel; /* enum diplstate_type or enum diplrel_other */ enum ustate_prop unit_state; + enum impr_genus_id impr_genus; int minmoves; int max_tile_units; int minveteran; @@ -449,8 +462,10 @@ #define SPECENUM_VALUE35NAME "NationGroup" #define SPECENUM_VALUE36 VUT_TOPO #define SPECENUM_VALUE36NAME "Topology" -#define SPECENUM_VALUE37 VUT_ACTION -#define SPECENUM_VALUE37NAME "Action" +#define SPECENUM_VALUE37 VUT_IMPR_GENUS +#define SPECENUM_VALUE37NAME "BuildingGenus" +#define SPECENUM_VALUE38 VUT_ACTION +#define SPECENUM_VALUE38NAME "Action" /* Keep this last. */ #define SPECENUM_COUNT VUT_COUNT #include "specenum_gen.h" Modified: trunk/common/improvement.h URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/improvement.h?rev=29857&r1=29856&r2=29857&view=diff ============================================================================== --- trunk/common/improvement.h (original) +++ trunk/common/improvement.h Fri Sep 11 10:47:24 2015 @@ -62,18 +62,6 @@ #include "specenum_gen.h" /* Used in the network protocol. */ -#define SPECENUM_NAME impr_genus_id -#define SPECENUM_VALUE0 IG_GREAT_WONDER -#define SPECENUM_VALUE0NAME "GreatWonder" -#define SPECENUM_VALUE1 IG_SMALL_WONDER -#define SPECENUM_VALUE1NAME "SmallWonder" -#define SPECENUM_VALUE2 IG_IMPROVEMENT -#define SPECENUM_VALUE2NAME "Improvement" -#define SPECENUM_VALUE3 IG_SPECIAL -#define SPECENUM_VALUE3NAME "Special" -#include "specenum_gen.h" - -/* Used in the network protocol. */ BV_DEFINE(bv_imprs, B_LAST); /* Type of improvement. (Read from buildings.ruleset file.) */ Modified: trunk/common/requirements.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/requirements.c?rev=29857&r1=29856&r2=29857&view=diff ============================================================================== --- trunk/common/requirements.c (original) +++ trunk/common/requirements.c Fri Sep 11 10:47:24 2015 @@ -106,6 +106,12 @@ return source; } break; + case VUT_IMPR_GENUS: + source.value.impr_genus = impr_genus_id_by_name(value, fc_strcasecmp); + if (impr_genus_id_is_valid(source.value.impr_genus)) { + return source; + } + break; case VUT_EXTRA: source.value.extra = extra_type_by_rule_name(value); if (source.value.extra != NULL) { @@ -352,6 +358,9 @@ return source; } break; + case VUT_IMPR_GENUS: + source.value.impr_genus = value; + return source; case VUT_EXTRA: source.value.extra = extra_by_number(value); return source; @@ -515,6 +524,8 @@ return style_number(source->value.style); case VUT_IMPROVEMENT: return improvement_number(source->value.building); + case VUT_IMPR_GENUS: + return source->value.impr_genus; case VUT_EXTRA: return extra_number(source->value.extra); case VUT_TERRAIN: @@ -632,6 +643,7 @@ case VUT_COUNT: break; case VUT_IMPROVEMENT: + case VUT_IMPR_GENUS: case VUT_EXTRA: case VUT_TERRAIN: case VUT_TERRFLAG: @@ -771,6 +783,10 @@ && req.range != REQ_RANGE_CITY && req.range != REQ_RANGE_PLAYER); break; + case VUT_IMPR_GENUS: + /* TODO: Support other ranges too. */ + invalid = req.range != REQ_RANGE_LOCAL; + break; case VUT_IMPROVEMENT: /* Valid ranges depend on the building genus (wonder/improvement), * which might not have been loaded from the ruleset yet. @@ -796,6 +812,7 @@ case VUT_ADVANCE: invalid = survives && req.range != REQ_RANGE_WORLD; break; + case VUT_IMPR_GENUS: case VUT_GOVERNMENT: case VUT_TERRAIN: case VUT_UTYPE: @@ -2564,6 +2581,12 @@ req->range, req->survives, req->source.value.building); break; + case VUT_IMPR_GENUS: + eval = (target_building ? BOOL_TO_TRISTATE( + target_building->genus + == req->source.value.impr_genus) + : TRI_MAYBE); + break; case VUT_EXTRA: eval = is_extra_type_in_range(target_tile, target_city, req->range, req->survives, @@ -2876,6 +2899,7 @@ case VUT_GOVERNMENT: case VUT_ACHIEVEMENT: case VUT_IMPROVEMENT: + case VUT_IMPR_GENUS: case VUT_MINSIZE: case VUT_MINCULTURE: case VUT_NATIONALITY: @@ -2955,6 +2979,8 @@ return psource1->value.style == psource2->value.style; case VUT_IMPROVEMENT: return psource1->value.building == psource2->value.building; + case VUT_IMPR_GENUS: + return psource1->value.impr_genus == psource2->value.impr_genus; case VUT_EXTRA: return psource1->value.extra == psource2->value.extra; case VUT_TERRAIN: @@ -3057,6 +3083,8 @@ return style_rule_name(psource->value.style); case VUT_IMPROVEMENT: return improvement_rule_name(psource->value.building); + case VUT_IMPR_GENUS: + return impr_genus_id_name(psource->value.impr_genus); case VUT_EXTRA: return extra_rule_name(psource->value.extra); case VUT_TERRAIN: @@ -3175,6 +3203,11 @@ fc_strlcat(buf, improvement_name_translation(psource->value.building), bufsz); return buf; + case VUT_IMPR_GENUS: + fc_strlcat(buf, + impr_genus_id_translated_name(psource->value.impr_genus), + bufsz); + return buf; case VUT_EXTRA: fc_strlcat(buf, extra_name_translation(psource->value.extra), bufsz); return buf; Modified: trunk/doc/README.effects URL: http://svn.gna.org/viewcvs/freeciv/trunk/doc/README.effects?rev=29857&r1=29856&r2=29857&view=diff ============================================================================== --- trunk/doc/README.effects (original) +++ trunk/doc/README.effects Fri Sep 11 10:47:24 2015 @@ -49,6 +49,7 @@ Achievement: World, Alliance, Team, Player Gov: Player Building: World, Alliance, Team, Player, Continent, Traderoute, City, Local +BuildingGenus: Local Extra: Local, Adjacent, CAdjacent, Traderoute, City BaseFlag: Local, Adjacent, CAdjacent, Traderoute, City RoadFlag: Local, Adjacent, CAdjacent, Traderoute, City Modified: trunk/fc_version URL: http://svn.gna.org/viewcvs/freeciv/trunk/fc_version?rev=29857&r1=29856&r2=29857&view=diff ============================================================================== --- trunk/fc_version (original) +++ trunk/fc_version Fri Sep 11 10:47:24 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.Sep.10" +NETWORK_CAPSTRING_MANDATORY="+Freeciv.Devel-3.0-2015.Sep.11" NETWORK_CAPSTRING_OPTIONAL="" FREECIV_DISTRIBUTOR="" Modified: trunk/server/cityturn.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/cityturn.c?rev=29857&r1=29856&r2=29857&view=diff ============================================================================== --- trunk/server/cityturn.c (original) +++ trunk/server/cityturn.c Fri Sep 11 10:47:24 2015 @@ -1205,7 +1205,36 @@ API_TYPE_STRING, "have_building"); } break; - case VUT_GOVERNMENT: + case VUT_IMPR_GENUS: + if (preq->present) { + notify_player(pplayer, city_tile(pcity), + E_CITY_CANTBUILD, ftc_server, + _("%s can't build %s from the worklist; " + "need to have %s first. Postponing..."), + city_link(pcity), + city_improvement_name_translation(pcity, ptarget), + impr_genus_id_translated_name( + preq->source.value.impr_genus)); + script_server_signal_emit("building_cant_be_built", 3, + API_TYPE_BUILDING_TYPE, ptarget, + API_TYPE_CITY, pcity, + API_TYPE_STRING, "need_building_genus"); + } else { + notify_player(pplayer, city_tile(pcity), + E_CITY_CANTBUILD, ftc_server, + _("%s can't build %s from the worklist; " + "need to not have %s. Postponing..."), + city_link(pcity), + city_improvement_name_translation(pcity, ptarget), + impr_genus_id_translated_name( + preq->source.value.impr_genus)); + script_server_signal_emit("building_cant_be_built", 3, + API_TYPE_BUILDING_TYPE, ptarget, + API_TYPE_CITY, pcity, + API_TYPE_STRING, "have_building_genus"); + } + break; + case VUT_GOVERNMENT: if (preq->present) { notify_player(pplayer, city_tile(pcity), E_CITY_CANTBUILD, ftc_server, Modified: trunk/server/rssanity.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/server/rssanity.c?rev=29857&r1=29856&r2=29857&view=diff ============================================================================== --- trunk/server/rssanity.c (original) +++ trunk/server/rssanity.c Fri Sep 11 10:47:24 2015 @@ -165,6 +165,7 @@ case VUT_TERRAINALTER: /* Local range only */ case VUT_CITYTILE: case VUT_STYLE: + case VUT_IMPR_GENUS: /* There can be only one requirement of these types (with current * range limitations) * Requirements might be identical, but we consider multiple _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits