; Modifying this file:
; You should not modify this file except to make bugfixes or
; for other "maintenance". If you want to make custom changes,
; you should create a new datadir subdirectory and copy this file
; into that directory, and then modify that copy. Then use the
; command "rulesetdir <mysubdir>" in the server to have freeciv
; use your new customized file.

; Note that the freeciv AI may not cope well with anything more
; than minor changes.

[datafile]
description = "Civ2 actions data for Freeciv"
options = "+Freeciv-ruleset-3.2-Devel-2022.Feb.02"
format_version = 30

[auto_attack]
; An auto attack may be triggered when another unit moves to an adjacent
; tile and the autoattack server setting is enabled. The following details
; are ruleset controlled.
;   if_attacker    - this requirement vector must be true before a unit even
;                    considers to auto attack.
;   attack_actions - the actions to try during an auto attack in the order
;                    they should be tried.

if_attacker =
    { "type",         "name",    "range", "present"
      "DiplRel",      "War",     "Local", TRUE
      "MinMoveFrags", "1",       "Local", TRUE
      ; Not a good idea to nuke our own area.
      "UnitFlag",     "Nuclear", "Local", FALSE
    }

attack_actions = "Collect Ransom", "Attack", "Suicide Attack"

[actions]
; Forbid "Enter Marketplace" if any one of the listed actions are legal.
enter_marketplace_blocked_by = "Establish Trade Route"

; Forbid "Attack" if any one of the listed actions are legal.
attack_blocked_by = "Collect Ransom", "Explode Nuclear",
                    "Nuke City", "Nuke Units"

; Forbid "Suicide Attack" if any one of the listed actions are legal.
suicide_attack_blocked_by = "Collect Ransom", "Explode Nuclear",
                            "Nuke City", "Nuke Units"

; Forbid "Conquer City" if any one of the listed actions are legal.
conquer_city_blocked_by = "Explode Nuclear", "Nuke City", "Nuke Units",
                          "Attack", "Suicide Attack"

; Forbid regular unit move if one of the actions below is legal.
move_blocked_by = "Transport Disembark", "Enter Hut", "Frighten Hut"

; Actor units will - under certain circumstances - be forced to try
; performing the following actions in the specified order after successfully
; performing "Bribe Unit".
bribe_unit_post_success_forced_actions = "Transport Embark",
                                         "Transport Disembark",
                                         "Transport Disembark 2",
                                         "Conquer Extras",
                                         "Conquer Extras 2",
                                         "Enter Hut", "Enter Hut 2",
                                         "Frighten Hut", "Frighten Hut 2",
                                         "Unit Move"

; Actor units will - under certain circumstances - be forced to try
; performing the following actions in the specified order after successfully
; performing "Attack".
attack_post_success_forced_actions = "Conquer City", "Conquer City 2",
                                     "Transport Disembark",
                                     "Transport Disembark 2",
                                     "Conquer Extras", "Conquer Extras 2",
                                     "Enter Hut", "Enter Hut 2",
                                     "Frighten Hut", "Frighten Hut 2",
                                     "Unit Move"

; Actor units will - under certain circumstances - be forced to try
; performing the following actions in the specified order after successfully
; performing "Collect Ransom".
collect_ransom_post_success_forced_actions =
                                     "Conquer City", "Conquer City 2",
                                     "Transport Disembark",
                                     "Transport Disembark 2",
                                     "Conquer Extras", "Conquer Extras 2",
                                     "Enter Hut", "Enter Hut 2",
                                     "Frighten Hut", "Frighten Hut 2",
                                     "Unit Move"

; The city that made the unit`s current tile native is gone. This is a Hail
; Mary attempt at survival by performing an action. Evaluated against an
; adjacent tile. Currently only able to target native tiles.
escape_city = "Transport Embark", "Enter Hut", "Enter Hut 2",
              "Frighten Hut", "Frighten Hut 2", "Unit Move"

; The unit`s stack has been defeated and is scheduled for execution but the
; unit has the CanEscape unit type flag. Evaluated against an adjacent tile.
;unit_stack_death = "Transport Embark", "Enter Hut", "Enter Hut 2",
;                   "Frighten Hut", "Unit Move"

; If poison_empties_food_stock is set to TRUE a successful "Poison City"
; or "Poison City Escape" will empty the food stock.
poison_empties_food_stock = FALSE

; If steal_maps_reveals_all_cities is set to TRUE a successful "Steal Maps"
; or "Steal Maps Escape" will transfer the map for all tiles containing a
; city.
;steal_maps_reveals_all_cities = TRUE

; The maximum distance from the actor unit to the target of the
; "Help Wonder" action. The value 0 means that the target`s tile must be the
; tile of the actor unit. The value 1 means that the city must be on a tile
; adjacent to the actor unit. The special value "unlimited" lifts the
; maximum distance restriction. The maximum distance can`t be smaller than
; the minimum distance.
help_wonder_max_range = 1

; The maximum distance from the actor unit to the target of the
; "Disband Unit Recover" action. The value 0 means that the target`s tile must be the
; tile of the actor unit. The value 1 means that the city must be on a tile
; adjacent to the actor unit. The special value "unlimited" lifts the
; maximum distance restriction. The maximum distance can`t be smaller than
; the minimum distance.
disband_unit_recover_max_range = 1

