; 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="Civ2Civ3 game rules for Freeciv"
options="+Freeciv-3.0-ruleset web-compatible"
format_version=10

; This section contains meta information for freeciv-ruledit to recreate the ruleset
; file in a form wanted. These have no in-game effect whatsoever
[ruledit]

; Which file to read description in from.
description_file = "civ2civ3/README.civ2civ3"

[about]
; Ruleset name
name = _("Civ2Civ3 ruleset")

; There`s no separate versioning in rulesets part of main freeciv distribution
;version = ""

; Summary of the ruleset
; /* TRANS: In the client, this is displayed alongside the contents of
;    README.civ2civ3, which are not localized. */
summary = _("\
You are playing Freeciv with civ2civ3 rules:\
\n\n\
Gameplay more similar to civ3, keeping the combat system from civ2.\
\n\n\
Adapted for single player, with AI less aggressive at start,\
 but more challenging at the end.\
\n\n\
The differences from the former default ruleset, 'classic', are listed in\
 full in README.civ2civ3.\
")

; Detailed description
; When updating this, update also description_file in [ruledit] section to match
description = *civ2civ3/README.civ2civ3*

; What capabilities ruleset provides for the scenarios.
; See doc/README.rulesets for definitions of official capabilities
; std-terrains         - At least standard set of terrains
capabilities = "std-terrains"

[options]
global_init_techs=""
global_init_buildings="Palace"

[tileset]
; If preferred tileset is set, clients that support the feature will suggest
; using that tileset with the ruleset.
; preferred = ""

[soundset]
; If preferred soundset is set, clients that support the feature will suggest
; using that soundset with the ruleset.
; preferred = ""

[musicset]
; If preferred musicset is set, clients that support the feature will suggest
; using that musicset with the ruleset.
; preferred = ""

[civstyle]
; Value added to city pollution
base_pollution   = -20

; Cost in luxuries of making one citizen happier
happy_cost       = 2

; Cost in food of upkeeping a single citizen
food_cost        = 2

; Parameters used to generalize the calculation of city granary size:
;   if city_size <= num_inis:
;     city_granary_size = (granary_food_ini[city_size] * foodbox / 100)
;   if city_size > num_inis;
;     city_granary_size = (granary_food_ini[num_inis] +
;        granary_food_inc * (city_size - num_inis)) * foodbox / 100
granary_food_ini = 20, 20, 20, 20, 20, 30, 30, 40
granary_food_inc = 0

; City center minimum outputs
min_city_center_food    = 0
min_city_center_shield  = 0
min_city_center_trade   = 0

; Square of initial city radius
init_city_radius_sq     = 5

; Square of initially visible radius (true distance).
init_vis_radius_sq      = 5

; A base bribe cost, modified heavily by other factors
base_bribe_cost  = 750

; Barbarian leader ransom in gold. The ransom is taken from
; the victim (typically a barbarian player), and it`s possible
; they cannot pay this in full.
ransom_gold      = 100

; Number of veteran levels lost when upgrading a unit
upgrade_veteran_loss     = 1

; Number of veteran levels lost when auto-upgrading a unit
autoupgrade_veteran_loss = 1

; Whether player gets to select which terrain improvement to pillage.
pillage_select           = TRUE

; Whether one can steal a tech for which prereqs are not known
tech_steal_allow_holes    = FALSE
; Whether one can get a tech for which prereqs are not known via
; diplomatic trading
tech_trade_allow_holes    = FALSE
; ...and whether one can lose a tech which is prereq for another known
; tech via trade, if techlost_donor is nonzero
tech_trade_loss_allow_holes = FALSE
; Whether one can get a tech for which prereqs are not known via
; parasite effect (Great Library)
tech_parasite_allow_holes = FALSE
; Whether one can lose a tech which is prereq for another known tech
; due to negative bulbs, if techlossforgiveness allows loss
tech_loss_allow_holes     = FALSE

; Whether civil war is possible at all
civil_war_enabled        = TRUE

