1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-03-17 20:58:13 +02:00
This commit is contained in:
MewMew 2019-09-21 15:01:19 +02:00
parent 2006fa8a24
commit 95eb94e55b
5 changed files with 90 additions and 39 deletions

View File

@ -45,13 +45,13 @@ function set_biter_chances(level)
["behemoth-biter"] = 0,
["behemoth-spitter"] = 0,
}
if level > 100 then
global.biter_chances["big-biter"] = (level - 100) * 25
global.biter_chances["big-spitter"] = (level - 100) * 25
if level > 75 then
global.biter_chances["big-biter"] = (level - 75) * 25
global.biter_chances["big-spitter"] = (level - 75) * 25
end
if level > 200 then
global.biter_chances["behemoth-biter"] = (level - 200) * 50
global.biter_chances["behemoth-spitter"] = (level - 200) * 50
if level > 150 then
global.biter_chances["behemoth-biter"] = (level - 150) * 50
global.biter_chances["behemoth-spitter"] = (level - 150) * 50
end
for k, v in pairs(global.biter_chances) do
if global.biter_chances[k] < 0 then global.biter_chances[k] = 0 end
@ -65,13 +65,13 @@ function set_worm_chances(level)
["big-worm-turret"] = 0,
["behemoth-worm-turret"] = 0,
}
if level > 100 then
global.worm_chances["big-worm-turret"] = (level - 100) * 25
global.worm_chances["big-worm-turret"] = (level - 100) * 25
if level > 75 then
global.worm_chances["big-worm-turret"] = (level - 75) * 25
global.worm_chances["big-worm-turret"] = (level - 75) * 25
end
if level > 200 then
global.worm_chances["behemoth-worm-turret"] = (level - 200) * 50
global.worm_chances["behemoth-worm-turret"] = (level - 200) * 50
if level > 150 then
global.worm_chances["behemoth-worm-turret"] = (level - 150) * 50
global.worm_chances["behemoth-worm-turret"] = (level - 150) * 50
end
for k, v in pairs(global.worm_chances) do
if global.worm_chances[k] < 0 then global.worm_chances[k] = 0 end
@ -79,17 +79,18 @@ function set_worm_chances(level)
end
local function is_boss_stage()
local function is_boss_stage()
if global.current_stage == 1 then return false end
if global.current_stage % 5 == 0 then return true end
if global.current_stage == #global.stages - 1 then return true end
if #global.stages < 8 then return false end
if global.current_stage == math.floor(#global.stages * 0.5) then return true end
end
function add_enemies(surface, tiles)
table.shuffle_table(tiles)
if is_boss_stage() then
set_biter_chances(global.current_level + 100)
set_biter_chances(math.floor((global.current_level * difficulties_votes[global.difficulty_vote_index].strength_modifier) + 65))
local boss_count = math.random(1, math.floor(global.current_level * 0.5) + 1)
if boss_count > 16 then boss_count = 16 end
for k, tile in pairs(tiles) do
@ -97,7 +98,7 @@ function add_enemies(surface, tiles)
local unit = surface.create_entity({name = get_biter(), position = tile.position, force = "enemy"})
unit.ai_settings.allow_destroy_when_commands_fail = false
unit.ai_settings.allow_try_return_to_spawner = false
add_boss_unit(unit, global.current_level * difficulties_votes[global.difficulty_vote_index].boss_modifier, 0.55)
add_boss_unit(unit, (1.5 + global.current_level * 0.1) * difficulties_votes[global.difficulty_vote_index].boss_modifier, 0.55)
global.alive_boss_enemy_count = global.alive_boss_enemy_count + 1
global.alive_boss_enemy_entities[unit.unit_number] = unit
global.alive_enemies = global.alive_enemies + 1
@ -121,7 +122,7 @@ function add_enemies(surface, tiles)
end
end
set_biter_chances(global.current_level * difficulties_votes[global.difficulty_vote_index].strength_modifier)
set_biter_chances(math.floor(global.current_level * difficulties_votes[global.difficulty_vote_index].strength_modifier) + 1)
local amount = ((global.current_level * 25) / #global.stages) * global.current_stage
amount = amount * difficulties_votes[global.difficulty_vote_index].amount_modifier
for k, tile in pairs(tiles) do

View File

@ -1,3 +1,5 @@
--map by mewmew and kyte
require "maps.island_troopers.map_intro"
require "functions.noise_vector_path"
require "modules.shopping_chests"
@ -25,7 +27,11 @@ end
function update_stage_gui()
local caption = "Level: " .. global.current_level
caption = caption .. " | Stage: "
caption = caption .. global.current_stage
local stage = global.current_stage
if stage > #global.stages - 1 then stage = #global.stages - 1 end
caption = caption .. stage
caption = caption .. "/"
caption = caption .. #global.stages - 1
caption = caption .. " | Bugs remaining: "
caption = caption .. global.alive_enemies
@ -51,6 +57,18 @@ local function bring_players()
end
end
local function drift_corpses_toward_beach()
local surface = game.surfaces[1]
for _, corpse in pairs(surface.find_entities_filtered({name = "character-corpse"})) do
if corpse.position.y < 0 then
if surface.get_tile(corpse.position).collides_with("resource-layer") then
corpse.clone{position={corpse.position.x, corpse.position.y + 1}, surface=surface, force=corpse.force.name}
corpse.destroy()
end
end
end
end
local function set_next_level()
global.alive_enemies = 0
global.alive_boss_enemy_count = 0
@ -61,12 +79,12 @@ local function set_next_level()
global.path_tiles = nil
local island_size = 16 + math.random(global.current_level, global.current_level * 2)
local island_size = math.random(global.current_level, global.current_level * 2) + 7
if island_size > 128 then island_size = 128 end
global.stages = {}
global.stages[1] = {
path_length = 16 + island_size * 2,
path_length = 24 + island_size * 2,
size = island_size,
}
@ -91,14 +109,14 @@ end
local function earn_credits(amount)
for _, player in pairs(game.connected_players) do
player.play_sound{path="utility/new_objective", volume_modifier=0.5}
player.play_sound{path="utility/new_objective", volume_modifier=0.4}
end
game.print(amount .. " credits have been transfered to the factory.", {r = 255, g = 215, b = 0})
global.credits = global.credits + amount
end
local function slowmo()
if not global.slowmo then global.slowmo = 0.10 end
if not global.slowmo then global.slowmo = 0.15 end
game.speed = global.slowmo
global.slowmo = global.slowmo + 0.01
if game.speed < 1 then return end
@ -111,17 +129,27 @@ end
local function wait_until_stage_is_beaten()
if global.alive_enemies > 0 then return end
local reward_amount = false
local gamestate = 2
if global.stages[global.current_stage].size then
earn_credits(global.current_stage * global.current_level * 50)
global.current_stage = global.current_stage + 1
global.gamestate = 2
if global.current_stage < #global.stages -1 then
reward_amount = global.current_stage * global.current_level * 75
else
reward_amount = global.current_stage * global.current_level * 150
end
else
game.print("Final Stage complete!")
game.print("Level is collapsing !!", {r = 255, g = 0, b = 0})
gamestate = 5
end
if reward_amount then
earn_credits(reward_amount)
update_stage_gui()
return
end
earn_credits(global.current_stage * global.current_level * 100)
--game.print("Level " .. global.current_level .. " complete!!")
global.gamestate = 5
update_stage_gui()
global.current_stage = global.current_stage + 1
global.gamestate = gamestate
end
local function on_player_joined_game(event)
@ -137,6 +165,13 @@ local function on_init()
surface.request_to_generate_chunks({x = 0, y = 0}, 16)
surface.force_generate_chunk_requests()
tree_raffle = {}
for _, e in pairs(game.entity_prototypes) do
if e.type == "tree" then
table.insert(tree_raffle, e.name)
end
end
global.difficulty_poll_closing_timeout = 3600 * 5
global.level_vectors = {}
global.alive_boss_enemy_entities = {}
@ -150,6 +185,7 @@ local msg = {
"We got the brainbug!",
"Good job troopers!",
"This will pay off well!",
"I'm doing my part!",
}
local function on_entity_died(event)
@ -186,7 +222,8 @@ local gamestate_functions = {
}
local function on_tick()
gamestate_functions[global.gamestate]()
gamestate_functions[global.gamestate]()
if game.tick % 300 == 0 then drift_corpses_toward_beach() end
end
local event = require 'utils.event'

View File

@ -14,6 +14,14 @@ local info = [[
These can already be found on the coast.
Be careful! Over time, residents will send stronger bugs to the surface!
Turrets unfortunately malfunction in this world.
Any container bearing dangerous goods, like ammo, grenades or barrels,
causes heavy explosions when it breaks.
Maybe this can be used to our advantage.
--Good Luck Troopers--
]]
local function create_map_intro_button(player)

View File

@ -62,7 +62,9 @@ function draw_the_island()
local position = global.path_tiles[#global.path_tiles].position
local tiles = draw_island_tiles(surface, position, global.stages[global.current_stage].size)
local tree = "tree-0" .. math_random(1,9)
--local tree = "tree-0" .. math_random(1,9)
local tree = tree_raffle[math.random(1, #tree_raffle)]
local seed = math.random(1, 1000000)
for _, t in pairs(tiles) do
@ -186,6 +188,7 @@ end
local function process_tile(surface, position)
if position.x < -96 then surface.set_tiles({{name = "out-of-map", position = position}}, true) return end
if position.x > 8192 then surface.set_tiles({{name = "out-of-map", position = position}}, true) return end
if position.y < 0 then surface.set_tiles({{name = "deepwater", position = position}}, true) return end
if position.y > 32 then surface.set_tiles({{name = "water-green", position = position}}, true) return end
@ -194,8 +197,10 @@ local function process_tile(surface, position)
surface.set_tiles({{name = "sand-1", position = position}}, true)
if position.y == 6 then
if position.x % 64 == 32 then create_shopping_chest(surface, position, false) end
if position.x % 128 == 0 then create_dump_chest(surface, position, false) end
if position.x % 60 == 30 then
create_dump_chest(surface, {x = position.x, y = position.y - 1}, false)
create_shopping_chest(surface, position, false)
end
end
end

View File

@ -1,14 +1,14 @@
local shop_list = {
["iron-ore"] = 1,
["copper-ore"] = 1,
["uranium-ore"] = 3,
["coal"] = 1,
["stone"] = 1,
["wood"] = 0.75,
["copper-ore"] = 1,
["crude-oil-barrel"] = 6,
["empty-barrel"] = 5,
["iron-ore"] = 1,
["landfill"] = 2.5,
["raw-fish"] = 4,
["stone"] = 1,
["uranium-ore"] = 3,
["wood"] = 0.75,
}
function create_shopping_chest(surface, position, destructible)