1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-11-06 08:56:27 +02:00

too much stuff

This commit is contained in:
MewMew
2019-10-07 22:40:05 +02:00
parent faac8c1905
commit aa6386033b
6 changed files with 152 additions and 47 deletions

View File

@@ -0,0 +1,20 @@
--Flamethrower Turret Nerf
local function on_research_finished(event)
local research = event.research
local force_name = research.force.name
if research.name == "flamethrower" then
if not global.flamethrower_damage then global.flamethrower_damage = {} end
global.flamethrower_damage[force_name] = -0.6
game.forces[force_name].set_turret_attack_modifier("flamethrower-turret", global.flamethrower_damage[force_name])
game.forces[force_name].set_ammo_damage_modifier("flamethrower", global.flamethrower_damage[force_name])
end
if string.sub(research.name, 0, 18) == "refined-flammables" then
global.flamethrower_damage[force_name] = global.flamethrower_damage[force_name] + 0.05
game.forces[force_name].set_turret_attack_modifier("flamethrower-turret", global.flamethrower_damage[force_name])
game.forces[force_name].set_ammo_damage_modifier("flamethrower", global.flamethrower_damage[force_name])
end
end
local event = require 'utils.event'
event.add(defines.events.on_research_finished, on_research_finished)

View File

@@ -26,12 +26,22 @@ local function remove_acceleration()
if global.locomotive_driver then global.locomotive_driver.destroy() end if global.locomotive_driver then global.locomotive_driver.destroy() end
end end
---DESYNC?
local function set_player_spawn() local function set_player_spawn()
if not global.locomotive_cargo then return end if not global.locomotive_cargo then return end
if not global.locomotive_cargo.valid then return end if not global.locomotive_cargo.valid then return end
local position = global.locomotive_cargo.surface.find_non_colliding_position("stone-furnace", global.locomotive_cargo.position, 16, 2) local position = global.locomotive_cargo.surface.find_non_colliding_position("stone-furnace", global.locomotive_cargo.position, 16, 2)
if not position then return end if not position then return end
game.forces.player.set_spawn_position(position, global.locomotive_cargo.surface) game.forces.player.set_spawn_position({x = position.x, y = position.y}, global.locomotive_cargo.surface)
end
local function set_player_spawn_and_refill_fish()
if not global.locomotive_cargo then return end
if not global.locomotive_cargo.valid then return end
global.locomotive_cargo.get_inventory(defines.inventory.cargo_wagon).insert({name = "raw-fish", count = 4000})
local position = global.locomotive_cargo.surface.find_non_colliding_position("stone-furnace", global.locomotive_cargo.position, 16, 2)
if not position then return end
game.forces.player.set_spawn_position({x = position.x, y = position.y}, global.locomotive_cargo.surface)
end end
local function tick() local function tick()
@@ -40,7 +50,9 @@ local function tick()
if game.tick % 30 == 0 then if game.tick % 30 == 0 then
accelerate() accelerate()
if game.tick % 1800 == 0 then set_player_spawn() end if game.tick % 900 == 0 then
set_player_spawn_and_refill_fish()
end
else else
remove_acceleration() remove_acceleration()
end end

View File