; Comma separated list of things to happen, in addition to death
; of owner, when gameloss unit dies
; "CivilWar"   - Part of the empire remains, controlled by a new player
; "Barbarians" - Depending on if there`s also "CivilWar", all or part
;                or half of the dead players empire gets under barbarian
;                control.
; "Loot"       - Player who killed the gameloss unit gets loot:
;                Partial map, gold, techs, cities
gameloss_style           = ""

; Whether units may safely paradrop to transport on non-native terrain
paradrop_to_transport    = FALSE

; Method of paying unit and improvement gold upkeep
; "City" - The player`s total gold must be non-negative after paying upkeep
;          costs associated with each city. If for any city the player`s
;          gold is negative, random buildings in the city are sold off. If
;          the gold is still negative, then supported units with gold upkeep
;          are disbanded.
; "Mixed" - In the first step, the player`s total gold must be non-negative
;           after paying upkeep for all buildings within a city. If for any
;           city the player`s gold is negative, random buildings in the city
;           are sold off.
;           In the second step, gold upkeep for all units is paid in a lump
;           sum. If the player does not have enough gold, random units with
;           gold upkeep are disbanded.
; "Nation" - Gold upkeep for all buildings and units is paid in a lump sum
;            after all cities have been processed. If the player does not
;            have enough gold, random buildings from random cities are sold.
;            If still more gold is needed, then random units with gold
;            upkeep are disbanded.
gold_upkeep_style = "Mixed"

[illness]
; Whether plagues (illness) are possible
illness_on = TRUE

; the base factor for illness (of percent)
illness_base_factor = 10

; minimum city size for illness
illness_min_size = 5

; factor for how much trading with a plagued city increases our city`s
; chance for plague (in percent)
illness_trade_infection = 50

; factor for how much pollution within a city increases its chance for
; plague (in percent)
illness_pollution_factor = 50

[incite_cost]
; city_incite_cost = total_factor * (city_size) * (base_incite_cost
;                      + (units_cost) * unit_factor
;                      + (improvements_cost) * improvement_factor)
;                    / ((distance to capital) * 100)
; See city_incite_cost() for more details
base_incite_cost = 1000
improvement_factor = 1
unit_factor = 2
total_factor = 100

[global_unit_options]
; Shore landing style
;  FALSE - normal movement
;  TRUE  - (default) slow invasions by removing all
;          movement points from ground units moving
;          from ocean tile to land
slow_invasions = TRUE

[combat_rules]
; If tired_attack is set to TRUE, units that attack with less than a single
; move point (per move_fragments in terrain.ruleset) will have their attack
; power reduced accordingly. For instance, if move_fragments=3, a unit with
; 2/3 move points will have attack power 2/3 of normal.
; If this is set to FALSE units will attack with full strength even if they
; have only fractional moves left.
tired_attack = TRUE

