games/factorio: make more configurable

This makes the server fully configurable, and adds the contents of
example JSON configs as the defaults for all servers.

Change-Id: I8ff3e66a586a9db3acb9721810c8c5aa13072b4b
diff --git a/games/factorio/kube/config/map-settings.libsonnet b/games/factorio/kube/config/map-settings.libsonnet
new file mode 100644
index 0000000..458a348
--- /dev/null
+++ b/games/factorio/kube/config/map-settings.libsonnet
@@ -0,0 +1,126 @@
+{
+    // The following options are defaults taken verbatim from Factorio 1.1.35
+    // headless' map-settings.example.json, with the following changes:
+    //  - field names unquoted where possible
+    //  - pseudo-comments converted to jsonnet comments
+    //  - comments reflowed to fit 80 columns
+
+    difficulty_settings:
+    {
+      recipe_difficulty: 0,
+      technology_difficulty: 0,
+      technology_price_multiplier: 1,
+      research_queue_setting: "after-victory"
+    },
+    pollution:
+    {
+      enabled: true,
+      // these are values for 60 ticks (1 simulated second)
+      // amount that is diffused to neighboring chunk
+      diffusion_ratio: 0.02,
+      min_to_diffuse: 15,
+      ageing: 1,
+      expected_max_per_chunk: 150,
+      min_to_show_per_chunk: 50,
+      min_pollution_to_damage_trees: 60,
+      pollution_with_max_forest_damage: 150,
+      pollution_per_tree_damage: 50,
+      pollution_restored_per_tree_damage: 10,
+      max_pollution_to_restore_trees: 20,
+      enemy_attack_pollution_consumption_modifier: 1
+    },
+    enemy_evolution:
+    {
+      enabled: true,
+      time_factor: 0.000004,
+      destroy_factor: 0.002,
+      pollution_factor: 0.0000009
+    },
+    enemy_expansion:
+    {
+      enabled: true,
+      min_base_spacing: 3,
+      max_expansion_distance: 7,
+      friendly_base_influence_radius: 2,
+      enemy_building_influence_radius: 2,
+      building_coefficient: 0.1,
+      other_base_coefficient: 2.0,
+      neighbouring_chunk_coefficient: 0.5,
+      neighbouring_base_chunk_coefficient: 0.4,
+      max_colliding_tiles_coefficient: 0.9,
+      settler_group_min_size: 5,
+      settler_group_max_size: 20,
+      min_expansion_cooldown: 14400,
+      max_expansion_cooldown: 216000
+    },
+    unit_group:
+    {
+      min_group_gathering_time: 3600,
+      max_group_gathering_time: 36000,
+      max_wait_time_for_late_members: 7200,
+      max_group_radius: 30.0,
+      min_group_radius: 5.0,
+      max_member_speedup_when_behind: 1.4,
+      max_member_slowdown_when_ahead: 0.6,
+      max_group_slowdown_factor: 0.3,
+      max_group_member_fallback_factor: 3,
+      member_disown_distance: 10,
+      tick_tolerance_when_member_arrives: 60,
+      max_gathering_unit_groups: 30,
+      max_unit_group_size: 200
+    },
+    steering:
+    {
+      default:
+      {
+        radius: 1.2,
+        separation_force: 0.005,
+        separation_factor: 1.2,
+        force_unit_fuzzy_goto_behavior: false
+      },
+      moving:
+      {
+        radius: 3,
+        separation_force: 0.01,
+        separation_factor: 3,
+        force_unit_fuzzy_goto_behavior: false
+      }
+    },
+    path_finder:
+    {
+      fwd2bwd_ratio: 5,
+      goal_pressure_ratio: 2,
+      max_steps_worked_per_tick: 100,
+      max_work_done_per_tick: 8000,
+      use_path_cache: true,
+      short_cache_size: 5,
+      long_cache_size: 25,
+      short_cache_min_cacheable_distance: 10,
+      short_cache_min_algo_steps_to_cache: 50,
+      long_cache_min_cacheable_distance: 30,
+      cache_max_connect_to_cache_steps_multiplier: 100,
+      cache_accept_path_start_distance_ratio: 0.2,
+      cache_accept_path_end_distance_ratio: 0.15,
+      negative_cache_accept_path_start_distance_ratio: 0.3,
+      negative_cache_accept_path_end_distance_ratio: 0.3,
+      cache_path_start_distance_rating_multiplier: 10,
+      cache_path_end_distance_rating_multiplier: 20,
+      stale_enemy_with_same_destination_collision_penalty: 30,
+      ignore_moving_enemy_collision_distance: 5,
+      enemy_with_different_destination_collision_penalty: 30,
+      general_entity_collision_penalty: 10,
+      general_entity_subsequent_collision_penalty: 3,
+      extended_collision_penalty: 3,
+      max_clients_to_accept_any_new_request: 10,
+      max_clients_to_accept_short_new_request: 100,
+      direct_distance_to_consider_short_request: 100,
+      short_request_max_steps: 1000,
+      short_request_ratio: 0.5,
+      min_steps_to_check_path_find_termination: 2000,
+      start_to_goal_cost_multiplier_to_terminate_path_find: 500.0,
+      overload_levels: [0, 100, 500],
+      overload_multipliers: [2, 3, 4],
+      negative_path_cache_delay_interval: 20
+    },
+    max_failed_behavior_count: 3
+}