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

534 lines
18 KiB
Lua
Raw Normal View History

2019-10-11 21:52:32 +02:00
-- Mountain digger fortress, protect the cargo wagon! -- by MewMew
2019-10-06 18:16:32 +02:00
2020-04-08 21:10:21 +02:00
global.offline_loot = true
2020-04-01 17:10:29 +02:00
local darkness = false
require "player_modifiers"
2019-10-07 16:40:52 +02:00
require "functions.soft_reset"
2019-10-08 05:50:32 +02:00
require "functions.basic_markets"
2020-05-03 15:41:58 +02:00
local ComfyPanel = require "comfy_panel.main"
local Map_score = require "comfy_panel.map_score"
2020-04-29 14:25:03 +02:00
local Collapse = require "modules.collapse"
2019-10-29 15:35:01 +01:00
local RPG = require "modules.rpg"
2019-10-29 11:26:59 +01:00
require "modules.wave_defense.main"
2019-10-07 09:48:17 +02:00
require "modules.biters_yield_coins"
2019-10-07 22:40:05 +02:00
require "modules.no_deconstruction_of_neutral_entities"
2019-10-25 08:09:39 +02:00
require "modules.shotgun_buff"
2020-05-05 11:49:54 +02:00
local Explosives = require "modules.explosives"
2019-11-02 16:09:58 +01:00
require "modules.mineable_wreckage_yields_scrap"
2019-10-07 09:48:17 +02:00
require "modules.rocks_broken_paint_tiles"
require "modules.rocks_heal_over_time"
require "modules.rocks_yield_ore_veins"
2019-10-29 11:26:59 +01:00
local level_depth = require "maps.mountain_fortress_v2.terrain"
2020-04-26 18:07:27 +02:00
local Immersive_cargo_wagons = require "modules.immersive_cargo_wagons.main"
2019-10-07 22:40:05 +02:00
require "maps.mountain_fortress_v2.flamethrower_nerf"
2019-10-28 17:38:36 +01:00
local BiterRolls = require "modules.wave_defense.biter_rolls"
2019-11-28 03:53:19 +01:00
local BiterHealthBooster = require "modules.biter_health_booster"
2019-10-28 17:38:36 +01:00
local Reset = require "functions.soft_reset"
local Pets = require "modules.biter_pets"
local Map = require "modules.map_info"
local WD = require "modules.wave_defense.table"
local Treasure = require "maps.mountain_fortress_v2.treasure"
2019-11-14 17:54:28 +01:00
local Locomotive = require "maps.mountain_fortress_v2.locomotive"
2019-10-28 17:38:36 +01:00
local Modifier = require "player_modifiers"
2020-05-03 15:41:58 +02:00
local math_random = math.random
2020-05-03 15:41:58 +02:00
local math_abs = math.abs
local math_floor = math.floor
2019-10-28 17:38:36 +01:00
local Public = {}
2019-10-06 18:16:32 +02:00
2019-10-23 06:01:19 +02:00
local starting_items = {['pistol'] = 1, ['firearm-magazine'] = 16, ['rail'] = 16, ['wood'] = 16, ['explosives'] = 32}
2019-10-10 19:33:32 +02:00
local treasure_chest_messages = {
"You notice an old crate within the rubble. It's filled with treasure!",
"You find a chest underneath the broken rocks. It's filled with goodies!",
"We has found the precious!",
}
2019-10-07 16:40:52 +02:00
2020-04-29 15:07:55 +02:00
local function game_over()
game.print("The Fish Wagon was destroyed!!")
local wave_defense_table = WD.get_table()
wave_defense_table.game_lost = true
wave_defense_table.target = nil
global.game_reset_tick = game.tick + 1800
for _, player in pairs(game.connected_players) do
player.play_sound{path="utility/game_lost", volume_modifier=0.80}
2020-05-03 15:41:58 +02:00
ComfyPanel.comfy_panel_call_tab(player, "Map Scores")
2020-04-29 15:07:55 +02:00
end
end
2020-05-03 15:41:58 +02:00
local function set_scores()
local fish_wagon = global.locomotive_cargo
if not fish_wagon then return end
if not fish_wagon.valid then return end
local score = math_floor(fish_wagon.position.y * -1)
for _, player in pairs(game.connected_players) do
if score > Map_score.get_score(player) then Map_score.set_score(player, score) end
end
end
2020-05-02 15:44:15 +02:00
local function disable_recipes()
local force = game.forces.player
force.recipes["cargo-wagon"].enabled = false
force.recipes["fluid-wagon"].enabled = false
force.recipes["artillery-wagon"].enabled = false
force.recipes["locomotive"].enabled = false
force.recipes["pistol"].enabled = false
end
local function set_difficulty()
local wave_defense_table = WD.get_table()
local player_count = #game.connected_players
2020-04-29 14:25:03 +02:00
2020-01-19 10:31:16 +01:00
wave_defense_table.max_active_biters = 1024
-- threat gain / wave
2020-05-04 18:45:35 +02:00
wave_defense_table.threat_gain_multiplier = 1.9 + player_count * 0.1
2020-04-08 20:38:18 +02:00
2020-04-30 02:47:21 +02:00
local amount = player_count * 0.25 + 2
2020-04-29 14:25:03 +02:00
amount = math.floor(amount)
2020-05-04 18:45:35 +02:00
if amount > 6 then amount = 6 end
2020-04-29 14:25:03 +02:00
Collapse.set_amount(amount)
2020-04-08 20:38:18 +02:00
2020-05-04 18:45:35 +02:00
wave_defense_table.wave_interval = 3600 - player_count * 60
if wave_defense_table.wave_interval < 1800 then wave_defense_table.wave_interval = 1800 end
end
2019-10-28 17:38:36 +01:00
function Public.reset_map()
2020-04-26 18:07:27 +02:00
Immersive_cargo_wagons.reset()
2020-04-29 14:25:03 +02:00
2020-04-08 21:10:21 +02:00
for _,player in pairs(game.players) do
if player.controller_type == defines.controllers.editor then player.toggle_map_editor() end
end
2019-10-28 17:38:36 +01:00
local wave_defense_table = WD.get_table()
2019-10-12 10:58:02 +02:00
global.chunk_queue = {}
2020-04-08 21:10:21 +02:00
global.offline_players = {}
2020-04-08 20:38:18 +02:00
2019-10-12 10:58:02 +02:00
local map_gen_settings = {
["seed"] = math_random(1, 1000000),
2019-11-04 13:04:43 +01:00
["width"] = level_depth,
["water"] = 0.1,
2019-10-06 18:16:32 +02:00
["starting_area"] = 1,
2019-10-07 22:40:05 +02:00
["cliff_settings"] = {cliff_elevation_interval = 0, cliff_elevation_0 = 0},
2019-10-07 09:48:17 +02:00
["default_enable_all_autoplace_controls"] = true,
2019-10-06 18:16:32 +02:00
["autoplace_settings"] = {
["entity"] = {treat_missing_as_default = false},
2019-10-07 09:48:17 +02:00
["tile"] = {treat_missing_as_default = true},
["decorative"] = {treat_missing_as_default = true},
2019-10-06 18:16:32 +02:00
},
}
2020-04-08 20:38:18 +02:00
2019-10-11 21:52:32 +02:00
if not global.active_surface_index then
2019-10-12 10:58:02 +02:00
global.active_surface_index = game.create_surface("mountain_fortress", map_gen_settings).index
2019-10-07 17:37:57 +02:00
else
2020-04-08 20:38:18 +02:00
game.forces.player.set_spawn_position({-2, 16}, game.surfaces[global.active_surface_index])
2019-10-28 17:38:36 +01:00
global.active_surface_index = Reset.soft_reset_map(game.surfaces[global.active_surface_index], map_gen_settings, starting_items).index
2019-10-07 16:40:52 +02:00
end
2020-04-08 20:38:18 +02:00
2019-10-11 21:52:32 +02:00
local surface = game.surfaces[global.active_surface_index]
2020-05-05 14:14:51 +02:00
Explosives.set_surface_whitelist({[surface.name] = true})
if darkness then
2020-02-10 18:08:20 +01:00
surface.min_brightness = 0.10
surface.brightness_visual_weights = {0.90, 0.90, 0.90}
surface.daytime = 0.42
surface.freeze_daytime = true
surface.solar_power_multiplier = 999
end
2019-10-11 21:52:32 +02:00
surface.request_to_generate_chunks({0,0}, 2)
surface.force_generate_chunk_requests()
2020-04-08 20:38:18 +02:00
2019-10-09 21:09:53 +02:00
for x = -768 + 32, 768 - 32, 32 do
2019-10-11 21:52:32 +02:00
surface.request_to_generate_chunks({x, 96}, 1)
surface.force_generate_chunk_requests()
2019-10-09 21:09:53 +02:00
end
2020-04-08 20:38:18 +02:00
game.difficulty_settings.technology_price_multiplier = 0.5
2019-10-07 16:40:52 +02:00
game.map_settings.enemy_evolution.destroy_factor = 0
2020-04-08 20:38:18 +02:00
game.map_settings.enemy_evolution.pollution_factor = 0
2019-10-07 16:40:52 +02:00
game.map_settings.enemy_evolution.time_factor = 0
game.map_settings.enemy_expansion.enabled = true
2019-10-12 02:19:37 +02:00
game.map_settings.enemy_expansion.max_expansion_cooldown = 3600
game.map_settings.enemy_expansion.min_expansion_cooldown = 3600
game.map_settings.enemy_expansion.settler_group_max_size = 8
game.map_settings.enemy_expansion.settler_group_min_size = 16
2019-11-01 16:24:44 +01:00
game.map_settings.pollution.enabled = false
2020-04-08 20:38:18 +02:00
game.forces.player.technologies["land-mine"].enabled = false
game.forces.player.technologies["landfill"].enabled = false
2020-05-02 15:44:15 +02:00
game.forces.player.technologies["fluid-wagon"].enabled = false
2019-10-07 16:40:52 +02:00
game.forces.player.technologies["railway"].researched = true
2020-05-02 15:44:15 +02:00
disable_recipes()
2019-10-11 21:52:32 +02:00
game.forces.player.set_spawn_position({-2, 16}, surface)
2020-04-08 21:10:21 +02:00
game.forces.enemy.set_ammo_damage_modifier("bullet", 1)
game.forces.enemy.set_turret_attack_modifier("gun-turret", 1)
2020-04-08 20:38:18 +02:00
2019-11-14 17:54:28 +01:00
Locomotive.locomotive_spawn(surface, {x = 0, y = 16})
2020-04-08 20:38:18 +02:00
2019-10-28 17:38:36 +01:00
WD.reset_wave_defense()
wave_defense_table.surface_index = global.active_surface_index
wave_defense_table.target = global.locomotive_cargo
wave_defense_table.nest_building_density = 32
wave_defense_table.game_lost = false
game.reset_time_played()
2020-04-29 14:25:03 +02:00
Collapse.set_kill_entities(false)
2020-04-30 02:47:21 +02:00
Collapse.set_speed(8)
2020-04-29 14:25:03 +02:00
Collapse.set_amount(1)
Collapse.set_max_line_size(level_depth)
Collapse.set_surface(surface)
Collapse.set_position({0, 130})
Collapse.set_direction("north")
2020-04-08 20:38:18 +02:00
2019-11-14 17:54:28 +01:00
RPG.rpg_reset_all_players()
2020-04-08 20:38:18 +02:00
set_difficulty()
2019-10-06 18:16:32 +02:00
end
2019-10-08 01:17:00 +02:00
local function protect_train(event)
if event.entity.force.index ~= 1 then return end --Player Force
2020-04-26 20:59:34 +02:00
if event.entity == global.locomotive_cargo then
2019-10-08 01:17:00 +02:00
if event.cause then
if event.cause.force.index == 2 then
return
end
end
event.entity.health = event.entity.health + event.final_damage_amount
end
end
2019-10-08 01:17:00 +02:00
local function biters_chew_rocks_faster(event)
if event.entity.force.index ~= 3 then return end --Neutral Force
if not event.cause then return end
if not event.cause.valid then return end
if event.cause.force.index ~= 2 then return end --Enemy Force
2020-04-08 21:10:21 +02:00
event.entity.health = event.entity.health - event.final_damage_amount * 5
2019-10-08 01:17:00 +02:00
end
2019-10-08 05:50:32 +02:00
local function hidden_biter(entity)
2020-05-07 23:15:08 +02:00
local surface = entity.surface
local h = math_floor(math_abs(entity.position.y))
2019-11-28 03:53:19 +01:00
local m = 1 / level_depth
2020-05-07 23:15:08 +02:00
local count = math_floor(math_random(0, h + level_depth) * m) + 1
local position = surface.find_non_colliding_position("small-biter", entity.position, 16, 0.5)
if not position then position = entity.position end
BiterRolls.wave_defense_set_unit_raffle(h * 0.20)
for _ = 1, count, 1 do
local unit
if math_random(1,3) == 1 then
unit = surface.create_entity({name = BiterRolls.wave_defense_roll_spitter_name(), position = position})
else
unit = surface.create_entity({name = BiterRolls.wave_defense_roll_biter_name(), position = position})
end
2020-04-08 20:38:18 +02:00
2020-05-07 23:15:08 +02:00
if math_random(1, 64) == 1 then
BiterHealthBooster.add_boss_unit(unit, m * h * 5 + 1, 0.38)
end
2019-10-12 04:06:48 +02:00
end
2019-10-08 05:50:32 +02:00
end
2019-10-29 11:26:59 +01:00
local function hidden_worm(entity)
2020-04-08 21:10:21 +02:00
BiterRolls.wave_defense_set_worm_raffle(math.sqrt(entity.position.x ^ 2 + entity.position.y ^ 2) * 0.20)
2020-04-08 20:38:18 +02:00
entity.surface.create_entity({name = BiterRolls.wave_defense_roll_worm_name(), position = entity.position})
2019-10-29 11:26:59 +01:00
end
2019-10-13 08:28:08 +02:00
local function hidden_biter_pet(event)
if math_random(1, 2048) ~= 1 then return end
2019-10-31 16:18:17 +01:00
BiterRolls.wave_defense_set_unit_raffle(math.sqrt(event.entity.position.x ^ 2 + event.entity.position.y ^ 2) * 0.25)
2019-10-13 08:28:08 +02:00
local unit
if math_random(1,3) == 1 then
2019-10-28 17:38:36 +01:00
unit = event.entity.surface.create_entity({name = BiterRolls.wave_defense_roll_spitter_name(), position = event.entity.position})
2019-10-13 08:28:08 +02:00
else
2019-10-28 17:38:36 +01:00
unit = event.entity.surface.create_entity({name = BiterRolls.wave_defense_roll_biter_name(), position = event.entity.position})
end
Pets.biter_pets_tame_unit(game.players[event.player_index], unit, true)
2019-10-13 08:28:08 +02:00
end
2019-10-10 19:33:32 +02:00
local function hidden_treasure(event)
if math_random(1, 320) ~= 1 then return end
game.players[event.player_index].print(treasure_chest_messages[math_random(1, #treasure_chest_messages)], {r=0.98, g=0.66, b=0.22})
2019-11-02 18:41:17 +01:00
Treasure(event.entity.surface, event.entity.position, "wooden-chest")
2019-10-10 19:33:32 +02:00
end
2019-10-29 11:26:59 +01:00
local projectiles = {"grenade", "explosive-rocket", "grenade", "explosive-rocket", "explosive-cannon-projectile"}
2020-04-08 20:38:18 +02:00
local function angry_tree(entity, cause)
2019-10-29 11:26:59 +01:00
if entity.type ~= "tree" then return end
if math.abs(entity.position.y) < level_depth then return end
if math_random(1,4) == 1 then hidden_biter(entity) end
if math_random(1,8) == 1 then hidden_worm(entity) end
if math_random(1,16) ~= 1 then return end
2019-10-29 11:26:59 +01:00
local position = false
2020-04-08 20:38:18 +02:00
if cause then
2019-10-29 11:26:59 +01:00
if cause.valid then
position = cause.position
end
end
if not position then position = {entity.position.x + (-20 + math_random(0, 40)), entity.position.y + (-20 + math_random(0, 40))} end
2020-04-08 20:38:18 +02:00
2019-10-29 11:26:59 +01:00
entity.surface.create_entity({
name = projectiles[math_random(1, 5)],
2019-10-29 11:26:59 +01:00
position = entity.position,
force = "neutral",
source = entity.position,
target = position,
2020-05-07 23:15:08 +02:00
max_range = 16,
speed = 0.01
2020-04-08 20:38:18 +02:00
})
2019-10-29 11:26:59 +01:00
end
2019-10-29 15:35:01 +01:00
local function give_coin(player)
player.insert({name = "coin", count = 1})
end
2019-10-08 05:50:32 +02:00
local function on_player_mined_entity(event)
2020-04-08 20:38:18 +02:00
if not event.entity.valid then return end
2019-10-29 11:26:59 +01:00
if event.entity.force.index ~= 3 then return end
2020-04-08 20:38:18 +02:00
2019-10-29 15:35:01 +01:00
if event.entity.type == "simple-entity" then
give_coin(game.players[event.player_index])
2020-04-08 20:38:18 +02:00
2020-05-07 23:15:08 +02:00
if math_random(1, 30) == 1 then
2019-10-08 05:50:32 +02:00
hidden_biter(event.entity)
2019-10-10 19:33:32 +02:00
return
2019-10-28 17:38:36 +01:00
end
if math_random(1,512) == 1 then
2019-10-29 20:07:19 +01:00
hidden_worm(event.entity)
2019-10-29 11:26:59 +01:00
return
end
2019-10-13 08:28:08 +02:00
hidden_biter_pet(event)
2020-04-08 20:38:18 +02:00
hidden_treasure(event)
2019-10-08 05:50:32 +02:00
end
2020-04-08 20:38:18 +02:00
2019-10-29 11:26:59 +01:00
angry_tree(event.entity, game.players[event.player_index].character)
2019-10-08 05:50:32 +02:00
end
2020-04-08 21:10:21 +02:00
local function on_pre_player_left_game(event)
local player = game.players[event.player_index]
if player.controller_type == defines.controllers.editor then player.toggle_map_editor() end
if player.character then
global.offline_players[#global.offline_players + 1] = {index = event.player_index, tick = game.tick}
end
end
2020-04-29 15:07:55 +02:00
local function on_entity_died(event)
if not event.entity.valid then return end
2020-04-08 20:38:18 +02:00
if event.entity == global.locomotive_cargo then
2020-05-03 15:41:58 +02:00
set_scores()
2020-04-29 15:07:55 +02:00
game_over()
2020-05-03 15:41:58 +02:00
event.entity.surface.spill_item_stack(event.entity.position,{name = "raw-fish", count = 512}, false)
2019-10-12 05:44:19 +02:00
return
2019-10-07 04:37:23 +02:00
end
2019-10-28 17:38:36 +01:00
2019-10-08 05:50:32 +02:00
if event.cause then
if event.cause.valid then
2020-04-08 20:38:18 +02:00
if event.cause.force.index == 2 or event.cause.force.index == 3 then return end
2019-10-08 05:50:32 +02:00
end
end
2020-04-08 20:38:18 +02:00
2019-10-08 05:50:32 +02:00
if event.entity.force.index == 3 then
2020-04-18 06:09:55 +02:00
if event.entity.name == "character" then return end
2019-10-31 16:18:17 +01:00
--local r_max = 15 - math.floor(math.abs(event.entity.position.y) / (level_depth * 0.5))
--if r_max < 3 then r_max = 3 end
if math_random(1,8) == 1 then
2020-04-08 20:38:18 +02:00
hidden_biter(event.entity)
2019-10-08 05:50:32 +02:00
end
2020-04-08 20:38:18 +02:00
if math_random(1,256) == 1 then hidden_worm(event.entity) end
2020-04-08 20:38:18 +02:00
2019-10-29 11:26:59 +01:00
angry_tree(event.entity, event.cause)
2019-10-08 05:50:32 +02:00
end
2019-10-07 04:37:23 +02:00
end
2019-10-07 07:19:41 +02:00
local function on_entity_damaged(event)
2020-04-08 20:38:18 +02:00
if not event.entity.valid then return end
2019-10-08 01:17:00 +02:00
protect_train(event)
2020-04-08 20:38:18 +02:00
2019-10-09 21:09:53 +02:00
if not event.entity.health then return end
2019-10-08 01:17:00 +02:00
biters_chew_rocks_faster(event)
2019-10-10 19:33:32 +02:00
--neutral_force_player_damage_resistance(event)
2019-10-07 07:19:41 +02:00
end
2019-10-08 18:22:42 +02:00
local function on_research_finished(event)
2020-05-02 15:44:15 +02:00
disable_recipes()
2019-10-08 18:22:42 +02:00
event.research.force.character_inventory_slots_bonus = game.forces.player.mining_drill_productivity_bonus * 50 -- +5 Slots / level
2019-10-09 21:09:53 +02:00
local mining_speed_bonus = game.forces.player.mining_drill_productivity_bonus * 5 -- +50% speed / level
2019-10-17 00:06:18 +02:00
if event.research.force.technologies["steel-axe"].researched then mining_speed_bonus = mining_speed_bonus + 0.5 end -- +50% speed for steel-axe research
2019-10-08 18:22:42 +02:00
event.research.force.manual_mining_speed_modifier = mining_speed_bonus
end
2019-10-07 16:40:52 +02:00
local function on_player_joined_game(event)
local player_modifiers = Modifier.get_table()
2019-10-18 07:01:14 +02:00
local player = game.players[event.player_index]
2019-10-29 11:26:59 +01:00
2019-10-19 09:20:40 +02:00
set_difficulty()
2020-04-08 20:38:18 +02:00
2019-10-11 21:52:32 +02:00
local surface = game.surfaces[global.active_surface_index]
2020-04-08 20:38:18 +02:00
2019-10-06 18:16:32 +02:00
if player.online_time == 0 then
player.teleport(surface.find_non_colliding_position("character", game.forces.player.get_spawn_position(surface), 32, 0.5), surface)
2019-10-07 16:40:52 +02:00
for item, amount in pairs(starting_items) do
player.insert({name = item, count = amount})
end
2019-10-06 18:16:32 +02:00
end
2020-04-26 20:59:34 +02:00
local icw = Immersive_cargo_wagons.get_table()
if player.surface.index ~= global.active_surface_index and not icw.trains[tonumber(player.surface.name)] then
2019-10-17 00:06:18 +02:00
player.character = nil
player.set_controller({type=defines.controllers.god})
player.create_character()
player.teleport(surface.find_non_colliding_position("character", game.forces.player.get_spawn_position(surface), 32, 0.5), surface)
2019-10-17 00:06:18 +02:00
for item, amount in pairs(starting_items) do
player.insert({name = item, count = amount})
2020-04-08 20:38:18 +02:00
end
2019-10-22 08:29:30 +02:00
end
player_modifiers[player.index].character_mining_speed_modifier["mountain_fortress"] = 0.5
2019-10-28 17:38:36 +01:00
Modifier.update_player_modifiers(player)
2020-04-08 20:38:18 +02:00
local tile = surface.get_tile(player.position)
if tile.valid then
if tile.name == "out-of-map" then
player.teleport(surface.find_non_colliding_position("character", game.forces.player.get_spawn_position(surface), 32, 0.5), surface)
end
end
2019-10-06 18:16:32 +02:00
end
2019-10-29 11:26:59 +01:00
local function on_player_left_game(event)
set_difficulty()
2019-10-18 07:01:14 +02:00
end
2020-04-08 21:10:21 +02:00
local function offline_players()
local current_tick = game.tick
local players = global.offline_players
local surface = game.surfaces[global.active_surface_index]
if #players > 0 then
--log("nonzero offline players")
local later = {}
for i = 1, #players, 1 do
if players[i] and game.players[players[i].index] and game.players[players[i].index].connected then
--game.print("deleting already online character from list")
players[i] = nil
else
if players[i] and players[i].tick < game.tick - 54000 then
--log("spawning corpse")
local player_inv = {}
local items = {}
player_inv[1] = game.players[players[i].index].get_inventory(defines.inventory.character_main)
player_inv[2] = game.players[players[i].index].get_inventory(defines.inventory.character_armor)
player_inv[3] = game.players[players[i].index].get_inventory(defines.inventory.character_guns)
player_inv[4] = game.players[players[i].index].get_inventory(defines.inventory.character_ammo)
player_inv[5] = game.players[players[i].index].get_inventory(defines.inventory.character_trash)
local e = surface.create_entity({name = "character", position = game.forces.player.get_spawn_position(surface), force = "neutral"})
local inv = e.get_inventory(defines.inventory.character_main)
for ii = 1, 5, 1 do
if player_inv[ii].valid then
for iii = 1, #player_inv[ii], 1 do
if player_inv[ii][iii].valid then
items[#items + 1] = player_inv[ii][iii]
end
end
end
end
if #items > 0 then
for item = 1, #items, 1 do
if items[item].valid then
inv.insert(items[item])
end
end
game.print({"chronosphere.message_accident"}, {r=0.98, g=0.66, b=0.22})
e.die("neutral")
else
e.destroy()
end
for ii = 1, 5, 1 do
if player_inv[ii].valid then
player_inv[ii].clear()
end
end
players[i] = nil
else
later[#later + 1] = players[i]
end
end
end
players = {}
if #later > 0 then
for i = 1, #later, 1 do
players[#players + 1] = later[i]
end
end
global.offline_players = players
end
end
local function tick()
local tick = game.tick
2020-04-08 20:38:18 +02:00
if tick % 30 == 0 then
if tick % 1800 == 0 then
2020-04-29 15:07:55 +02:00
if not Locomotive.set_player_spawn_and_refill_fish() and not global.game_reset_tick then game_over() end
local surface = game.surfaces[global.active_surface_index]
2020-04-29 14:25:03 +02:00
local position = surface.find_non_colliding_position("stone-furnace", Collapse.get_position(), 128, 1)
2020-04-08 20:38:18 +02:00
if position then
2019-11-14 18:48:03 +01:00
local wave_defense_table = WD.get_table()
wave_defense_table.spawn_position = position
end
2020-04-08 21:10:21 +02:00
if global.offline_loot then
offline_players()
end
2020-05-03 15:41:58 +02:00
set_scores()
2019-11-14 17:54:28 +01:00
end
if global.game_reset_tick then
if global.game_reset_tick < tick then
2019-11-14 17:54:28 +01:00
global.game_reset_tick = nil
require "maps.mountain_fortress_v2.main".reset_map()
end
return
end
Locomotive.fish_tag()
end
end
2019-10-28 17:38:36 +01:00
local function on_init()
local T = Map.Pop_info()
2019-12-05 08:58:26 +01:00
T.localised_category = "mountain_fortress"
2019-10-28 17:38:36 +01:00
T.main_caption_color = {r = 150, g = 150, b = 0}
T.sub_caption_color = {r = 0, g = 150, b = 0}
2020-04-29 17:37:37 +02:00
global.rocks_yield_ore_maximum_amount = 500
2020-05-02 22:20:54 +02:00
global.rocks_yield_ore_base_amount = 40
2020-04-29 17:37:37 +02:00
global.rocks_yield_ore_distance_modifier = 0.020
2020-04-08 20:38:18 +02:00
2020-05-05 11:49:54 +02:00
Explosives.set_destructible_tile("out-of-map", 1500)
Explosives.set_destructible_tile("water", 1000)
Explosives.set_destructible_tile("water-green", 1000)
Explosives.set_destructible_tile("deepwater-green", 1000)
Explosives.set_destructible_tile("deepwater", 1000)
Explosives.set_destructible_tile("water-shallow", 1000)
2020-05-05 14:14:51 +02:00
Explosives.set_destructible_tile("water-mud", 1000)
2020-04-08 20:38:18 +02:00
2020-05-04 18:45:35 +02:00
Map_score.set_score_description("Wagon distance reached:")
2020-05-03 15:41:58 +02:00
2019-10-28 17:38:36 +01:00
Public.reset_map()
2019-10-06 18:16:32 +02:00
end
local event = require 'utils.event'
event.on_init(on_init)
2019-11-14 17:54:28 +01:00
event.on_nth_tick(2, tick)
2019-10-07 07:19:41 +02:00
event.add(defines.events.on_entity_damaged, on_entity_damaged)
2019-10-07 04:37:23 +02:00
event.add(defines.events.on_entity_died, on_entity_died)
2019-10-29 11:26:59 +01:00
event.add(defines.events.on_player_joined_game, on_player_joined_game)
event.add(defines.events.on_player_left_game, on_player_left_game)
2020-04-08 21:10:21 +02:00
event.add(defines.events.on_pre_player_left_game, on_pre_player_left_game)
2019-10-08 05:50:32 +02:00
event.add(defines.events.on_player_mined_entity, on_player_mined_entity)
2019-10-08 18:22:42 +02:00
event.add(defines.events.on_research_finished, on_research_finished)
2019-10-08 05:50:32 +02:00
2019-10-28 17:38:36 +01:00
require "modules.rocks_yield_ore"
2020-04-08 20:38:18 +02:00
return Public