From b259741134a85354388a65a3f6ca7c8677c03a6f Mon Sep 17 00:00:00 2001 From: Ross Newcome Date: Fri, 22 Feb 2019 13:47:46 -0500 Subject: [PATCH 1/8] Create HilbertSandTrap.lua Adding today's map so everyone has access. --- map_gen/maps/HilbertSandTrap.lua | 288 +++++++++++++++++++++++++++++++ 1 file changed, 288 insertions(+) create mode 100644 map_gen/maps/HilbertSandTrap.lua diff --git a/map_gen/maps/HilbertSandTrap.lua b/map_gen/maps/HilbertSandTrap.lua new file mode 100644 index 00000000..46b0a4a9 --- /dev/null +++ b/map_gen/maps/HilbertSandTrap.lua @@ -0,0 +1,288 @@ +--Hilbert Sand Trap Map, by Jayefuu, R. Nukem, and grilledham + +local b = require 'map_gen.shared.builders' +local degrees = require "utils.math".degrees +local RS = require 'map_gen.shared.redmew_surface' +local MGSP = require 'resources.map_gen_settings' +--https://www.fractalus.com/kerry/tutorials/hilbert/hilbert-tutorial.html +-- Setup the scenario map information because everyone gets upset if you don't +local ScenarioInfo = require 'features.gui.info' +ScenarioInfo.set_map_name('Hilbert\'s Sand Trap') +ScenarioInfo.set_map_description('You have crash landed in the middle of Hilbert\'s Labyrinth! Surrounded by quicksand and biters you must survive long enough to launch a rocket.') +ScenarioInfo.set_map_extra_info('Only the native grasses are suitable to build on. Ores and trees have sunk into the sand, but biters have adapted to live happily in the barren landscape. Some even speak of a Hydra living deep within the desert. \n\n Map created by R. Nukem and Jayefuu, with help from grilledham and the rest of the Redmew admin team.') +--enable Hydra +local hail_hydra = global.config.hail_hydra +hail_hydra.enabled = true +-- define map settings +local ore_settings = { + autoplace_controls = { + coal = { + frequency = 'very-high', + richness = 'normal', + size = 'small' + }, + ['copper-ore'] = { + frequency = 'very-high', + richness = 'normal', + size = 'normal' + }, + ['crude-oil'] = { + frequency = 'very-high', + richness = 'low', + size = 'small' + }, + ['iron-ore'] = { + frequency = 'very-high', + richness = 'normal', + size = 'normal' + }, + stone = { + frequency = 'very-high', + richness = 'low', + size = 'small' + }, + ['uranium-ore'] = { + frequency = 'very-high', + richness = 'very-low', + size = 'very-small' + } + } +} +local biter_settings = { + autoplace_controls = { + ['enemy-base'] = { + frequency = 'very-high', + richness = 'very-high', + size = 'very-high' + } + } +} +local tree_settings = { + autoplace_controls = { + trees = { + frequency = 'very-high', + richness = 'normal', + size = 'normal' + } + } +} +local starting_area = { + starting_area = 'very-small' +} +local water_settings = { + terrain_segmentation = 'high', + water = 'low' +} +--Set map settings +RS.set_map_gen_settings( + { + MGSP.cliff_none, + MGSP.grass_only, + ore_settings, + biter_settings, + starting_area, + tree_settings, + water_settings, + map_seed + } +) +--remove resources from sand +local function no_resources(_, _, world, tile) + local entites = + world.surface.find_entities_filtered( + {type = 'resource', area = {{world.x, world.y}, {world.x + 1, world.y + 1}}} + ) + for i = 1, #entites do + entites[i].destroy() + end + return tile +end +--remove trees from sand +local function no_trees(_, _, world, tile) + local entites = + world.surface.find_entities_filtered( + {type = 'tree', area = {{world.x, world.y}, {world.x + 1, world.y + 1}}} + ) + for i = 1, #entites do + entites[i].destroy() + end + return tile +end +--start hilbert design +local line_1 = b.translate(b.rectangle(6, 16), -5, 0) +local tier_1 = + b.any { + line_1, + b.rotate(line_1, degrees(-90)), + b.rotate(line_1, degrees(-180)) +} +local hilbert_levels = 2 -- don't change to 3, the algorithm is broken somewhere +local pattern = tier_1 +local var = 20 +for i = 1, hilbert_levels do + -- do the rotation stuff + pattern = + b.any { + pattern, + b.translate(b.flip_x(pattern), i * var, 0), + b.translate(b.rotate(pattern, degrees(90)), i * var, i * var), + b.translate(b.rotate(pattern, degrees(-90)), 0, i * var) + } + -- translate the pattern so that the connecting pieces are easier to add + pattern = b.translate(pattern, -0.5 * i * var, -0.5 * i * var) + + -- add the 3 connecting pieces + pattern = + b.any { + pattern, + b.translate(line_1, (10 * (i - 1) + (10 * i)) * -1, 0), + b.translate(b.rotate(line_1, degrees(180)), (10 * (i - 1) + (10 * i)), 0), + b.rotate(line_1, degrees(-90)) + --b.translate(line_1,-10,0) + } +end +pattern = + b.any { + pattern, + b.translate(b.rotate(line_1, degrees(90)), -40, 30), + b.translate(b.rotate(line_1, degrees(90)), 40, 30) +} +-- Tile map in X direction +local function ribbon(x, y) + local abs_x = math.abs(x) + local abs_y = math.abs(y) + return (abs_y < 40) +end +ribbon = b.change_tile(ribbon, true, 'sand-1') +ribbon = b.apply_effect(ribbon, no_resources) +ribbon = b.apply_effect(ribbon, no_trees) +ribbon = b.translate(ribbon, 0, 6) +pattern = b.translate(pattern, 0, 5) +local hilbert = b.single_x_pattern(pattern, 80) +local map = b.any {hilbert, ribbon} +map = b.scale(map, 10, 10) +-- make starting area +local start_region = b.rectangle(160,60) +map = b.subtract(map, start_region) +start_region = b.change_tile(start_region,true, 'grass-1') +start_region = b.apply_effect(start_region, no_resources) +start_water = b.change_tile(b.circle(5),true, 'water') +map = b.any{start_water,start_region,map} +--make starting ores +local value = b.manhattan_value +local ore_shape = b.scale(b.circle(30), 0.15) +local start_ore = b.circle(30) +local start_iron = b.resource(start_ore, 'iron-ore', value(1000, 0)) +local start_copper = b.resource(start_ore, 'copper-ore', value(750, 0)) +local start_coal = b.resource(start_ore, 'coal', value(500, 0)) +local start_stone = b.resource(start_ore, 'stone', value(250, 0)) +start_ore = b.segment_pattern({start_coal, start_stone, start_copper, start_iron}) +ore_shape = b.choose(b.circle(30), start_ore, ore_shape) + +--apply starting ores to map +map = b.apply_entity(map, ore_shape) +--shift spawn so player doesn't die to start water +map = b.translate(map, 0, -10) + +-- -- Untested Code for not building on sand. However, this requires plague's entity restriction module +-- -- Enable this section when the entity restriction modules is finalized +-- -- Make sure this works on tiles if needed, otherwise keep function below +-- local RestrictEntities = require 'map_gen.shared.entity_placement_restriction' + +-- local function sand_trap(entity) +-- local Game = require 'utils.game' +-- local p = Game.get_player_by_index(event.player_index) +-- +-- local status = true +-- {{x1, y1},{x2,y2}} = entity.bounding_box +-- +-- for x=x1,x2,1 do +-- for y = y1, y2,1 do +-- if utils.game.player.surface.get_tile(x,y).name == 'sand-1' then +-- status = false +-- break +-- end +-- end +-- end +-- return status +-- end + +-- RestrictEntities.set_keep_alive_callback(sand_trap) + +-- substitute until entity restriction module is finished. +local Event = require 'utils.event' +local Game = require 'utils.game' +--Ban entities from sand-1 +Event.add( + defines.events.on_built_entity, + function(event) + local entity = event.created_entity + if not entity or not entity.valid then + return + end + local name = entity.name + local tile_ghost = false + if name == 'tile-ghost' then + tile_ghost = true + end + local ghost = false + if name == 'entity-ghost' then + name = entity.ghost_name + ghost = true + end + -- Check the bounding box for the tile + local status = true + local area = entity.bounding_box + local left_top = area.left_top + local right_bottom = area.right_bottom + local p = Game.get_player_by_index(event.player_index) + --check for sand under all tiles in bounding box + for x = math.floor(left_top.x), math.floor(right_bottom.x), 1 do + for y = math.floor(left_top.y), math.floor(right_bottom.y), 1 do + if p.surface.get_tile(x, y).name == 'sand-1' then + status = false + break + end + end + end + if status == true then + return + else + --destroy entity and return to player + if not p or not p.valid then + return + end + entity.destroy() + if not ghost and not tile_ghost then + p.insert(event.stack) + end + end + end +) +-- Ban tiles from sand-1 +Event.add( + defines.events.on_player_built_tile, + function(event) + local player = (require 'utils.game').get_player_by_index(event.player_index) + if not player or not player.valid then + return + end + local tiles = event.tiles + local replace_tiles = {} + local refund_count = 0 + for i = 1, #tiles do + local tile = tiles[i] + local old_name = tile.old_tile.name + if old_name == 'sand-1' then + tile.name = 'sand-1' + replace_tiles[#replace_tiles + 1] = tile + refund_count = refund_count + 1 + end + end + if #replace_tiles > 0 then + player.surface.set_tiles(replace_tiles, true) + end + player.insert {name = event.item.name, count = refund_count} + end +) +return map From 83eeeae5af91e87af086c10c8125e5932306378b Mon Sep 17 00:00:00 2001 From: Ross Newcome Date: Fri, 22 Feb 2019 14:12:11 -0500 Subject: [PATCH 2/8] Update HilbertSandTrap.lua --- map_gen/maps/HilbertSandTrap.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/map_gen/maps/HilbertSandTrap.lua b/map_gen/maps/HilbertSandTrap.lua index 46b0a4a9..8f188ca1 100644 --- a/map_gen/maps/HilbertSandTrap.lua +++ b/map_gen/maps/HilbertSandTrap.lua @@ -282,6 +282,7 @@ Event.add( if #replace_tiles > 0 then player.surface.set_tiles(replace_tiles, true) end + player.surface.set_tiles(replace_tiles, true) player.insert {name = event.item.name, count = refund_count} end ) From 80ac9aa954a19f663492f0c513ce5f3da5dd4911 Mon Sep 17 00:00:00 2001 From: Ross Newcome Date: Fri, 22 Feb 2019 14:46:40 -0500 Subject: [PATCH 3/8] Update HilbertSandTrap.lua --- map_gen/maps/HilbertSandTrap.lua | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/map_gen/maps/HilbertSandTrap.lua b/map_gen/maps/HilbertSandTrap.lua index 8f188ca1..cfd10c3c 100644 --- a/map_gen/maps/HilbertSandTrap.lua +++ b/map_gen/maps/HilbertSandTrap.lua @@ -72,8 +72,8 @@ local starting_area = { local water_settings = { terrain_segmentation = 'high', water = 'low' -} ---Set map settings +} +--Set map settings RS.set_map_gen_settings( { MGSP.cliff_none, @@ -82,8 +82,7 @@ RS.set_map_gen_settings( biter_settings, starting_area, tree_settings, - water_settings, - map_seed + water_settings } ) --remove resources from sand @@ -149,7 +148,7 @@ pattern = } -- Tile map in X direction local function ribbon(x, y) - local abs_x = math.abs(x) + --local abs_x = math.abs(x) local abs_y = math.abs(y) return (abs_y < 40) end @@ -166,7 +165,7 @@ local start_region = b.rectangle(160,60) map = b.subtract(map, start_region) start_region = b.change_tile(start_region,true, 'grass-1') start_region = b.apply_effect(start_region, no_resources) -start_water = b.change_tile(b.circle(5),true, 'water') +local start_water = b.change_tile(b.circle(5),true, 'water') map = b.any{start_water,start_region,map} --make starting ores local value = b.manhattan_value @@ -227,7 +226,6 @@ Event.add( end local ghost = false if name == 'entity-ghost' then - name = entity.ghost_name ghost = true end -- Check the bounding box for the tile From 2ee83ea4d6bcc6f7d5a03803c6ec086d434a10c8 Mon Sep 17 00:00:00 2001 From: Ross Newcome Date: Fri, 22 Feb 2019 15:05:08 -0500 Subject: [PATCH 4/8] Update HilbertSandTrap.lua --- map_gen/maps/HilbertSandTrap.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/map_gen/maps/HilbertSandTrap.lua b/map_gen/maps/HilbertSandTrap.lua index cfd10c3c..facfa4c6 100644 --- a/map_gen/maps/HilbertSandTrap.lua +++ b/map_gen/maps/HilbertSandTrap.lua @@ -148,7 +148,7 @@ pattern = } -- Tile map in X direction local function ribbon(x, y) - --local abs_x = math.abs(x) + local abs_x = math.abs(x) local abs_y = math.abs(y) return (abs_y < 40) end From bfecb67c508e5bf2b21817f334249da18bb6e537 Mon Sep 17 00:00:00 2001 From: Ross Newcome Date: Sun, 24 Feb 2019 13:14:17 -0500 Subject: [PATCH 5/8] Update HilbertSandTrap.lua Updated to include suggestions and hotfixes and generally clean up the code a little. --- map_gen/maps/HilbertSandTrap.lua | 82 ++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 31 deletions(-) diff --git a/map_gen/maps/HilbertSandTrap.lua b/map_gen/maps/HilbertSandTrap.lua index facfa4c6..61065640 100644 --- a/map_gen/maps/HilbertSandTrap.lua +++ b/map_gen/maps/HilbertSandTrap.lua @@ -13,13 +13,34 @@ ScenarioInfo.set_map_extra_info('Only the native grasses are suitable to build o --enable Hydra local hail_hydra = global.config.hail_hydra hail_hydra.enabled = true +--tweak hydra settings. Defualt settings are WAY too hard (circa 2019-02-22 hydra) +--This section will need updated in the future pending changes to how hydra is configured (PR #795) +hail_hydra.hydras = { + -- spitters + ['small-spitter'] = {['small-worm-turret'] = 0.05}, --default 0.2 + ['medium-spitter'] = {['medium-worm-turret'] = 0.05}, --defualt 0.2 + ['big-spitter'] = {['big-worm-turret'] = 0.05}, --defualt 0.2 + ['behemoth-spitter'] = {['big-worm-turret'] = 0.2}, --default 0.4 + -- biters + ['medium-biter'] = {['small-biter'] = 0.4}, --default 1.2 + ['big-biter'] = {['medium-biter'] = 0.4},--default 1.2 + ['behemoth-biter'] = {['big-biter'] = 0.4},--default 1.2 + -- worms + ['small-worm-turret'] = {['small-biter'] = .75},--defualt 2.5 + ['medium-worm-turret'] = {['small-biter'] = .75, ['medium-biter'] = 0.3}, --default 2.5, .6 + ['big-worm-turret'] = {['small-biter'] = 2.0, ['medium-biter'] = 1.0, ['big-biter'] = 0.5} --defualt 3.8, 1.3, 1.1 + } +hail_hydra.evolution_scale = .7 -- define map settings + +--Ore settings. I feel very-high frequency is required to keep the sand from eating all the ores +-- Richness and size can be changed to tweak balance a bit. local ore_settings = { autoplace_controls = { coal = { frequency = 'very-high', richness = 'normal', - size = 'small' + size = 'normal' }, ['copper-ore'] = { frequency = 'very-high', @@ -28,8 +49,8 @@ local ore_settings = { }, ['crude-oil'] = { frequency = 'very-high', - richness = 'low', - size = 'small' + richness = 'normal', + size = 'normal' }, ['iron-ore'] = { frequency = 'very-high', @@ -38,8 +59,8 @@ local ore_settings = { }, stone = { frequency = 'very-high', - richness = 'low', - size = 'small' + richness = 'normal', + size = 'normal' }, ['uranium-ore'] = { frequency = 'very-high', @@ -48,15 +69,7 @@ local ore_settings = { } } } -local biter_settings = { - autoplace_controls = { - ['enemy-base'] = { - frequency = 'very-high', - richness = 'very-high', - size = 'very-high' - } - } -} +-- Another section that can be used for balance. Setting richness above normal is not recommended local tree_settings = { autoplace_controls = { trees = { @@ -66,9 +79,9 @@ local tree_settings = { } } } -local starting_area = { - starting_area = 'very-small' -} + +-- This seems to be a decent balance between small pools of water and not blocking entire sections +-- of the maze near spawn by lakes local water_settings = { terrain_segmentation = 'high', water = 'low' @@ -78,9 +91,9 @@ RS.set_map_gen_settings( { MGSP.cliff_none, MGSP.grass_only, + MGSP.enemy_very_high, + MGSP.starting_area_very_low, ore_settings, - biter_settings, - starting_area, tree_settings, water_settings } @@ -107,15 +120,21 @@ local function no_trees(_, _, world, tile) end return tile end ---start hilbert design -local line_1 = b.translate(b.rectangle(6, 16), -5, 0) +--start hilbert design. Note: The following code does contain bugs. Jayefuu and R.Nukem are aware of +--this and will look into fixing it at a later date. For now keep hilbert_levels = 2 +--The following values can be changed to adjust the width of the maze and sand +local block_width = 6 +local block_length = 16 +local scale_factor = 11 +local hilbert_levels = 2 -- do not change unless the algorithm has been fixed + +local line_1 = b.translate(b.rectangle(block_width, block_length), -5, 0) --adjust size of rectangle to change maze width local tier_1 = b.any { line_1, b.rotate(line_1, degrees(-90)), b.rotate(line_1, degrees(-180)) } -local hilbert_levels = 2 -- don't change to 3, the algorithm is broken somewhere local pattern = tier_1 local var = 20 for i = 1, hilbert_levels do @@ -147,11 +166,11 @@ pattern = b.translate(b.rotate(line_1, degrees(90)), 40, 30) } -- Tile map in X direction -local function ribbon(x, y) - local abs_x = math.abs(x) +local function ribbon(y) local abs_y = math.abs(y) return (abs_y < 40) end + ribbon = b.change_tile(ribbon, true, 'sand-1') ribbon = b.apply_effect(ribbon, no_resources) ribbon = b.apply_effect(ribbon, no_trees) @@ -159,9 +178,11 @@ ribbon = b.translate(ribbon, 0, 6) pattern = b.translate(pattern, 0, 5) local hilbert = b.single_x_pattern(pattern, 80) local map = b.any {hilbert, ribbon} -map = b.scale(map, 10, 10) +--Change this to scale map + +map = b.scale(map, scale_factor, scale_factor) -- make starting area -local start_region = b.rectangle(160,60) +local start_region = b.rectangle(block_length * scale_factor,block_width * scale_factor) map = b.subtract(map, start_region) start_region = b.change_tile(start_region,true, 'grass-1') start_region = b.apply_effect(start_region, no_resources) @@ -174,14 +195,14 @@ local start_ore = b.circle(30) local start_iron = b.resource(start_ore, 'iron-ore', value(1000, 0)) local start_copper = b.resource(start_ore, 'copper-ore', value(750, 0)) local start_coal = b.resource(start_ore, 'coal', value(500, 0)) -local start_stone = b.resource(start_ore, 'stone', value(250, 0)) +local start_stone = b.resource(start_ore, 'stone', value(500, 0)) start_ore = b.segment_pattern({start_coal, start_stone, start_copper, start_iron}) ore_shape = b.choose(b.circle(30), start_ore, ore_shape) --apply starting ores to map map = b.apply_entity(map, ore_shape) --shift spawn so player doesn't die to start water -map = b.translate(map, 0, -10) +map = b.translate(map, 0, 30) -- -- Untested Code for not building on sand. However, this requires plague's entity restriction module -- -- Enable this section when the entity restriction modules is finalized @@ -261,7 +282,7 @@ Event.add( Event.add( defines.events.on_player_built_tile, function(event) - local player = (require 'utils.game').get_player_by_index(event.player_index) + local player = Game.get_player_by_index(event.player_index) if not player or not player.valid then return end @@ -279,9 +300,8 @@ Event.add( end if #replace_tiles > 0 then player.surface.set_tiles(replace_tiles, true) + player.insert {name = event.item.name, count = refund_count} end - player.surface.set_tiles(replace_tiles, true) - player.insert {name = event.item.name, count = refund_count} end ) return map From 0fe69ee85c4b0f9d613554ac60b0d607ebb29a9e Mon Sep 17 00:00:00 2001 From: Ross Newcome Date: Sun, 24 Feb 2019 14:31:59 -0500 Subject: [PATCH 6/8] Update HilbertSandTrap.lua --- map_gen/maps/HilbertSandTrap.lua | 28 +++------------------------- 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/map_gen/maps/HilbertSandTrap.lua b/map_gen/maps/HilbertSandTrap.lua index 61065640..ccb8164c 100644 --- a/map_gen/maps/HilbertSandTrap.lua +++ b/map_gen/maps/HilbertSandTrap.lua @@ -207,32 +207,10 @@ map = b.translate(map, 0, 30) -- -- Untested Code for not building on sand. However, this requires plague's entity restriction module -- -- Enable this section when the entity restriction modules is finalized -- -- Make sure this works on tiles if needed, otherwise keep function below --- local RestrictEntities = require 'map_gen.shared.entity_placement_restriction' - --- local function sand_trap(entity) --- local Game = require 'utils.game' --- local p = Game.get_player_by_index(event.player_index) --- --- local status = true --- {{x1, y1},{x2,y2}} = entity.bounding_box --- --- for x=x1,x2,1 do --- for y = y1, y2,1 do --- if utils.game.player.surface.get_tile(x,y).name == 'sand-1' then --- status = false --- break --- end --- end --- end --- return status --- end - --- RestrictEntities.set_keep_alive_callback(sand_trap) - --- substitute until entity restriction module is finished. local Event = require 'utils.event' local Game = require 'utils.game' ---Ban entities from sand-1 +--Ban entities from sand-1, including tile ghosts. This currently prevents us from using entity_placement_restriction.lua as of 2019-02-22 +-- Convert to using entity_replacement_restriction.lua once it is possible to do so Event.add( defines.events.on_built_entity, function(event) @@ -278,7 +256,7 @@ Event.add( end end ) --- Ban tiles from sand-1 +-- Hotfix to ban tiles by grilledham Event.add( defines.events.on_player_built_tile, function(event) From a3092bd13f99f043524c4342dcea49643ac90165 Mon Sep 17 00:00:00 2001 From: Ross Newcome Date: Sun, 24 Feb 2019 15:02:18 -0500 Subject: [PATCH 7/8] Update HilbertSandTrap.lua Combined ghost and tile-ghost handling --- map_gen/maps/HilbertSandTrap.lua | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/map_gen/maps/HilbertSandTrap.lua b/map_gen/maps/HilbertSandTrap.lua index ccb8164c..6beb753b 100644 --- a/map_gen/maps/HilbertSandTrap.lua +++ b/map_gen/maps/HilbertSandTrap.lua @@ -219,14 +219,11 @@ Event.add( return end local name = entity.name - local tile_ghost = false - if name == 'tile-ghost' then - tile_ghost = true + local ghost = false + if name == 'tile-ghost' or name == 'entity-ghost' then + ghost = true end - local ghost = false - if name == 'entity-ghost' then - ghost = true - end + -- Check the bounding box for the tile local status = true local area = entity.bounding_box @@ -250,7 +247,7 @@ Event.add( return end entity.destroy() - if not ghost and not tile_ghost then + if not ghost then p.insert(event.stack) end end From 2e0d4db7193b9d8fc8908b629b6b36fcec675158 Mon Sep 17 00:00:00 2001 From: Ross Newcome Date: Wed, 13 Mar 2019 09:53:54 -0400 Subject: [PATCH 8/8] Update HilbertSandTrap.lua added enable_water mapgen setting for use with grass_only --- map_gen/maps/HilbertSandTrap.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/map_gen/maps/HilbertSandTrap.lua b/map_gen/maps/HilbertSandTrap.lua index 6beb753b..f83b0b6e 100644 --- a/map_gen/maps/HilbertSandTrap.lua +++ b/map_gen/maps/HilbertSandTrap.lua @@ -91,6 +91,7 @@ RS.set_map_gen_settings( { MGSP.cliff_none, MGSP.grass_only, + MGSP.enable_water, MGSP.enemy_very_high, MGSP.starting_area_very_low, ore_settings,