; With some rules it`s possible that neither side of a combat dies.
; Set this to TRUE if unit should never gain veterancy from such a combat.
only_killing_makes_veteran = FALSE

[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.
;   will_never - units with this unit type flag will never auto attack.

; Not a good idea to nuke our own area.
will_never = "Nuclear"

[actions]
; If force_trade_route is set to TRUE it is illegal for an actor unit to
; enter the marketplace of a city if it can establish a trade route to it
; instead.
force_trade_route = TRUE

; If force_capture_units is set to TRUE it is illegal for an actor unit to
; bombard, explode nuclear or perform a regular attack against a tile if
; it can capture units on it instead.
force_capture_units = TRUE

; If force_bombard is set to TRUE it is illegal for an actor unit to
; explode nuclear or perform a regular attack against a tile if it can
; bombard it instead.
force_bombard = TRUE

; If force_explode_nuclear is set to TRUE it is illegal for an actor unit
; to perform a regular attack against a tile if it can do explode nuclear
; instead.
force_explode_nuclear = TRUE

; 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

; 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

; 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: _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: 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_recycle_unit = _("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: _Capture Units (100% chance of success). */
ui_name_capture_units = _("%sCapture Units%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: _Bombard (100% chance of success). */
ui_name_bombard = _("%sBombard%s")

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

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

; /* TRANS: _Upgrade Unit (100% chance of success). */
ui_name_upgrade_unit = _("%sUpgrade Unit%s")

; /* TRANS: Drop _Paratrooper (100% chance of success). */
ui_name_paradrop_unit = _("Drop %sParatrooper%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: _Conquer City (100% chance of success). */
ui_name_conquer_city = _("%sConquer City%s")

; 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 = "Targeted Sabotage City", "Targeted Steal Tech"

; /* <-- 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
      "UnitState",    "OnLivableTile", "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"
      "UnitState",    "OnLivableTile", "Local"
      "MinMoveFrags", "1",             "Local"
    }

[actionenabler_sabotage_city_target]
action = "Targeted Sabotage City Escape"
actor_reqs    =
    { "type",         "name",          "range"
      "DiplRel",      "War",           "Local"
      "UnitFlag",     "Spy",           "Local"
      "UnitState",    "OnLivableTile", "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",      "Is Foreign", "Local", TRUE
      "UnitFlag",     "Spy",        "Local", FALSE
    }
target_reqs  =
    { "type",        "name",      "range", "present"
      "NationGroup", "Barbarian", "Player", FALSE
    }

[actionenabler_establish_embassy_spy]
action       = "Establish Embassy"
actor_reqs    =
    { "type",         "name",       "range"
      "UnitFlag",     "Spy",        "Local"
      "MinMoveFrags", "1",          "Local"
      "DiplRel",      "Is Foreign", "Local"
    }
target_reqs  =
    { "type",        "name",      "range", "present"
      "NationGroup", "Barbarian", "Player", FALSE
    }

[actionenabler_establish_embassy_explorer]
action       = "Establish Embassy Stay"
actor_reqs    =
    { "type",         "name",       "range"
      "UnitType",     "Explorer",   "Local"
      "MinMoveFrags", "1",          "Local"
      "DiplRel",      "Is foreign", "Local"
    }
target_reqs  =
    { "type",        "name",      "range", "present"
      "NationGroup", "Barbarian", "Player", FALSE
    }

[actionenabler_investigate_city]
action       = "Investigate City"
actor_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "Diplomat", "Local", TRUE
      "MinMoveFrags", "1", "Local", TRUE
      "DiplRel", "Is 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", "Is Foreign", "Local"
    }

[actionenabler_investigate_city_explorer]
action       = "Investigate City"
actor_reqs    =
    { "type",   "name", "range"
      "UnitType", "Explorer", "Local"
      "MinMoveFrags", "1", "Local"
      "DiplRel", "Is foreign", "Local"
    }

[actionenabler_steal_tech_random]
action = "Steal Tech"
actor_reqs    =
    { "type",         "name",          "range", "present"
      "UnitFlag",     "Spy",           "Local", FALSE
      "UnitFlag",     "Diplomat",      "Local", TRUE
      "UnitState",    "OnLivableTile", "Local", TRUE
      "MinMoveFrags", "1",             "Local", TRUE
      "DiplRel",      "Is 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"
      "UnitState",    "OnLivableTile", "Local"
      "MinMoveFrags", "1",             "Local"
      "DiplRel",      "Is 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"
      "UnitState",    "OnLivableTile", "Local"
      "MinMoveFrags", "1",             "Local"
      "DiplRel",      "Is foreign",    "Local"
    }
target_reqs  =
    { "type",   "name", "range", "present"
      "NationGroup", "Barbarian", "Player", FALSE
    }

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

[actionenabler_incite_city]
action = "Incite City"
actor_reqs    =
    { "type",         "name",          "range", "present"
      "UnitFlag",     "Diplomat",      "Local", TRUE
      "DiplRel",      "Alliance",      "Local", FALSE
      "DiplRel",      "Team",          "Local", FALSE
      "UnitState",    "OnLivableTile", "Local", TRUE
      "MinMoveFrags", "1",             "Local", TRUE
      "DiplRel",      "Is foreign",    "Local", TRUE
      "UnitFlag",     "Spy",           "Local", FALSE
    }
target_reqs  =
    { "type",     "name",                  "range", "present"
      "Gov",      "Federation",            "Player", FALSE
      "Gov",      "Democracy",             "Player", FALSE
      "Building", "Palace",                "City",   FALSE
      "Building", "Ecclesiastical Palace", "City",   FALSE
      "Building", "Mausoleum of Mausolos", "Player", 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
      "UnitState",    "OnLivableTile", "Local", TRUE
      "MinMoveFrags", "1",             "Local", TRUE
      "DiplRel",      "Is foreign",    "Local", TRUE
    }
target_reqs  =
    { "type",     "name",                  "range", "present"
      "Gov",      "Federation",            "Player", FALSE
      "Gov",      "Democracy",             "Player", FALSE
      "Building", "Palace",                "City",   FALSE
      "Building", "Ecclesiastical Palace", "City",   FALSE
      "Building", "Mausoleum of Mausolos", "Player", FALSE
    }

[actionenabler_bribe_unit]
action = "Bribe Unit"
actor_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "Diplomat", "Local", TRUE
      "UnitState", "HasHomeCity", "Local", TRUE
      "DiplRel", "Alliance", "Local", FALSE
      "DiplRel", "Team", "Local", FALSE
      "UnitState", "OnLivableTile", "Local", TRUE
      "MinMoveFrags", "1", "Local", TRUE
      "DiplRel", "Is foreign", "Local", TRUE
    }
target_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "Unbribable", "Local", FALSE
      "CityTile", "Center", "Local", FALSE
      "Gov", "Republic", "Player", FALSE
      "Gov", "Democracy", "Player", FALSE
      "MaxUnitsOnTile", "1", "Local", TRUE
    }

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

[actionenabler_traderoute]
action = "Establish Trade Route"
actor_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "TradeRoute", "Local", TRUE
      "MinMoveFrags", "1", "Local", TRUE
    }

[actionenabler_help_build_wonder]
action = "Help Wonder"
actor_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "HelpWonder", "Local", TRUE
      "DiplRel", "Armistice", "Local", FALSE
      "DiplRel", "War", "Local", FALSE
      "DiplRel", "Cease-fire", "Local", FALSE
      "DiplRel", "Peace", "Local", FALSE
      "MinMoveFrags", "1", "Local", TRUE
    }
target_reqs    =
    { "type",   "name", "range"
      "BuildingGenus", "GreatWonder", "Local"
    }

[actionenabler_recycle_unit]
action = "Recycle Unit"
actor_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "EvacuateFirst", "Local", FALSE
      "DiplRel",  "War",        "Local", FALSE
      "DiplRel",  "Cease-fire", "Local", FALSE
      "DiplRel",  "Armistice",  "Local", FALSE
      "DiplRel",  "Peace",      "Local", FALSE
    }

[actionenabler_disband_unit]
action = "Disband Unit"
actor_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "EvacuateFirst", "Local", FALSE
    }

[actionenabler_capture]
action = "Capture Units"
actor_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "Capturer", "Local", TRUE
      "DiplRel", "War", "Local", TRUE
      "MinMoveFrags", "1", "Local", TRUE
      "DiplRel", "Is foreign", "Local", TRUE
    }
target_reqs    =
    { "type",      "name",         "range", "present"
      "UnitFlag",  "Capturable",   "Local", TRUE
      "UnitState", "Transporting", "Local", FALSE
      "CityTile",  "Center",       "Local", FALSE
    }

[actionenabler_bombard]
action = "Bombard"
actor_reqs    =
    { "type",         "name",        "range", "present"
      "UnitFlag",     "Bombarder",   "Local", TRUE
      "UnitState",    "Transported", "Local", FALSE
      "MinMoveFrags", "1",           "Local", TRUE
      "DiplRel",      "War",         "Local", TRUE
    }
target_reqs    =
    { "type",   "name", "range", "present"
      "TerrainClass", "Oceanic", "Local", FALSE
    }

[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", "Local", 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", "Is foreign", "Local", FALSE
    }
target_reqs    =
    { "type",        "name",     "range", "present"
      "CityTile",    "Claimed",  "Local", TRUE
      "TerrainFlag", "NoCities", "Local", FALSE
    }

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

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

[actionenabler_attack_from_native]
action = "Attack"
actor_reqs    =
    { "type",         "name",         "range", "present"
      "UnitFlag",     "NonMil",       "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
      "MinMoveFrags", "1",       "Local", TRUE
      "UnitFlag",     "Marines", "Local", TRUE
      "DiplRel",      "War",     "Local", TRUE
    }

[actionenabler_attack_att_from_non_native]
action = "Attack"
actor_reqs    =
    { "type",          "name",             "range", "present"
      "UnitFlag",      "NonMil",           "Local", FALSE
      "MinMoveFrags",  "1",                "Local", TRUE
      "UnitClassFlag", "AttFromNonNative", "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",             "Local", 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",             "Local", TRUE
    }

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

[actionenabler_paradrop_base]
action = "Paradrop Unit"
actor_reqs    =
    { "type",      "name",         "range", "present"
      "UnitFlag",  "Paratroopers", "Local", TRUE
      "UnitState", "Transporting", "Local", FALSE
      "ExtraFlag", "ParadropFrom", "Local", TRUE
    }

[actionenabler_paradrop_city]
action = "Paradrop Unit"
actor_reqs    =
    { "type",      "name",         "range", "present"
      "UnitFlag",  "Paratroopers", "Local", TRUE
      "UnitState", "Transporting", "Local", FALSE
      "CityTile",  "Center",       "Local", TRUE
    }

[actionenabler_upgrade_unit]
action = "Upgrade Unit"
actor_reqs    =
    { "type",    "name",       "range", "present"
      "DiplRel", "Is foreign", "Local", FALSE
    }

[actionenabler_airlift_unit]
action = "Airlift Unit"
actor_reqs    =
    { "type",          "name",         "range", "present"
      "UnitClassFlag", "Airliftable",  "Local", TRUE
      "UnitState",     "Transporting", "Local", FALSE
      "MinMoveFrags",  "1",            "Local", TRUE
    }

[borders]
; Base border radius from city.
radius_sq_city = 5

; Border radius square increased by this amount / point of city size
size_effect    = 1

; Difference between city workable area and area permanently claimed by
; city (these tiles cannot be stolen by stronger border sources).
; 0 means exactly city workable area is immune to border stealing.
; Negative value means outer workable tiles can be stolen; highly negative
; value (more than max city radius_sq) means any workable tile can be stolen.
; If City_Radius_Sq is variable, so is the set of locked tiles; this is
; a squared value, so the radius of the ring of tiles which are workable
; but not locked (or vice versa) varies but the area is constant.
radius_sq_city_permanent = -3

[research]
; Method of calculating technology costs
;   "Civ I|II"      - Civ (I|II) style. Every new tech add base_tech_cost to
;                     cost of next tech.
;   "Classic"       - Cost of technology is:
;                       base_tech_cost * (1 + reqs) * sqrt(1 + reqs) / 2
;                     where reqs == number of requirement for tech, counted
;                     recursively.
;   "Classic+"      - Cost are read from tech.ruleset. Missing costs are
;                     generated by style "Classic".
;   "Experimental"  - Cost of technology is:
;                       base_tech_cost * (reqs^2 / (1 + sqrt(sqrt(reqs + 1)))
;                                         - 0.5)
;                     where reqs == number of requirement for tech, counted
;                     recursively. Initial techs` cost will be base_tech_cost.
;   "Experimental+" - Cost are read from tech.ruleset. Missing costs are
;                     generated by style "Experimental".
;   "Linear"        - Cost of technology is:
;                     base_tech_cost * reqs
;                     where reqs == number of requirement for tech, counted
;                     recursively.
tech_cost_style = "Linear"

