mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-26 03:52:22 +02:00
New Map Rivers
This commit is contained in:
parent
126f58283e
commit
76240e1842
@ -46,7 +46,8 @@ require "score"
|
||||
--require "maps.junkyard"
|
||||
--require "maps.spooky_forest"
|
||||
--require "maps.nightfall"
|
||||
require "maps.lost"
|
||||
--require "maps.lost"
|
||||
require "maps.rivers"
|
||||
--require "maps.atoll"
|
||||
--require "maps.choppy"
|
||||
--require "maps.tank_battles"
|
||||
|
196
maps/rivers.lua
Normal file
196
maps/rivers.lua
Normal file
@ -0,0 +1,196 @@
|
||||
--rivers-- mewmew made this --
|
||||
|
||||
require "modules.satellite_score"
|
||||
require "modules.spawners_contain_biters"
|
||||
require "modules.dynamic_landfill"
|
||||
require "modules.rocks_yield_ore"
|
||||
require "modules.teleporting_worms"
|
||||
|
||||
local event = require 'utils.event'
|
||||
local table_insert = table.insert
|
||||
local math_random = math.random
|
||||
local simplex_noise = require 'utils.simplex_noise'.d2
|
||||
local map_functions = require "tools.map_functions"
|
||||
|
||||
local disabled_for_deconstruction = {
|
||||
["fish"] = true
|
||||
}
|
||||
|
||||
local rock_raffle = {"sand-rock-big","sand-rock-big","rock-big","rock-big","rock-big","rock-big","rock-big","rock-big","rock-huge"}
|
||||
|
||||
local tile_replacements = {
|
||||
["water"] = "grass-2",
|
||||
["deepwater"] = "grass-2",
|
||||
["dirt-1"] = "grass-1",
|
||||
["dirt-2"] = "grass-2",
|
||||
["dirt-3"] = "grass-3",
|
||||
["dirt-4"] = "grass-4",
|
||||
["sand-1"] = "grass-1",
|
||||
["sand-2"] = "grass-2",
|
||||
["sand-3"] = "grass-3",
|
||||
["dry-dirt"] = "grass-2",
|
||||
["red-desert-0"] = "grass-1",
|
||||
["red-desert-1"] = "grass-2",
|
||||
["red-desert-2"] = "grass-3",
|
||||
["red-desert-3"] = "grass-4",
|
||||
}
|
||||
|
||||
local function shuffle(tbl)
|
||||
local size = #tbl
|
||||
for i = size, 1, -1 do
|
||||
local rand = math_random(size)
|
||||
tbl[i], tbl[rand] = tbl[rand], tbl[i]
|
||||
end
|
||||
return tbl
|
||||
end
|
||||
|
||||
local function get_noise(name, pos)
|
||||
local seed = game.surfaces[1].map_gen_settings.seed
|
||||
local noise = {}
|
||||
local noise_seed_add = 25000
|
||||
if name == 1 then
|
||||
noise[1] = simplex_noise(pos.x * 0.007, pos.y * 0.007, seed)
|
||||
seed = seed + noise_seed_add
|
||||
noise[2] = simplex_noise(pos.x * 0.05, pos.y * 0.05, seed)
|
||||
seed = seed + noise_seed_add
|
||||
noise[3] = simplex_noise(pos.x * 0.1, pos.y * 0.1, seed)
|
||||
local noise = noise[1] + noise[2] * 0.1 + noise[3] * 0.025
|
||||
return noise
|
||||
end
|
||||
seed = seed + noise_seed_add
|
||||
seed = seed + noise_seed_add
|
||||
if name == 2 then
|
||||
noise[1] = simplex_noise(pos.x * 0.008, pos.y * 0.008, seed)
|
||||
seed = seed + noise_seed_add
|
||||
noise[2] = simplex_noise(pos.x * 0.05, pos.y * 0.05, seed)
|
||||
local noise = noise[1] + noise[2] * 0.05
|
||||
return noise
|
||||
end
|
||||
end
|
||||
|
||||
local ore_level = 0.73
|
||||
local water_level = 0.25
|
||||
local connections = 0.08
|
||||
|
||||
local function process_tiles(surface, pos, noise, noise_2)
|
||||
local tile = surface.get_tile(pos)
|
||||
if tile_replacements[tile.name] then surface.set_tiles({{name = tile_replacements[tile.name], position = pos}}, true) end
|
||||
|
||||
if noise > water_level * -1 and noise < water_level then
|
||||
if noise_2 < connections * -1 or noise_2 > connections then
|
||||
surface.set_tiles({{name = "water", position = pos}}, true)
|
||||
if math_random(1,256) == 1 then surface.create_entity({name = "fish", position = pos}) end
|
||||
return
|
||||
else
|
||||
if math_random(1,2) == 1 then surface.create_entity({name = rock_raffle[math_random(1, #rock_raffle)], position = pos}) end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function process_entities(surface, pos, noise, noise_2)
|
||||
if not surface.can_place_entity({name = "iron-ore", position = pos, amount = 1}) then return end
|
||||
|
||||
if noise > ore_level then
|
||||
local distance_to_center = math.sqrt(pos.x^2 + pos.y^2)
|
||||
local amount = (600 + distance_to_center) * math.abs(noise)
|
||||
if math.floor(noise * 15) % 3 ~= 0 then
|
||||
surface.create_entity({name = "iron-ore", position = pos, amount = amount})
|
||||
return
|
||||
else
|
||||
surface.create_entity({name = "coal", position = pos, amount = amount})
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
if noise < ore_level * -1 then
|
||||
local distance_to_center = math.sqrt(pos.x^2 + pos.y^2)
|
||||
local amount = (600 + distance_to_center) * math.abs(noise)
|
||||
if math.floor(noise * 15) % 3 ~= 0 then
|
||||
surface.create_entity({name = "copper-ore", position = pos, amount = amount})
|
||||
return
|
||||
else
|
||||
surface.create_entity({name = "stone", position = pos, amount = amount})
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function on_chunk_generated(event)
|
||||
local surface = event.surface
|
||||
if surface.name ~= "rivers" then return end
|
||||
local left_top = event.area.left_top
|
||||
local tiles = {}
|
||||
local entities = {}
|
||||
|
||||
for x = 0, 31, 1 do
|
||||
for y = 0, 31, 1 do
|
||||
local pos = {x = left_top.x + x, y = left_top.y + y}
|
||||
local noise_1 = get_noise(1, pos)
|
||||
local noise_2 = get_noise(2, pos)
|
||||
process_tiles(surface, pos, noise_1, noise_2)
|
||||
process_entities(surface, pos, noise_1, noise_2)
|
||||
end
|
||||
end
|
||||
|
||||
local decorative_names = {}
|
||||
for k,v in pairs(game.decorative_prototypes) do
|
||||
if v.autoplace_specification then
|
||||
decorative_names[#decorative_names+1] = k
|
||||
end
|
||||
end
|
||||
surface.regenerate_decorative(decorative_names, {{left_top.x / 32, left_top.y / 32}})
|
||||
end
|
||||
|
||||
local function init_map()
|
||||
if game.surfaces["rivers"] then return end
|
||||
|
||||
local map_gen_settings = {}
|
||||
map_gen_settings.water = "0"
|
||||
map_gen_settings.starting_area = "1"
|
||||
map_gen_settings.cliff_settings = {cliff_elevation_interval = 22, cliff_elevation_0 = 22}
|
||||
map_gen_settings.autoplace_controls = {
|
||||
["coal"] = {frequency = "none", size = "none", richness = "none"},
|
||||
["stone"] = {frequency = "none", size = "none", richness = "none"},
|
||||
["copper-ore"] = {frequency = "none", size = "none", richness = "none"},
|
||||
["iron-ore"] = {frequency = "none", size = "none", richness = "none"},
|
||||
["crude-oil"] = {frequency = "4", size = "1", richness = "1"},
|
||||
["trees"] = {frequency = "4", size = "1", richness = "1"},
|
||||
["enemy-base"] = {frequency = "50", size = "1.5", richness = "1"}
|
||||
}
|
||||
game.create_surface("rivers", map_gen_settings)
|
||||
|
||||
local surface = game.surfaces["rivers"]
|
||||
surface.ticks_per_day = game.surfaces["rivers"].ticks_per_day * 1.5
|
||||
|
||||
game.map_settings.enemy_expansion.enabled = true
|
||||
game.map_settings.enemy_expansion.min_expansion_cooldown = 18000
|
||||
game.map_settings.enemy_expansion.max_expansion_cooldown = 36000
|
||||
|
||||
surface.request_to_generate_chunks({0,0}, 3)
|
||||
surface.force_generate_chunk_requests()
|
||||
|
||||
|
||||
map_functions.draw_smoothed_out_ore_circle({x = -3, y = -3}, "iron-ore", surface, 8, 5000)
|
||||
map_functions.draw_smoothed_out_ore_circle({x = 3, y = 3}, "copper-ore", surface, 8, 5000)
|
||||
map_functions.draw_smoothed_out_ore_circle({x = 3, y = -3}, "stone", surface, 8, 5000)
|
||||
map_functions.draw_smoothed_out_ore_circle({x = -3, y = 3}, "coal", surface, 8, 5000)
|
||||
end
|
||||
|
||||
local function on_player_joined_game(event)
|
||||
init_map()
|
||||
|
||||
local player = game.players[event.player_index]
|
||||
if player.online_time == 0 then
|
||||
player.teleport(game.surfaces["rivers"].find_non_colliding_position("player", {0, 2}, 50, 0.5), "rivers")
|
||||
end
|
||||
end
|
||||
|
||||
local function on_marked_for_deconstruction(event)
|
||||
if disabled_for_deconstruction[event.entity.name] then
|
||||
event.entity.cancel_deconstruction(game.players[event.player_index].force.name)
|
||||
end
|
||||
end
|
||||
|
||||
event.add(defines.events.on_marked_for_deconstruction, on_marked_for_deconstruction)
|
||||
event.add(defines.events.on_player_joined_game, on_player_joined_game)
|
||||
event.add(defines.events.on_chunk_generated, on_chunk_generated)
|
Loading…
x
Reference in New Issue
Block a user