Feature #181 » 0042-Unhardcode-wld.map-from-citymindist_prevents_city_on.patch
| common/actres.c | ||
|---|---|---|
|
return TRI_NO;
|
||
|
}
|
||
|
if (citymindist_prevents_city_on_tile(target->tile)) {
|
||
|
if (citymindist_prevents_city_on_tile(nmap, target->tile)) {
|
||
|
if (omniscient) {
|
||
|
/* No need to check again. */
|
||
|
return TRI_NO;
|
||
| common/city.c | ||
|---|---|---|
|
Returns TRUE iff it is illegal to found a city on the specified tile
|
||
|
because of citymindist.
|
||
|
**************************************************************************/
|
||
|
bool citymindist_prevents_city_on_tile(const struct tile *ptile)
|
||
|
bool citymindist_prevents_city_on_tile(const struct civ_map *nmap,
|
||
|
const struct tile *ptile)
|
||
|
{
|
||
|
/* citymindist minimum is 1, meaning adjacent is okay */
|
||
|
int citymindist = game.info.citymindist;
|
||
|
square_iterate(&(wld.map), ptile, citymindist - 1, ptile1) {
|
||
|
square_iterate(nmap, ptile, citymindist - 1, ptile1) {
|
||
|
if (tile_city(ptile1)) {
|
||
|
return TRUE;
|
||
|
}
|
||
| ... | ... | |
|
{
|
||
|
struct civ_map *nmap = &(wld.map);
|
||
|
if (!city_can_be_built_tile_only(ptile)) {
|
||
|
if (!city_can_be_built_tile_only(nmap, ptile)) {
|
||
|
return FALSE;
|
||
|
}
|
||
| ... | ... | |
|
It may still be illegal for any unit to build a city at the specified
|
||
|
tile.
|
||
|
**************************************************************************/
|
||
|
bool city_can_be_built_tile_only(const struct tile *ptile)
|
||
|
bool city_can_be_built_tile_only(const struct civ_map *nmap,
|
||
|
const struct tile *ptile)
|
||
|
{
|
||
|
if (terrain_has_flag(tile_terrain(ptile), TER_NO_CITIES)) {
|
||
|
/* No cities on this terrain. */
|
||
|
return FALSE;
|
||
|
}
|
||
|
if (citymindist_prevents_city_on_tile(ptile)) {
|
||
|
if (citymindist_prevents_city_on_tile(nmap, ptile)) {
|
||
|
return FALSE;
|
||
|
}
|
||
| common/city.h | ||
|---|---|---|
|
const struct tile *ptile);
|
||
|
bool city_can_work_tile(const struct city *pcity, const struct tile *ptile);
|
||
|
bool citymindist_prevents_city_on_tile(const struct tile *ptile);
|
||
|
bool citymindist_prevents_city_on_tile(const struct civ_map *nmap,
|
||
|
const struct tile *ptile);
|
||
|
bool city_can_be_built_here(const struct tile *ptile,
|
||
|
const struct unit *punit,
|
||
|
bool hut_test);
|
||
|
bool city_can_be_built_tile_only(const struct tile *ptile);
|
||
|
bool city_can_be_built_tile_only(const struct civ_map *nmap,
|
||
|
const struct tile *ptile);
|
||
|
/* List functions */
|
||
|
struct city *city_list_find_number(struct city_list *This, int id);
|
||
| server/unithand.c | ||
|---|---|---|
|
explnat->kind = ANEK_CITY_NO_CAPACITY;
|
||
|
explnat->capacity_city = game_city_by_number(target_city->id);
|
||
|
} else if (action_has_result_safe(paction, ACTRES_FOUND_CITY)
|
||
|
&& citymindist_prevents_city_on_tile(target_tile)) {
|
||
|
&& citymindist_prevents_city_on_tile(nmap, target_tile)) {
|
||
|
explnat->kind = ANEK_CITY_TOO_CLOSE_TGT;
|
||
|
} else if ((action_has_result_safe(paction, ACTRES_PARADROP_CONQUER)
|
||
|
|| action_has_result_safe(paction, ACTRES_PARADROP))
|
||
| ... | ... | |
|
struct ane_expl *explnat = expl_act_not_enabl(punit, ACTION_ANY,
|
||
|
target_tile,
|
||
|
target_city, target_unit);
|
||
|
const struct civ_map *nmap = &(wld.map);
|
||
|
switch (explnat->kind) {
|
||
|
case ANEK_ACTOR_UNIT:
|
||
| ... | ... | |
|
if (!utype_can_do_act_when_ustate(unit_type_get(punit),
|
||
|
ACTION_ANY, USP_LIVABLE_TILE,
|
||
|
FALSE)
|
||
|
&& !can_unit_exist_at_tile(&(wld.map), punit, unit_tile(punit))) {
|
||
|
&& !can_unit_exist_at_tile(nmap, punit, unit_tile(punit))) {
|
||
|
unit_type_iterate(utype) {
|
||
|
if (utype_can_do_act_when_ustate(utype, ACTION_ANY,
|
||
|
USP_LIVABLE_TILE, FALSE)) {
|
||