; The maximum distance from the actor unit to the target of the "Bombard"
; action. The value 1 means that the targets must be on a tile adjacent to
; the actor unit. The special value "unlimited" lifts the maximum distance
; restriction. The maximum distance can`t be smaller than the minimum
; distance.
bombard_max_range = 1

; The maximum distance from the actor unit to the target of the "Bombard 2"
; action. The value 1 means that the targets must be on a tile adjacent to
; the actor unit. The special value "unlimited" lifts the maximum distance
; restriction. The maximum distance can`t be smaller than the minimum
; distance.
bombard_2_max_range = 1

; The maximum distance from the actor unit to the target of the "Bombard 3"
; action. The value 1 means that the targets must be on a tile adjacent to
; the actor unit. The special value "unlimited" lifts the maximum distance
; restriction. The maximum distance can`t be smaller than the minimum
; distance.
bombard_3_max_range = 1

; The maximum distance from the actor unit to the target of the
; "Bombard Lethal" action. The value 1 means that the targets must be on a
; tile adjacent to the actor unit. The special value "unlimited" lifts the
; maximum distance restriction. The maximum distance can`t be smaller than
; the minimum distance.
bombard_lethal_max_range = 1

; The minimal distance from the actor unit to the target. The value 0 means
; that the target must be at the tile of the actor unit. The value 1 means
; that the tile must be a tile adjacent to the actor unit.
explode_nuclear_min_range = 0

; The maximum distance from the actor unit to the target of the
; "Explode Nuclear" action. The value 0 means that the target tile must be
; the tile of the actor unit. The value 1 means that the tile must be a tile
; adjacent to the actor unit. The special value "unlimited" lifts the
; maximum distance restriction. The maximum distance can`t be smaller than
; the minimum distance.
explode_nuclear_max_range = 0

; Will performing this action always consume the actor unit?
explode_nuclear_consuming_always = TRUE

; The minimal distance from the actor unit to the target. The value 0 means
; that the target must be at the tile of the actor unit. The value 1 means
; that the tile must be a tile adjacent to the actor unit.
nuke_city_min_range = 1

; The maximum distance from the actor unit to the target of the
; "Nuke City" action. The value 1 means that the tile must be a tile
; adjacent to the actor unit. The special value "unlimited" lifts the
; maximum distance restriction. The maximum distance can`t be smaller than
; the minimum distance.
nuke_city_max_range = 1

; Will performing this action always consume the actor unit?
nuke_city_consuming_always = TRUE

; The kind of target the "Nuke City" action has. The target requirements of
; its enablers are evaluated against the target. The target owner is the one
; that gets a Casus Belli if the ruleset has a Casus Belli for this action.
; Supported values are "City" and "Tile".
nuke_city_target_kind = "City"

; The minimal distance from the actor unit to the target. The value 0 means
; that the target must be at the tile of the actor unit. The value 1 means
; that the tile must be a tile adjacent to the actor unit.
nuke_units_min_range = 1

; The maximum distance from the actor unit to the target of the
; "Nuke Units" action. The value 1 means that the tile must be a tile
; adjacent to the actor unit. The special value "unlimited" lifts the
; maximum distance restriction. The maximum distance can`t be smaller than
; the minimum distance.
nuke_units_max_range = 1

; Will performing this action always consume the actor unit?
nuke_units_consuming_always = TRUE

; The maximum distance from the actor unit to the target of the "Airlift Unit"
; action. The value 1 means that the targets must be on a tile adjacent to
; the actor unit. The special value "unlimited" lifts the maximum distance
; restriction. The maximum distance can`t be smaller than the minimum
; distance.
airlift_max_range = "unlimited"

; Will performing this action always consume the actor unit?
found_city_consuming_always = TRUE

; What each action should be called when showing them to the player.
; The first %s should be before the mnemonic of the action. A Freeciv client
; that supports mnemonics will replace it with the in-band signal that marks
; the following character as a mnemonic in its graphical toolkit.
; The second %s marks where extra details should be inserted.

; /* TRANS: _Poison City (3% chance of success). */
ui_name_poison_city_escape = _("%sPoison City%s")

; /* TRANS: Plant _Nuclear Device (3% chance of success). */
ui_name_suitcase_nuke_escape = _("Plant %sNuclear Device%s")

; /* TRANS: _Sabotage Enemy Unit (3% chance of success). */
ui_name_sabotage_unit_escape = _("%sSabotage Enemy Unit%s")

; /* TRANS: _Bribe Enemy Unit (3% chance of success). */
ui_name_bribe_unit = _("%sBribe Enemy Unit%s")

; /* TRANS: _Sabotage City (3% chance of success). */
ui_name_sabotage_city = _("%sSabotage City%s")

; /* TRANS: _Sabotage City Escape (3% chance of success). */
ui_name_sabotage_city_escape = _("%sSabotage City Escape%s")

; /* TRANS: Industrial _Sabotage (3% chance of success). */
ui_name_targeted_sabotage_city_escape = _("Industrial %sSabotage%s")

; /* TRANS: Industrial _Sabotage Production (3% chance of success). */
ui_name_sabotage_city_production_escape = _("Industrial %sSabotage Production%s")

; /* TRANS: Incite a _Revolt (3% chance of success). */
ui_name_incite_city = _("Incite a %sRevolt%s")

; /* TRANS: Incite a _Revolt and Escape (3% chance of success). */
ui_name_incite_city_escape = _("Incite a Re%svolt and Escape%s")

; /* TRANS: Establish _Embassy (100% chance of success). */
ui_name_establish_embassy = _("Establish %sEmbassy%s")

; /* TRANS: Becom_e Ambassador (100% chance of success). */
ui_name_establish_embassy_stay = _("Becom%se Ambassador%s")