; Base research cost. Used in tech cost styles where tech cost is generated.
; In other words: used everywhere unless the cost of *all* techs are
; specified and the tech cost style is "Experimental+" or "Classic+".
base_tech_cost   = 10

; Technology leak from other civilizations
; "None"           - No reduction of the technology cost.
; "Embassies"      - Technology cost is reduced depending on the number of
;                    players which already know the tech and you have an
;                    embassy with.
; "All Players"    - Technology cost is reduced depending on the number of
;                    all players (human, AI and barbarians) which already
;                    know the tech.
; "Normal Players" - Technology cost is reduced depending on the number of
;                    normal players (human and AI) which already know the
;                    tech.
tech_leakage = "Embassies"

; Method of paying tech upkeep
; "None"   - no upkeep
; "Basic"  - upkeep is calculated as:
;     <Cost of technology> / tech_upkeep_divider - tech_upkeep_free
; "Cities" - upkeep is calculated like "Basic", but multiplied by number of cities
tech_upkeep_style = "Cities"

; upkeep cost is divided by this value
tech_upkeep_divider = 6000

; Method of selecting techs given for free
; "Goal"     - Towards player`s goal, random if no goal
; "Random"   - Random researchable tech
; "Cheapest" - Cheapest researchable tech, random among equal cost ones
free_tech_method = "Cheapest"

[culture]
; Minimum culture points for cultural domination victory
victory_min_points = 20000

; How big lead relative to second best player is needed for victory
victory_lead_pct   = 33

; How much each culture point affects the migration
; from/to the city. Each culture point count as this many permilles
; of a migration point.
migration_pml = 50

[calendar]
; Year in the beginning of the game
start_year = -4000

; Year 1 instead of 0.
skip_year_0 = TRUE

; How many fragments each year has. In addition to this, "Turn_Fragments" effects are
; needed to control fragment accumulation.
; Value 0 here disables year advancement by fragment accumulation.
fragments = 0

; Calendar fragment names. If name is missing, only a fragment number +1 (so human readable
; numbers begin from 1 and not 0) is shown.

;fragment_name0 = _("Jan")
;fragment_name1 = _("Feb")
; ...

; What labels are used for positive and negative years.
; /* TRANS: year label (Common Era) */
positive_label = _("CE")
; /* TRANS: year label (Before Common Era) */
negative_label = _("BCE")

; /* <-- avoid gettext warnings
;
; Disaster types:
;
; name                    = translatable name as seen by user
; reqs                    = requirements for disaster to happen (see effects.ruleset
;                           and README.effects for help on requirements)
; frequency               = how likely disaster is to occur
; effects
;   - "DestroyBuilding"   = Random building is destroyed
;   - "ReducePopulation"  = Reduce city size by one unless it's already 1
;   - "ReducePopDestroy"  = Reduce city size by one, possibly destroying the city
;   - "EmptyFoodStock"    = Remove all food from food stock
;   - "EmptyProdStock"    = Destroy current production
;   - "Pollution"         = One tile surrounding city polluted
;   - "Fallout"           = One tile surrounding city polluted with fallout
;
; */ <-- avoid gettext warnings

[disaster_earthquake]
name           = _("Earthquake")
reqs           =
    { "type", "name", "range"
      "Terrain", "Hills", "Local"
    }
frequency      = 100
effects        = "EmptyProdStock"

[disaster_flood]
name           = _("Flood")
reqs           =
    { "type", "name", "range"
      "Extra", "River", "Adjacent"
    }
frequency      = 100
effects        = "EmptyFoodStock"

[disaster_fire]
name           = _("Fire")
reqs           =
    { "type", "name", "range"
      "MinSize", "9", "City"
    }
frequency      = 100
effects        = "DestroyBuilding"

[disaster_industrial_accident]
name           = _("Industrial Accident")
reqs           =
    { "type", "name", "range"
      "Building", "Mfg. Plant", "City"
    }
frequency      = 100
effects        = "ReducePopulation", "Pollution"

[disaster_nuclear_accident]
name           = _("Nuclear Accident")
reqs           =
    { "type", "name", "range"
      "Building", "Nuclear Plant", "City"
    }
frequency      = 100
effects        = "ReducePopulation", "Fallout"

; /* <-- avoid gettext warnings
;
; Achievement types:
;
; name                    = translatable name as seen by user
; rule_name               = (optional) internal name for savegames, rulesets
;                           etc; if not present, "name" is used for this
;                           purpose too. Since the name used in savegames must
;                           not change, if you want to rename an item after a
;                           ruleset has been released, you should set
;                           "rule_name" to the original value of "name".
; type                    = What event grants the achievement to player.
;                           See README.achievements for list of these types.
; unique                  = If TRUE, only first one reaching the achievement will
;                           get it. Defaults to TRUE.
; value                   = Value to reach. Exact meaning of this depends on
;                           achievement type.
; culture                 = Amount of culture granted to player who gets achievement
;                           granted.
; first_msg               = Message shown to first player gaining the achievement
; cons_msg                = Message shown to consecutive players gaining the achievement
;
; */ <-- avoid gettext warnings

[achievement_spaceship]
name           = _("Spaceship Launch")
type           = "Spaceship"
unique         = FALSE
culture        = 10000
first_msg      = _("You're the first one to launch a spaceship towards Alpha Centauri!")
cons_msg       = _("You have launched a spaceship towards Alpha Centauri!")

[achievement_map_known]
name           = _("Entire Map Known")
type           = "Map_Known"
unique         = FALSE
value          = 100
culture        = 1000
first_msg      = _("You're the first one to have mapped the entire world!")
cons_msg       = _("You have mapped the entire world!")

[achievement_another_island]
name           = _("Land Ahoy")
type           = "Land_Ahoy"
unique         = FALSE
value          = 2
culture        = 100
first_msg      = _("Your people were the first in history to sight a foreign shore!")
cons_msg       = _("You sighted your first foreign shore!")

[achievement_literate]
name           = _("Literate")
type           = "Literate"
unique         = FALSE
value          = 100
culture        = 100
; /* xgettext:no-c-format */
first_msg      = _("Your nation is the first to reach 100% literacy!")
; /* xgettext:no-c-format */
cons_msg       = _("Your nation has reached 100% literacy!")

[achievement_multicultural]
name           = _("Multicultural")
type           = "Multicultural"
unique         = FALSE
value          = 2
culture        = 100
first_msg      = _("You're the first nation to have citizens of multiple nationalities!")
cons_msg       = _("Your nation now has citizens of multiple nationalities!")

[achievement_metropolis]
name           = _("Metropolis")
type           = "Metropolis"
unique         = FALSE
value          = 20
culture        = 100
first_msg      = _("Your nation is the first with a city of population 20!")
cons_msg       = _("One of your cities has reached population 20!")

[achievement_cultured_city]
name           = _("Cultured City")
type           = "Cultured_City"
unique         = FALSE
value          = 1000
culture        = 100
first_msg      = _("Your nation is the first with a city of 1000 culture points!")
cons_msg       = _("One of your cities has 1000 culture points!")

[achievement_cultured_nation]
name           = _("Cultured Nation")
type           = "Cultured_Nation"
unique         = FALSE
value          = 10000
first_msg      = _("Your nation is the first one to achieve 10000 culture points!")
cons_msg       = _("Your nation has achieved 10000 culture points!")

;
; Trade settings
;
; IN = international, IC = intercontinental.
; For each of the trade route types:
; "pct"        - Trade income %. If this is 0, trade route cannot be
;                established at all
; "cancelling" - What to do to previously established traderoutes when they
;                turn illegal
;                "Active"   - Keep them active (although they will only
;                             provide nonzero income if illegal due to
;                             trademindist rather than pct==0)
;                "Inactive" - Keep them inactive
;                "Cancel"   - Cancel them altogether
; "bonus"      - One-time bonuses granted when traderoute established
;                "None"     - No one-time bonus
;                "Gold"     - Bonus to gold
;                "Science"  - Bonus to research
;                "Both"     - Bonus to gold and research
;
[trade]
settings =
  { "type",       "pct", "cancelling", "bonus"
    "National",   0,     "Cancel",     "None"
    "NationalIC", 0,     "Cancel",     "None"
    "IN",         100,   "Cancel",     "None"
    "INIC",       200,   "Cancel",     "None"
    "Ally",       100,   "Cancel",     "None"
    "AllyIC",     200,   "Cancel",     "None"
    "Enemy",      0,     "Cancel",     "None"
    "EnemyIC",    0,     "Cancel",     "None"
    "Team",       100,   "Cancel",     "None"
    "TeamIC",     200,   "Cancel",     "None"
  }

; When are goods for the trade route chosen.
; "Leaving" - Goods to carry are assigned to unit when it`s built, or it changes homecity
; "Arrival" - Goods are chosen when trade route is established, when unit arrives to destination
goods_selection = "Leaving"

