URL: <http://gna.org/patch/?3323>
Summary: Allow requirement range "within city workable radius" for tile-based requirements? Project: Freeciv Submitted by: jtn Submitted on: Sat Jun 16 14:02:30 2012 Category: None Priority: 3 - Low Status: Need Info Privacy: Public Assigned to: None Originator Email: Open/Closed: Open Discussion Lock: Any Planned Release: _______________________________________________________ Details: It might be nice if tile-based prerequisites (terrain, specials, bases etc) could be required to be somewhere in a range of a city's workable radius, rather than just on or adjacent to the city centre. However, the implications aren't trivial, so this ticket may end up closed without a fix. An example given freeciv-dev <http://mail.gna.org/public/freeciv-dev/2012-06/msg00052.html> was a "gold mine" city improvement which could only be built in a city with gold nearby (would also need patch #3322). Answering the question "is a tile with properties X in workable range of this city" isn't trivially cheap (requires iterating over city map), but is it prohibitively expensive? I suspect it's manageable unless some AI is going to call it in some inner loop. Answering the inverse question "which cities can work this tile" is likely to be prohibitively expensive, so we'd better avoid that. (As it happens, in the current implementation, it would actually be much cheaper to answer the question "which city _is_ working this tile". Perhaps "worked by city" would be a useful alternative range? ) It would seem reasonable to use the range "City" for this. In contexts where a non-NULL city is provided to is_req_active(), the "Tile" range already means the tile the city is on, and I can't think of another sensible meaning for "City" for tile-based requirements. (Except, perhaps, "city is _working_ this kind of tile".) A quick survey of situations where the "City" range is meaningful (I may have missed some): * Improvement build requirements: straightforward at build time. ** In some cases (but not others), improvements are sold if the requirement goes away (e.g., harbours need nearby ocean). The current mechanism for that (city_landlocked_sell_coastal_improvements()) already isn't very general and wouldn't be easy to extend to city-radius requirements. *** However, moving to the alternative strategy suggested in comments, of checking every improvement's requirements once per turn, would work. *** But, examples of reqs whose disappearance don't cause buildings to be sold include tech and other buildings. We probably don't want to change that. So there's inconsistency here already. ** It would be pretty annoying to have a gold mine sold due to a temporary city radius fluctuation due to plague or whatever. But that's probably up to ruleset designers. *** If we used a tile-worked requirement, we certainly wouldn't want to sell as soon as a city stopped working a tile. * Specialist requirements: probably sensible. ** May need to re-assess specialists whenever city radius or nearby terrain changes, expensive... * Disaster: straightforward, because disasters don't persist. _______________________________________________________ Reply to this item at: <http://gna.org/patch/?3323> _______________________________________________ Message sent via/by Gna! http://gna.org/ _______________________________________________ Freeciv-dev mailing list Freeciv-dev@gna.org https://mail.gna.org/listinfo/freeciv-dev