; /* TRANS: Steal _Technology (3% chance of success). */
ui_name_steal_tech = _("Steal %sTechnology%s")

; /* TRANS: Steal _Technology and Escape (3% chance of success). */
ui_name_steal_tech_escape = _("Steal %sTechnology and Escape%s")

; /* TRANS: Indus_trial Espionage (3% chance of success). */
ui_name_targeted_steal_tech_escape = _("Indus%strial Espionage%s")

; /* TRANS: _Investigate City (100% chance of success). */
ui_name_investigate_city = _("%sInvestigate City%s")

; /* TRANS: _Investigate City (spends the unit) (100% chance of success). */
ui_name_investigate_city_spend_unit = _("%sInvestigate City (spends the unit)%s")

; /* TRANS: Establish Trade _Route (100% chance of success). */
ui_name_establish_trade_route = _("Establish Trade %sRoute%s")

; /* TRANS: Enter _Marketplace (100% chance of success). */
ui_name_enter_marketplace = _("Enter %sMarketplace%s")

; /* TRANS: Help _build Wonder (100% chance of success). */
ui_name_help_wonder = _("Help %sbuild Wonder%s")

; /* TRANS: Dis_band recovering production (100% chance of success). */
ui_name_disband_unit_recover = _("Dis%sband recovering production%s")

; /* TRANS: Dis_band without recovering production (100% chance of success). */
ui_name_disband_unit = _("Dis%sband without recovering production%s")

; /* TRANS: _Build City (100% chance of success). */
ui_name_found_city = _("%sBuild City%s")

; /* TRANS: _Add to City (100% chance of success). */
ui_name_join_city = _("%sAdd to City%s")

; /* TRANS: Explode _Nuclear In Place (100% chance of success). */
ui_name_explode_nuclear = _("Explode %sNuclear In Place%s")

; /* TRANS: _Nuke City (100% chance of success). */
ui_name_nuke_city = _("%sNuke City%s")

; /* TRANS: _Nuke Units (100% chance of success). */
ui_name_nuke_units = _("%sNuke Units%s")

; /* TRANS: Set _Home City (100% chance of success). */
ui_name_home_city = _("Set %sHome City%s")

; /* TRANS: Drop _Paratrooper (100% chance of success). */
ui_name_paradrop_unit_enter = _("Drop %sParatrooper%s")

; /* TRANS: _Paradrop to Contested Landing (100% chance of success). */
ui_name_paradrop_unit_enter_conquer = _("%sParadrop to Contested Landing%s")

; /* TRANS: _Airlift to City (100% chance of success). */
ui_name_airlift_unit = _("%sAirlift to City%s")

; /* TRANS: _Attack (100% chance of success). */
ui_name_attack = _("%sAttack%s")

; /* TRANS: _Explode Missile (100% chance of success). */
ui_name_suicide_attack = _("%sExplode Missile%s")

; /* TRANS: _Conquer City (100% chance of success). */
ui_name_conquer_city = _("%sConquer City%s")

; /* TRANS: _Transform Terrain (3% chance of success). */
ui_name_transform_terrain = _("%sTransform Terrain%s")

; /* TRANS: Transform by _Cultivating (3% chance of success). */
ui_name_cultivate = _("Transform by %sCultivating%s")

; /* TRANS: Transform by _Planting (3% chance of success). */
ui_name_plant = _("Transform by %sPlanting%s")

; /* TRANS: Pilla_ge (100% chance of success). */
ui_name_pillage = _("Pilla%sge%s")

; /* TRANS: Clean (100% chance of success). */
ui_name_clean = _("Clean %sPollution%s")

; /* TRANS: _Fortify (100% chance of success). */
ui_name_fortify = _("%sFortify%s")

; /* TRANS: Build _Road (100% chance of success). */
ui_name_build_road = _("Build %sRoad%s")

; /* TRANS: _Build Base (100% chance of success). */
ui_name_build_base = _("%sBuild Base%s")

; /* TRANS: Build _Mine (100% chance of success). */
ui_name_build_mine = _("Build %sMine%s")

; /* TRANS: Build _Irrigation (100% chance of success). */
ui_name_irrigate = _("Build %sIrrigation%s")

; /* TRANS: _Deboard (100% chance of success). */
ui_name_transport_deboard = _("%sDeboard%s")

; /* TRANS: _Board (100% chance of success). */
ui_name_transport_board = _("%sBoard%s")

; /* TRANS: _Unload (100% chance of success). */
ui_name_transport_unload = _("%sUnload%s")

; /* TRANS: _Disembark (100% chance of success). */
ui_name_transport_disembark = _("%sDisembark%s")

; /* TRANS: _Embark (100% chance of success). */
ui_name_transport_embark = _("%sEmbark%s")

; /* TRANS: Enter _Hut (100% chance of success). */
ui_name_enter_hut = _("Enter %sHut%s")

; /* TRANS: Frighten _Hut (100% chance of success). */
ui_name_frighten_hut = _("Frighten %sHut%s")

; /* TRANS: Regular _Move (100% chance of success). */
ui_name_unit_move = _("%sKeep moving%s")

; Blank ruleset defined user actions.
; See the section "Ruleset defined actions" in doc/README.actions
; Example: set up "User Action 1"
;ui_name_user_action_1                = _("%sDisrupt Supply Lines%s")
;user_action_1_target_kind            = "Unit"
;user_action_1_min_range              = 1
;user_action_1_max_range              = 3
;user_action_1_actor_consuming_always = FALSE

