mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-22 03:38:48 +02:00
105 lines
4.1 KiB
Lua
105 lines
4.1 KiB
Lua
local random = math.random
|
|
local abs = math.abs
|
|
local floor = math.floor
|
|
local Balance = require 'maps.chronosphere.balance'
|
|
local Functions = require 'maps.chronosphere.world_functions'
|
|
local Raffle = require 'maps.chronosphere.raffles'
|
|
local Specials = require 'maps.chronosphere.terrain_specials'
|
|
local simplex_noise = require 'utils.simplex_noise'.d2
|
|
local Difficulty = require 'modules.difficulty_vote'
|
|
|
|
local function roll_biters(p, biters, entities)
|
|
local roll = random(1, biters)
|
|
if roll < 4 and p.x > -800 then
|
|
entities[#entities + 1] = {name = Raffle.spawners[random(1, #Raffle.spawners)], position = p, spawn_decorations = true}
|
|
elseif roll == 5 and p.x > -800 then
|
|
entities[#entities + 1] = {name = 'behemoth-worm-turret', position = p, spawn_decorations = true}
|
|
elseif roll == 6 then
|
|
entities[#entities + 1] = {name = Raffle.trees[random(1, #Raffle.trees)], position = p}
|
|
end
|
|
end
|
|
|
|
local function process_tile(p, seed, tiles, entities)
|
|
local body_radius = 1984 --3072
|
|
local body_square_radius = body_radius ^ 2
|
|
local body_center_position = {x = 0, y = 0}
|
|
local body_spacing = floor(body_radius * 0.82)
|
|
local body_circle_center_1 = {x = body_center_position.x, y = body_center_position.y - body_spacing}
|
|
local body_circle_center_2 = {x = body_center_position.x, y = body_center_position.y + body_spacing}
|
|
|
|
local difficulty = Difficulty.get().difficulty_vote_value
|
|
local biters = Balance.fish_market_base_modifier(difficulty)
|
|
|
|
--Main Fish Body
|
|
local distance_to_center_1 = ((p.x - body_circle_center_1.x) ^ 2 + (p.y - body_circle_center_1.y) ^ 2)
|
|
local distance_to_center_2 = ((p.x - body_circle_center_2.x) ^ 2 + (p.y - body_circle_center_2.y) ^ 2)
|
|
local eye_center = {x = -500, y = -150}
|
|
|
|
if distance_to_center_1 < body_square_radius and distance_to_center_2 < body_square_radius then
|
|
if p.x < -600 and p.x > -1090 and p.y < 64 and p.y > -64 then --mouth
|
|
local noise = simplex_noise(p.x * 0.006, 0, seed) * 20
|
|
if p.y <= 12 + noise and p.y >= -12 + noise then
|
|
tiles[#tiles + 1] = {name = 'water', position = p}
|
|
else
|
|
tiles[#tiles + 1] = {name = 'grass-1', position = p}
|
|
roll_biters(p, biters, entities)
|
|
end
|
|
else
|
|
local distance = Functions.distance(eye_center.x - p.x, eye_center.y - p.y)
|
|
if distance < 33 and distance >= 15 then --eye
|
|
tiles[#tiles + 1] = {name = 'water-green', position = p}
|
|
elseif distance < 15 then --eye
|
|
tiles[#tiles + 1] = {name = 'out-of-map', position = p}
|
|
else --rest
|
|
tiles[#tiles + 1] = {name = 'grass-1', position = p}
|
|
roll_biters(p, biters, entities)
|
|
end
|
|
end
|
|
else
|
|
if p.x > 800 and abs(p.y) < p.x - 800 then --tail
|
|
tiles[#tiles + 1] = {name = 'grass-1', position = p}
|
|
roll_biters(p, biters, entities)
|
|
else
|
|
tiles[#tiles + 1] = {name = 'out-of-map', position = p}
|
|
end
|
|
end
|
|
end
|
|
|
|
local function market_chunk(surface, left_top)
|
|
local tiles = {}
|
|
local entities = {}
|
|
local seed = surface.map_gen_settings.seed
|
|
for y = 0, 31, 1 do
|
|
for x = 0, 31, 1 do
|
|
local p = {x = left_top.x + x, y = left_top.y + y}
|
|
process_tile(p, seed, tiles, entities)
|
|
end
|
|
end
|
|
surface.set_tiles(tiles, true)
|
|
Specials.fish_market(surface, left_top)
|
|
end
|
|
|
|
local function normal_chunk(surface, left_top)
|
|
local tiles = {}
|
|
local entities = {}
|
|
local seed = surface.map_gen_settings.seed
|
|
for y = 0, 31, 1 do
|
|
for x = 0, 31, 1 do
|
|
local p = {x = left_top.x + x, y = left_top.y + y}
|
|
process_tile(p, seed, tiles, entities)
|
|
end
|
|
end
|
|
surface.set_tiles(tiles, true)
|
|
Functions.spawn_entities(surface, entities)
|
|
end
|
|
|
|
local function fishmarket(_, surface, left_top)
|
|
if abs(left_top.y) <= 31 and abs(left_top.x - 864) <= 31 then
|
|
market_chunk(surface, left_top)
|
|
return
|
|
end
|
|
normal_chunk(surface, left_top)
|
|
end
|
|
|
|
return fishmarket
|