; 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="Classic game rules for Freeciv"
options="+Freeciv-2.6-ruleset"

; 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 = ""

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

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

; Summary of the ruleset
summary = _("\
You are playing with classic Freeciv ruleset for single player games. \
Note that in addition to the ruleset, also server settings affect \
the rules of the game.\
")

; Detailed description
; When updating this, update also desciption_file in [ruledit] section to match
; description = ""

[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
granary_food_inc = 10

; City center minimum outputs
min_city_center_food    = 1
min_city_center_shield  = 1
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
ransom_gold      = 100

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

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

; 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    = TRUE
; Whether one can get a tech for which prereqs are not known via
; diplomatic trading
tech_trade_allow_holes    = TRUE
; ...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 = TRUE
; Whether one can get a tech for which prereqs are not known via
; parasite effect (Great Library)
tech_parasite_allow_holes = TRUE
; 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     = TRUE

; 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 = "City"

[illness]
; Whether plagues (illness) are possible
; There are some latent building effects in effects.ruleset which affect
; health, if you enable plague here.
illness_on = FALSE

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

; minimum city size for illness
illness_min_size = 3

; 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 = FALSE

[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
; in stead.
force_trade_route = 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 = _("%sPoison City%s")

; /* TRANS: _Sabotage Enemy Unit (3% chance of success). */
ui_name_sabotage_unit = _("%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: Industrial _Sabotage (3% chance of success). */
ui_name_targeted_sabotage_city = _("Industrial %sSabotage%s")

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

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

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

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

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

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

; /* TRANS: Sell _Goods (100% chance of success). */
ui_name_enter_marketplace = _("Sell %sGoods%s")

; /* TRANS: Help _build Wonder (100% chance of success). */
ui_name_help_wonder = _("Help %sbuild Wonder%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"
      "UnitFlag", "Diplomat", "Local"
      "DiplRel", "War", "Local"
      "UnitState", "OnLivableTile", "Local"
      "MinMoveFrags", "1", "Local"
    }

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

[actionenabler_establish_embassy]
action       = "Establish Embassy"
actor_reqs    =
    { "type",   "name", "range"
      "UnitFlag", "Diplomat", "Local"
      "UnitState", "OnLivableTile", "Local"
      "MinMoveFrags", "1", "Local"
    }
target_reqs  =
    { "type",   "name", "range", "present"
      "NationGroup", "Barbarian", "Player", FALSE
    }

[actionenabler_investigate_city]
action       = "Investigate City"
actor_reqs    =
    { "type",   "name", "range"
      "UnitFlag", "Diplomat", "Local"
      "UnitState", "OnLivableTile", "Local"
      "MinMoveFrags", "1", "Local"
    }

[actionenabler_poison_city]
action = "Poison City"
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_steal_tech_random]
action = "Steal Tech"
actor_reqs    =
    { "type",   "name", "range"
      "UnitFlag", "Diplomat", "Local"
      "UnitState", "OnLivableTile", "Local"
      "MinMoveFrags", "1", "Local"
    }
target_reqs  =
    { "type",   "name", "range", "present"
      "NationGroup", "Barbarian", "Player", FALSE
    }

[actionenabler_steal_tech_target]
action = "Targeted Steal Tech"
actor_reqs    =
    { "type",   "name", "range"
      "UnitFlag", "Spy", "Local"
      "UnitState", "OnLivableTile", "Local"
      "MinMoveFrags", "1", "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
      "UnitState", "OnLivableTile", "Local", TRUE
      "MinMoveFrags", "1", "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
      "UnitState", "OnLivableTile", "Local", TRUE
      "MinMoveFrags", "1", "Local", TRUE
    }
target_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "Unbribable", "Local", FALSE
      "CityTile", "Center", "Local", FALSE
      "Gov", "Democracy", "Player", FALSE
      "MaxUnitsOnTile", "1", "Local", TRUE
    }

[actionenabler_sabotage_unit]
action = "Sabotage Unit"
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
    }

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

[actionenabler_help_build_wonder]
action = "Help Wonder"
actor_reqs    =
    { "type",   "name", "range", "present"
      "UnitFlag", "HelpWonder", "Local", TRUE
      "DiplRel", "Is foreign", "Local", FALSE
    }

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

; 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 = 0

[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".
tech_cost_style = "Classic"

; 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   = 20

; 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 = "None"

; 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 = "None"

; upkeep cost is divided by this value
tech_upkeep_divider = 2000

; 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 = "Goal"

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

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

; 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")
frequency      = 10
effects        = "DestroyBuilding"

[disaster_pestilence]
name           = _("Pestilence")
frequency      = 10
effects        = "ReducePopulation"

[disaster_fire]
name           = _("Fire")
frequency      = 10
effects        = "DestroyBuilding"

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

[disaster_nuclear_accident]
name           = _("Nuclear Accident")
reqs           =
    { "type", "name", "range"
      "Building", "Nuclear Plant", "City"
    }
frequency      = 10
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

; No achievements in classic ruleset

;
; 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",   100,   "Cancel",     "Both"
    "NationalIC", 200,   "Cancel",     "Both"
    "IN",         200,   "Cancel",     "Both"
    "INIC",       400,   "Cancel",     "Both"
    "Ally",       200,   "Cancel",     "Both"
    "AllyIC",     400,   "Cancel",     "Both"
    "Enemy",      200,   "Cancel",     "Both"
    "EnemyIC",    400,   "Cancel",     "Both"
    "Team",       200,   "Cancel",     "Both"
    "TeamIC",     400,   "Cancel",     "Both"
  }

[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 0"),
; _("Team 1"),
; _("Team 2"),
; _("Team 3"),
; etc...

[settings]
; freeciv game settings for the classic ruleset
;
; set =
;     { "name", "value", "lock"
;       "bool_set", TRUE, FALSE
;       "int_set", 123, FALSE
;       "str_set", "test", FALSE
;     }
