1
0
mirror of https://github.com/Refactorio/RedMew.git synced 2025-03-03 14:53:01 +02:00

added mews island resort

This commit is contained in:
Valansch 2017-08-04 23:31:52 +02:00
parent 8d530d01b2
commit 95c718e879
2 changed files with 321 additions and 13 deletions

View File

@ -0,0 +1,302 @@
--Author: MewMew
require "locale.gen_shared.perlin_noise"
local radius = 129
local radsquare = radius*radius
function run_combined_module(event)
if not global.perlin_noise_seed then global.perlin_noise_seed = math.random(1000,1000000) end
local entities = event.surface.find_entities(event.area)
local tiles = {}
local decoratives = {}
for _, entity in pairs(entities) do
if entity.type == "simple-entity" or entity.type == "resource" or entity.type == "tree" then
entity.destroy()
end
end
for x = 0, 31, 1 do
for y = 0, 31, 1 do
local pos_x = event.area.left_top.x + x
local pos_y = event.area.left_top.y + y
local seed = global.perlin_noise_seed
local seed_increment = 10000
seed = seed + seed_increment
local noise_island_starting_1 = perlin:noise(((pos_x+seed)/30),((pos_y+seed)/30),0)
seed = seed + seed_increment
local noise_island_starting_2 = perlin:noise(((pos_x+seed)/10),((pos_y+seed)/10),0)
seed = seed + seed_increment
local noise_island_starting = noise_island_starting_1 + (noise_island_starting_2 * 0.3)
noise_island_starting = noise_island_starting * 8000
seed = seed + seed_increment
local noise_island_iron_and_copper_1 = perlin:noise(((pos_x+seed)/300),((pos_y+seed)/300),0)
seed = seed + seed_increment
local noise_island_iron_and_copper_2 = perlin:noise(((pos_x+seed)/40),((pos_y+seed)/40),0)
seed = seed + seed_increment
local noise_island_iron_and_copper_3 = perlin:noise(((pos_x+seed)/10),((pos_y+seed)/10),0)
local noise_island_iron_and_copper = noise_island_iron_and_copper_1 + (noise_island_iron_and_copper_2 * 0.1) + (noise_island_iron_and_copper_3 * 0.05)
seed = seed + seed_increment
local noise_island_stone_and_coal_1 = perlin:noise(((pos_x+seed)/300),((pos_y+seed)/300),0)
seed = seed + seed_increment
local noise_island_stone_and_coal_2 = perlin:noise(((pos_x+seed)/40),((pos_y+seed)/40),0)
seed = seed + seed_increment
local noise_island_stone_and_coal_3 = perlin:noise(((pos_x+seed)/10),((pos_y+seed)/10),0)
local noise_island_stone_and_coal = noise_island_stone_and_coal_1 + (noise_island_stone_and_coal_2 * 0.1) + (noise_island_stone_and_coal_3 * 0.05)
seed = seed + seed_increment
local noise_island_oil_and_uranium_1 = perlin:noise(((pos_x+seed)/300),((pos_y+seed)/300),0)
seed = seed + seed_increment
local noise_island_oil_and_uranium_2 = perlin:noise(((pos_x+seed)/40),((pos_y+seed)/40),0)
seed = seed + seed_increment
local noise_island_oil_and_uranium_3 = perlin:noise(((pos_x+seed)/10),((pos_y+seed)/10),0)
local noise_island_oil_and_uranium = noise_island_oil_and_uranium_1 + (noise_island_oil_and_uranium_2 * 0.1) + (noise_island_oil_and_uranium_3 * 0.05)
seed = seed + seed_increment
local noise_island_resource = perlin:noise(((pos_x+seed)/60),((pos_y+seed)/60),0)
seed = seed + seed_increment
local noise_island_resource_2 = perlin:noise(((pos_x+seed)/10),((pos_y+seed)/10),0)
noise_island_resource = noise_island_resource + noise_island_resource_2 * 0.15
seed = seed + seed_increment
local noise_trees_1 = perlin:noise(((pos_x+seed)/30),((pos_y+seed)/30),0)
seed = seed + seed_increment
local noise_trees_2 = perlin:noise(((pos_x+seed)/10),((pos_y+seed)/10),0)
local noise_trees = noise_trees_1 + noise_trees_2 * 0.5
seed = seed + seed_increment
local noise_decoratives_1 = perlin:noise(((pos_x+seed)/50),((pos_y+seed)/50),0)
seed = seed + seed_increment
local noise_decoratives_2 = perlin:noise(((pos_x+seed)/10),((pos_y+seed)/10),0)
local noise_decoratives = noise_decoratives_1 + noise_decoratives_2 * 0.5
local tile_to_insert = "water"
--Create starting Island
local tile_distance_to_center = nil
local a = pos_y * pos_y
local b = pos_x * pos_x
local tile_distance_to_center = a + b
if tile_distance_to_center + noise_island_starting <= radsquare then
tile_to_insert = "grass"
end
if tile_distance_to_center + noise_island_starting > radsquare + 20000 then
--Placement of Island Tiles
if noise_island_oil_and_uranium > 0.53 then
tile_to_insert = "red-desert"
end
if noise_island_oil_and_uranium < -0.53 then
tile_to_insert = "red-desert-dark"
end
if noise_island_stone_and_coal > 0.47 then
tile_to_insert = "grass-medium"
end
if noise_island_stone_and_coal < -0.47 then
tile_to_insert = "grass-dry"
end
if noise_island_iron_and_copper > 0.47 then
tile_to_insert = "sand"
end
if noise_island_iron_and_copper < -0.47 then
tile_to_insert = "sand-dark"
end
end
--Placement of Trees
if tile_to_insert ~= "water" then
if noise_trees > 0.1 then
local tree = "tree-01"
if tile_to_insert == "grass" then
tree = "tree-05"
end
if tile_to_insert == "grass-dry" then
tree = "tree-02"
end
if tile_to_insert == "grass-medium" then
tree = "tree-04"
end
if tile_to_insert == "sand" then
tree = "tree-07"
end
if tile_to_insert == "sand-dark" then
tree = "dry-hairy-tree"
end
if tile_to_insert == "red-desert" then
tree = "dry-tree"
end
if tile_to_insert == "red-desert-dark" then
if math.random(1,3) == 1 then
tree = "red-desert-rock-huge-01"
else
tree = "red-desert-rock-big-01"
end
end
if math.random(1,8) == 1 then
if event.surface.can_place_entity {name=tree, position={pos_x,pos_y}} then
event.surface.create_entity {name=tree, position={pos_x,pos_y}}
end
end
end
end
if tile_to_insert == "sand" or tile_to_insert == "sand-dark" then
if math.random(1,200) == 1 then
if event.surface.can_place_entity {name="stone-rock", position={pos_x,pos_y}} then
event.surface.create_entity {name="stone-rock", position={pos_x,pos_y}}
end
end
end
if tile_to_insert == "grass" or tile_to_insert == "grass-dry" or tile_to_insert == "grass-medium" then
if math.random(1,2000) == 1 then
if event.surface.can_place_entity {name="stone-rock", position={pos_x,pos_y}} then
event.surface.create_entity {name="stone-rock", position={pos_x,pos_y}}
end
end
end
--Placement of Decoratives
if tile_to_insert ~= "water" then
if noise_decoratives > 0.3 then
local decorative = "green-carpet-grass"
if tile_to_insert == "grass" then
decorative = "green-pita"
end
if tile_to_insert == "grass-dry" then
decorative = "green-pita"
end
if tile_to_insert == "grass-medium" then
decorative = "green-pita"
end
if tile_to_insert == "sand" then
decorative = "green-asterisk"
end
if tile_to_insert == "sand-dark" then
decorative = "green-asterisk"
end
if tile_to_insert == "red-desert" then
decorative = "red-asterisk"
end
if tile_to_insert == "red-desert-dark" then
decorative = "red-asterisk"
end
if math.random(1,5) == 1 then
table.insert(decoratives, {name=decorative, position={pos_x,pos_y}, amount=1})
end
end
if tile_to_insert == "red-desert-dark" then
if math.random(1,50) == 1 then
table.insert(decoratives, {name="red-desert-rock-medium", position={pos_x,pos_y}, amount=1})
end
end
end
--Placement of Island Resources
if tile_to_insert ~= "water" then
local a = pos_x
local b = pos_y
local c = 1
if event.area.right_bottom.x < 0 then a = event.area.right_bottom.x * -1 end
if event.area.right_bottom.y < 0 then b = event.area.right_bottom.y * -1 end
if a > b then c = a else c = b end
local resource_amount_distance_multiplicator = (((c + 1) / 75) / 75) + 1
local noise_resource_amount_modifier = perlin:noise(((pos_x+seed)/200),((pos_y+seed)/200),0)
local resource_amount = 1 + ((500 + (500*noise_resource_amount_modifier*0.2)) * resource_amount_distance_multiplicator)
if tile_to_insert == "sand" or tile_to_insert == "sand-dark" then
if noise_island_iron_and_copper > 0.5 and noise_island_resource > 0.2 then
if event.surface.can_place_entity {name="iron-ore", position={pos_x,pos_y}} then
event.surface.create_entity {name="iron-ore", position={pos_x,pos_y}, amount=resource_amount}
end
end
if noise_island_iron_and_copper < -0.5 and noise_island_resource > 0.2 then
if event.surface.can_place_entity {name="copper-ore", position={pos_x,pos_y}} then
event.surface.create_entity {name="copper-ore", position={pos_x,pos_y}, amount=resource_amount}
end
end
end
if tile_to_insert == "grass-medium" or tile_to_insert == "grass-dry" then
if noise_island_stone_and_coal > 0.5 and noise_island_resource > 0.2 then
if event.surface.can_place_entity {name="stone", position={pos_x,pos_y}} then
event.surface.create_entity {name="stone", position={pos_x,pos_y}, amount=resource_amount*1.5}
end
end
if noise_island_stone_and_coal < -0.5 and noise_island_resource > 0.2 then
if event.surface.can_place_entity {name="coal", position={pos_x,pos_y}} then
event.surface.create_entity {name="coal", position={pos_x,pos_y}, amount=resource_amount}
end
end
end
if tile_to_insert == "red-desert" or tile_to_insert == "red-desert-dark" then
if noise_island_oil_and_uranium > 0.55 and noise_island_resource > 0.25 then
if event.surface.can_place_entity {name="crude-oil", position={pos_x,pos_y}} then
if math.random(1,60) == 1 then
event.surface.create_entity {name="crude-oil", position={pos_x,pos_y}, amount=resource_amount*400}
end
end
end
if noise_island_oil_and_uranium < -0.55 and noise_island_resource > 0.35 then
if event.surface.can_place_entity {name="uranium-ore", position={pos_x,pos_y}} then
event.surface.create_entity {name="uranium-ore", position={pos_x,pos_y}, amount=resource_amount}
end
end
end
noise_island_starting = noise_island_starting * 0.08
--Starting Resources
if tile_distance_to_center <= radsquare then
if tile_distance_to_center + noise_island_starting > radsquare * 0.09 and tile_distance_to_center + noise_island_starting <= radsquare * 0.15 then
if event.surface.can_place_entity {name="stone", position={pos_x,pos_y}} then
event.surface.create_entity {name="stone", position={pos_x,pos_y}, amount=resource_amount*1.5}
end
end
if tile_distance_to_center + noise_island_starting > radsquare * 0.05 and tile_distance_to_center + noise_island_starting <= radsquare * 0.09 then
if event.surface.can_place_entity {name="coal", position={pos_x,pos_y}} then
event.surface.create_entity {name="coal", position={pos_x,pos_y}, amount=resource_amount*1.5}
end
end
if tile_distance_to_center + noise_island_starting > radsquare * 0.02 and tile_distance_to_center + noise_island_starting <= radsquare * 0.05 then
if event.surface.can_place_entity {name="iron-ore", position={pos_x,pos_y}} then
event.surface.create_entity {name="iron-ore", position={pos_x,pos_y}, amount=resource_amount*1.5}
end
end
if tile_distance_to_center + noise_island_starting > radsquare * 0.003 and tile_distance_to_center + noise_island_starting <= radsquare * 0.02 then
if event.surface.can_place_entity {name="copper-ore", position={pos_x,pos_y}} then
event.surface.create_entity {name="copper-ore", position={pos_x,pos_y}, amount=resource_amount*1.5}
end
end
if tile_distance_to_center + noise_island_starting <= radsquare * 0.002 then
if event.surface.can_place_entity {name="crude-oil", position={pos_x,pos_y}} then
if math.random(1,16) == 1 then event.surface.create_entity {name="crude-oil", position={pos_x,pos_y}, amount=resource_amount*400} end
end
end
end
end
if tile_to_insert == "water" then
local a = pos_x + 1
table.insert(tiles, {name = tile_to_insert, position = {a,pos_y}})
local a = pos_y + 1
table.insert(tiles, {name = tile_to_insert, position = {pos_x,a}})
local a = pos_x - 1
table.insert(tiles, {name = tile_to_insert, position = {a,pos_y}})
local a = pos_y - 1
table.insert(tiles, {name = tile_to_insert, position = {pos_x,a}})
end
table.insert(tiles, {name = tile_to_insert, position = {pos_x,pos_y}})
end
end
event.surface.set_tiles(tiles)
for _,deco in pairs(decoratives) do
event.surface.create_decoratives{check_collision=false, decoratives={deco}}
end
end

