This file is indexed.

/usr/share/games/freeciv/multiplayer/game.ruleset is in freeciv-data 2.5.3-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
; 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="Multiplayer game rules for Freeciv"
options="+Freeciv-2.5-ruleset"

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

; Description of the ruleset
description = _("\
You are playing Freeciv with rules designed for multiplayer gaming. \
The biggest differences from the classic ruleset are that trade routes \
are disabled, and that most wonders can be built once by each player, \
and affect only cities on the same continent. A full description of \
the differences can be found in README.ruleset_multiplayer.\
")

[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
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

; The type of collateral contamination produced by a nuclear attack.
;   "Pollution" - Pollution (same as industrial/population-generated).
;   "Fallout"   - Nuclear Fallout (distinct from industrial/population).
nuke_contamination      = "Fallout"

; 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 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
; 0 - 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.
; 1 - 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.
; 2 - 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, alternatively a random buildings from a random cities is sold
;     and a random units with gold upkeep is disbanded till the treasury is
;     balanced.
gold_upkeep_style = 0

; Method of calculating technology costs
;   0 - Civ (I|II) style. Every new tech add researchcost to cost of next tech.
;   1 - Cost of technology is:
;         MAX((1+parents) * (researchcost/2) * sqrt(1+parents), researchcost)
;       where num_parents == number of requirement for tech, counted
;       recursively.
;   2 - Cost are read from tech.ruleset. Missing costs are generated by
;       style 1.
;   3 - Cost of technology is:
;         cost = base * (reqs - 1)^2 / (1 + sqrt(sqrt(reqs))) - base/2
;   4 - Cost are read from tech.ruleset. Missing costs are generated by
;       style 3.
tech_cost_style = 1

; Base research cost for tech styles 1 & 2
base_tech_cost   = 20

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

[illness]
; Whether plagues (illness) are possible
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 = 0

; 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 = 10000
improvement_factor = 1
unit_factor = 2
total_factor = 10000

[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

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

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

[research]
; 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"

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

; Year 1 instead of 0.
skip_year_0 = TRUE

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

; No disasters in multiplayer 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
;
[trade]
settings =
  { "type",       "pct", "cancelling"
    "National",   0,     "Cancel"
    "NationalIC", 0,     "Cancel"
    "IN",         0,     "Cancel"
    "INIC",       0,     "Cancel"
  }

[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  ; Red
      255, 255,   0  ; Yellow
        0, 255, 255  ; Blue
      138,  43, 226  ; Purple
      255, 165,   0  ; Orange
      255,   0, 255  ; Magenta
      173, 216, 230  ; Cornflower
        0, 255, 127  ; Emerald
      250, 128, 114  ; Salmon
      124, 252,   0  ; Green
      139,   0,   0  ; Burgundy
      255, 192, 203  ; Pink
      211, 211, 211  ; Silver
      218, 112, 214  ; Heliotrope
      255,  20, 147  ; Fuchsia
      100, 149, 237  ; Azure
      255, 215,   0  ; Gold
      245, 222, 179  ; Khaki
      255, 255, 128  ; Butter
      192, 255, 128  ; Mint
      204, 255,   0  ; Lime
      255, 211, 140  ; Peach
      255,  79,   0  ; Vermilion
      240, 145, 169  ; Puce
      255, 219,  88  ; Mustard
      153,  17, 153  ; Aubergine
      184, 134,  11  ; Brown
      255, 102,   0  ; Pumpkin
      102, 205, 170  ; Turquoise
      195,  33,  72  ; Crimson
      168, 153, 230  ; Lavender
      255, 250, 205  ; Cream
    }

[teams]
; Team names correspond roughly to colors defined above, so that
; plrcolormode=TEAM_ORDER is not gratuitously confusing.
names =
; /* TRANS: Name of a color; used as unique identifier for a team */
; /* TRANS: With this and other color team names, uniqueness is more */
; /* TRANS: important than precise translation. To see the colors, start a */
; /* TRANS: multiplayer game with 32 players and look at the Nations report. */
 _("?team name:Red"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Yellow"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Blue"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Purple"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Orange"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Magenta"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Cornflower"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Emerald"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Salmon"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Green"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Burgundy"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Pink"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Silver"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Heliotrope"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Fuchsia"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Azure"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Gold"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Khaki"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Butter"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Mint"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Lime"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Peach"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Vermilion"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Puce"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Mustard"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Aubergine"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Brown"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Pumpkin"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Turquoise"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Crimson"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Lavender"),
; /* TRANS: Name of a color; used as unique identifier for a team */
 _("?team name:Cream")

[settings]
set =
    { "name", "value", "lock"
      "minplayers", 2, FALSE
      "generator", "ISLAND", FALSE
      "topology", "WRAPX|WRAPY|ISO", FALSE
      "startpos", "SINGLE", FALSE
      "tinyisles", FALSE, FALSE
      "alltemperate", TRUE, FALSE
      "separatepoles", FALSE, FALSE
      "huts", 0, FALSE
      "aifill", 0, FALSE
      "dispersion", 0, FALSE
      "diplomacy", "DISABLED", FALSE
      "contactturns", 0, FALSE
      "revolen", 2, FALSE
      "barbarians", "DISABLED", FALSE
      "techpenalty", 0, FALSE
      "startunits", "cccwwwxxxx", FALSE
      "specials", 350, FALSE
      "borders", "DISABLED", FALSE
    }