; Some actions have a action dice roll before the action starts where it can
; fail. The initial probability of success is 100% unless the action appears
; in the following list. Then the initial probability comes from the setting
; diplchance. The initial probability of success is modified by the
; Action_Odds_Pct effect before the roll happens.
diplchance_initial_odds = "Sabotage City", "Sabotage City Escape",
                          "Targeted Sabotage City Escape",
                          "Sabotage City Production Escape",
                          "Steal Tech", "Steal Tech Escape Expected",
                          "Targeted Steal Tech Escape Expected",
                          "Incite City", "Incite City Escape",
                          "Suitcase Nuke Escape"

; Suppress automatic help text generation about what enables and/or
; disables the following actions.
;
; Can make the help text less redundant when you document it your self.
quiet_actions = "Unit Move"

; /* <-- avoid gettext warnings
;
; Action enablers:
;
; action               = the action to enable.
; actor_reqs           = requirements that apply to the actor.
; target_reqs          = requirements that apply to the target.
;
; README.actions lists the possible actions and their hard coded
; requirements.
;
; An action enabler is active when its actor_reqs AND its target_reqs are
; satisfied.
;
; */ <-- avoid gettext warnings

[actionenabler_sabotage_city]
action        = "Sabotage City"
actor_reqs    =
    { "type",         "name",     "range", "present"
      "UnitFlag",     "Diplomat", "Local", TRUE
      "DiplRel",      "War",      "Local", TRUE
      "MinMoveFrags", "1",        "Local", TRUE
      "UnitFlag",     "Spy",      "Local", FALSE
    }

[actionenabler_sabotage_city_spy]
action        = "Sabotage City Escape"
actor_reqs    =
    { "type",         "name", "range"
      "UnitFlag",     "Spy",  "Local"
      "DiplRel",      "War",  "Local"
      "MinMoveFrags", "1",    "Local"
    }

[actionenabler_sabotage_city_target]
action        = "Targeted Sabotage City Escape"
actor_reqs    =
    { "type",         "name", "range"
      "DiplRel",      "War",  "Local"
      "UnitFlag",     "Spy",  "Local"
      "MinMoveFrags", "1",    "Local"
    }

[actionenabler_sabotage_city_production]
action        = "Sabotage City Production Escape"
actor_reqs    =
    { "type",         "name", "range"
      "DiplRel",      "War",  "Local"
      "UnitFlag",     "Spy",  "Local"
      "MinMoveFrags", "1",    "Local"
    }

[actionenabler_establish_embassy]
action        = "Establish Embassy Stay"
actor_reqs    =
    { "type",         "name",             "range", "present"
      "UnitFlag",     "Diplomat",         "Local", TRUE
      "MinMoveFrags", "1",                "Local", TRUE
      "DiplRel",      "Foreign",          "Local", TRUE
      "DiplRel",      "Has real embassy", "Local", FALSE
      "UnitFlag",     "Spy",              "Local", FALSE
    }

[actionenabler_establish_embassy_spy]
action        = "Establish Embassy"
actor_reqs    =
    { "type",         "name",             "range", "present"
      "UnitFlag",     "Spy",              "Local", TRUE
      "MinMoveFrags", "1",                "Local", TRUE
      "DiplRel",      "Foreign",          "Local", TRUE
      "DiplRel",      "Has real embassy", "Local", FALSE
    }

[actionenabler_investigate_city]
action        = "Investigate City Spend Unit"
actor_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "Diplomat", "Local", TRUE
      "MinMoveFrags", "1", "Local", TRUE
      "DiplRel", "Foreign", "Local", TRUE
      "UnitFlag", "Spy", "Local", FALSE
    }

[actionenabler_investigate_city_spy]
action        = "Investigate City"
actor_reqs    =
    { "type",   "name", "range"
      "UnitFlag", "Spy", "Local"
      "MinMoveFrags", "1", "Local"
      "DiplRel", "Foreign", "Local"
    }

[actionenabler_poison_city]
action        = "Poison City Escape"
actor_reqs    =
    { "type",   "name", "range"
      "UnitFlag", "Spy", "Local"
      "DiplRel", "War", "Local"
      "MinMoveFrags", "1", "Local"
    }
target_reqs   =
    { "type",   "name", "range"
      "MinSize", "2", "City"
    }

; TODO: Find the exact requirements
[actionenabler_plant_nuke]
action        = "Suitcase Nuke Escape"
actor_reqs    =
    { "type",   "name", "range"
      "UnitFlag", "Spy", "Local"
      "Building", "Manhattan Project", "World"
      "Tech", "Nuclear Fission", "Player"
      "DiplRel", "War", "Local"
      "MinMoveFrags", "1", "Local"
    }

[actionenabler_steal_tech_random]
action        = "Steal Tech"
actor_reqs    =
    { "type",         "name",     "range", "present"
      "UnitFlag",     "Diplomat", "Local", TRUE
      "UnitFlag",     "Spy",      "Local", FALSE
      "MinMoveFrags", "1",        "Local", TRUE
      "DiplRel",      "Foreign",  "Local", TRUE
    }
target_reqs   =
    { "type",        "name",      "range",  "present"
      "NationGroup", "Barbarian", "Player", FALSE
    }

[actionenabler_steal_tech_random_esc]
action        = "Steal Tech Escape Expected"
actor_reqs    =
    { "type",         "name",    "range"
      "UnitFlag",     "Spy",     "Local"
      "MinMoveFrags", "1",       "Local"
      "DiplRel",      "Foreign", "Local"
    }