View File

@ -1,11 +1,14 @@
--[[
This file is used to choose which styles you want.
You may choose up to one of each type shapes, terrain, ores and misc by removing uncommenting the line.
You may choose up to one of each type shapes, terrain, ores and misc or one of the combined styles by removing uncommenting the line.
If you want to add your own module, just add it to the others
in this file and your run_*type*_module(event) function will be called.
--]]
--combined--
--require "locale.gen_combined.island_resort"
--shapes--
--require "locale.gen_shape.right"
--require "locale.gen_shape.up"
@ -16,10 +19,9 @@ in this file and your run_*type*_module(event) function will be called.
--require "locale.gen_shape.donut"
--require "locale.gen_shape.rectangular_spiral"
--require "locale.gen_shape.lattice"
require "locale.gen_shape.infinite_mazes"
--require "locale.gen_shape.infinite_mazes"
--require "locale.gen_shape.x_shape"
--terrain--
--require "locale.gen_terrain.neko_bridged_rivers"
@ -33,23 +35,27 @@ miscs = {}
local on_chunk_generated = function(event)
if run_shape_module ~= nil then
if run_shape_module(event) then
if run_combined_module == nil then
if run_shape_module ~= nil then
if run_shape_module(event) then
if run_terrain_module ~= nil then
run_terrain_module(event)
elseif run_ores_module ~= nil then
run_ores_module(event)
end
end
else
if run_terrain_module ~= nil then
run_terrain_module(event)
elseif run_ores_module ~= nil then
run_ores_module(event)
end
end
else
if run_terrain_module ~= nil then
run_terrain_module(event)
elseif run_ores_module ~= nil then
run_ores_module(event)
for _,v in pairs(miscs) do
v.on_chunk_generated(event)
end
end
for _,v in pairs(miscs) do
v.on_chunk_generated(event)
else
run_combined_module(event)
end
end