mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2024-12-30 23:17:53 +02:00
105 lines
3.1 KiB
Lua
105 lines
3.1 KiB
Lua
--extra difficulty mode with beyond 100% evolution modifiers
|
|
|
|
require 'modules.biter_evasion_hp_increaser'
|
|
|
|
local Event = require 'utils.event'
|
|
local simplex_noise = require 'utils.simplex_noise'.d2
|
|
local gui_refreshrate = 900
|
|
|
|
local evo_gains = {
|
|
['unit-spawner'] = 0.0025,
|
|
['unit'] = 0.000025,
|
|
['turret'] = 0.001
|
|
}
|
|
|
|
local function draw_evolution_gui()
|
|
local seed = game.surfaces[1].map_gen_settings.seed
|
|
local color_r = math.abs(simplex_noise(global.color_counter * 0.015, 0, seed)) + 0.2
|
|
if color_r > 1 then
|
|
color_r = 1
|
|
end
|
|
local color_g = math.abs(simplex_noise(global.color_counter * 0.015, 10000, seed)) + 0.2
|
|
if color_g > 1 then
|
|
color_g = 1
|
|
end
|
|
local color_b = math.abs(simplex_noise(global.color_counter * 0.015, 20000, seed)) + 0.2
|
|
if color_b > 1 then
|
|
color_b = 1
|
|
end
|
|
|
|
for _, player in pairs(game.connected_players) do
|
|
if player.gui.top.evolution_gui then
|
|
player.gui.top.evolution_gui.destroy()
|
|
end
|
|
local element =
|
|
player.gui.top.add(
|
|
{
|
|
type = 'sprite-button',
|
|
name = 'evolution_gui',
|
|
caption = 'Evolution: ' .. math.round(global.evolution_factor, 4) * 100 .. '%',
|
|
tooltip = 'Can go beyond 100%, increasing biter strength even further.'
|
|
}
|
|
)
|
|
local style = element.style
|
|
style.minimal_height = 38
|
|
style.maximal_height = 38
|
|
style.minimal_width = 176
|
|
style.top_padding = 2
|
|
style.left_padding = 4
|
|
style.right_padding = 4
|
|
style.bottom_padding = 2
|
|
style.font_color = {r = color_r, g = color_g, b = color_b}
|
|
style.font = 'default-large-bold'
|
|
end
|
|
end
|
|
|
|
local function set_endgame_stats()
|
|
if global.evolution_factor < 1 then
|
|
return
|
|
end
|
|
game.forces.enemy.set_ammo_damage_modifier('melee', (global.evolution_factor - 1) * 1.5)
|
|
game.forces.enemy.set_ammo_damage_modifier('biological', (global.evolution_factor - 1) * 1.5)
|
|
global.biter_evasion_health_increase_factor = global.evolution_factor * 3
|
|
end
|
|
|
|
local function add_evolution(amount)
|
|
global.evolution_factor = global.evolution_factor + amount
|
|
local evo = global.evolution_factor
|
|
if evo > 1 then
|
|
evo = 1
|
|
end
|
|
game.forces.enemy.evolution_factor = evo
|
|
end
|
|
|
|
local function on_entity_died(event)
|
|
if not event.entity.valid then
|
|
return
|
|
end
|
|
|
|
if event.entity.force.name == 'enemy' then
|
|
add_evolution(evo_gains[event.entity.type])
|
|
draw_evolution_gui()
|
|
global.color_counter = global.color_counter + 1
|
|
return
|
|
end
|
|
end
|
|
|
|
local function tick()
|
|
add_evolution(global.tick_gain)
|
|
set_endgame_stats()
|
|
draw_evolution_gui()
|
|
global.color_counter = global.color_counter + 1
|
|
end
|
|
|
|
local function on_init()
|
|
global.evolution_factor = 0
|
|
global.color_counter = 0
|
|
|
|
local ticks_to_max_evo = 12 * 60 * 60 * 60
|
|
global.tick_gain = math.round((1 / ticks_to_max_evo) * gui_refreshrate, 8)
|
|
end
|
|
|
|
Event.add(defines.events.on_entity_died, on_entity_died)
|
|
Event.on_nth_tick(gui_refreshrate, tick)
|
|
Event.on_init(on_init)
|