target_reqs   =
    { "type",        "name",      "range",  "present"
      "NationGroup", "Barbarian", "Player", FALSE
    }

[actionenabler_steal_tech_target]
action        = "Targeted Steal Tech Escape Expected"
actor_reqs    =
    { "type",         "name",    "range"
      "UnitFlag",     "Spy",     "Local"
      "MinMoveFrags", "1",       "Local"
      "DiplRel",      "Foreign", "Local"
    }
target_reqs   =
    { "type",        "name",      "range",  "present"
      "NationGroup", "Barbarian", "Player", FALSE
    }

[actionenabler_incite_city]
action        = "Incite City"
actor_reqs    =
    { "type",         "name",     "range", "present"
      "UnitFlag",     "Diplomat", "Local", TRUE
      "DiplRel",      "Alliance", "Local", FALSE
      "DiplRel",      "Team",     "Local", FALSE
      "MinMoveFrags", "1",        "Local", TRUE
      "DiplRel",      "Foreign",  "Local", TRUE
      "UnitFlag",     "Spy",      "Local", FALSE
    }
target_reqs   =
    { "type",     "name",      "range", "present"
      "Gov",      "Democracy", "Player", FALSE
      "Building", "Palace",    "City",   FALSE
    }

[actionenabler_incite_city_spy]
action        = "Incite City Escape"
actor_reqs    =
    { "type",         "name",     "range", "present"
      "UnitFlag",     "Spy",      "Local", TRUE
      "DiplRel",      "Alliance", "Local", FALSE
      "DiplRel",      "Team",     "Local", FALSE
      "MinMoveFrags", "1",        "Local", TRUE
      "DiplRel",      "Foreign",  "Local", TRUE
    }
target_reqs   =
    { "type",     "name",      "range", "present"
      "Gov",      "Democracy", "Player", FALSE
      "Building", "Palace",    "City",   FALSE
    }

[actionenabler_bribe_unit]
action        = "Bribe Unit"
actor_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "Diplomat", "Local", TRUE
      "DiplRel", "Alliance", "Local", FALSE
      "DiplRel", "Team", "Local", FALSE
      "MinMoveFrags", "1", "Local", TRUE
      "DiplRel", "Foreign", "Local", TRUE
    }
target_reqs   =
    { "type",   "name", "range", "present"
      "CityTile", "Center", "Tile", FALSE
      "Gov", "Democracy", "Player", FALSE
      "MaxUnitsOnTile", "1", "Tile", TRUE
    }

[actionenabler_sabotage_unit]
action        = "Sabotage Unit Escape"
actor_reqs    =
    { "type",   "name", "range"
      "UnitFlag", "Spy", "Local"
      "DiplRel", "War", "Local"
      "MinMoveFrags", "1", "Local"
    }
target_reqs   =
    { "type",   "name", "range", "present"
      "CityTile", "Center", "Tile", FALSE
      "MinHitPoints", "2", "Local", TRUE
      "MaxUnitsOnTile", "1", "Tile", TRUE
    }

[actionenabler_trade_route]
action        = "Establish Trade Route"
actor_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "TradeRoute", "Local", TRUE
      "UnitState", "HasHomeCity", "Local", TRUE
    }

[actionenabler_marketplace]
action        = "Enter Marketplace"
actor_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "TradeRoute", "Local", TRUE
      "UnitState", "HasHomeCity", "Local", TRUE
    }

[actionenabler_help_build_wonder]
action        = "Help Wonder"
actor_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "HelpWonder", "Local", TRUE
      "DiplRel", "Foreign", "Local", FALSE
    }
target_reqs   =
    { "type",   "name", "range"
      "BuildingGenus", "GreatWonder", "Local"
    }

[actionenabler_disband_unit_recover]
action        = "Disband Unit Recover"
actor_reqs    =
    { "type",   "name", "range", "present"
      "DiplRel",  "War",        "Local", FALSE
      "DiplRel",  "Cease-fire", "Local", FALSE
      "DiplRel",  "Armistice",  "Local", FALSE
      "DiplRel",  "Peace",      "Local", FALSE
    }

[actionenabler_disband_unit]
action        = "Disband Unit"

[actionenabler_build_city_pioneer]
action        = "Found City"
actor_reqs    =
    { "type",   "name", "range"
      "UnitFlag", "Cities", "Local"
      "UnitState", "OnLivableTile", "Local"
      "MinMoveFrags", "1", "Local"
    }
target_reqs   =
    { "type",   "name", "range", "present"
      "CityTile", "Claimed", "Tile", FALSE
      "TerrainFlag","NoCities","Tile",FALSE
    }

[actionenabler_build_city_domestic]
action        = "Found City"
actor_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "Cities", "Local", TRUE
      "UnitState", "OnLivableTile", "Local", TRUE
      "MinMoveFrags", "1", "Local", TRUE
      "DiplRel", "Foreign", "Local", FALSE
    }
target_reqs   =
    { "type",        "name",     "range", "present"
      "CityTile",    "Claimed",  "Tile",  TRUE
      "TerrainFlag", "NoCities", "Tile",  FALSE
    }

[actionenabler_join_city]
action = "Join City"
actor_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "AddToCity", "Local", TRUE
      "DiplRel", "Foreign", "Local", FALSE
      "MinMoveFrags", "1", "Local", TRUE
    }

[actionenabler_nuke]
action      = "Explode Nuclear"
actor_reqs  =
    { "type",     "name",    "range", "present"
      "UnitFlag", "Nuclear", "Local", TRUE
    }

