1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-22 03:38:48 +02:00

Biter Battles updates

This commit is contained in:
MewMew 2018-11-10 04:57:26 +01:00
parent d92c786aab
commit 03edb9130c
5 changed files with 158 additions and 278 deletions

View File

@ -8,17 +8,17 @@ require "player_list"
require "poll"
require "score"
--require "maps.tools.cheat_mode"
require "maps.tools.cheat_mode"
---- enable maps here ----
--require "maps.biter_battles"
require "maps.biter_battles"
--require "maps.cave_miner"
--require "maps.deep_jungle"
--require "maps.lost_desert"
--require "maps.labyrinth"
--require "maps.spaghettorio"
--require "maps.spiral_troopers"
require "maps.fish_defender"
--require "maps.fish_defender"
--require "maps.empty_map"
-----------------------------

View File

@ -1,12 +1,47 @@
-- Factorio Biter Battles -- mewmew made this --
--[[
To do(maybe):
flamethrower things
]]--
-- Biter Battles -- mewmew made this --
require 'biter_battles_terrain'
local Event = require 'utils.event'
local event = require 'utils.event'
local math_random = math.random
local food_names = {
["science-pack-1"] = "red science",
["science-pack-2"] = "green science",
["military-science-pack"] = "military science",
["science-pack-3"] = "blue science",
["production-science-pack"] = "production science",
["high-tech-science-pack"] = "high tech science",
["space-science-pack"] = "space science"
}
local food_values = {
["science-pack-1"] = 0.00000100,
["science-pack-2"] = 0.00000292,
["military-science-pack"] = 0.00001950,
["science-pack-3"] = 0.00003792,
["production-science-pack"] = 0.00008000,
["high-tech-science-pack"] = 0.00021000,
["space-science-pack"] = 0.00042000
}
local biter_fragmentation = {
["medium-biter"] = {"small-biter", 3, 5},
["big-biter"] = {"medium-biter", 2, 2},
["behemoth-biter"] = {"big-biter", 2, 2}
}
local biter_building_inhabitants = {
[1] = {{"small-biter",8,16}},
[2] = {{"small-biter",12,24}},
[3] = {{"small-biter",8,16},{"medium-biter",1,2}},
[4] = {{"small-biter",4,8},{"medium-biter",4,8}},
[5] = {{"small-biter",3,5},{"medium-biter",8,12}},
[6] = {{"small-biter",3,5},{"medium-biter",5,7},{"big-biter",1,2}},
[7] = {{"medium-biter",6,8},{"big-biter",3,5}},
[8] = {{"medium-biter",2,4},{"big-biter",6,8}},
[9] = {{"medium-biter",2,3},{"big-biter",7,9}},
[10] = {{"big-biter",4,8},{"behemoth-biter",3,4}}
}
local function get_border_cords(f)
local a = {{-1000,-1000},{1000,-10}}
@ -44,13 +79,13 @@ end
local function create_biter_battle_menu(player)
if global.rocket_silo_destroyed then
local frame = player.gui.left.add { type = "frame", name = "victory_popup", direction = "vertical" }
local c = frame.add { type = "label", caption = global.rocket_silo_destroyed , single_line = false, name = "victory_caption" }
c.style.font = "default-frame"
c.style.font_color = { r=0.98, g=0.66, b=0.22}
c.style.top_padding = 10
c.style.left_padding = 20
c.style.right_padding = 20
c.style.bottom_padding = 10
local l = frame.add { type = "label", caption = global.rocket_silo_destroyed , single_line = false, name = "victory_caption" }
l.style.font = "default-frame"
l.style.font_color = { r=0.98, g=0.66, b=0.22}
l.style.top_padding = 10
l.style.left_padding = 20
l.style.right_padding = 20
l.style.bottom_padding = 10
return
end
@ -383,21 +418,7 @@ local function on_player_joined_game(event)
global.biter_rage = {}
global.biter_rage["north"] = 0
global.biter_rage["south"] = 0
global.biter_fragmentation = {}
global.biter_fragmentation[1] = {"medium-biter","small-biter",3,5}
global.biter_fragmentation[2] = {"big-biter","medium-biter",2,2}
global.biter_fragmentation[3] = {"behemoth-biter","big-biter",2,2}
global.biter_building_inhabitants = {}
global.biter_building_inhabitants[1] = {{"small-biter",8,16}}
global.biter_building_inhabitants[2] = {{"small-biter",12,24}}
global.biter_building_inhabitants[3] = {{"small-biter",8,16},{"medium-biter",1,2}}
global.biter_building_inhabitants[4] = {{"small-biter",4,8},{"medium-biter",4,8}}
global.biter_building_inhabitants[5] = {{"small-biter",3,5},{"medium-biter",8,12}}
global.biter_building_inhabitants[6] = {{"small-biter",3,5},{"medium-biter",5,7},{"big-biter",1,2}}
global.biter_building_inhabitants[7] = {{"medium-biter",6,8},{"big-biter",3,5}}
global.biter_building_inhabitants[8] = {{"medium-biter",2,4},{"big-biter",6,8}}
global.biter_building_inhabitants[9] = {{"medium-biter",2,3},{"big-biter",7,9}}
global.biter_building_inhabitants[10] = {{"big-biter",4,8},{"behemoth-biter",3,4}}
--global.biter_buildings_fragmentation[5] = {"small-worm-turret","small-spitter",2,3}
--global.biter_buildings_fragmentation[6] = {"medium-worm-turret","medium-spitter",2,3}
@ -410,23 +431,7 @@ local function on_player_joined_game(event)
game.forces["north"].set_ammo_damage_modifier("shotgun-shell", 0.5)
game.forces["south"].set_ammo_damage_modifier("shotgun-shell", 0.5)
global.food_names = {}
global.food_names["science-pack-1"] = "red science"
global.food_names["science-pack-2"] = "green science"
global.food_names["military-science-pack"] = "military science"
global.food_names["science-pack-3"] = "blue science"
global.food_names["production-science-pack"] = "production science"
global.food_names["high-tech-science-pack"] = "high tech science"
global.food_names["space-science-pack"] = "space science"
global.food_values = {}
global.food_values["science-pack-1"] = 0.00000100
global.food_values["science-pack-2"] = 0.00000292
global.food_values["military-science-pack"] = 0.00001950
global.food_values["science-pack-3"] = 0.00003792
global.food_values["production-science-pack"] = 0.00008000
global.food_values["high-tech-science-pack"] = 0.00021000
global.food_values["space-science-pack"] = 0.00042000
global.spy_fish_timeout = {}
@ -516,7 +521,7 @@ local function feed_the_biters(food_type,player)
end
if food_amount == 0 then
local str = "You have no " .. global.food_names[food_type]
local str = "You have no " .. food_names[food_type]
str = str .. " flask in your inventory."
player.print(str,{ r=0.98, g=0.66, b=0.22})
else
@ -524,7 +529,7 @@ local function feed_the_biters(food_type,player)
local str = player.name .. " fed "
str = str .. food_amount
str = str .. " flasks of "
str = str .. global.food_names[food_type]
str = str .. food_names[food_type]
str = str .. " juice to team "
str = str .. enemy_team
str = str .. "´s biters!"
@ -535,7 +540,7 @@ local function feed_the_biters(food_type,player)
str = str .. " flask"
if food_amount > 1 then str = str .. "s" end
str = str .. " of "
str = str .. global.food_names[food_type]
str = str .. food_names[food_type]
str = str .. " juice to the enemy team´s biters."
player.print(str, { r=0.98, g=0.66, b=0.22})
end
@ -544,11 +549,11 @@ local function feed_the_biters(food_type,player)
local nerf_gain = 0
local rage_gain = 0
if food_amount > 0 then
nerf_gain = global.food_values[food_type] * food_amount
nerf_gain = food_values[food_type] * food_amount
--change these two numbers to your liking nerf and rage
local nerf_multiplier = 1
local rage_food_value = global.food_values[food_type] * 12500000 --10000000
local rage_food_value = food_values[food_type] * 12500000 --10000000
--biter rage calculation
for x = 0, food_amount, 1 do
local rage_diminish_multiplier = 1/(((global.biter_rage[enemy_team]^2.9)+8000)/500)
@ -662,6 +667,22 @@ local function on_gui_click(event)
end
end
local function damage_entities_in_radius(position, radius, damage)
local entities_to_damage = game.surfaces["surface"].find_entities_filtered({area = {{position.x - radius, position.y - radius},{position.x + radius, position.y + radius}}})
for _, entity in pairs(entities_to_damage) do
if entity.health then
if entity.force.name ~= "enemy" then
if entity.name == "player" then
entity.damage(damage, "enemy")
else
entity.health = entity.health - damage
if entity.health <= 0 then entity.die("enemy") end
end
end
end
end
end
local function on_entity_died(event)
if not global.rocket_silo_destroyed then
if event.entity == global.rocket_silo["south"] or event.entity == global.rocket_silo["north"] then
@ -672,32 +693,41 @@ local function on_entity_died(event)
refresh_gui()
end
end
if event.entity.name == "medium-biter" then
local conveyor = game.surfaces["surface"].find_entities_filtered{area={{event.entity.position.x-1,event.entity.position.y-1},{event.entity.position.x+1,event.entity.position.y+1}}, name={"transport-belt", "fast-transport-belt", "express-transport-belt"}, limit=1}
if conveyor[1] then
conveyor[1].health = conveyor[1].health - 57
if conveyor[1].health <= 0 then conveyor[1].die("enemy") end
if biter_fragmentation[event.entity.name] then
for x = 1, math_random(biter_fragmentation[event.entity.name][2], biter_fragmentation[event.entity.name][3]), 1 do
local p = game.surfaces["surface"].find_non_colliding_position(biter_fragmentation[event.entity.name][1] , event.entity.position, 2, 1)
if p then game.surfaces["surface"].create_entity {name = biter_fragmentation[event.entity.name][1], position = p} end
end
end
for _, fragment in pairs(global.biter_fragmentation) do
if event.entity.name == fragment[1] then
for x=1,math.random(fragment[3],fragment[4]),1 do
local p = game.surfaces["surface"].find_non_colliding_position(fragment[2] , event.entity.position, 2, 1)
if p then game.surfaces["surface"].create_entity {name=fragment[2], position=p} end
p = nil
end
return
end
end
end
if event.entity.name == "biter-spawner" or event.entity.name == "spitter-spawner" then
local e = math.ceil(game.forces.enemy.evolution_factor*10, 0)
for _, t in pairs (global.biter_building_inhabitants[e]) do
for x = 1, math.random(t[2],t[3]), 1 do
for _, t in pairs (biter_building_inhabitants[e]) do
for x = 1, math_random(t[2],t[3]), 1 do
local p = game.surfaces["surface"].find_non_colliding_position(t[1] , event.entity.position, 6, 1)
if p then game.surfaces["surface"].create_entity {name=t[1], position=p} end
end
end
return
end
if event.entity.name == "medium-biter" then
event.entity.surface.create_entity({name = "explosion", position = event.entity.position})
local damage = 25
damage_entities_in_radius(event.entity.position, 1, damage)
end
if event.entity.name == "big-biter" then
event.entity.surface.create_entity({name = "uranium-cannon-shell-explosion", position = event.entity.position})
local damage = 35
damage_entities_in_radius(event.entity.position, 2, damage)
end
if event.entity.name == "behemoth-biter" then
event.entity.surface.create_entity({name = "uranium-cannon-shell-explosion", position = event.entity.position})
local damage = 45
damage_entities_in_radius(event.entity.position, 3, damage)
end
end
@ -755,7 +785,7 @@ local function biter_attack_silo(team, requested_amount, mode)
if not mode then
local modes = {"spread", "ball", "line"}
mode = modes[math.random(1,3)]
mode = modes[math_random(1,3)]
end
if mode == "spread" then
@ -774,7 +804,7 @@ local function biter_attack_silo(team, requested_amount, mode)
biters_selected_for_attack[x] = valid_biters[y]
end
if math.random(1,3) == 1 then
if math_random(1,3) == 1 then
for _, biter in pairs(biters_selected_for_attack) do
biter.set_command({type=defines.command.attack_area, destination=global.biter_attack_main_target[team], radius=12, distraction=defines.distraction.by_anything})
end
@ -798,8 +828,8 @@ local function biter_attack_silo(team, requested_amount, mode)
local array_start = 1
local f = math.floor(#valid_biters/requested_amount,0)
if f >= 2 then
array_start = requested_amount * math.random(1,f-1)
if math.random(1,f) == 1 then array_start = 1 end
array_start = requested_amount * math_random(1,f-1)
if math_random(1,f) == 1 then array_start = 1 end
end
local x = 0
for y = array_start,#valid_biters,1 do
@ -809,7 +839,7 @@ local function biter_attack_silo(team, requested_amount, mode)
biters_selected_for_attack[x] = valid_biters[y]
end
if math.random(1,3) == 1 then
if math_random(1,3) == 1 then
for _, biter in pairs(biters_selected_for_attack) do
biter.set_command({type=defines.command.attack_area, destination=global.biter_attack_main_target[team], radius=12, distraction=defines.distraction.by_anything})
end
@ -835,7 +865,7 @@ local function biter_attack_silo(team, requested_amount, mode)
local additional_checks = additional_empty_space_checks
local gathering_point_x = 0
local gathering_point_y = 0
local r = math.random(1,3) --pick a random side
local r = math_random(1,3) --pick a random side
if r == 1 or r == 2 then
--- determine base height
for pos_y = 0, 8192*y_modifier, 32*y_modifier do
@ -857,15 +887,15 @@ local function biter_attack_silo(team, requested_amount, mode)
if height ~= 0 then
if y_modifier == -1 then
gathering_point_y = math.random(height, -32)
gathering_point_y = math_random(height, -32)
else
gathering_point_y = math.random(32, height)
gathering_point_y = math_random(32, height)
end
else
if y_modifier == -1 then
gathering_point_y = math.random(-128, -32)
gathering_point_y = math_random(-128, -32)
else
gathering_point_y = math.random(32, 128)
gathering_point_y = math_random(32, 128)
end
end
@ -947,9 +977,9 @@ local function biter_attack_silo(team, requested_amount, mode)
end
if width_west ~= 0 and width_east ~= 0 then
gathering_point_x = math.random(width_west, width_east)
gathering_point_x = math_random(width_west, width_east)
else
gathering_point_x = math.random(-64,64)
gathering_point_x = math_random(-64,64)
end
additional_empty_space_checks = 32
@ -985,7 +1015,7 @@ local function biter_attack_silo(team, requested_amount, mode)
--alternate attack if there is water
local t = surface.count_tiles_filtered{area={{gathering_point_x - 8, gathering_point_y - 8}, {gathering_point_x + 8, gathering_point_y + 8}}, name={"deepwater","water", "water-green"}}
if t > 8 then
if math.random(1,2) == 1 then
if math_random(1,2) == 1 then
for _, biter in pairs(biters_selected_for_attack) do
biter.set_command({type=defines.command.attack_area, destination=global.biter_attack_main_target[team], radius=12, distraction=defines.distraction.by_enemy})
end
@ -1288,32 +1318,17 @@ local function on_player_died(event)
end
end
function test()
local x = 0
if x == 1 then
game.player.cheat_mode=true
game.speed = 1.5
game.player.force.research_all_technologies()
game.forces["enemy"].evolution_factor = 0.2
local chart = 600
local surface = game.surfaces["surface"]
game.forces["north"].chart(surface, {lefttop = {x = chart*-1, y = chart*-1}, rightbottom = {x = chart, y = chart}})
game.forces["player"].chart(surface, {lefttop = {x = chart*-1, y = chart*-1}, rightbottom = {x = chart, y = chart}})
game.forces["south"].chart(surface, {lefttop = {x = chart*-1, y = chart*-1}, rightbottom = {x = chart, y = chart}})
end
end
Event.add(defines.events.on_player_died, on_player_died)
Event.add(defines.events.on_built_entity, on_built_entity)
Event.add(defines.events.on_player_built_tile, on_player_built_tile)
Event.add(defines.events.on_rocket_launched, on_rocket_launched)
Event.add(defines.events.on_marked_for_deconstruction, on_marked_for_deconstruction)
Event.add(defines.events.on_robot_built_entity, on_robot_built_entity)
Event.add(defines.events.on_entity_damaged, on_entity_damaged)
Event.add(defines.events.on_player_left_game, on_player_left_game)
Event.add(defines.events.on_entity_died, on_entity_died)
Event.add(defines.events.on_tick, on_tick)
Event.add(defines.events.on_player_created, on_player_created)
Event.add(defines.events.on_player_joined_game, on_player_joined_game)
Event.add(defines.events.on_gui_click, on_gui_click)
Event.add(defines.events.on_console_chat, on_console_chat)
event.add(defines.events.on_player_died, on_player_died)
event.add(defines.events.on_built_entity, on_built_entity)
event.add(defines.events.on_player_built_tile, on_player_built_tile)
event.add(defines.events.on_rocket_launched, on_rocket_launched)
event.add(defines.events.on_marked_for_deconstruction, on_marked_for_deconstruction)
event.add(defines.events.on_robot_built_entity, on_robot_built_entity)
event.add(defines.events.on_entity_damaged, on_entity_damaged)
event.add(defines.events.on_player_left_game, on_player_left_game)
event.add(defines.events.on_entity_died, on_entity_died)
event.add(defines.events.on_tick, on_tick)
event.add(defines.events.on_player_created, on_player_created)
event.add(defines.events.on_player_joined_game, on_player_joined_game)
event.add(defines.events.on_gui_click, on_gui_click)
event.add(defines.events.on_console_chat, on_console_chat)

View File

@ -1,3 +1,7 @@
0.31
map generation fixes
medium, big and behemoth biters now explode with a visual effect
0.30
join team message fixed
map gen settings are now script internal, no need to set them in menu

View File

@ -8,7 +8,9 @@ local function on_chunk_generated(event)
if not game.surfaces["surface"] then return end
local surface = game.surfaces["surface"]
local surface = game.surfaces["surface"]
if event.surface.name ~= surface.name then return end
local ore_amount = 2500
local ores = {"copper-ore", "iron-ore", "stone", "coal"}
local noise = {}

View File

@ -3,7 +3,6 @@
local event = require 'utils.event'
require "maps.fish_defender_map_intro"
require "maps.fish_defender_kaboomsticks"
--require "maps.tools.teleporters"
local market_items = require "maps.fish_defender_market_items"
local map_functions = require "maps.tools.map_functions"
local math_random = math.random
@ -19,152 +18,6 @@ local function shuffle(tbl)
return tbl
end
local function spill_loot(position)
local chest_raffle = {}
local chest_loot = {
{{name = "slowdown-capsule", count = math_random(4,8)}, weight = 1, evolution_min = 0.3, evolution_max = 0.7},
{{name = "poison-capsule", count = math_random(4,8)}, weight = 3, evolution_min = 0.3, evolution_max = 1},
{{name = "uranium-cannon-shell", count = math_random(8,16)}, weight = 5, evolution_min = 0.6, evolution_max = 1},
{{name = "cannon-shell", count = math_random(8,16)}, weight = 5, evolution_min = 0.4, evolution_max = 0.7},
{{name = "explosive-uranium-cannon-shell", count = math_random(8,16)}, weight = 5, evolution_min = 0.6, evolution_max = 1},
{{name = "explosive-cannon-shell", count = math_random(8,16)}, weight = 5, evolution_min = 0.4, evolution_max = 0.8},
{{name = "shotgun", count = 1}, weight = 2, evolution_min = 0.0, evolution_max = 0.2},
{{name = "shotgun-shell", count = math_random(16,32)}, weight = 5, evolution_min = 0.0, evolution_max = 0.2},
{{name = "combat-shotgun", count = 1}, weight = 3, evolution_min = 0.3, evolution_max = 0.8},
{{name = "piercing-shotgun-shell", count = math_random(16,32)}, weight = 10, evolution_min = 0.2, evolution_max = 1},
{{name = "flamethrower", count = 1}, weight = 3, evolution_min = 0.3, evolution_max = 0.6},
{{name = "flamethrower-ammo", count = math_random(8,16)}, weight = 5, evolution_min = 0.3, evolution_max = 1},
{{name = "rocket-launcher", count = 1}, weight = 3, evolution_min = 0.2, evolution_max = 0.6},
{{name = "rocket", count = math_random(8,16)}, weight = 5, evolution_min = 0.2, evolution_max = 0.7},
{{name = "explosive-rocket", count = math_random(8,16)}, weight = 5, evolution_min = 0.3, evolution_max = 1},
{{name = "land-mine", count = math_random(8,16)}, weight = 5, evolution_min = 0.2, evolution_max = 0.7},
{{name = "grenade", count = math_random(8,16)}, weight = 5, evolution_min = 0.0, evolution_max = 0.5},
{{name = "cluster-grenade", count = math_random(8,16)}, weight = 5, evolution_min = 0.4, evolution_max = 1},
{{name = "firearm-magazine", count = math_random(16,48)}, weight = 5, evolution_min = 0, evolution_max = 0.3},
{{name = "piercing-rounds-magazine", count = math_random(16,48)}, weight = 5, evolution_min = 0.1, evolution_max = 0.8},
{{name = "uranium-rounds-magazine", count = math_random(16,48)}, weight = 5, evolution_min = 0.5, evolution_max = 1},
{{name = "railgun", count = 1}, weight = 1, evolution_min = 0.2, evolution_max = 1},
{{name = "railgun-dart", count = math_random(16,32)}, weight = 3, evolution_min = 0.2, evolution_max = 0.7},
{{name = "defender-capsule", count = math_random(8,16)}, weight = 2, evolution_min = 0.0, evolution_max = 0.7},
{{name = "distractor-capsule", count = math_random(8,16)}, weight = 2, evolution_min = 0.2, evolution_max = 1},
{{name = "destroyer-capsule", count = math_random(8,16)}, weight = 2, evolution_min = 0.3, evolution_max = 1},
--{{name = "atomic-bomb", count = 1}, weight = 1, evolution_min = 0.3, evolution_max = 1},
{{name = "light-armor", count = 1}, weight = 3, evolution_min = 0, evolution_max = 0.1},
{{name = "heavy-armor", count = 1}, weight = 3, evolution_min = 0.1, evolution_max = 0.3},
{{name = "modular-armor", count = 1}, weight = 2, evolution_min = 0.2, evolution_max = 0.6},
{{name = "power-armor", count = 1}, weight = 2, evolution_min = 0.4, evolution_max = 1},
--{{name = "power-armor-mk2", count = 1}, weight = 1, evolution_min = 0.9, evolution_max = 1},
{{name = "battery-equipment", count = 1}, weight = 2, evolution_min = 0.3, evolution_max = 0.7},
{{name = "battery-mk2-equipment", count = 1}, weight = 2, evolution_min = 0.6, evolution_max = 1},
{{name = "belt-immunity-equipment", count = 1}, weight = 1, evolution_min = 0.3, evolution_max = 1},
{{name = "solar-panel-equipment", count = math_random(1,4)}, weight = 5, evolution_min = 0.3, evolution_max = 0.8},
{{name = "discharge-defense-equipment", count = 1}, weight = 1, evolution_min = 0.5, evolution_max = 0.8},
{{name = "energy-shield-equipment", count = math_random(1,2)}, weight = 2, evolution_min = 0.3, evolution_max = 0.8},
{{name = "energy-shield-mk2-equipment", count = 1}, weight = 2, evolution_min = 0.7, evolution_max = 1},
{{name = "exoskeleton-equipment", count = 1}, weight = 1, evolution_min = 0.3, evolution_max = 1},
{{name = "fusion-reactor-equipment", count = 1}, weight = 1, evolution_min = 0.5, evolution_max = 1},
{{name = "night-vision-equipment", count = 1}, weight = 1, evolution_min = 0.3, evolution_max = 0.8},
{{name = "personal-laser-defense-equipment", count = 1}, weight = 2, evolution_min = 0.5, evolution_max = 1},
{{name = "exoskeleton-equipment", count = 1}, weight = 1, evolution_min = 0.3, evolution_max = 1},
{{name = "iron-gear-wheel", count = math_random(25,50)}, weight = 3, evolution_min = 0.0, evolution_max = 0.3},
{{name = "copper-cable", count = math_random(50,100)}, weight = 3, evolution_min = 0.0, evolution_max = 0.3},
{{name = "engine-unit", count = math_random(8,16)}, weight = 2, evolution_min = 0.1, evolution_max = 0.5},
{{name = "electric-engine-unit", count = math_random(8,16)}, weight = 2, evolution_min = 0.4, evolution_max = 0.8},
{{name = "battery", count = math_random(25,50)}, weight = 2, evolution_min = 0.3, evolution_max = 0.8},
{{name = "advanced-circuit", count = math_random(25,50)}, weight = 3, evolution_min = 0.4, evolution_max = 1},
{{name = "electronic-circuit", count = math_random(25,50)}, weight = 3, evolution_min = 0.0, evolution_max = 0.4},
{{name = "processing-unit", count = math_random(25,50)}, weight = 3, evolution_min = 0.7, evolution_max = 1},
{{name = "explosives", count = math_random(40,50)}, weight = 5, evolution_min = 0.0, evolution_max = 1},
{{name = "lubricant-barrel", count = math_random(4,10)}, weight = 1, evolution_min = 0.3, evolution_max = 0.5},
{{name = "rocket-fuel", count = math_random(4,10)}, weight = 2, evolution_min = 0.3, evolution_max = 0.7},
{{name = "computer", count = 2}, weight = 1, evolution_min = 0, evolution_max = 1},
{{name = "steel-plate", count = math_random(25,75)}, weight = 2, evolution_min = 0.1, evolution_max = 0.3},
{{name = "nuclear-fuel", count = 1}, weight = 2, evolution_min = 0.7, evolution_max = 1},
{{name = "burner-inserter", count = math_random(8,16)}, weight = 3, evolution_min = 0.0, evolution_max = 0.1},
{{name = "inserter", count = math_random(8,16)}, weight = 3, evolution_min = 0.0, evolution_max = 0.4},
{{name = "long-handed-inserter", count = math_random(8,16)}, weight = 3, evolution_min = 0.0, evolution_max = 0.4},
{{name = "fast-inserter", count = math_random(8,16)}, weight = 3, evolution_min = 0.1, evolution_max = 1},
{{name = "filter-inserter", count = math_random(8,16)}, weight = 1, evolution_min = 0.2, evolution_max = 1},
{{name = "stack-filter-inserter", count = math_random(4,8)}, weight = 1, evolution_min = 0.4, evolution_max = 1},
{{name = "stack-inserter", count = math_random(4,8)}, weight = 3, evolution_min = 0.3, evolution_max = 1},
{{name = "small-electric-pole", count = math_random(16,24)}, weight = 3, evolution_min = 0.0, evolution_max = 0.3},
{{name = "medium-electric-pole", count = math_random(8,16)}, weight = 3, evolution_min = 0.2, evolution_max = 1},
{{name = "big-electric-pole", count = math_random(4,8)}, weight = 3, evolution_min = 0.3, evolution_max = 1},
{{name = "substation", count = math_random(2,4)}, weight = 3, evolution_min = 0.5, evolution_max = 1},
{{name = "wooden-chest", count = math_random(16,24)}, weight = 3, evolution_min = 0.0, evolution_max = 0.2},
{{name = "iron-chest", count = math_random(4,8)}, weight = 3, evolution_min = 0.1, evolution_max = 0.4},
{{name = "steel-chest", count = math_random(4,8)}, weight = 3, evolution_min = 0.3, evolution_max = 1},
{{name = "small-lamp", count = math_random(16,32)}, weight = 3, evolution_min = 0.1, evolution_max = 0.3},
{{name = "rail", count = math_random(25,50)}, weight = 3, evolution_min = 0.1, evolution_max = 0.6},
{{name = "assembling-machine-1", count = math_random(2,4)}, weight = 3, evolution_min = 0.0, evolution_max = 0.3},
{{name = "assembling-machine-2", count = math_random(2,4)}, weight = 3, evolution_min = 0.2, evolution_max = 0.8},
{{name = "assembling-machine-3", count = math_random(1,2)}, weight = 3, evolution_min = 0.5, evolution_max = 1},
{{name = "accumulator", count = math_random(4,8)}, weight = 3, evolution_min = 0.4, evolution_max = 1},
{{name = "offshore-pump", count = math_random(1,3)}, weight = 2, evolution_min = 0.0, evolution_max = 0.1},
{{name = "beacon", count = math_random(1,2)}, weight = 3, evolution_min = 0.7, evolution_max = 1},
{{name = "boiler", count = math_random(4,8)}, weight = 3, evolution_min = 0.0, evolution_max = 0.3},
{{name = "steam-engine", count = math_random(2,4)}, weight = 3, evolution_min = 0.0, evolution_max = 0.5},
{{name = "steam-turbine", count = math_random(1,2)}, weight = 2, evolution_min = 0.6, evolution_max = 1},
--{{name = "nuclear-reactor", count = 1}, weight = 1, evolution_min = 0.6, evolution_max = 1},
{{name = "centrifuge", count = math_random(1,2)}, weight = 1, evolution_min = 0.6, evolution_max = 1},
{{name = "heat-pipe", count = math_random(4,8)}, weight = 2, evolution_min = 0.5, evolution_max = 1},
{{name = "heat-exchanger", count = math_random(2,4)}, weight = 2, evolution_min = 0.5, evolution_max = 1},
{{name = "arithmetic-combinator", count = math_random(8,16)}, weight = 1, evolution_min = 0.1, evolution_max = 1},
{{name = "constant-combinator", count = math_random(8,16)}, weight = 1, evolution_min = 0.1, evolution_max = 1},
{{name = "decider-combinator", count = math_random(8,16)}, weight = 1, evolution_min = 0.1, evolution_max = 1},
{{name = "power-switch", count = math_random(1,2)}, weight = 1, evolution_min = 0.1, evolution_max = 1},
{{name = "programmable-speaker", count = math_random(4,8)}, weight = 1, evolution_min = 0.1, evolution_max = 1},
{{name = "green-wire", count = math_random(25,55)}, weight = 1, evolution_min = 0.1, evolution_max = 1},
{{name = "red-wire", count = math_random(25,55)}, weight = 1, evolution_min = 0.1, evolution_max = 1},
{{name = "chemical-plant", count = math_random(1,3)}, weight = 3, evolution_min = 0.3, evolution_max = 1},
{{name = "burner-mining-drill", count = math_random(2,4)}, weight = 3, evolution_min = 0.0, evolution_max = 0.2},
{{name = "electric-mining-drill", count = math_random(2,4)}, weight = 3, evolution_min = 0.2, evolution_max = 0.6},
{{name = "express-transport-belt", count = math_random(25,75)}, weight = 3, evolution_min = 0.5, evolution_max = 1},
{{name = "express-underground-belt", count = math_random(4,8)}, weight = 3, evolution_min = 0.5, evolution_max = 1},
{{name = "express-splitter", count = math_random(2,4)}, weight = 3, evolution_min = 0.5, evolution_max = 1},
{{name = "fast-transport-belt", count = math_random(25,75)}, weight = 3, evolution_min = 0.2, evolution_max = 0.7},
{{name = "fast-underground-belt", count = math_random(4,8)}, weight = 3, evolution_min = 0.2, evolution_max = 0.7},
{{name = "fast-splitter", count = math_random(2,4)}, weight = 3, evolution_min = 0.2, evolution_max = 0.3},
{{name = "transport-belt", count = math_random(25,75)}, weight = 3, evolution_min = 0, evolution_max = 0.3},
{{name = "underground-belt", count = math_random(4,8)}, weight = 3, evolution_min = 0, evolution_max = 0.3},
{{name = "splitter", count = math_random(2,4)}, weight = 3, evolution_min = 0, evolution_max = 0.3},
--{{name = "oil-refinery", count = math_random(2,4)}, weight = 2, evolution_min = 0.3, evolution_max = 1},
{{name = "pipe", count = math_random(30,50)}, weight = 3, evolution_min = 0.0, evolution_max = 0.3},
{{name = "pipe-to-ground", count = math_random(4,8)}, weight = 1, evolution_min = 0.2, evolution_max = 0.5},
{{name = "pumpjack", count = math_random(1,3)}, weight = 1, evolution_min = 0.3, evolution_max = 0.8},
{{name = "pump", count = math_random(1,2)}, weight = 1, evolution_min = 0.3, evolution_max = 0.8},
{{name = "solar-panel", count = math_random(2,4)}, weight = 3, evolution_min = 0.4, evolution_max = 0.9},
{{name = "electric-furnace", count = math_random(2,4)}, weight = 3, evolution_min = 0.5, evolution_max = 1},
{{name = "steel-furnace", count = math_random(4,8)}, weight = 3, evolution_min = 0.2, evolution_max = 0.7},
{{name = "stone-furnace", count = math_random(8,16)}, weight = 3, evolution_min = 0.0, evolution_max = 0.1},
{{name = "radar", count = math_random(1,2)}, weight = 1, evolution_min = 0.1, evolution_max = 0.3},
{{name = "rail-signal", count = math_random(8,16)}, weight = 2, evolution_min = 0.2, evolution_max = 0.8},
{{name = "rail-chain-signal", count = math_random(8,16)}, weight = 2, evolution_min = 0.2, evolution_max = 0.8},
{{name = "stone-wall", count = math_random(25,75)}, weight = 1, evolution_min = 0.1, evolution_max = 0.5},
{{name = "gate", count = math_random(4,8)}, weight = 1, evolution_min = 0.1, evolution_max = 0.5},
{{name = "storage-tank", count = math_random(1,4)}, weight = 3, evolution_min = 0.3, evolution_max = 0.6},
{{name = "train-stop", count = math_random(1,2)}, weight = 1, evolution_min = 0.2, evolution_max = 0.7},
--{{name = "express-loader", count = math_random(1,3)}, weight = 1, evolution_min = 0.5, evolution_max = 1},
--{{name = "fast-loader", count = math_random(1,3)}, weight = 1, evolution_min = 0.2, evolution_max = 0.7},
--{{name = "loader", count = math_random(1,3)}, weight = 1, evolution_min = 0.0, evolution_max = 0.5},
{{name = "lab", count = math_random(1,2)}, weight = 2, evolution_min = 0.0, evolution_max = 0.1}
}
for _, t in pairs (chest_loot) do
for x = 1, t.weight, 1 do
if t.evolution_min <= game.forces.enemy.evolution_factor and t.evolution_max >= game.forces.enemy.evolution_factor then
table.insert(chest_raffle, t[1])
end
end
end
local loot = chest_raffle[math.random(1,#chest_raffle)]
game.surfaces[1].spill_item_stack(position, loot, true)
end
local function create_wave_gui(player)
if player.gui.top["fish_defense_waves"] then player.gui.top["fish_defense_waves"].destroy() end
local frame = player.gui.top.add({ type = "frame", name = "fish_defense_waves"})
@ -382,17 +235,18 @@ local function is_game_lost()
game.map_settings.enemy_expansion.max_expansion_cooldown = 600
end
local biter_building_inhabitants = {}
biter_building_inhabitants[1] = {{"small-biter",8,16}}
biter_building_inhabitants[2] = {{"small-biter",12,24}}
biter_building_inhabitants[3] = {{"small-biter",8,16},{"medium-biter",1,2}}
biter_building_inhabitants[4] = {{"small-biter",4,8},{"medium-biter",4,8}}
biter_building_inhabitants[5] = {{"small-biter",3,5},{"medium-biter",8,12}}
biter_building_inhabitants[6] = {{"small-biter",3,5},{"medium-biter",5,7},{"big-biter",1,2}}
biter_building_inhabitants[7] = {{"medium-biter",6,8},{"big-biter",3,5}}
biter_building_inhabitants[8] = {{"medium-biter",2,4},{"big-biter",6,8}}
biter_building_inhabitants[9] = {{"medium-biter",2,3},{"big-biter",7,9}}
biter_building_inhabitants[10] = {{"big-biter",4,8},{"behemoth-biter",3,4}}
local biter_building_inhabitants = {
[1] = {{"small-biter",8,16}},
[2] = {{"small-biter",12,24}},
[3] = {{"small-biter",8,16},{"medium-biter",1,2}},
[4] = {{"small-biter",4,8},{"medium-biter",4,8}},
[5] = {{"small-biter",3,5},{"medium-biter",8,12}},
[6] = {{"small-biter",3,5},{"medium-biter",5,7},{"big-biter",1,2}},
[7] = {{"medium-biter",6,8},{"big-biter",3,5}},
[8] = {{"medium-biter",2,4},{"big-biter",6,8}},
[9] = {{"medium-biter",2,3},{"big-biter",7,9}},
[10] = {{"big-biter",4,8},{"behemoth-biter",3,4}}
}
local function damage_entities_in_radius(position, radius, damage)
local entities_to_damage = game.surfaces[1].find_entities_filtered({area = {{position.x - radius, position.y - radius},{position.x + radius, position.y + radius}}})
@ -427,10 +281,7 @@ local function on_entity_died(event)
if event.cause.name == "player" and event.entity.type == "unit" then
event.cause.insert({name = "coin", count = coin_earnings[event.entity.name]})
end
end
--if math_random(1, 150) == 1 then
--spill_loot(event.entity.position)
--end
end
if event.entity.name == "biter-spawner" or event.entity.name == "spitter-spawner" then
local e = math.ceil(game.forces.enemy.evolution_factor*10, 0)
@ -605,7 +456,15 @@ local function on_chunk_generated(event)
end
end
surface.set_tiles(tiles, true)
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, {{x=math.floor(event.area.left_top.x/32),y=math.floor(event.area.left_top.y/32)}})
end
if left_top.x >= 256 then