; /* <-- avoid gettext warnings
;
; Goods types:
;
; name                    = translatable name as seen by user
; rule_name               = (optional) internal name for savegames, rulesets
;                           etc; if not present, "name" is used for this
;                           purpose too. Since the name used in savegames must
;                           not change, if you want to rename an item after a
;                           ruleset has been released, you should set
;                           "rule_name" to the original value of "name".
; reqs                    = requirements for a city to provide goods (see effects.ruleset
;                           and README.effects for help on requirements)
; from_pct                = Income for the sending end of the trade route. Default is 100%
;                           This value is applied to both ends of bidirectional routes.
; to_pct                  = Income for the receiving end of the trade route. Default is 100%
;                           This value is not used at all in case of bidirectional routes.
; onetime_pct             = Onetime bonuses when traderoute is established. Default is 100%
; flags
;   - "Bidirectional"     = Trade route carrying the goods does not have "from" and "to"
;                           ends, but both ends are considered the same.
;   - "Depletes"          = Trade route gets cancelled when the source city cannot provide
;                           goods any more. Bidirectional routes gets cancelled if either
;                           one of the involved cities cannot provide goods.
; helptext                = Optional help text string; should escape all raw
;                           newlines so that xgettext parsing works
;
; */ <-- avoid gettext warnings