[actionenabler_nuke_city]
action      = "Nuke City"
actor_reqs  =
    { "type",         "name",    "range"
      "UnitFlag",     "Nuclear", "Local"
      "MinMoveFrags", "1",       "Local"
      "DiplRel",      "War",     "Local"
    }

[actionenabler_nuke_units]
action      = "Nuke Units"
actor_reqs  =
    { "type",         "name",    "range"
      "UnitFlag",     "Nuclear", "Local"
      "MinMoveFrags", "1",       "Local"
      "DiplRel",      "War",     "Local"
    }
target_reqs =
    { "type",     "name",   "range", "present"
      "CityTile", "Center", "Tile",  FALSE
    }

[actionenabler_attack_from_native]
action = "Attack"
actor_reqs    =
    { "type",          "name",         "range", "present"
      "UnitFlag",      "NonMil",       "Local", FALSE
      "UnitClassFlag", "Missile",      "Local", FALSE
      "MinMoveFrags",  "1",            "Local", TRUE
      "UnitState",     "OnNativeTile", "Local", TRUE
      "DiplRel",       "War",          "Local", TRUE
    }

[actionenabler_attack_marines]
action = "Attack"
actor_reqs    =
    { "type",          "name",    "range", "present"
      "UnitFlag",      "NonMil",  "Local", FALSE
      "UnitClassFlag", "Missile", "Local", FALSE
      "MinMoveFrags",  "1",       "Local", TRUE
      "UnitFlag",      "Marines", "Local", TRUE
      "DiplRel",       "War",     "Local", TRUE
    }

[actionenabler_attack_uclass_sea]
action = "Attack"
actor_reqs    =
    { "type",          "name",    "range", "present"
      "UnitFlag",      "NonMil",  "Local", FALSE
      "UnitClassFlag", "Missile", "Local", FALSE
      "MinMoveFrags",  "1",       "Local", TRUE
      "UnitClass",     "Sea",     "Local", TRUE
      "DiplRel",       "War",     "Local", TRUE
    }

[actionenabler_ransom_from_native]
action        = "Collect Ransom"
actor_reqs    =
    { "type",          "name",         "range", "present"
      "UnitFlag",      "NonMil",       "Local", FALSE
      "UnitClassFlag", "Missile",      "Local", FALSE
      "MinMoveFrags",  "1",            "Local", TRUE
      "UnitState",     "OnNativeTile", "Local", TRUE
      "DiplRel",       "War",          "Local", TRUE
    }

[actionenabler_ransom_marines]
action        = "Collect Ransom"
actor_reqs    =
    { "type",          "name",    "range", "present"
      "UnitFlag",      "NonMil",  "Local", FALSE
      "UnitClassFlag", "Missile", "Local", FALSE
      "MinMoveFrags",  "1",       "Local", TRUE
      "UnitFlag",      "Marines", "Local", TRUE
      "DiplRel",       "War",     "Local", TRUE
    }

[actionenabler_ransom_uclass_sea]
action        = "Collect Ransom"
actor_reqs    =
    { "type",          "name",    "range", "present"
      "UnitFlag",      "NonMil",  "Local", FALSE
      "UnitClassFlag", "Missile", "Local", FALSE
      "MinMoveFrags",  "1",       "Local", TRUE
      "UnitClass",     "Sea",     "Local", TRUE
      "DiplRel",       "War",     "Local", TRUE
    }

[actionenabler_explode_missile]
action = "Suicide Attack"
actor_reqs    =
    { "type",          "name",    "range", "present"
      "UnitFlag",      "NonMil",  "Local", FALSE
      "UnitClassFlag", "Missile", "Local", TRUE
      "MinMoveFrags",  "1",       "Local", TRUE
      "DiplRel",       "War",     "Local", TRUE
    }

[actionenabler_conquer_city_native]
action = "Conquer City"
actor_reqs    =
    { "type",           "name",          "range", "present"
      "UnitClassFlag",  "CanOccupyCity", "Local", TRUE
      "UnitFlag",       "NonMil",        "Local", FALSE
      "DiplRel",        "War",           "Local", TRUE
      "MinMoveFrags",   "1",             "Local", TRUE
      "UnitState",      "OnLivableTile", "Local", TRUE
    }
target_reqs    =
    { "type",           "name",          "range", "present"
      "MaxUnitsOnTile", "0",             "Tile",  TRUE
    }

[actionenabler_conquer_city_marines]
action = "Conquer City"
actor_reqs    =
    { "type",           "name",          "range", "present"
      "UnitClassFlag",  "CanOccupyCity", "Local", TRUE
      "UnitFlag",       "NonMil",        "Local", FALSE
      "DiplRel",        "War",           "Local", TRUE
      "MinMoveFrags",   "1",             "Local", TRUE
      "UnitFlag",       "Marines",       "Local", TRUE
    }
target_reqs    =
    { "type",           "name",          "range", "present"
      "MaxUnitsOnTile", "0",             "Tile",  TRUE
    }

[actionenabler_change_home_city]
action = "Home City"
actor_reqs    =
    { "type",      "name",        "range", "present"
      "UnitState", "HasHomeCity", "Local", TRUE
      "DiplRel",   "Foreign",  "Local", FALSE
    }

[actionenabler_paradrop_base_to_claimed]
action = "Paradrop Unit Enter"
actor_reqs    =
    { "type",          "name",         "range", "present"
      "UnitFlag",      "Paratroopers", "Local", TRUE
      "MinMoveFrags",  "3",            "Local", TRUE
      "UnitState",     "Transporting", "Local", FALSE
      "Extra",         "Airbase",      "Tile",  TRUE
      "DiplRel",       "Peace",        "Local", FALSE
      "DiplRel",       "War",          "Local", FALSE
      "UnitClassFlag", "HutFrighten",  "Local", FALSE
    }
