Bug #209 » 0023-Unhardcode-wld.map-from-can_unit_-paradrop-teleport.patch
| ai/default/aiparatrooper.c | ||
|---|---|---|
|
{
|
||
|
struct city *pcity = tile_city(unit_tile(punit));
|
||
|
struct tile *ptile_dest = NULL;
|
||
|
const struct civ_map *nmap = &(wld.map);
|
||
|
int sanity = punit->id;
|
||
|
/* defend attacking (and be opportunistic too) */
|
||
|
/* Defend attacking (and be opportunistic too) */
|
||
|
if (!dai_military_rampage(punit, RAMPAGE_ANYTHING,
|
||
|
RAMPAGE_FREE_CITY_OR_BETTER)) {
|
||
|
/* dead */
|
||
|
/* Dead */
|
||
|
return;
|
||
|
}
|
||
|
/* check to recover hit points */
|
||
|
/* Check to recover hit points */
|
||
|
if ((punit->hp < unit_type_get(punit)->hp / 2) && pcity) {
|
||
|
UNIT_LOG(LOGLEVEL_PARATROOPER, punit, "Recovering hit points.");
|
||
|
return;
|
||
|
}
|
||
|
/* nothing to do! */
|
||
|
/* Nothing to do! */
|
||
|
if (punit->moves_left == 0) {
|
||
|
return;
|
||
|
}
|
||
| ... | ... | |
|
return;
|
||
|
}
|
||
|
if (can_unit_paradrop(punit)) {
|
||
|
if (can_unit_paradrop(nmap, punit)) {
|
||
|
ptile_dest = find_best_tile_to_paradrop_to(ait, punit);
|
||
|
if (ptile_dest) {
|
||
| ... | ... | |
|
}
|
||
|
}
|
||
|
} else {
|
||
|
/* we can't paradrop :-( */
|
||
|
/* We can't paradrop :-( */
|
||
|
struct city *acity = NULL;
|
||
|
/* we are in a city, so don't try to find another */
|
||
|
/* We are in a city, so don't try to find another */
|
||
|
if (pcity) {
|
||
|
UNIT_LOG(LOGLEVEL_PARATROOPER, punit,
|
||
|
"waiting in a city for next turn.");
|
||
|
return;
|
||
|
}
|
||
|
/* find a city to go to recover and paradrop from */
|
||
|
/* Find a city to go to recover and paradrop from */
|
||
|
acity = find_nearest_safe_city(punit);
|
||
|
if (acity) {
|
||
| client/control.c | ||
|---|---|---|
|
return;
|
||
|
}
|
||
|
unit_list_iterate(punits, punit) {
|
||
|
if (can_unit_paradrop(punit)) {
|
||
|
if (can_unit_paradrop(&(wld.map), punit)) {
|
||
|
can = TRUE;
|
||
|
break;
|
||
|
}
|
||
| ... | ... | |
|
}
|
||
|
unit_list_iterate(punits, punit) {
|
||
|
if (can_unit_teleport(punit)) {
|
||
|
if (can_unit_teleport(&(wld.map), punit)) {
|
||
|
can = TRUE;
|
||
|
break;
|
||
|
}
|
||
| client/gui-gtk-3.22/menu.c | ||
|---|---|---|
|
menu_entry_set_sensitive("UNIT_SENTRY",
|
||
|
can_units_do_activity_client(punits, ACTIVITY_SENTRY));
|
||
|
menu_entry_set_sensitive("DO_PARADROP",
|
||
|
can_units_do(punits, can_unit_paradrop));
|
||
|
can_units_do_on_map(&(wld.map), punits, can_unit_paradrop));
|
||
|
/* FIXME: should conditionally rename "Pillage" to "Pillage..." in cases
|
||
|
* where selecting the command results in a dialog box listing options of
|
||
|
* what to pillage */
|
||
| client/gui-gtk-4.0/menu.c | ||
|---|---|---|
|
units_can_do_action(punits, ACTION_ANY, TRUE));
|
||
|
menu_entry_set_sensitive(map, "UNIT_TELEPORT",
|
||
|
can_units_do(punits, can_unit_teleport));
|
||
|
can_units_do_on_map(&(wld.map), punits, can_unit_teleport));
|
||
|
menu_entry_set_sensitive(map, "BUILD_ROAD",
|
||
|
(can_units_do_any_road(&(wld.map), punits)
|
||
| ... | ... | |
|
can_units_do_activity_client(punits,
|
||
|
ACTIVITY_FORTIFYING));
|
||
|
menu_entry_set_sensitive(map, "PARADROP",
|
||
|
can_units_do(punits, can_unit_paradrop));
|
||
|
can_units_do_on_map(&(wld.map), punits, can_unit_paradrop));
|
||
|
menu_entry_set_sensitive(map, "PILLAGE",
|
||
|
can_units_do_activity_client(punits, ACTIVITY_PILLAGE));
|
||
|
menu_entry_set_sensitive(map, "CLEAN",
|
||
| client/gui-qt/hudwidget.cpp | ||
|---|---|---|
|
}
|
||
|
// Paradrop
|
||
|
if (can_unit_paradrop(current_unit)) {
|
||
|
if (can_unit_paradrop(&(wld.map), current_unit)) {
|
||
|
a = new hud_action(this);
|
||
|
a->action_shortcut = SC_PARADROP;
|
||
|
a->set_pixmap(fc_icons::instance()->get_pixmap("paradrop"));
|
||
| client/gui-qt/menu.cpp | ||
|---|---|---|
|
break;
|
||
|
case PARADROP:
|
||
|
if (can_units_do(punits, can_unit_paradrop)) {
|
||
|
if (can_units_do_on_map(&(wld.map), punits, can_unit_paradrop)) {
|
||
|
i.value()->setEnabled(true);
|
||
|
i.value()->setText(QString(action_id_name_translation(ACTION_PARADROP))
|
||
|
.replace("&", "&&"));
|
||
| ... | ... | |
|
void mr_menu::slot_paradrop()
|
||
|
{
|
||
|
unit_list_iterate(get_units_in_focus(), punit) {
|
||
|
if (can_unit_paradrop(punit)) {
|
||
|
if (can_unit_paradrop(&(wld.map), punit)) {
|
||
|
key_unit_paradrop();
|
||
|
}
|
||
|
} unit_list_iterate_end;
|
||
| client/gui-sdl2/dialogs.c | ||
|---|---|---|
|
#endif /* 0 */
|
||
|
/* FIXME: This logic seems to try to mirror do_paradrop() why? */
|
||
|
if (can_unit_paradrop(focus_unit) && client_tile_get_known(ptile)
|
||
|
if (can_unit_paradrop(&(wld.map), focus_unit) && client_tile_get_known(ptile)
|
||
|
&& !(((pcity && pplayers_non_attack(client.conn.playing, city_owner(pcity)))
|
||
|
|| is_non_attack_unit_tile(ptile, client.conn.playing)))
|
||
|
&& (unit_type_get(focus_unit)->paratroopers_range >=
|
||
| client/gui-sdl2/menu.c | ||
|---|---|---|
|
set_wflag(order_airbase_button, WF_HIDDEN);
|
||
|
}
|
||
|
if (can_unit_paradrop(punit)) {
|
||
|
if (can_unit_paradrop(&(wld.map), punit)) {
|
||
|
local_show(ID_UNIT_ORDER_PARADROP);
|
||
|
} else {
|
||
|
local_hide(ID_UNIT_ORDER_PARADROP);
|
||
| client/gui-sdl3/dialogs.c | ||
|---|---|---|
|
#endif /* 0 */
|
||
|
/* FIXME: This logic seems to try to mirror do_paradrop() why? */
|
||
|
if (can_unit_paradrop(focus_unit) && client_tile_get_known(ptile)
|
||
|
if (can_unit_paradrop(&(wld.map), focus_unit) && client_tile_get_known(ptile)
|
||
|
&& !(((pcity && pplayers_non_attack(client.conn.playing, city_owner(pcity)))
|
||
|
|| is_non_attack_unit_tile(ptile, client.conn.playing)))
|
||
|
&& (unit_type_get(focus_unit)->paratroopers_range >=
|
||
| client/gui-sdl3/menu.c | ||
|---|---|---|
|
set_wflag(order_airbase_button, WF_HIDDEN);
|
||
|
}
|
||
|
if (can_unit_paradrop(punit)) {
|
||
|
if (can_unit_paradrop(&(wld.map), punit)) {
|
||
|
local_show(ID_UNIT_ORDER_PARADROP);
|
||
|
} else {
|
||
|
local_hide(ID_UNIT_ORDER_PARADROP);
|
||
| common/unit.c | ||
|---|---|---|
|
a friendly city or on an airbase special, has enough movepoints left, and
|
||
|
has not paradropped yet this turn.
|
||
|
**************************************************************************/
|
||
|
bool can_unit_teleport(const struct unit *punit)
|
||
|
bool can_unit_teleport(const struct civ_map *nmap, const struct unit *punit)
|
||
|
{
|
||
|
const struct civ_map *nmap = &(wld.map);
|
||
|
action_by_result_iterate(paction, ACTRES_TELEPORT) {
|
||
|
if (action_maybe_possible_actor_unit(nmap, action_id(paction), punit)) {
|
||
|
return TRUE;
|
||
| ... | ... | |
|
a friendly city or on an airbase special, has enough movepoints left, and
|
||
|
has not paradropped yet this turn.
|
||
|
**************************************************************************/
|
||
|
bool can_unit_paradrop(const struct unit *punit)
|
||
|
bool can_unit_paradrop(const struct civ_map *nmap, const struct unit *punit)
|
||
|
{
|
||
|
const struct civ_map *nmap = &(wld.map);
|
||
|
action_by_result_iterate(paction, ACTRES_PARADROP) {
|
||
|
if (action_maybe_possible_actor_unit(nmap, action_id(paction), punit)) {
|
||
|
return TRUE;
|
||
| common/unit.h | ||
|---|---|---|
|
bool can_unit_unload(const struct unit *punit, const struct unit *ptrans);
|
||
|
bool can_unit_deboard_or_be_unloaded(const struct unit *pcargo,
|
||
|
const struct unit *ptrans);
|
||
|
bool can_unit_teleport(const struct unit *punit);
|
||
|
bool can_unit_paradrop(const struct unit *punit);
|
||
|
bool can_unit_teleport(const struct civ_map *nmap, const struct unit *punit);
|
||
|
bool can_unit_paradrop(const struct civ_map *nmap, const struct unit *punit);
|
||
|
bool can_unit_change_homecity_to(const struct unit *punit,
|
||
|
const struct city *pcity);
|
||
|
bool can_unit_change_homecity(const struct unit *punit);
|
||
| common/unitlist.c | ||
|---|---|---|
|
return FALSE;
|
||
|
}
|
||
|
/************************************************************************//**
|
||
|
Return TRUE if the function returns true for any of the units,
|
||
|
on specific map.
|
||
|
****************************************************************************/
|
||
|
bool can_units_do_on_map(const struct civ_map *nmap,
|
||
|
const struct unit_list *punits,
|
||
|
bool (can_fn)(const struct civ_map *nmap,
|
||
|
const struct unit *punit))
|
||
|
{
|
||
|
unit_list_iterate(punits, punit) {
|
||
|
if (can_fn(nmap, punit)) {
|
||
|
return TRUE;
|
||
|
}
|
||
|
} unit_list_iterate_end;
|
||
|
return FALSE;
|
||
|
}
|
||
|
/************************************************************************//**
|
||
|
Returns TRUE if any of the units can do the activity.
|
||
|
****************************************************************************/
|
||
| common/unitlist.h | ||
|---|---|---|
|
void unit_list_sort_ord_city(struct unit_list *punitlist);
|
||
|
bool can_units_do(const struct unit_list *punits,
|
||
|
bool (can_fn)(const struct unit *punit));
|
||
|
bool (can_fn)(const struct unit *punit));
|
||
|
bool can_units_do_on_map(const struct civ_map *nmap,
|
||
|
const struct unit_list *punits,
|
||
|
bool (can_fn)(const struct civ_map *nmap,
|
||
|
const struct unit *punit));
|
||
|
bool can_units_do_activity(const struct civ_map *nmap,
|
||
|
const struct unit_list *punits,
|
||
|
enum unit_activity activity);
|
||
| ... | ... | |
|
}
|
||
|
#endif /* __cplusplus */
|
||
|
#endif /* FC__UNITLIST_H */
|
||
|
#endif /* FC__UNITLIST_H */
|
||