[goods_good]
name           = _("Goods")

[playercolors]
background.r = 86
background.g = 86
background.b = 86

; Player colors for 32 players are defined below.
; Avoid greens, blues, and white / very pale colors (too easy to confuse
; with terrain).
; Avoid dark colors.
colorlist =
    { "r", "g", "b"
      255,   0,   0
      255, 255,   0
        0, 255, 255
      138,  43, 226
      255, 165,   0
      255,   0, 255
      173, 216, 230
        0, 255, 127
      250, 128, 114
      124, 252,   0
      139,   0,   0
      255, 192, 203
      211, 211, 211
      218, 112, 214
      255,  20, 147
      100, 149, 237
      255, 215,   0
      245, 222, 179
      255, 255, 128
      192, 255, 128
      204, 255,   0
      255, 211, 140
      255,  79,   0
      240, 145, 169
      255, 219,  88
      153,  17, 153
      184, 134,  11
      255, 102,   0
      102, 205, 170
      195,  33,  72
      168, 153, 230
      255, 250, 205
    }

[teams]
; freeciv optional team names definition.
;
; names =
; _("Team 1"),
; _("Team 2"),
; _("Team 3"),
; _("Team 4"),
; etc...

[settings]
; freeciv game settings for civ2civ3 ruleset
;
set =
    { "name", "value"
      "aifill", 6
      "generator", "FRACTAL"
      "topology", "WRAPX|WRAPY|ISO|HEX"
      "mapsize", "PLAYER"
      "tilesperplayer", 100
      "tinyisles", "ENABLED"
      "temperature", 60
      "flatpoles", 0
      "startunits", "cwsx"
      "citymindist", 3
      "techlevel", 1
      "borders", "ENABLED"
      "foggedborders", "ENABLED"
      "restrictinfra", "ENABLED"
      "unreachableprotects", "DISABLED"
      "onsetbarbs", 120
      "occupychance", 100
      "razechance", 10
      "techlossforgiveness", 0
      "techlossrestore", 50
      "revolentype", "RANDQUICK"
    }
