1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2024-12-28 23:06:38 +02:00
ComfyFactorio/maps/deep_jungle/main.lua
2024-10-22 21:47:11 +02:00

155 lines
5.5 KiB
Lua

require 'modules.no_deconstruction_of_neutral_entities'
require 'modules.spawners_contain_biters'
require 'modules.biters_yield_coins'
require 'modules.rocks_yield_coins'
require 'modules.flashlight_toggle_button'
require 'maps.deep_jungle.generate'
local Event = require 'utils.event'
local map_functions = require 'utils.tools.map_functions'
local Task = require 'utils.task'
local DPT = require 'maps.deep_jungle.table'
local random = math.random
local function on_chunk_charted(event)
local settings = DPT.get('settings')
local surface = game.get_surface(event.surface_index)
local deco = prototypes.decorative
local position = event.position
if settings.chunks_charted[tostring(position.x) .. tostring(position.y)] then
return
end
settings.chunks_charted[tostring(position.x) .. tostring(position.y)] = true
local decorative_names = {}
for k, v in pairs(deco) do
if v.autoplace_specification then
decorative_names[#decorative_names + 1] = k
end
end
surface.regenerate_decorative(decorative_names, { position })
if random(1, 14) ~= 1 then
return
end
map_functions.draw_rainbow_patch({ x = position.x * 32 + random(1, 32), y = position.y * 32 + random(1, 32) }, surface, random(14, 26), 2000)
end
local function on_player_joined_game(event)
local player = game.get_player(event.player_index)
local surface = game.get_surface('deep_jungle')
if player.online_time < 5 and surface.is_chunk_generated({ 0, 0 }) then
player.teleport(surface.find_non_colliding_position('character', { 0, 0 }, 2, 1), 'deep_jungle')
else
if player.online_time < 5 then
player.teleport({ 0, 0 }, 'deep_jungle')
end
end
if player.online_time < 2 then
player.insert { name = 'iron-plate', count = 32 }
end
end
local function on_entity_died(event)
local entity = event.entity
if not entity or not entity.valid then
return
end
local surface = entity.surface
if entity.type == 'tree' then
if random(1, 8) == 1 then
local p = surface.find_non_colliding_position('small-biter', entity.position, 2, 0.5)
if p then
surface.create_entity { name = 'small-biter', position = entity.position }
end
return
end
if random(1, 16) == 1 then
local p = surface.find_non_colliding_position('medium-biter', entity.position, 2, 0.5)
if p then
surface.create_entity { name = 'medium-biter', position = entity.position }
end
return
end
if random(1, 32) == 1 then
local p = surface.find_non_colliding_position('big-biter', entity.position, 2, 0.5)
if p then
surface.create_entity { name = 'big-biter', position = entity.position }
end
return
end
if random(1, 512) == 1 then
local p = surface.find_non_colliding_position('behemoth-biter', entity.position, 2, 0.5)
if p then
surface.create_entity { name = 'behemoth-biter', position = entity.position }
end
return
end
end
if entity.type == 'simple-entity' then
if random(1, 8) == 1 then
surface.create_entity { name = 'small-worm-turret', position = entity.position }
return
end
if random(1, 16) == 1 then
surface.create_entity { name = 'medium-worm-turret', position = entity.position }
return
end
if random(1, 32) == 1 then
surface.create_entity { name = 'big-worm-turret', position = entity.position }
return
end
end
end
local function chunk_load()
local tick = game.tick
local settings = DPT.get('settings')
if settings.chunk_load_tick then
if settings.chunk_load_tick < tick then
settings.force_chunk = false
DPT.remove('settings', 'chunk_load_tick')
Task.set_queue_speed(8)
end
end
end
local on_tick = function ()
local tick = game.tick
if tick % 40 == 0 then
chunk_load()
end
end
local function on_init()
local map_gen_settings = {}
local settings = DPT.get('settings')
map_gen_settings.moisture = 0.99
map_gen_settings.water = 'none'
map_gen_settings.starting_area = 'normal'
map_gen_settings.cliff_settings = { cliff_elevation_interval = 4, cliff_elevation_0 = 0.1 }
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 = 'very-high', size = 'big', richness = 'normal' },
['trees'] = { frequency = 'none', size = 'none', richness = 'none' },
['enemy-base'] = { frequency = 'high', size = 'big', richness = 'good' }
}
game.create_surface('deep_jungle', map_gen_settings)
game.forces.player.set_spawn_position({ 0, 0 }, game.surfaces['deep_jungle'])
settings.force_chunk = true
settings.chunk_load_tick = game.tick + 200
end
Event.on_init(on_init)
Event.add(defines.events.on_chunk_charted, on_chunk_charted)
Event.add(defines.events.on_entity_died, on_entity_died)
Event.add(defines.events.on_player_joined_game, on_player_joined_game)
Event.on_nth_tick(10, on_tick)
require 'modules.rocks_yield_ore'