72#define SPECVEC_TAG obligatory_req
73#define SPECVEC_TYPE struct obligatory_req
75#define obligatory_req_vector_iterate(obreq_vec, pobreq) \
76 TYPED_VECTOR_ITERATE(struct obligatory_req, obreq_vec, pobreq)
77#define obligatory_req_vector_iterate_end VECTOR_ITERATE_END
87#define ACTPROB_VAL_MIN 0
89#define ACTPROB_VAL_MAX 200
91#define ACTPROB_VAL_1_PCT (ACTPROB_VAL_MAX / 100)
93#define ACTPROB_VAL_NA 253
95#define ACTPROB_VAL_NOT_IMPL 254
170 bool is_target =
va_arg(args,
int);
173 out->alternative[
i].is_target = is_target;
225 "Invalid action result %d",
res);
236 oreq.contras->users += users;
316 "Invalid action result %d",
res);
322 oreq.contras->users++;
365 N_(
"All action enablers for %s must require a "
391 N_(
"All action enablers for %s must require a "
392 "non domestic target."),
407 N_(
"All action enablers for %s must require a "
408 "non domestic target."),
421 N_(
"All action enablers for %s must require the"
422 " absence of a real embassy."),
432 N_(
"All action enablers for %s must require that"
433 " the actor unit isn't already fortified."),
444 N_(
"All action enablers for %s must require"
445 " that the actor is at war with the target."),
455 N_(
"All action enablers for %s must require"
456 " a domestic target."),
464 N_(
"All action enablers for %s must require"
465 " a domestic or allied target."),
473 N_(
"All action enablers for %s must require"
474 " a domestic or allied target."),
482 N_(
"All action enablers for %s must require"
483 " a domestic or allied target."),
491 N_(
"All action enablers for %s must require"
492 " a domestic or allied target."),
500 N_(
"All action enablers for %s must require"
501 " a domestic or allied target."),
513 N_(
"All action enablers for %s must require"
514 " that the actor has"
515 " the Settlers utype flag."),
531 N_(
"All action enablers for %s must require"
533 " tile's terrain's irrigation_time"
534 " is above 0. (See \"TerrainAlter\"'s"
535 " \"CanIrrigate\")"),
542 N_(
"All action enablers for %s must require"
544 " tile's terrain's mining_time"
545 " is above 0. (See \"TerrainAlter\"'s"
553 N_(
"All action enablers for %s must require"
555 " tile's terrain's road_time"
556 " is above 0. (See \"TerrainAlter\"'s"
564 N_(
"All action enablers for %s must require"
566 " tile's terrain's base_time"
567 " is above 0. (See \"TerrainAlter\"'s"
578 N_(
"All action enablers for %s must require that"
579 " the target doesn't have"
580 " the NoCities terrain flag."),
591 N_(
"All action enablers for %s must require"
592 " that the actor has a home city."),
613 N_(
"All action enablers for %s must require"
614 " that the actor has the NonMil utype flag"
615 " or that the target tile is unclaimed"
616 " or that the diplomatic relation to"
617 " the target tile owner isn't peace."),
628 N_(
"All action enablers for %s must require"
629 " that the actor doesn't have"
630 " the NonMil utype flag."),
645 N_(
"All action enablers for %s must require"
646 " no city at the target tile or"
647 " that the actor doesn't have"
648 " the NonMil utype flag."),
658 N_(
"All action enablers for %s must require"
659 " that the actor has"
660 " the CanOccupyCity uclass flag."),
674 N_(
"All action enablers for %s must require"
675 " no city at the target tile or"
676 " that the actor has"
677 " the CanOccupyCity uclass flag."),
687 N_(
"All action enablers for %s must require"
688 " that the actor is at war with the target."),
701 N_(
"All action enablers for %s must require"
702 " no city at the target tile or"
703 " that the actor is at war with the target."),
714 N_(
"All action enablers for %s must require"
715 " that the actor has a movement point left."),
744 N_(
"All action enablers for %s must require"
745 " that the target city is empty."),
757 N_(
"All action enablers for %s must require"
758 " that the actor isn't transporting"
770 N_(
"All action enablers for %s must require"
771 " that the actor has a home city."),
780 N_(
"All action enablers for %s must require"
781 " that the target isn't transporting another"
790 N_(
"All action enablers for %s must require"
791 " that the target is transporting a unit."),
797 N_(
"All action enablers for %s must require"
798 " that the actor is transported."),
806 N_(
"All action enablers for %s must require"
807 " that the actor is on a livable tile."),
815 N_(
"All action enablers for %s must require"
816 " that the actor is transporting a unit."),
822 N_(
"All action enablers for %s must require"
823 " that the target is transported."),
829 N_(
"All action enablers for %s must require"
830 " that the target is on a livable tile."),
839 N_(
"All action enablers for %s must require"
840 " that the actor isn't transported."),
850 N_(
"All action enablers for %s must require"
851 " that the actor unit is in a city."),
865 N_(
"All action enablers for %s must require"
866 " that the actor unit doesn't have the"
867 " HutFrighten unit class flag."),
876 N_(
"All action enablers for %s must require"
877 " that the actor unit has the HutFrighten"
878 " unit class flag."),
897 N_(
"All action enablers for %s must require"
898 " a non animal player actor."),
912 N_(
"All action enablers for %s must require"
913 " no city at the target tile or"
914 " a non animal player actor."),
1725 if (
actions[act]->ui_name[0] ==
'\0') {
1779 "%s contradicts itself regarding sub targets.",
1885 return paction->sub_target_kind;
1924 FALSE,
"Action %d don't exist.", act_id);
1958 const struct action *blocker)
2046 if (prob.
min == prob.
max) {
2091 "Invalid action %d", act_id);
2150 const char *ui_name =
_(
actions[act_id]->ui_name);
2193 }
else if (prob.
min == prob.
max) {
2205 _(
"The probability of success is %.1f%%, %.1f%% or somewhere"
2209 prob.
max - prob.
min > 1 ?
2212 _(
" (This is the most precise interval I can calculate "
2213 "given the information our nation has access to.)") :
2227 "Action %s isn't performed by a unit",
2358 for (
i = 0;
i <
obreq->contras->alternatives;
i++) {
2370 || (
obreq->contras->alternative[
i].req.present
2372 &
obreq->contras->alternative[
i].req.source))) {
2392 for (
i = 0;
i <
obreq->contras->alternatives;
i++) {
2403 out->suggested_solutions[
i].vector_number
2408 out->suggested_solutions[
i].req.present
2409 = !
obreq->contras->alternative[
i].req.present;
2410 out->suggested_solutions[
i].req.source
2411 =
obreq->contras->alternative[
i].req.source;
2412 out->suggested_solutions[
i].req.range
2413 =
obreq->contras->alternative[
i].req.range;
2414 out->suggested_solutions[
i].req.survives
2415 =
obreq->contras->alternative[
i].req.survives;
2416 out->suggested_solutions[
i].req.quiet
2417 =
obreq->contras->alternative[
i].req.quiet;
2585 N_(
"Requirement {%s} of action \"%s\" implies a claimed "
2586 "tile. No diplomatic relation to Nature."),
2593 out->suggested_solutions[0].vector_number
2649 N_(
"In enabler for \"%s\": No diplomatic relation to Nature."
2650 " Requirements {%s} and {%s} contradict each other."),
2660 out->suggested_solutions[0].vector_number
2666 out->suggested_solutions[1].vector_number
2788 " used by any unit."),
2814 if (vec == &
ae->actor_reqs) {
2816 }
else if (vec == &
ae->target_reqs) {
2841 return &
ae->actor_reqs;
2843 return &
ae->target_reqs;
2861 return _(
"actor_reqs");
2864 return _(
"target_reqs");
2923static const struct tile *
2981static const struct city *
3037 const struct action *act,
3379 const bool omniscient,
3380 const struct city *homecity)
3431 if (0 >=
actor->city->airlift
3567 const bool omniscient,
3568 const struct city *homecity)
3577 if (target ==
NULL) {
3752 "Is omniscient, should get yes or no.");
3792 FALSE,
"Action %s is performed by %s not %s",
3800 FALSE,
"Action %s is against %s not %s",
3872 FALSE,
"Action %s is performed by %s not %s",
3880 FALSE,
"Action %s is against %s not %s",
3952 FALSE,
"Action %s is performed by %s not %s",
3960 FALSE,
"Action %s is against %s not %s",
4038 FALSE,
"Action %s is performed by %s not %s",
4046 FALSE,
"Action %s is against %s not %s",
4115 FALSE,
"Action %s is performed by %s not %s",
4123 FALSE,
"Action %s is against %s not %s",
4191 FALSE,
"Action %s is performed by %s not %s",
4199 FALSE,
"Action %s is against %s not %s",
4271 if (target ==
NULL) {
4308 const struct player *other_player)
4590 if (target ==
NULL) {
4777 }
else if (known ==
TRI_YES) {
4915 "Action %s is performed by %s not %s",
4923 "Action %s is against %s not %s",
5014 "Action %s is performed by %s not %s",
5022 "Action %s is against %s not %s",
5102 "Action %s is performed by %s not %s",
5110 "Action %s is against %s not %s",
5235 "Invalid probability [%d, %d]",
5291 "Action %s is performed by %s not %s",
5299 "Action %s is against %s not %s",
5374 "Action %s is performed by %s not %s",
5382 "Action %s is against %s not %s",
5457 "Action %s is performed by %s not %s",
5465 "Action %s is against %s not %s",
5562 log_error(
"Invalid action target kind");
5580 const struct city* target)
5615 const struct unit *target)
5648 const struct tile *target)
6132 "Bad initial odds for action number %d."
6133 " Does it roll the dice at all?",
6219 FALSE,
"Action %s is against %s not cities",
6510 return "ui_name_poison_city";
6512 return "ui_name_poison_city_escape";
6514 return "ui_name_sabotage_unit";
6516 return "ui_name_sabotage_unit_escape";
6518 return "ui_name_bribe_unit";
6520 return "ui_name_sabotage_city";
6522 return "ui_name_sabotage_city_escape";
6524 return "ui_name_targeted_sabotage_city";
6526 return "ui_name_sabotage_city_production";
6528 return "ui_name_targeted_sabotage_city_escape";
6530 return "ui_name_sabotage_city_production_escape";
6532 return "ui_name_incite_city";
6534 return "ui_name_incite_city_escape";
6536 return "ui_name_establish_embassy";
6538 return "ui_name_establish_embassy_stay";
6540 return "ui_name_steal_tech";
6542 return "ui_name_steal_tech_escape";
6544 return "ui_name_targeted_steal_tech";
6546 return "ui_name_targeted_steal_tech_escape";
6548 return "ui_name_investigate_city";
6550 return "ui_name_investigate_city_spend_unit";
6552 return "ui_name_steal_gold";
6554 return "ui_name_steal_gold_escape";
6556 return "ui_name_spread_plague";
6558 return "ui_name_steal_maps";
6560 return "ui_name_steal_maps_escape";
6562 return "ui_name_establish_trade_route";
6564 return "ui_name_enter_marketplace";
6566 return "ui_name_help_wonder";
6568 return "ui_name_capture_units";
6570 return "ui_name_expel_unit";
6572 return "ui_name_found_city";
6574 return "ui_name_join_city";
6576 return "ui_name_bombard";
6578 return "ui_name_bombard_2";
6580 return "ui_name_bombard_3";
6582 return "ui_name_bombard_4";
6584 return "ui_name_bombard_lethal";
6586 return "ui_name_bombard_lethal_2";
6588 return "ui_name_suitcase_nuke";
6590 return "ui_name_suitcase_nuke_escape";
6592 return "ui_name_explode_nuclear";
6594 return "ui_name_nuke_city";
6596 return "ui_name_nuke_units";
6598 return "ui_name_destroy_city";
6600 return "ui_name_disband_unit_recover";
6602 return "ui_name_disband_unit";
6604 return "ui_name_home_city";
6606 return "ui_name_homeless";
6608 return "ui_name_upgrade_unit";
6610 return "ui_name_paradrop_unit";
6612 return "ui_name_paradrop_unit_conquer";
6614 return "ui_name_paradrop_unit_frighten";
6616 return "ui_name_paradrop_unit_frighten_conquer";
6618 return "ui_name_paradrop_unit_enter";
6620 return "ui_name_paradrop_unit_enter_conquer";
6622 return "ui_name_airlift_unit";
6624 return "ui_name_attack";
6626 return "ui_name_attack_2";
6628 return "ui_name_suicide_attack";
6630 return "ui_name_suicide_attack_2";
6632 return "ui_name_wipe_units";
6634 return "ui_name_collect_ransom";
6636 return "ui_name_surgical_strike_building";
6638 return "ui_name_surgical_strike_production";
6640 return "ui_name_conquer_city";
6642 return "ui_name_conquer_city_2";
6644 return "ui_name_conquer_city_3";
6646 return "ui_name_conquer_city_4";
6648 return "ui_name_conquer_extras";
6650 return "ui_name_conquer_extras_2";
6652 return "ui_name_conquer_extras_3";
6654 return "ui_name_conquer_extras_4";
6656 return "ui_name_heal_unit";
6658 return "ui_name_heal_unit_2";
6660 return "ui_name_transform_terrain";
6662 return "ui_name_cultivate";
6664 return "ui_name_plant";
6666 return "ui_name_pillage";
6668 return "ui_name_clean";
6670 return "ui_name_fortify";
6672 return "ui_name_build_road";
6674 return "ui_name_convert_unit";
6676 return "ui_name_build_base";
6678 return "ui_name_build_mine";
6680 return "ui_name_irrigate";
6682 return "ui_name_transport_deboard";
6684 return "ui_name_transport_board";
6686 return "ui_name_transport_board_2";
6688 return "ui_name_transport_board_3";
6690 return "ui_name_transport_embark";
6692 return "ui_name_transport_embark_2";
6694 return "ui_name_transport_embark_3";
6696 return "ui_name_transport_embark_4";
6698 return "ui_name_transport_unload";
6700 return "ui_name_transport_load";
6702 return "ui_name_transport_load_2";
6704 return "ui_name_transport_load_3";
6706 return "ui_name_transport_disembark";
6708 return "ui_name_transport_disembark_2";
6710 return "ui_name_transport_disembark_3";
6712 return "ui_name_transport_disembark_4";
6714 return "ui_name_enter_hut";
6716 return "ui_name_enter_hut_2";
6718 return "ui_name_enter_hut_3";
6720 return "ui_name_enter_hut_4";
6722 return "ui_name_frighten_hut";
6724 return "ui_name_frighten_hut_2";
6726 return "ui_name_frighten_hut_3";
6728 return "ui_name_frighten_hut_4";
6730 return "ui_name_spy_attack";
6732 return "ui_name_unit_move";
6734 return "ui_name_unit_move_2";
6736 return "ui_name_unit_move_3";
6738 return "ui_name_teleport";
6740 return "ui_name_teleport_conquer";
6742 return "ui_name_teleport_frighten";
6744 return "ui_name_teleport_frighten_conquer";
6746 return "ui_name_teleport_enter";
6748 return "ui_name_teleport_enter_conquer";
6750 return "ui_name_escape";
6752 return "ui_name_user_action_1";
6754 return "ui_name_user_action_2";
6756 return "ui_name_user_action_3";
6758 return "ui_name_user_action_4";
6778 return N_(
"%sPoison City%s");
6781 return N_(
"%sPoison City and Escape%s");
6784 return N_(
"S%sabotage Enemy Unit%s");
6787 return N_(
"S%sabotage Enemy Unit and Escape%s");
6790 return N_(
"Bribe Enemy %sUnit%s");
6793 return N_(
"%sSabotage City%s");
6796 return N_(
"%sSabotage City and Escape%s");
6799 return N_(
"Industria%sl Sabotage%s");
6802 return N_(
"Industria%sl Sabotage Production%s");
6805 return N_(
"Industria%sl Sabotage and Escape%s");
6808 return N_(
"Industria%sl Sabotage Production and Escape%s");
6811 return N_(
"Incite a Re%svolt%s");
6814 return N_(
"Incite a Re%svolt and Escape%s");
6817 return N_(
"Establish %sEmbassy%s");
6820 return N_(
"Becom%se Ambassador%s");
6823 return N_(
"Steal %sTechnology%s");
6826 return N_(
"Steal %sTechnology and Escape%s");
6829 return N_(
"In%sdustrial Espionage%s");
6832 return N_(
"In%sdustrial Espionage and Escape%s");
6835 return N_(
"%sInvestigate City%s");
6839 return N_(
"%sInvestigate City (spends the unit)%s");
6842 return N_(
"Steal %sGold%s");
6845 return N_(
"Steal %sGold and Escape%s");
6848 return N_(
"Spread %sPlague%s");
6851 return N_(
"Steal %sMaps%s");
6854 return N_(
"Steal %sMaps and Escape%s");
6857 return N_(
"Establish Trade %sRoute%s");
6860 return N_(
"Enter %sMarketplace%s");
6863 return N_(
"Help %sbuild Wonder%s");
6866 return N_(
"%sCapture Units%s");
6869 return N_(
"%sExpel Unit%s");
6872 return N_(
"%sFound City%s");
6875 return N_(
"%sJoin City%s");
6878 return N_(
"B%sombard%s");
6881 return N_(
"B%sombard 2%s");
6884 return N_(
"B%sombard 3%s");
6887 return N_(
"B%sombard 4%s");
6891 return N_(
"Lethal B%sombard%s");
6894 return N_(
"Suitcase %sNuke%s");
6897 return N_(
"Suitcase %sNuke and Escape%s");
6900 return N_(
"Explode %sNuclear%s");
6903 return N_(
"%sNuke City%s");
6906 return N_(
"%sNuke Units%s");
6909 return N_(
"Destroy %sCity%s");
6912 return N_(
"Dis%sband recovering production%s");
6915 return N_(
"Dis%sband without recovering production%s");
6918 return N_(
"Set %sHome City%s");
6921 return N_(
"Make %sHomeless%s");
6924 return N_(
"%sUpgrade Unit%s");
6927 return N_(
"Drop %sParatrooper%s");
6930 return N_(
"Drop %sParatrooper%s");
6933 return N_(
"Drop %sParatrooper%s");
6936 return N_(
"Drop %sParatrooper%s");
6939 return N_(
"Drop %sParatrooper%s");
6942 return N_(
"Drop %sParatrooper%s");
6945 return N_(
"%sAirlift to City%s");
6949 return N_(
"%sAttack%s");
6953 return N_(
"%sSuicide Attack%s");
6956 return N_(
"%sWipe Units%s");
6959 return N_(
"Collect %sRansom%s");
6962 return N_(
"Surgical Str%sike Building%s");
6965 return N_(
"Surgical Str%sike Production%s");
6970 return N_(
"%sConquer City%s");
6973 return N_(
"%sConquer City 2%s");
6978 return N_(
"%sConquer Extras%s");
6981 return N_(
"%sConquer Extras 2%s");
6985 return N_(
"Heal %sUnit%s");
6988 return N_(
"%sTransform Terrain%s");
6991 return N_(
"Transform by %sCultivating%s");
6994 return N_(
"Transform by %sPlanting%s");
6997 return N_(
"Pilla%sge%s");
7000 return N_(
"%sClean%s");
7003 return N_(
"%sFortify%s");
7006 return N_(
"Build %sRoad%s");
7009 return N_(
"%sConvert Unit%s");
7012 return N_(
"%sBuild Base%s");
7015 return N_(
"Build %sMine%s");
7018 return N_(
"Build %sIrrigation%s");
7021 return N_(
"%sDeboard%s");
7026 return N_(
"%sBoard%s");
7032 return N_(
"%sEmbark%s");
7035 return N_(
"%sUnload%s");
7040 return N_(
"%sLoad%s");
7045 return N_(
"%sDisembark%s");
7048 return N_(
"%sDisembark 2%s");
7051 return N_(
"%sEliminate Diplomat%s");
7057 return N_(
"Enter %sHut%s");
7063 return N_(
"Frighten %sHut%s");
7068 return N_(
"Regular %sMove%s");
7071 return N_(
"%sTeleport%s");
7074 return N_(
"%sTeleport%s");
7077 return N_(
"%sTeleport%s");
7080 return N_(
"%sTeleport%s");
7083 return N_(
"%sTeleport%s");
7086 return N_(
"%sTeleport%s");
7089 return N_(
"%sEscape To Nearest City%s");
7092 return N_(
"%sUser Action 1%s");
7095 return N_(
"%sUser Action 2%s");
7098 return N_(
"%sUser Action 3%s");
7101 return N_(
"%sUser Action 4%s");
7234 return "explode_nuclear_min_range";
7236 return "nuke_city_min_range";
7238 return "nuke_units_min_range";
7240 return "teleport_min_range";
7242 return "teleport_conquer_min_range";
7244 return "teleport_frighten_min_range";
7246 return "teleport_frighten_conquer_min_range";
7248 return "teleport_enter_min_range";
7250 return "teleport_enter_conquer_min_range";
7252 return "user_action_1_min_range";
7254 return "user_action_2_min_range";
7256 return "user_action_3_min_range";
7258 return "user_action_4_min_range";
7385 return "help_wonder_max_range";
7387 return "disband_unit_recover_max_range";
7389 return "bombard_max_range";
7391 return "bombard_2_max_range";
7393 return "bombard_3_max_range";
7395 return "bombard_4_max_range";
7397 return "bombard_lethal_max_range";
7399 return "bombard_lethal_2_max_range";
7401 return "explode_nuclear_max_range";
7403 return "nuke_city_max_range";
7405 return "nuke_units_max_range";
7407 return "airlift_max_range";
7409 return "teleport_max_range";
7411 return "teleport_conquer_max_range";
7413 return "teleport_frighten_max_range";
7415 return "teleport_frighten_conquer_max_range";
7417 return "teleport_enter_max_range";
7419 return "teleport_enter_conquer_max_range";
7421 return "user_action_1_max_range";
7423 return "user_action_2_max_range";
7425 return "user_action_3_max_range";
7427 return "user_action_4_max_range";
7569 return "explode_nuclear_target_kind";
7571 return "nuke_city_target_kind";
7573 return "pillage_target_kind";
7575 return "user_action_1_target_kind";
7577 return "user_action_2_target_kind";
7579 return "user_action_3_target_kind";
7581 return "user_action_4_target_kind";
7722 return "found_city_consuming_always";
7724 return "explode_nuclear_consuming_always";
7726 return "nuke_city_consuming_always";
7728 return "nuke_units_consuming_always";
7730 return "spread_plague_actor_consuming_always";
7732 return "user_action_1_actor_consuming_always";
7734 return "user_action_2_actor_consuming_always";
7736 return "user_action_3_actor_consuming_always";
7738 return "user_action_4_actor_consuming_always";
7763 return "enter_marketplace_blocked_by";
7765 return "bombard_blocked_by";
7767 return "bombard_2_blocked_by";
7769 return "bombard_3_blocked_by";
7771 return "bombard_4_blocked_by";
7773 return "bombard_lethal_blocked_by";
7775 return "bombard_lethal_2_blocked_by";
7777 return "explode_nuclear_blocked_by";
7779 return "nuke_city_blocked_by";
7781 return "nuke_units_blocked_by";
7783 return "attack_blocked_by";
7785 return "attack_2_blocked_by";
7787 return "suicide_attack_blocked_by";
7789 return "suicide_attack_2_blocked_by";
7791 return "wipe_units_blocked_by";
7793 return "collect_ransom_blocked_by";
7795 return "conquer_city_blocked_by";
7797 return "conquer_city_2_blocked_by";
7799 return "conquer_city_3_blocked_by";
7801 return "conquer_city_4_blocked_by";
7803 return "move_blocked_by";
7805 return "move_2_blocked_by";
7807 return "move_3_blocked_by";
7809 return "teleport_blocked_by";
7811 return "teleport_conquer_blocked_by";
7813 return "teleport_frighten_blocked_by";
7815 return "teleport_frighten_conquer_blocked_by";
7817 return "teleport_enter_blocked_by";
7819 return "teleport_enter_conquer_blocked_by";
7947 return "bribe_unit_post_success_forced_actions";
7949 return "attack_post_success_forced_actions";
7951 return "attack_2_post_success_forced_actions";
7953 return "wipe_units_post_success_forced_actions";
7955 return "collect_ransom_post_success_forced_actions";
8104 return "Transport Deboard";
8113 N_(
"individual cities"),
8114 N_(
"individual units"),
bool is_action_possible_on_city(action_id act_id, const struct player *actor_player, const struct city *target_city)
static struct action * actions[MAX_NUM_ACTIONS]
const char * action_prepare_ui_name(action_id act_id, const char *mnemonic, const struct act_prob prob, const char *custom)
const char * action_name_translation(const struct action *action)
bool action_distance_inside_max(const struct action *action, const int distance)
static void oblig_hard_req_reg(struct ae_contra_or *contras, const char *error_message,...)
struct act_prob action_speculate_unit_on_extras(const struct civ_map *nmap, action_id act_id, const struct unit *actor, const struct city *actor_home, const struct tile *actor_tile, bool omniscient_cheat, const struct tile *target_tile, const struct extra_type *target_extra)
static enum fc_tristate is_action_possible(const struct civ_map *nmap, const action_id wanted_action, const struct req_context *actor, const struct req_context *target, const struct extra_type *target_extra, const bool omniscient, const struct city *homecity)
static void voblig_hard_req_reg(struct ae_contra_or *contras, const char *error_message, va_list args)
const char * action_prob_explain(const struct act_prob prob)
bool action_mp_full_makes_legal(const struct unit *actor, const action_id act_id)
static struct act_prob action_prob_battle_then_dice_roll(const struct player *act_player, const struct unit *act_unit, const struct city *tgt_city, const struct unit *tgt_unit, const struct tile *tgt_tile, const struct player *tgt_player, const struct action *paction)
static bool is_action_enabled_unit_on_self_full(const struct civ_map *nmap, const action_id wanted_action, const struct unit *actor_unit, const struct city *actor_home, const struct tile *actor_tile)
enum action_actor_kind action_get_actor_kind(const struct action *paction)
bool action_prob_certain(const struct act_prob probability)
const char * action_id_name_translation(action_id act_id)
struct action_auto_perf * action_auto_perf_slot_number(const int num)
req_vec_num_in_item action_enabler_vector_number(const void *enabler, const struct requirement_vector *vec)
bool action_has_complex_target(const struct action *paction)
static bool action_actor_utype_hard_reqs_ok_full(const struct action *paction, const struct unit_type *actor_unittype, bool ignore_third_party)
static struct obligatory_req_vector oblig_hard_reqs_r[ACTRES_NONE]
struct req_vec_problem * action_enabler_suggest_repair(const struct action_enabler *enabler)
static bool is_action_enabled_unit_on_tile_full(const struct civ_map *nmap, const action_id wanted_action, const struct unit *actor_unit, const struct city *actor_home, const struct tile *actor_tile, const struct tile *target_tile, const struct extra_type *target_extra)
bool action_prob_possible(const struct act_prob probability)
#define ACTPROB_VAL_NOT_IMPL
struct action_auto_perf auto_perfs[MAX_NUM_ACTION_AUTO_PERFORMERS]
bool action_actor_utype_hard_reqs_ok(const struct action *paction, const struct unit_type *actor_unittype)
struct act_prob action_prob_new_not_impl(void)
struct req_vec_problem * action_enabler_suggest_improvement(const struct action_enabler *enabler)
static enum fc_tristate action_enabled_local(const action_id wanted_action, const struct req_context *actor, const struct req_context *target)
struct act_prob action_speculate_unit_on_stack(const struct civ_map *nmap, action_id act_id, const struct unit *actor, const struct city *actor_home, const struct tile *actor_tile, bool omniscient_cheat, const struct tile *target)
void actions_rs_pre_san_gen(void)
const char * action_min_range_ruleset_var_name(int act)
struct act_prob action_speculate_unit_on_self(const struct civ_map *nmap, action_id act_id, const struct unit *actor, const struct city *actor_home, const struct tile *actor_tile, bool omniscient_cheat)
const char * action_blocked_by_ruleset_var_name(const struct action *act)
static bool is_action_enabled(const struct civ_map *nmap, const action_id wanted_action, const struct req_context *actor, const struct req_context *target, const struct extra_type *target_extra, const struct city *actor_home)
static struct act_prob action_prob(const struct civ_map *nmap, const action_id wanted_action, const struct req_context *actor, const struct city *actor_home, const struct req_context *target, const struct extra_type *target_extra)
struct req_vec_problem * action_enabler_suggest_repair_oblig(const struct action_enabler *enabler)
void action_array_add_all_by_result(action_id *act_array, int *position, enum action_result result)
int action_dice_roll_odds(const struct player *act_player, const struct unit *act_unit, const struct city *tgt_city, const struct player *tgt_player, const struct action *paction)
void action_array_end(action_id *act_array, int size)
static struct ae_contra_or * req_contradiction_or(int alternatives,...)
struct act_prob action_prob_vs_tile(const struct civ_map *nmap, const struct unit *actor_unit, const action_id act_id, const struct tile *target_tile, const struct extra_type *target_extra)
static struct act_prob action_prob_pre_action_dice_roll(const struct player *act_player, const struct unit *act_unit, const struct city *tgt_city, const struct player *tgt_player, const struct action *paction)
const char * atk_helpnames[ATK_COUNT]
static enum fc_tristate action_hard_reqs_actor(const struct civ_map *nmap, const struct action *paction, const struct req_context *actor, const bool omniscient, const struct city *homecity)
static void hard_code_actions(void)
static bool is_action_enabled_unit_on_city_full(const struct civ_map *nmap, const action_id wanted_action, const struct unit *actor_unit, const struct city *actor_home, const struct tile *actor_tile, const struct city *target_city)
bool action_is_in_use(struct action *paction)
static struct req_vec_problem * enabler_tile_tgt_local_diplrel_implies_claimed(const struct action_enabler *enabler)
bool action_ever_possible(action_id action)
const char * action_enabler_vector_by_number_name(req_vec_num_in_item vec)
bool are_action_probabilitys_equal(const struct act_prob *ap1, const struct act_prob *ap2)
static struct act_prob action_prob_self_full(const struct civ_map *nmap, const struct unit *actor_unit, const struct city *actor_home, const struct tile *actor_tile, const action_id act_id)
const char * action_post_success_forced_ruleset_var_name(const struct action *act)
struct action * action_by_rule_name(const char *name)
static bool action_has_possible_actor_hard_reqs(struct action *paction)
const char * action_rule_name(const struct action *action)
const char * action_id_rule_name(action_id act_id)
enum action_sub_target_kind action_get_sub_target_kind(const struct action *paction)
static const struct tile * blocked_find_target_tile(const struct action *act, const struct unit *actor_unit, const struct tile *target_tile_arg, const struct city *target_city, const struct unit *target_unit)
static bool action_prob_not_relevant(const struct act_prob probability)
static struct act_prob ap_diplomat_battle(const struct unit *pattacker, const struct unit *pvictim, const struct tile *tgt_tile, const struct action *paction) fc__attribute((nonnull(3)))
static bool is_action_enabled_unit_on_extras_full(const struct civ_map *nmap, const action_id wanted_action, const struct unit *actor_unit, const struct city *actor_home, const struct tile *actor_tile, const struct tile *target_tile, const struct extra_type *target_extra)
void action_enabler_free(struct action_enabler *enabler)
bool is_action_enabled_unit_on_stack(const struct civ_map *nmap, const action_id wanted_action, const struct unit *actor_unit, const struct tile *target_tile)
static void ae_contra_close(struct ae_contra_or *contra)
static enum fc_tristate tech_can_be_stolen(const struct player *actor_player, const struct player *target_player)
static struct action_list * actlist_by_result[ACTRES_LAST]
static struct obligatory_req_vector oblig_hard_reqs_sr[ACT_SUB_RES_COUNT]
static void oblig_hard_req_reg_sub_res(struct ae_contra_or *contras, const char *error_message,...)
struct action_list * action_list_by_activity(enum unit_activity activity)
int action_number(const struct action *action)
struct act_prob action_prob_new_unknown(void)
bool action_would_be_blocked_by(const struct action *blocked, const struct action *blocker)
static struct req_vec_problem * enabler_first_clarification(const struct action_enabler *enabler)
static bool is_effect_val_known(enum effect_type effect_type, const struct player *pov_player, const struct req_context *context, const struct player *other_player)
static bool action_prob_not_impl(const struct act_prob probability)
bool is_action_enabled_unit_on_tile(const struct civ_map *nmap, const action_id wanted_action, const struct unit *actor_unit, const struct tile *target_tile, const struct extra_type *target_extra)
struct act_prob action_prob_and(const struct act_prob *ap1, const struct act_prob *ap2)
static bool actions_initialized
const char * action_actor_consuming_always_ruleset_var_name(action_id act)
bool action_immune_government(struct government *gov, action_id act)
static void voblig_hard_req_reg_sub_res(struct ae_contra_or *contras, const char *error_message, va_list args)
static bool is_target_possible(const action_id wanted_action, const struct player *actor_player, const struct req_context *target)
static struct act_prob ap_dipl_battle_win(const struct unit *pattacker, const struct unit *pdefender)
static struct act_prob action_prob_vs_stack_full(const struct civ_map *nmap, const struct unit *actor_unit, const struct city *actor_home, const struct tile *actor_tile, const action_id act_id, const struct tile *target_tile)
struct act_prob action_prob_vs_extras(const struct civ_map *nmap, const struct unit *actor_unit, const action_id act_id, const struct tile *target_tile, const struct extra_type *target_extra)
struct act_prob action_prob_new_certain(void)
const char * action_max_range_ruleset_var_name(int act)
static struct act_prob action_prob_vs_city_full(const struct civ_map *nmap, const struct unit *actor_unit, const struct city *actor_home, const struct tile *actor_tile, const action_id act_id, const struct city *target_city)
int action_dice_roll_initial_odds(const struct action *paction)
struct act_prob action_prob_self(const struct civ_map *nmap, const struct unit *actor_unit, const action_id act_id)
struct act_prob action_prob_fall_back(const struct act_prob *ap1, const struct act_prob *ap2)
#define obligatory_req_vector_iterate_end
static const struct unit_type * tgt_city_local_utype(const struct city *target_city)
static struct requirement * req_vec_first_local_diplrel(const struct requirement_vector *vec)
static struct act_prob action_prob_vs_tile_full(const struct civ_map *nmap, const struct unit *actor_unit, const struct city *actor_home, const struct tile *actor_tile, const action_id act_id, const struct tile *target_tile, const struct extra_type *target_extra)
bool is_action_enabled_unit_on_city(const struct civ_map *nmap, const action_id wanted_action, const struct unit *actor_unit, const struct city *target_city)
struct action_list * action_list_by_result(enum action_result result)
bool action_univs_not_blocking(const struct action *paction, struct universal *actor_uni, struct universal *target_uni)
struct act_prob action_speculate_unit_on_city(const struct civ_map *nmap, const action_id act_id, const struct unit *actor, const struct city *actor_home, const struct tile *actor_tile, const bool omniscient_cheat, const struct city *target)
static struct requirement * req_vec_first_contradiction_in_vec(const struct requirement *req, const struct requirement_vector *vec)
bool actions_are_ready(void)
bool is_action_enabled_unit_on_unit(const struct civ_map *nmap, const action_id wanted_action, const struct unit *actor_unit, const struct unit *target_unit)
struct act_prob action_speculate_unit_on_tile(const struct civ_map *nmap, action_id act_id, const struct unit *actor, const struct city *actor_home, const struct tile *actor_tile, bool omniscient_cheat, const struct tile *target_tile, const struct extra_type *target_extra)
struct act_prob action_prob_vs_city(const struct civ_map *nmap, const struct unit *actor_unit, const action_id act_id, const struct city *target_city)
const char * action_target_kind_ruleset_var_name(int act)
#define obligatory_req_vector_iterate(obreq_vec, pobreq)
static struct act_prob action_prob_vs_unit_full(const struct civ_map *nmap, const struct unit *actor_unit, const struct city *actor_home, const struct tile *actor_tile, const action_id act_id, const struct unit *target_unit)
bool action_maybe_possible_actor_unit(const struct civ_map *nmap, const action_id act_id, const struct unit *actor_unit)
struct action * action_is_blocked_by(const struct civ_map *nmap, const struct action *act, const struct unit *actor_unit, const struct tile *target_tile_arg, const struct city *target_city_arg, const struct unit *target_unit)
static bool is_enabler_active(const struct action_enabler *enabler, const struct req_context *actor, const struct req_context *target)
static struct action_enabler_list * action_enablers_by_action[MAX_NUM_ACTIONS]
void action_enabler_add(struct action_enabler *enabler)
static void hard_code_oblig_hard_reqs(void)
const char * action_ui_name_default(int act)
#define ACTPROB_VAL_1_PCT
bool action_enabler_utype_possible_actor(const struct action_enabler *ae, const struct unit_type *act_utype)
static struct act_prob act_prob_unseen_target(const struct civ_map *nmap, action_id act_id, const struct unit *actor_unit)
struct action_enabler * action_enabler_new(void)
bool action_requires_details(const struct action *paction)
struct act_prob action_prob_new_not_relevant(void)
const char * action_target_kind_help(enum action_target_kind kind)
static struct req_vec_problem * enabler_first_self_contradiction(const struct action_enabler *enabler)
int action_get_role(const struct action *paction)
struct act_prob action_speculate_unit_on_unit(const struct civ_map *nmap, action_id act_id, const struct unit *actor, const struct city *actor_home, const struct tile *actor_tile, bool omniscient_cheat, const struct unit *target)
static struct action * unit_action_new(action_id id, enum action_result result, bool rare_pop_up, bool unitwaittime_controlled, enum moves_actor_kind moves_actor, const int min_distance, const int max_distance, bool actor_consuming_always)
const struct action_auto_perf * action_auto_perf_by_number(const int num)
struct act_prob action_prob_new_impossible(void)
bool action_enabler_possible_actor(const struct action_enabler *ae)
static const struct city * blocked_find_target_city(const struct action *act, const struct unit *actor_unit, const struct tile *target_tile, const struct city *target_city_arg, const struct unit *target_unit)
struct action ** _actions
bool action_id_exists(const action_id act_id)
bool action_enabler_remove(struct action_enabler *enabler)
enum action_target_kind action_get_target_kind(const struct action *paction)
struct act_prob action_prob_unit_vs_tgt(const struct civ_map *nmap, const struct action *paction, const struct unit *act_unit, const struct city *tgt_city, const struct unit *tgt_unit, const struct tile *tgt_tile, const struct extra_type *extra_tgt)
static bool action_prob_is_signal(const struct act_prob probability)
struct action_enabler * action_enabler_copy(const struct action_enabler *original)
static const char * action_prob_to_text(const struct act_prob prob)
int action_prob_cmp_pessimist(const struct act_prob ap1, const struct act_prob ap2)
struct act_prob action_prob_vs_stack(const struct civ_map *nmap, const struct unit *actor_unit, const action_id act_id, const struct tile *target_tile)
bool is_action_enabled_unit_on_self(const struct civ_map *nmap, const action_id wanted_action, const struct unit *actor_unit)
bool action_id_is_rare_pop_up(action_id act_id)
static struct action * action_new(action_id id, enum action_result result, const int min_distance, const int max_distance, bool actor_consuming_always)
static void hard_code_oblig_hard_reqs_ruleset(void)
static struct req_vec_problem * ae_suggest_repair_if_no_oblig(const struct action_enabler *enabler, const struct obligatory_req_vector *oblig)
struct act_prob action_prob_vs_unit(const struct civ_map *nmap, const struct unit *actor_unit, const action_id act_id, const struct unit *target_unit)
static const struct impr_type * tgt_city_local_building(const struct city *target_city)
static struct astring ui_name_str
bool is_action_enabled_unit_on_extras(const struct civ_map *nmap, const action_id wanted_action, const struct unit *actor_unit, const struct tile *target_tile, const struct extra_type *target_extra)
static bool is_action_enabled_unit_on_unit_full(const struct civ_map *nmap, const action_id wanted_action, const struct unit *actor_unit, const struct city *actor_home, const struct tile *actor_tile, const struct unit *target_unit)
static bool is_action_enabled_unit_on_stack_full(const struct civ_map *nmap, const action_id wanted_action, const struct unit *actor_unit, const struct city *actor_home, const struct tile *actor_tile, const struct tile *target_tile)
double action_prob_to_0_to_1_pessimist(const struct act_prob ap)
static void oblig_hard_req_register(struct requirement contradiction, bool is_target, const char *error_message,...)
const char * gen_action_name_update_cb(const char *old_name)
static struct action_list * actlist_by_activity[ACTIVITY_LAST]
struct action_enabler_list * action_enablers_for_action(action_id action)
struct requirement_vector * action_enabler_vector_by_number(const void *enabler, req_vec_num_in_item number)
bool action_distance_accepted(const struct action *action, const int distance)
static struct act_prob action_prob_vs_extras_full(const struct civ_map *nmap, const struct unit *actor_unit, const struct city *actor_home, const struct tile *actor_tile, const action_id act_id, const struct tile *target_tile, const struct extra_type *target_extra)
const char * action_ui_name_ruleset_var_name(int act)
const char * action_get_ui_name_mnemonic(action_id act_id, const char *mnemonic)
#define ACTION_DISTANCE_MAX
#define enabler_get_action(_enabler_)
#define ASSERT_UNUSED_ACTION_CASES
#define enabler_get_action_id(_enabler_)
static struct action * action_by_number(action_id act_id)
#define action_enabler_list_re_iterate_end
#define ACTION_DISTANCE_LAST_NON_SIGNAL
#define action_enabler_list_re_iterate(action_enabler_list, aenabler)
#define action_has_result(_act_, _res_)
#define action_enabler_list_iterate_end
#define ACTION_DISTANCE_UNLIMITED
#define action_iterate_end
#define action_iterate_all(_act_)
#define action_id_get_actor_kind(act_id)
#define action_iterate_all_end
#define ACTPROB_NOT_KNOWN
#define action_enabler_list_iterate(action_enabler_list, aenabler)
#define action_id_distance_accepted(act_id, distance)
#define ACTPROB_IMPOSSIBLE
#define ACTPROB_NOT_IMPLEMENTED
#define action_iterate(_act_)
#define action_id_get_target_kind(act_id)
#define action_id_has_result_safe(act_id, result)
#define ACTION_ODDS_PCT_DICE_ROLL_NA
enum action_sub_target_kind actres_sub_target_kind_default(enum action_result result)
enum act_tgt_compl actres_target_compl_calc(enum action_result result)
enum fc_tristate actres_possible(const struct civ_map *nmap, enum action_result result, const struct req_context *actor, const struct req_context *target, const struct extra_type *target_extra, enum fc_tristate def, bool omniscient, const struct city *homecity)
enum unit_activity actres_activity_result(enum action_result result)
enum dice_roll_type actres_dice_type(enum action_result result)
enum action_battle_kind actres_get_battle_kind(enum action_result result)
enum action_target_kind actres_target_kind_default(enum action_result result)
#define ASSERT_UNUSED_ACTRES_CASES
void astr_free(struct astring *astr)
void astr_set(struct astring *astr, const char *format,...)
void astr_clear(struct astring *astr)
void astr_add(struct astring *astr, const char *format,...)
static const char * astr_str(const struct astring *astr) fc__attribute((nonnull(1)))
bool territory_claiming_base(const struct base_type *pbase)
#define BV_ISSET(bv, bit)
static bool is_non_attack_city_tile(const struct tile *ptile, const struct player *pplayer)
#define city_tile(_pcity_)
#define city_owner(_pcity_)
double unit_win_chance(const struct civ_map *nmap, const struct unit *attacker, const struct unit *defender, const struct action *paction)
enum unit_attack_result unit_attack_units_at_tile_result(const struct unit *punit, const struct action *paction, const struct tile *ptile)
struct unit * get_defender(const struct civ_map *nmap, const struct unit *attacker, const struct tile *ptile, const struct action *paction)
struct unit * get_diplomatic_defender(const struct unit *act_unit, const struct unit *pvictim, const struct tile *tgt_tile, const struct action *paction)
bool can_unit_attack_tile(const struct unit *punit, const struct action *paction, const struct tile *dest_tile)
struct unit struct city struct unit * target_unit
struct unit struct city struct unit struct tile struct extra_type const struct act_prob *act_probs int actor_unit_id struct unit * actor
struct unit struct city struct unit struct tile * target_tile
struct unit struct city * target_city
struct unit struct city struct unit struct tile struct extra_type * target_extra
int get_target_bonus_effects(struct effect_list *plist, const struct req_context *context, const struct player *other_player, enum effect_type effect_type)
struct effect_list * get_effects(enum effect_type effect_type)
#define effect_list_iterate_end
#define effect_list_iterate(effect_list, peffect)
const struct functions * fc_funcs
#define MAX_NUM_ACTION_AUTO_PERFORMERS
static bool is_ruleset_compat_mode(void)
#define fc_assert_msg(condition, message,...)
#define fc_assert_ret(condition)
#define log_verbose(message,...)
#define fc_assert(condition)
#define fc_assert_ret_msg(condition, message,...)
#define fc_assert_action_msg(condition, action, message,...)
#define fc_assert_ret_val(condition, val)
#define fc_assert_action(condition, action)
#define log_error(message,...)
#define FC_STATIC_ASSERT(cond, tag)
#define fc_assert_ret_val_msg(condition, val, message,...)
int real_map_distance(const struct tile *tile0, const struct tile *tile1)
bool can_unit_exist_at_tile(const struct civ_map *nmap, const struct unit *punit, const struct tile *ptile)
bool is_native_tile(const struct unit_type *punittype, const struct tile *ptile)
int unit_move_rate(const struct unit *punit)
bool unit_could_load_at(const struct unit *punit, const struct tile *ptile)
bool can_unit_type_transport(const struct unit_type *transporter, const struct unit_class *transported)
bool can_attack_non_native(const struct unit_type *utype)
Nation_type_id nation_number(const struct nation_type *pnation)
enum barbarian_type nation_barbarian_type(const struct nation_type *nation)
#define nations_iterate_end
#define nations_iterate(NAME_pnation)
bool can_player_see_tile(const struct player *plr, const struct tile *ptile)
bool can_player_see_unit(const struct player *pplayer, const struct unit *punit)
bool pplayers_at_war(const struct player *pplayer, const struct player *pplayer2)
bool player_can_see_city_externals(const struct player *pow_player, const struct city *target_city)
bool pplayers_allied(const struct player *pplayer, const struct player *pplayer2)
bool can_player_see_hypotetic_units_at(const struct player *pplayer, const struct tile *ptile)
bool player_can_trust_tile_has_no_units(const struct player *pplayer, const struct tile *ptile)
bool universal_never_there(const struct universal *source)
const struct req_context * req_context_empty(void)
const char * req_to_fstring(const struct requirement *req, struct astring *astr)
bool universal_fulfills_requirements(bool check_necessary, const struct requirement_vector *reqs, const struct universal *source)
struct req_vec_problem * req_vec_suggest_repair(const struct requirement_vector *vec, requirement_vector_number get_num, const void *parent_item)
struct requirement req_from_values(int type, int range, bool survives, bool present, bool quiet, int value)
bool are_reqs_active(const struct req_context *context, const struct player *other_player, const struct requirement_vector *reqs, const enum req_problem_type prob_type)
bool are_requirements_contradictions(const struct requirement *req1, const struct requirement *req2)
struct req_vec_problem * req_vec_problem_new(int num_suggested_solutions, const char *descr,...)
bool does_req_contradicts_reqs(const struct requirement *req, const struct requirement_vector *vec)
bool req_vec_is_impossible_to_fulfill(const struct requirement_vector *reqs)
struct req_vec_problem * req_vec_suggest_improvement(const struct requirement_vector *vec, requirement_vector_number get_num, const void *parent_item)
#define requirement_fulfilled_by_unit_type(_ut_, _rqs_)
signed char req_vec_num_in_item
req_vec_num_in_item a requirement vectors number in an item.
#define requirement_vector_iterate_end
#define requirement_fulfilled_by_government(_gov_, _rqs_)
#define requirement_vector_iterate(req_vec, preq)
struct research * research_get(const struct player *pplayer)
enum tech_state research_invention_state(const struct research *presearch, Tech_type_id tech)
bool research_invention_gettable(const struct research *presearch, const Tech_type_id tech, bool allow_holes)
server_setting_id server_setting_by_name(const char *name)
int server_setting_value_int_get(server_setting_id id)
enum fc_tristate fc_tristate_and(enum fc_tristate one, enum fc_tristate two)
#define CLIP(lower, current, upper)
enum action_auto_perf_cause cause
action_id alternatives[MAX_NUM_ACTIONS]
struct requirement_vector actor_reqs
struct requirement_vector target_reqs
bool unitwaittime_controlled
bool actor_consuming_always
enum action_sub_target_kind sub_target_kind
enum moves_actor_kind moves_actor
struct action::@12::@13 is_unit
enum action_result result
char ui_name[MAX_LEN_NAME]
bv_action_sub_results sub_results
enum action_actor_kind actor_kind
enum act_tgt_compl target_complexity
enum action_target_kind target_kind
struct action_enabler_contradiction * alternative
struct packet_game_info info
int(* player_tile_city_id_get)(const struct tile *ptile, const struct player *pplayer)
struct ae_contra_or * contras
bool tech_steal_allow_holes
enum airlifting_style airlifting_style
bool airlift_from_always_enabled
bv_actions diplchance_initial_odds
const struct player * player
struct veteran_system * veteran
const struct unit_type * utype
int fc_strcasecmp(const char *str0, const char *str1)
Tech_type_id advance_number(const struct advance *padvance)
#define advance_iterate(_p)
#define advance_iterate_end
bool tile_is_seen(const struct tile *target_tile, const struct player *pow_player)
struct city * tile_city(const struct tile *ptile)
#define tile_owner(_tile)
struct unit * unit_transport_get(const struct unit *pcargo)
bool unit_can_do_action(const struct unit *punit, const action_id act_id)
bool unit_transported(const struct unit *pcargo)
bool can_unit_unload(const struct unit *pcargo, const struct unit *ptrans)
bool unit_can_convert(const struct civ_map *nmap, const struct unit *punit)
#define unit_list_iterate(unitlist, punit)
#define unit_list_iterate_end
const struct unit_type * unit_type_get(const struct unit *punit)
bool utype_may_act_move_frags(const struct unit_type *punit_type, const action_id act_id, const int move_fragments)
const struct veteran_level * utype_veteran_level(const struct unit_type *punittype, int level)
bool unit_has_type_flag(const struct unit *punit, enum unit_type_flag_id flag)
bool utype_can_do_act_if_tgt_citytile(const struct unit_type *punit_type, const action_id act_id, const enum citytile_type prop, const bool is_there)
bool utype_can_do_action(const struct unit_type *putype, const action_id act_id)
#define unit_type_iterate(_p)
#define unit_type_iterate_end