@@ -4,7 +4,9 @@ require "modules.biter_evasion_hp_increaser"
require "modules.wave_defense" require "modules.wave_defense"
--require "modules.dense_rocks" --require "modules.dense_rocks"
require "functions.soft_reset" require "functions.soft_reset"
--require "modules.dynamic_player_spawn"
require "modules.biters_yield_coins" require "modules.biters_yield_coins"
require "modules.no_deconstruction_of_neutral_entities"
require "modules.rocks_broken_paint_tiles" require "modules.rocks_broken_paint_tiles"
require "modules.rocks_heal_over_time" require "modules.rocks_heal_over_time"
require "modules.rocks_yield_ore_veins" require "modules.rocks_yield_ore_veins"
@@ -15,7 +17,7 @@ require "modules.rpg"
global.map_info = {} global.map_info = {}
global.map_info.main_caption = "Mountain Fortress" global.map_info.main_caption = "Mountain Fortress"
global.map_info.sub_caption = " ..diggy diggy choo.." global.map_info.sub_caption = " ..diggy diggy choo choo.."
global.map_info.text = [[ global.map_info.text = [[
The biters have catched the scent of fish in the cargo wagon. The biters have catched the scent of fish in the cargo wagon.
Guide the choo into the mountain and protect it as long as possible! Guide the choo into the mountain and protect it as long as possible!
@@ -32,6 +34,7 @@ require "maps.mountain_fortress_v2.treasure"
require "maps.mountain_fortress_v2.terrain" require "maps.mountain_fortress_v2.terrain"
require "maps.mountain_fortress_v2.locomotive" require "maps.mountain_fortress_v2.locomotive"
require "maps.mountain_fortress_v2.explosives" require "maps.mountain_fortress_v2.explosives"
require "maps.mountain_fortress_v2.flamethrower_nerf"
local starting_items = {['pistol'] = 1, ['firearm-magazine'] = 16, ['rail'] = 16, ['wood'] = 16} local starting_items = {['pistol'] = 1, ['firearm-magazine'] = 16, ['rail'] = 16, ['wood'] = 16}
@@ -40,7 +43,7 @@ local function get_gen_settings()
["seed"] = math.random(1, 1000000), ["seed"] = math.random(1, 1000000),
["water"] = 0.001, ["water"] = 0.001,
["starting_area"] = 1, ["starting_area"] = 1,
["cliff_settings"] = {cliff_elevation_interval = 8, cliff_elevation_0 = 8}, ["cliff_settings"] = {cliff_elevation_interval = 0, cliff_elevation_0 = 0},
["default_enable_all_autoplace_controls"] = true, ["default_enable_all_autoplace_controls"] = true,
["autoplace_settings"] = { ["autoplace_settings"] = {
["entity"] = {treat_missing_as_default = false}, ["entity"] = {treat_missing_as_default = false},

View File

@@ -45,6 +45,17 @@ local function process_rock_chunk_position(p, seed, tiles, entities, markets, tr
if math_random(1,96) == 1 then entities[#entities + 1] = {name = "crude-oil", position = p, amount = math.abs(p.y) * 250} end if math_random(1,96) == 1 then entities[#entities + 1] = {name = "crude-oil", position = p, amount = math.abs(p.y) * 250} end
return return
end end
if noise_cave_ponds < 0.08 and noise_cave_ponds > -0.08 then
if noise > 0.45 then
tiles[#tiles + 1] = {name = "out-of-map", position = p}
return
end
if noise < -0.45 then
tiles[#tiles + 1] = {name = "out-of-map", position = p}
return
end
end
tiles[#tiles + 1] = {name = "dirt-7", position = p} tiles[#tiles + 1] = {name = "dirt-7", position = p}
if math_random(1,3) > 1 then entities[#entities + 1] = {name = rock_raffle[math_random(1, #rock_raffle)], position = p} end if math_random(1,3) > 1 then entities[#entities + 1] = {name = rock_raffle[math_random(1, #rock_raffle)], position = p} end
if math_random(1,2048) == 1 then treasure[#treasure + 1] = p end if math_random(1,2048) == 1 then treasure[#treasure + 1] = p end
@@ -62,7 +73,7 @@ local function process_rock_chunk_position(p, seed, tiles, entities, markets, tr
end end
if math.abs(noise) > m * 5 then if math.abs(noise) > m * 5 then
tiles[#tiles + 1] = {name = "grass-2", position = p} tiles[#tiles + 1] = {name = "grass-2", position = p}
if math_random(1,128) == 1 then entities[#entities + 1] = {name=spawner_raffle[math_random(1, #spawner_raffle)], position=p} end --if math_random(1,128) == 1 then entities[#entities + 1] = {name=spawner_raffle[math_random(1, #spawner_raffle)], position=p} end
return return
end end
@@ -205,5 +216,5 @@ local function on_chunk_generated(event)
end end
local event = require 'utils.event' local event = require 'utils.event'
event.on_nth_tick(15, process_chunk_queue) event.on_nth_tick(1, process_chunk_queue)
event.add(defines.events.on_chunk_generated, on_chunk_generated) event.add(defines.events.on_chunk_generated, on_chunk_generated)

View File

@@ -47,11 +47,25 @@ local function set_biter_raffle(level)
end end
end end
local function is_unit_valid(biter)
if not biter.entity then return false end
if not biter.entity.valid then return false end
if not biter.entity.unit_group then return false end
if biter.spawn_tick + global.wave_defense.max_biter_age < game.tick then return false end
return true
end
local function time_out_biters() local function time_out_biters()
for k, biter in pairs(global.wave_defense.active_biters) do for k, biter in pairs(global.wave_defense.active_biters) do
if biter.spawn_tick + global.wave_defense.max_biter_age < game.tick then if not is_unit_valid(biter) then
global.wave_defense.threat = global.wave_defense.threat + threat_values[biter.entity.name] global.wave_defense.active_biter_count = global.wave_defense.active_biter_count - 1
biter.entity.destroy() if biter.entity then
if biter.entity.valid then
global.wave_defense.threat = global.wave_defense.threat + threat_values[biter.entity.name]
if global.wave_defense.debug then game.print("WaveDefense>> Unit Number " .. k .. " has timed out.") end
biter.entity.destroy()
end
end
global.wave_defense.active_biters[k] = nil global.wave_defense.active_biters[k] = nil
end end
end end
@@ -132,17 +146,58 @@ local function spawn_unit_group()
return true return true
end end
local function spawn_wave() local function set_unit_group_count()
c = 0
for k, g in pairs(global.wave_defense.unit_groups) do
if g.valid then
c = c + 1
else
global.wave_defense.unit_groups[k] = nil
end
end
global.wave_defense.active_unit_group_count = c
end
local function spawn_attack_groups()
if global.wave_defense.active_biter_count >= global.wave_defense.max_active_biters then return false end if global.wave_defense.active_biter_count >= global.wave_defense.max_active_biters then return false end
set_enemy_evolution()
set_biter_raffle(global.wave_defense.wave_number)
for a = 1, global.wave_defense.max_active_unit_groups - global.wave_defense.active_unit_group_count, 1 do
if not spawn_unit_group() then break end
end
end
local function set_next_wave()
global.wave_defense.wave_number = global.wave_defense.wave_number + 1 global.wave_defense.wave_number = global.wave_defense.wave_number + 1
global.wave_defense.group_size = global.wave_defense.wave_number * 2 global.wave_defense.group_size = global.wave_defense.wave_number * 2
if global.wave_defense.group_size > global.wave_defense.max_group_size then global.wave_defense.group_size = global.wave_defense.max_group_size end if global.wave_defense.group_size > global.wave_defense.max_group_size then global.wave_defense.group_size = global.wave_defense.max_group_size end
global.wave_defense.threat = global.wave_defense.threat + global.wave_defense.wave_number * 3 global.wave_defense.threat = global.wave_defense.threat + global.wave_defense.wave_number * 3
set_enemy_evolution() global.wave_defense.last_wave = global.wave_defense.next_wave
set_biter_raffle(global.wave_defense.wave_number) global.wave_defense.next_wave = game.tick + global.wave_defense.wave_interval
for a = 1, 16, 1 do end
if not spawn_unit_group() then break end
end local function command_unit_group(group)
if not global.wave_defense.unit_group_last_command[group.group_number] then global.wave_defense.unit_group_last_command[group.group_number] = game.tick - (global.wave_defense.unit_group_command_delay + 1) end
if global.wave_defense.unit_group_last_command[group.group_number] + global.wave_defense.unit_group_command_delay > game.tick then return end
global.wave_defense.unit_group_last_command[group.group_number] = game.tick
group.set_command({
type = defines.command.compound,
structure_type = defines.compound_command.return_last,
commands = {
{
type = defines.command.attack_area,
destination = global.wave_defense.target.position,
radius = 16,
distraction = defines.distraction.by_enemy
},
{
type = defines.command.attack,
target = global.wave_defense.target,
distraction = defines.distraction.by_enemy
}
}
})
end end
local function give_commands_to_unit_groups() local function give_commands_to_unit_groups()
@@ -151,23 +206,7 @@ local function give_commands_to_unit_groups()
if not global.wave_defense.target.valid then return end if not global.wave_defense.target.valid then return end
for k, group in pairs(global.wave_defense.unit_groups) do for k, group in pairs(global.wave_defense.unit_groups) do
if group.valid then if group.valid then
group.set_command({ command_unit_group(group)
type = defines.command.compound,
structure_type = defines.compound_command.return_last,
commands = {
{
type = defines.command.attack_area,
destination = global.wave_defense.target.position,
radius = 16,
distraction = defines.distraction.by_enemy
},
{
type = defines.command.attack,
target = global.wave_defense.target,
distraction = defines.distraction.by_enemy
}
}
})
else else
global.wave_defense.unit_groups[k] = nil global.wave_defense.unit_groups[k] = nil
end end
@@ -180,7 +219,7 @@ local function create_gui(player)
local label = frame.add({ type = "label", caption = " ", name = "label"}) local label = frame.add({ type = "label", caption = " ", name = "label"})
label.style.font_color = {r=0.88, g=0.88, b=0.88} label.style.font_color = {r=0.88, g=0.88, b=0.88}
label.style.font = "default-listbox" label.style.font = "default-bold"
label.style.left_padding = 4 label.style.left_padding = 4
label.style.right_padding = 4 label.style.right_padding = 4
label.style.minimal_width = 68 label.style.minimal_width = 68
@@ -190,6 +229,18 @@ local function create_gui(player)
progressbar.style.minimal_width = 128 progressbar.style.minimal_width = 128
progressbar.style.maximal_width = 128 progressbar.style.maximal_width = 128
progressbar.style.top_padding = 10 progressbar.style.top_padding = 10
local line = frame.add({type = "line", direction = "vertical"})
line.style.left_padding = 4
line.style.right_padding = 4
local label = frame.add({ type = "label", caption = " ", name = "threat"})
label.style.font_color = {r=0.88, g=0.88, b=0.88}
label.style.font = "default-bold"
label.style.left_padding = 4
label.style.right_padding = 4
label.style.minimal_width = 10
label.style.font_color = {r=0.99, g=0.0, b=0.5}
end end
local function update_gui(player) local function update_gui(player)
@@ -198,6 +249,7 @@ local function update_gui(player)
if global.wave_defense.wave_number == 0 then player.gui.top.wave_defense.label.caption = "First wave in " .. math.floor((global.wave_defense.next_wave - game.tick) / 60) + 1 end if global.wave_defense.wave_number == 0 then player.gui.top.wave_defense.label.caption = "First wave in " .. math.floor((global.wave_defense.next_wave - game.tick) / 60) + 1 end
local interval = global.wave_defense.next_wave - global.wave_defense.last_wave local interval = global.wave_defense.next_wave - global.wave_defense.last_wave
player.gui.top.wave_defense.progressbar.value = 1 - (global.wave_defense.next_wave - game.tick) / interval player.gui.top.wave_defense.progressbar.value = 1 - (global.wave_defense.next_wave - game.tick) / interval
player.gui.top.wave_defense.threat.caption = "Threat: " .. global.wave_defense.threat
end end
local function on_entity_died(event) local function on_entity_died(event)
@@ -213,33 +265,32 @@ local function on_tick()
for _, player in pairs(game.connected_players) do update_gui(player) end for _, player in pairs(game.connected_players) do update_gui(player) end
if game.tick < global.wave_defense.next_wave then return end if game.tick > global.wave_defense.next_wave then set_next_wave() end
if global.wave_defense.active_biter_count < global.wave_defense.max_active_biters then if game.tick % 180 == 0 then
global.wave_defense.last_wave = global.wave_defense.next_wave if game.tick % 1800 == 0 then
global.wave_defense.next_wave = game.tick + global.wave_defense.wave_interval time_out_biters()
time_out_biters() end
set_target() set_target()
spawn_wave() spawn_attack_groups()
set_unit_group_count()
give_commands_to_unit_groups() give_commands_to_unit_groups()
return end
end
if game.tick % 3600 == 0 then
time_out_biters()
set_target()
give_commands_to_unit_groups()
end
end end
function reset_wave_defense() function reset_wave_defense()
global.wave_defense = { global.wave_defense = {
debug = false,
surface = game.surfaces["nauvis"], surface = game.surfaces["nauvis"],
active_biters = {}, active_biters = {},
unit_groups = {}, unit_groups = {},
unit_group_last_command = {},
unit_group_command_delay = 3600 * 5,
max_active_unit_groups = 4,
max_active_biters = 1024, max_active_biters = 1024,
max_group_size = 256, max_group_size = 256,
max_biter_age = 3600 * 30, max_biter_age = 3600 * 30,
active_unit_group_count = 0,
active_biter_count = 0, active_biter_count = 0,
spawn_position = {x = 0, y = 48}, spawn_position = {x = 0, y = 48},
last_wave = game.tick, last_wave = game.tick,

View File

@@ -0,0 +1,8 @@
local price_list = {
["grenade"] = 10,
}
local rarity_list = {
["grenade"] = 2,
}