target_reqs   =
    { "type",     "name",    "range", "present"
      "CityTile", "Claimed", "Tile",  TRUE
    }

[actionenabler_paradrop_base_to_unclaimed]
action = "Paradrop Unit Enter"
actor_reqs    =
    { "type",          "name",         "range", "present"
      "UnitFlag",      "Paratroopers", "Local", TRUE
      "MinMoveFrags",  "3",            "Local", TRUE
      "UnitState",     "Transporting", "Local", FALSE
      "Extra",         "Airbase",      "Tile",  TRUE
      "UnitClassFlag", "HutFrighten",  "Local", FALSE
    }
target_reqs   =
    { "type",     "name",    "range", "present"
      "CityTile", "Claimed", "Tile",  FALSE
    }

[actionenabler_paradrop_base_to_war_conquer]
action = "Paradrop Unit Enter Conquer"
actor_reqs    =
    { "type",          "name",          "range", "present"
      "UnitFlag",      "Paratroopers",  "Local", TRUE
      "MinMoveFrags",  "3",             "Local", TRUE
      "UnitState",     "Transporting",  "Local", FALSE
      "Extra",         "Airbase",       "Tile",  TRUE
      "DiplRel",       "War",           "Local", TRUE
      "UnitClassFlag", "CanOccupyCity", "Local", TRUE
      "UnitFlag",      "NonMil",        "Local", FALSE
      "UnitClassFlag", "HutFrighten",   "Local", FALSE
    }
target_reqs   =
    { "type",     "name",    "range", "present"
      "CityTile", "Claimed", "Tile",  TRUE
    }

[actionenabler_paradrop_city_to_claimed]
action = "Paradrop Unit Enter"
actor_reqs    =
    { "type",          "name",         "range", "present"
      "UnitFlag",      "Paratroopers", "Local", TRUE
      "MinMoveFrags",  "3",            "Local", TRUE
      "UnitState",     "Transporting", "Local", FALSE
      "CityTile",      "Center",       "Tile",  TRUE
      "DiplRel",       "Peace",        "Local", FALSE
      "DiplRel",       "War",          "Local", FALSE
      "UnitClassFlag", "HutFrighten",  "Local", FALSE
    }
target_reqs   =
    { "type",     "name",    "range", "present"
      "CityTile", "Claimed", "Tile",  TRUE
    }

[actionenabler_paradrop_city_to_unclaimed]
action = "Paradrop Unit Enter"
actor_reqs    =
    { "type",          "name",         "range", "present"
      "UnitFlag",      "Paratroopers", "Local", TRUE
      "MinMoveFrags",  "3",            "Local", TRUE
      "UnitState",     "Transporting", "Local", FALSE
      "CityTile",      "Center",       "Tile",  TRUE
      "UnitClassFlag", "HutFrighten",  "Local", FALSE
    }
target_reqs   =
    { "type",     "name",    "range", "present"
      "CityTile", "Claimed", "Tile",  FALSE
    }

[actionenabler_paradrop_city_to_war_conquer]
action = "Paradrop Unit Enter Conquer"
actor_reqs    =
    { "type",          "name",          "range", "present"
      "UnitFlag",      "Paratroopers",  "Local", TRUE
      "MinMoveFrags",  "3",             "Local", TRUE
      "UnitState",     "Transporting",  "Local", FALSE
      "CityTile",      "Center",        "Tile",  TRUE
      "DiplRel",       "War",           "Local", TRUE
      "UnitClassFlag", "CanOccupyCity", "Local", TRUE
      "UnitFlag",      "NonMil",        "Local", FALSE
      "UnitClassFlag", "HutFrighten",   "Local", FALSE
    }
target_reqs   =
    { "type",     "name",    "range", "present"
      "CityTile", "Claimed", "Tile",  TRUE
    }

[actionenabler_airlift_unit]
action = "Airlift Unit"
actor_reqs    =
    { "type",          "name",         "range", "present"
      "UnitClass",     "Land",         "Local", TRUE
      "UnitState",     "Transporting", "Local", FALSE
      "MinMoveFrags",  "1",            "Local", TRUE
      "CityTile",      "Center",       "Tile",  TRUE
    }

[actionenabler_transform_terrain]
action        = "Transform Terrain"
actor_reqs    =
    { "type",          "name",         "range"
      "UnitFlag",      "Transform",    "Local"
      "UnitFlag",      "Settlers",     "Local"
    }

[actionenabler_cultivate]
action        = "Cultivate"
actor_reqs    =
    { "type",          "name",         "range", "present"
      "UnitFlag",      "Settlers",     "Local", TRUE
    }

[actionenabler_plant]
action        = "Plant"
actor_reqs    =
    { "type",          "name",         "range", "present"
      "UnitFlag",      "Settlers",     "Local", TRUE
    }

[actionenabler_pillage]
action        = "Pillage"
actor_reqs    =
    { "type",          "name",         "range"
      "UnitClassFlag", "CanPillage",   "Local"
    }

[actionenabler_clean]
action        = "Clean"
actor_reqs    =
    { "type",          "name",         "range", "present"
      "UnitFlag",      "Settlers",     "Local", TRUE
    }

