; 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 " 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-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 = "civ2civ3_earth/README.ruleset_civ2civ3_earth" [about] ; Ruleset name name = _("Civ2Civ3 Earth ruleset") ; There`s no separate versioning in rulesets part of main freeciv distribution ;version = "" ; Summary of the ruleset summary = _("\ Gameplay more similar to civ3, keeping the combat system from civ2. \ Aimed to be played on earth scenarios.\ \n\n\ The differences from the classic ruleset are listed in \ README.ruleset_civ2civ3_earth.\ ") ; Detailed description ; When updating this, update also desciption_file in [ruledit] section to match description = *civ2civ3_earth/README.ruleset_civ2civ3_earth* [options] global_init_techs="" global_init_buildings="Palace" [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 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 [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 = FALSE ; 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: 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") ; 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" "MinMoveFrags", "1", "Local" } target_reqs = { "type", "name", "range", "present" "NationGroup", "Barbarian", "Player", FALSE } [actionenabler_establish_embassy_explorer] action = "Establish Embassy" actor_reqs = { "type", "name", "range" "UnitType", "Explorer", "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" "MinMoveFrags", "1", "Local" } [actionenabler_investigate_city_explorer] action = "Investigate City" actor_reqs = { "type", "name", "range" "UnitType", "Explorer", "Local" "MinMoveFrags", "1", "Local" } [actionenabler_steal_tech_random] action = "Steal Tech" actor_reqs = { "type", "name", "range", "present" "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_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_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" "Building", "Courthouse", "City", 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 "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 "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 "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 } [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". 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: ; / 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 = 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 = 10 [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. Value 0 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_natural_disaster] name = _("Natural Disaster") reqs = { "type", "name", "range" "Extra", "Wonder", "City" } frequency = 100 effects = "ReducePopulation" [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 = "ReducePopDestroy", "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 = 1000 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 = _("As the first people in history, your people sight a foreign shore!") cons_msg = _("You sight your first foreign shore!") [achievement_literate] name = _("Literate") type = "Literate" unique = FALSE value = 100 culture = 1000 ; /* 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 with a city containing 2 different nationalities!") cons_msg = _("One of your cities has 2 different nationalities!") [achievement_metropolis] name = _("Metropolis") type = "Metropolis" unique = FALSE value = 20 culture = 1000 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 = 1000 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", 50, "Inactive", "None" "NationalIC", 100, "Inactive", "None" "IN", 0, "Cancel", "None" "INIC", 0, "Cancel", "None" "Ally", 50, "Cancel", "None" "AllyIC", 100, "Cancel", "None" "Enemy", 0, "Cancel", "None" "EnemyIC", 0, "Cancel", "None" "Team", 50, "Cancel", "None" "TeamIC", 100, "Cancel", "None" } [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 civ2civ3 ruleset ; set = { "name", "value" "aifill", 6 "generator", "FRACTAL" "topology", "WRAPX|WRAPY|ISO" "mapsize", "PLAYER" "tilesperplayer", 100 "tinyisles", "ENABLED" "temperature", 60 "flatpoles", 0 "startunits", "cwsx" ; "huts", 30 "citymindist", 3 "trademindist", 3 "techlevel", 1 "borders", "ENABLED" "foggedborders", "ENABLED" "restrictinfra", "ENABLED" "unreachableprotects", "DISABLED" "onsetbarbs", 120 "occupychance", 100 "razechance", 10 ; "conquercost", 50 ; "diplbulbcost", 50 "techlossforgiveness", 50 "techlossrestore", 50 "revolentype", "RANDQUICK" "revolen", 3 } [tileset] prefered="amplio_earth"