Project

General

Profile

Feature #461 » 0014-Unhardcode-wld.map-from-is_action_enabled_unit_on_se.patch

S3_1 - Marko Lindqvist, 04/17/2024 06:50 AM

View differences:

ai/default/daicity.c
/* Try to disband even if all shields will be wasted. */
if (unit_can_do_action(punit, ACTION_DISBAND_UNIT)) {
if (is_action_enabled_unit_on_self(ACTION_DISBAND_UNIT, punit)) {
if (is_action_enabled_unit_on_self(nmap, ACTION_DISBAND_UNIT, punit)) {
if (unit_perform_action(owner, punit->id, punit->id,
0, NULL, ACTION_DISBAND_UNIT, requester)) {
/* All shields wasted. The unit did Disband Unit. */
common/actions.c
}
break;
case ATK_SELF:
if (is_action_enabled_unit_on_self(blocker->id, actor_unit)) {
if (is_action_enabled_unit_on_self(nmap, blocker->id, actor_unit)) {
return blocker;
}
break;
......
See note in is_action_enabled() for why the action still may be
disabled.
**************************************************************************/
bool is_action_enabled_unit_on_self(const action_id wanted_action,
bool is_action_enabled_unit_on_self(const struct civ_map *nmap,
const action_id wanted_action,
const struct unit *actor_unit)
{
const struct civ_map *nmap = &(wld.map);
return is_action_enabled_unit_on_self_full(nmap, wanted_action, actor_unit,
unit_home(actor_unit),
unit_tile(actor_unit));
common/actions.h
const struct tile *target,
const struct extra_type *tgt_extra);
bool is_action_enabled_unit_on_self(const action_id wanted_action,
bool is_action_enabled_unit_on_self(const struct civ_map *nmap,
const action_id wanted_action,
const struct unit *actor_unit);
struct act_prob action_prob_vs_city(const struct unit* actor,
common/unit.c
/* The call below doesn't support actor tile speculation. */
fc_assert_msg(unit_tile(punit) == ptile,
"Please use action_speculate_unit_on_self()");
return is_action_enabled_unit_on_self(ACTION_FORTIFY,
return is_action_enabled_unit_on_self(nmap, ACTION_FORTIFY,
punit);
case ACTIVITY_FORTIFIED:
......
/* The call below doesn't support actor tile speculation. */
fc_assert_msg(unit_tile(punit) == ptile,
"Please use action_speculate_unit_on_self()");
return is_action_enabled_unit_on_self(ACTION_CONVERT, punit);
return is_action_enabled_unit_on_self(nmap, ACTION_CONVERT, punit);
case ACTIVITY_OLD_ROAD:
case ACTIVITY_OLD_RAILROAD:
server/actiontools.c
break;
case ATK_SELF:
if (actor
&& is_action_enabled_unit_on_self(act, actor)) {
&& is_action_enabled_unit_on_self(nmap, act, actor)) {
perform_action_to(act, actor, actor->id, EXTRA_NONE);
}
break;
......
break;
case ATK_SELF:
if (actor
&& is_action_enabled_unit_on_self(act, actor)) {
&& is_action_enabled_unit_on_self(nmap, act, actor)) {
current = action_prob_self(actor, act);
}
break;
server/scripting/api_server_edit.c
bool api_edit_perform_action_unit_vs_self(lua_State *L, Unit *punit,
Action *paction)
{
const struct civ_map *nmap = &(wld.map);
LUASCRIPT_CHECK_STATE(L, FALSE);
LUASCRIPT_CHECK_ARG_NIL(L, punit, 2, Unit, FALSE);
LUASCRIPT_CHECK_ARG_NIL(L, paction, 3, Action, FALSE);
......
fc_assert_ret_val(action_get_actor_kind(paction) == AAK_UNIT, FALSE);
fc_assert_ret_val(action_get_target_kind(paction) == ATK_SELF, FALSE);
fc_assert_ret_val(!action_has_result(paction, ACTRES_FOUND_CITY), FALSE);
if (is_action_enabled_unit_on_self(paction->id, punit)) {
if (is_action_enabled_unit_on_self(nmap, paction->id, punit)) {
return unit_perform_action(unit_owner(punit), punit->id,
IDENTITY_NUMBER_ZERO, IDENTITY_NUMBER_ZERO,
"",
server/unithand.c
#define ACTION_PERFORM_UNIT_SELF(action, actor, action_performer) \
if (actor_unit \
&& is_action_enabled_unit_on_self(action_type, actor_unit)) { \
&& is_action_enabled_unit_on_self(nmap, action_type, actor_unit)) { \
bool success; \
script_server_signal_emit("action_started_unit_self", \
action_by_number(action), actor); \
server/unittools.c
int ransom, unitcount = 0;
bool escaped;
bool collect_ransom = FALSE;
const struct civ_map *nmap = &(wld.map);
sz_strlcpy(pkiller_link, unit_link(pkiller));
sz_strlcpy(punit_link, unit_tile_link(punit));
......
fc_assert(vunit->hp > 0);
adjc_iterate(&(wld.map), deftile, ptile2) {
if (can_exist_at_tile(&(wld.map), vunit->utype, ptile2)
adjc_iterate(nmap, deftile, ptile2) {
if (can_exist_at_tile(nmap, vunit->utype, ptile2)
&& NULL == tile_city(ptile2)) {
move_cost = map_move_cost_unit(&(wld.map), vunit, ptile2);
move_cost = map_move_cost_unit(nmap, vunit, ptile2);
if (pkiller->moves_left <= vunit->moves_left - move_cost
&& (is_allied_unit_tile(ptile2, pvictim)
|| unit_list_size(ptile2->units)) == 0) {
(3-3/3)