[actionenabler_fortify_terrain]
action        = "Fortify"
actor_reqs    =
    { "type",          "name",         "range", "present"
      "UnitClassFlag", "CanFortify",   "Local", TRUE
      "UnitFlag",      "Cant_Fortify", "Local", FALSE
      "TerrainFlag",   "NoFortify",    "Tile",  FALSE
      "Activity",      "Fortified",    "Local", FALSE
    }

[actionenabler_fortify_city]
action        = "Fortify"
actor_reqs    =
    { "type",          "name",         "range", "present"
      "UnitClassFlag", "CanFortify",   "Local", TRUE
      "UnitFlag",      "Cant_Fortify", "Local", FALSE
      "CityTile",      "Center",       "Tile",  TRUE
      "Activity",      "Fortified",    "Local", FALSE
    }

[actionenabler_road]
action        = "Build Road"
actor_reqs    =
    { "type",          "name",         "range"
      "UnitFlag",      "Settlers",     "Local"
    }
target_reqs   =
    { "type",         "name",    "range"
      "TerrainAlter", "CanRoad", "Tile"
    }

[actionenabler_base]
action        = "Build Base"
actor_reqs    =
    { "type",          "name",         "range"
      "UnitFlag",      "Settlers",     "Local"
    }
target_reqs   =
    { "type",         "name",    "range"
      "TerrainAlter", "CanBase", "Tile"
    }

[actionenabler_mining]
action        = "Build Mine"
actor_reqs    =
    { "type",          "name",         "range"
      "UnitFlag",      "Settlers",     "Local"
    }
target_reqs    =
    { "type",         "name",    "range"
      "TerrainAlter", "CanMine", "Tile"
    }

[actionenabler_irrigate_src_ocean]
action        = "Build Irrigation"
actor_reqs    =
    { "type",          "name",         "range"
      "UnitFlag",      "Settlers",     "Local"
    }
target_reqs    =
    { "type",         "name",        "range"
      "TerrainClass", "Oceanic",     "CAdjacent"
      "TerrainAlter", "CanIrrigate", "Tile"
    }

[actionenabler_irrigate_src_river]
action        = "Build Irrigation"
actor_reqs    =
    { "type",          "name",         "range"
      "UnitFlag",      "Settlers",     "Local"
    }
target_reqs    =
    { "type",         "name",        "range"
      "Extra",        "River",       "CAdjacent"
      "TerrainAlter", "CanIrrigate", "Tile"
    }

[actionenabler_irrigate_src_irrigation]
action        = "Build Irrigation"
actor_reqs    =
    { "type",          "name",         "range"
      "UnitFlag",      "Settlers",     "Local"
    }
target_reqs    =
    { "type",         "name",        "range"
      "Extra",        "Irrigation",  "CAdjacent"
      "TerrainAlter", "CanIrrigate", "Tile"
    }

[actionenabler_deboard]
action        = "Transport Deboard"
actor_reqs    =
    { "type",      "name",          "range"
      "UnitState", "OnLivableTile", "Local"
      "UnitState", "Transported",   "Local"
    }
target_reqs    =
    { "type",      "name",         "range"
      "UnitState", "Transporting", "Local"
    }

[actionenabler_board]
action        = "Transport Board"
actor_reqs    =
    { "type",    "name",       "range", "present"
      "DiplRel", "Armistice",  "Local", FALSE
      "DiplRel", "War",        "Local", FALSE
      "DiplRel", "Cease-fire", "Local", FALSE
      "DiplRel", "Peace",      "Local", FALSE
      "DiplRel", "Never met",  "Local", FALSE
    }

[actionenabler_unload]
action        = "Transport Unload"
actor_reqs    =
    { "type",      "name",         "range"
      "UnitState", "Transporting", "Local"
    }
target_reqs    =
    { "type",      "name",          "range"
      "UnitState", "OnLivableTile", "Local"
      "UnitState", "Transported",   "Local"
    }

[actionenabler_disembark]
action        = "Transport Disembark"
actor_reqs    =
    { "type",         "name",        "range"
      "UnitState",    "Transported", "Local"
      "MinMoveFrags", "1",           "Local"
    }

; TODO: was transferring from a transport to a transport on an adjacent tile
; legal?
[actionenabler_embark]
action        = "Transport Embark"
actor_reqs    =
    { "type",         "name",       "range", "present"
      "MinMoveFrags", "1",          "Local", TRUE
      "DiplRel",      "Armistice",  "Local", FALSE
      "DiplRel",      "War",        "Local", FALSE
      "DiplRel",      "Cease-fire", "Local", FALSE
      "DiplRel",      "Peace",      "Local", FALSE
      "DiplRel",      "Never met",  "Local", FALSE
    }
target_reqs    =
    { "type",     "name",   "range", "present"
      ; use "Transport Board" from inside the city
      "CityTile", "Center", "Tile",  FALSE
    }

[actionenabler_regular_move]
action     = "Unit Move"
actor_reqs =
    { "type",         "name",        "range", "present"
      "MinMoveFrags", "1",           "Local", TRUE
      "UnitState",    "Transported", "Local", FALSE
    }

[actionenabler_hut_enter]
action        = "Enter Hut"
actor_reqs    =
    { "type",          "name",         "range", "present"
      "MinMoveFrags",  "1",            "Local", TRUE
      "UnitClassFlag", "HutFrighten",  "Local", FALSE
    }

[actionenabler_hut_frighten]
action        = "Frighten Hut"
actor_reqs    =
    { "type",         "name",         "range"
      "MinMoveFrags", "1",            "Local"
      "UnitClassFlag", "HutFrighten", "Local"
    }
