local menu_simulations = {} menu_simulations.forest_fire = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-forest-fire.zip", length = 60 * 20, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] game.camera_position = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false game.surfaces.nauvis.daytime = 0 ]], update = [[ local dx = 0 local dy = 0 if game.tick % 3000 < 1000 then dx = 0.01 elseif game.tick % 3000 < 2000 then dx = -0.01 end if (game.tick + 1500) % 3000 < 1000 then dy = 0.01 elseif (game.tick + 1500) % 3000 < 2000 then dy = -0.01 end game.camera_position = {game.camera_position.x + dx*0, game.camera_position.y + dy*0} ]] } menu_simulations.solar_power_construction = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-solar-power-construction.zip", length = 60 * 7, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] game.camera_position = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false game.surfaces.nauvis.daytime = 0 local blueprint_string_1 = '0eNqd2dtq4zAUBdB/0bNbLOvuXyllcDKmGBw7+FIagv99cmFoodqWznlLQr2KhfaOdXIVh35tz1M3LKK+iu44DrOo365i7j6Gpr9/tlzOrahFt7QnUYihOd3fzWPfTC/nZmh7sRWiG/62X6KW23sh2mHplq59Mo83lz/Dejq00+0PokAhzuN8u2Yc7v/v5rw49WoKcbm9kqF8NdtW/KKqXKpMUiqTsi5J6VxKJymTS8kkZTMp45OUy6R0+gZ9LpW+wZBJqfQNyjLXMmkrd7+rKm3lbvgqpC1Fz6F3wNL0IELL0JMILUuPIrQcPYvQ8vQwQivQ04isqqTHEVqSnkdoVfQ8QkvR8wgtTc8jtAwjjxpYlpFHZH3v++Z4XE9r3yzjFNv3/r8Ud3yuY/edkOvoXUeVjDyDNVKSkWdkVYw8I0sx8owsnbnuKuyvu8l13L5jcx2z7zhGH6A18ow+QFZg9IEET6Qlow+QJcl9oKLOj32+HualeVy7VwdxRpHrIO5oRh2gJTKMOkCWZdQBshyjDpDlyXUQX/eQtw2+2yDKmJLcBnGH8bSOlsgwntahpcipk1FHk7+F444hxy7uWPI2ijuO/K0Sdzx5H8UdRns7D07ujPaGlqSfrqBV0U9X0FL0+oWWptcvtAy9fqFl6fULLUc/XUHL009X0Ar0/kSWK+n9CS3G1NEZYDHGjtBizB2hxRg8QosxeYQWY/QILcbsEVqM4SO0GNNHZHnG9BFajOcZaDGeZ57We/H86aD+8UtDIT7baX5cVXmpXaictM4FF7btH3fkxKI=' local blueprint_string = '0eNqd191qhDAQBeB3mWt3MTHmx1cppbjbUAIaRWOpLL57XUvpQjOrkzsj5hPmHAi5waWZbD84H6C6gbt2foTq5Qaj+/B1c38X5t5CBS7YFjLwdXtfjV1TD6e+9raBJQPn3+0XVGx5zcD64IKzP8y2mN/81F7ssH4QBTLou3Hd0/n7/1bnJIpzmcG8PjHDzuWyZP8ofpTKd6niIFWoXUocpcQuVR6l2C4lD1Jc71KKnqDWcUrTE8QoQ08Qo1hOjxC1GD1D1OL0EFGrSEixRCyRECNm/XW+vl6ndmrq0A2xeelfSUYdedSRzx111BHPHZ3QA2xGJqEHiMVz8rxF1Hno+XQZQ73tfTbuOMPJ4447KfXmyIhS6o1Z9HrzqEOvd9yh1zvupNQbm1FKvRGryOk9UAaxGL0HqMXpxxVqFfTjCrUEPUfUKuk5opZMyFEilkrIEbN0Qo6YZRJyRCyRJ+SIWSwhx81arwLbnaF6uGJk8GmHcdvFNRPKcMWkUkaZZfkGTxv4MA==' local inventory = game.create_inventory(1) local stack = inventory[1] stack.import_stack(blueprint_string) local function build_blueprint(position) stack.build_blueprint{ surface = 'nauvis', position = position, force = 'player', force_build = true } end local tiktok = { [0.5 * 60] = {-36, -184}, [1 * 60] = {-67, -184}, [4 * 60] = {-36, -184-18}, [math.floor(4.1 * 60)] = {-36+18, -184-18}, [4.2 * 60] = {-36+18, -184}, [4.3 * 60] = {-36+18, -184+18}, [4.4 * 60] = {-36, -184+18}, [4.5 * 60] = {-67, -184+18}, [4.6 * 60] = {-67-18, -184+18}, [4.7 * 60] = {-67-18, -184}, [4.8 * 60] = {-67-18, -184-18}, [4.9 * 60] = {-67, -184-18}, } local start_tick = game.tick script.on_event(defines.events.on_tick, function() local tick_from_start = game.tick - start_tick local position = tiktok[tick_from_start] if position then build_blueprint(position) end end) ]], update = [[ ]] } menu_simulations.lab = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-lab.zip", length = 60 * 10, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] game.camera_position = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false game.surfaces.nauvis.daytime = 0.5 ]], update = [[ ]] } menu_simulations.burner_city = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-burner-city.zip", length = 60 * 10, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] game.camera_position = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false game.surfaces.nauvis.daytime = 0.5 ]], update = [[ ]] } menu_simulations.mining_defense = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-mining-defense.zip", length = 60 * 15, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] game.camera_position = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false game.surfaces.nauvis.daytime = 0 game.forces.enemy.evolution_factor = 0.11 ]], update = [[ ]] } menu_simulations.biter_base_steamrolled = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-biter-base.zip", length = 60 * 10, init = [[ local surface = game.surfaces.nauvis local logo = surface.find_entities_filtered{name = "factorio-logo-11tiles"}[1] game.camera_position = {logo.position.x, logo.position.y+9.75} center = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false surface.daytime = 0 game.forces.enemy.evolution_factor = 0.3 surface.peaceful_mode = true local count = 120 script.on_nth_tick(2, function() count = count - 2 if count <= 0 then for i=0,20 do local y = game.camera_position.y - 20 + i * 2 local x = game.camera_position.x - 40 local character = surface.create_entity{ name = "character", position = {x, y}, force = "player" } character.color = {1, 0, 0, 0.5} local tank = surface.create_entity{ name = "tank", position = {x, y}, force = "player" } tank.orientation = 0.25 tank.insert{name = "rocket-fuel", count = 3} tank.speed = 0.5 tank.set_driver(character) character.riding_state = { acceleration = defines.riding.acceleration.accelerating, direction = defines.riding.direction.straight } end script.on_nth_tick(2, nil) end end) local wube_logo_position = {-499.5, 43.5} script.on_nth_tick(1, function() if surface.count_entities_filtered{position = wube_logo_position, radius = 3, name = "tank"} > 0 then local tiles = {} for x=-3,3 do for y=-3,3 do table.insert(tiles, {name = "dirt-1", position = {wube_logo_position[1] + x, wube_logo_position[2] + y}}) end end surface.set_tiles(tiles) end end) ]] } menu_simulations.biter_base_spidertron = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-biter-base.zip", length = 60 * 12, init = [[ local surface = game.surfaces.nauvis local logo = surface.find_entities_filtered{name = "factorio-logo-11tiles"}[1] game.camera_position = {logo.position.x, logo.position.y+9.75} center = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false surface.daytime = 0 game.forces.enemy.evolution_factor = 1 surface.peaceful_mode = true spider = surface.create_entity{name = "spidertron", position = {logo.position.x - 30, logo.position.y + 60}, force = "player"} spider.force.research_all_technologies() local grid = spider.grid grid.put{name = "fusion-reactor-equipment"} grid.put{name = "personal-laser-defense-equipment"} grid.put{name = "personal-laser-defense-equipment"} grid.put{name = "personal-laser-defense-equipment"} spider.insert({name = "rocket", count = 800}) points = { {-16, -8}, {0, -12}, {16, -8}, {16, 0}, {60, 60}, } local bonk = function() local k, position = next(points) if not k then return end points[k] = nil local x = position[1] + center[1] local y = position[2] + center[2] spider.autopilot_destination = {x, y} end bonk() script.on_event(defines.events.on_spider_command_completed, function(event) bonk() end) ]] } menu_simulations.biter_base_artillery = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-biter-base.zip", length = 60 * 12, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] logo.destructible = false game.camera_position = {logo.position.x, logo.position.y+9.75} center = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false game.surfaces.nauvis.daytime = 0 game.forces.enemy.evolution_factor = 0.7 local bases = {} local get = function() bases = game.surfaces[1].find_entities_filtered{force = "enemy", position = center, radius = 32} for k, v in pairs (bases) do local i = math.random(#bases) bases[k], bases[i] = bases[i], bases[k] end end local badonk = function(position, fluff) local x = position.x + ((math.random() - 0.5) * fluff * 2) local y = position.y + ((math.random() - 0.5) * fluff * 2) return {x, y} end get() local donk = function() local k, base = next(bases) if not k then if not badink then get() badink = true end return end bases[k] = nil if not base.valid then return end game.surfaces[1].create_entity{name = "artillery-projectile", position = {center[1]-80, center[2]-80}, force = "player", target = badonk(base.position, base.get_radius()), speed = 1} end script.on_nth_tick(17, donk) script.on_nth_tick(23, donk) script.on_nth_tick(29, donk) script.on_event(defines.events.on_entity_died, function() if not badoob then for k, v in pairs (game.surfaces[1].find_enemy_units(center, 32, "player")) do if not (v.command and v.command.type == defines.command.go_to_location) then v.set_command{type = defines.command.go_to_location, destination = {center[1] + 80, center[2] + 20}} end end end end) ]] } menu_simulations.biter_base_player_attack = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-biter-base.zip", length = 60 * 12, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] logo.destructible = false game.camera_position = {logo.position.x, logo.position.y+9.75} center = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false game.forces.enemy.evolution_factor = 0.5 game.surfaces[1].peaceful_mode = true game.forces.player.research_all_technologies() game.surfaces.nauvis.daytime = 0 local character = game.surfaces[1].create_entity{name = "character", position = {center[1] - 40, center[2] - 20}, force = "player"} character.insert{name = "heavy-armor"} character.insert{name = "submachine-gun"} character.insert{name = "piercing-rounds-magazine", count = 50} character.insert{name = "grenade", count = 50} points = { {-20, -8}, {-20, 8}, {-40, 20}, {0, -12}, {16, -8}, {16, 0}, {8, 8}, {60, 8}, } local distance = function(p_1, p_2) local dx = (p_1[1] or p_1.x) - (p_2[1] or p_2.x) local dy = (p_1[2] or p_1.y) - (p_2[2] or p_2.y) return ((dx * dx) + (dy * dy)) ^ 0.5 end local direction = function(p_1, p_2) local d_x = (p_2[1] or p_2.x) - (p_1[1] or p_1.x) local d_y = (p_2[2] or p_2.y) - (p_1[2] or p_1.y) local angle = math.atan2(d_y, d_x) local orientation = (angle / (2 * math.pi)) - 0.25 if orientation < 0 then orientation = orientation + 1 end local direction = math.floor((orientation * 8) + 0.5) if direction == 8 then direction = 0 end return direction end local get_shoot_target = function(entity) local enemies = entity.surface.find_entities_filtered{force = "enemy", type = {"unit-spawner", "turret", "unit"}, position = entity.position, radius = 15} local closest = entity.surface.get_closest(entity.position, enemies) return closest end local badonk = function(position, fluff) local x = position.x + ((math.random() - 0.5) * fluff * 2) local y = position.y + ((math.random() - 0.5) * fluff * 2) return {x, y} end script.on_event(defines.events.on_tick, function() if not character.valid then return end local k, destination = next(points) if not k then return end local target = {center[1] + destination[1], center[2] + destination[2]} if distance(character.position, target) < 1 then points[k] = nil return end if game.tick % 17 == 0 then local walking_direction = direction(target, character.position) character.walking_state = {walking = true, direction = walking_direction} end if not (shoot_target and shoot_target.valid) or game.tick % 123 == 0 then shoot_target = get_shoot_target(character) end if shoot_target then character.shooting_state = {state = defines.shooting.shooting_enemies, position = shoot_target.position} if game.tick % 31 == 0 then character.surface.create_entity{name = "grenade", position = character.position, speed = 0.3, target = badonk(shoot_target.position, 2), force = "player"} end else character.shooting_state = {state = defines.shooting.not_shooting} end end) ]] } menu_simulations.biter_base_laser_defense = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-biter-base.zip", length = 60 * 12, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] logo.destructible = false game.camera_position = {logo.position.x, logo.position.y+9.75} center = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false game.forces.enemy.evolution_factor = 0.7 game.surfaces[1].peaceful_mode = true game.forces.player.research_all_technologies() game.surfaces.nauvis.daytime = 0 local character = game.surfaces[1].create_entity{name = "character", position = {center[1] - 40, center[2] + 20}, force = "player"} character.insert{name = "power-armor-mk2"} local grid = character.get_inventory(defines.inventory.character_armor)[1].grid grid.put{name = "exoskeleton-equipment"} grid.put{name = "exoskeleton-equipment"} for k = 1, 10 do grid.put{name = "personal-laser-defense-equipment"} grid.put{name = "energy-shield-mk2-equipment"} grid.put{name = "battery-mk2-equipment"} grid.put{name = "battery-mk2-equipment"} end for k, equipment in pairs(grid.equipment) do if equipment.max_shield > 0 then equipment.shield = equipment.max_shield end equipment.energy = equipment.max_energy end character.insert{name = "submachine-gun"} character.insert{name = "uranium-rounds-magazine", count = 50} points = { {-16, -8}, {0, -12}, {16, -8}, {16, 0}, {8, 8}, {60, 8}, } local distance = function(p_1, p_2) local dx = (p_1[1] or p_1.x) - (p_2[1] or p_2.x) local dy = (p_1[2] or p_1.y) - (p_2[2] or p_2.y) return ((dx * dx) + (dy * dy)) ^ 0.5 end local direction = function(p_1, p_2) local d_x = (p_2[1] or p_2.x) - (p_1[1] or p_1.x) local d_y = (p_2[2] or p_2.y) - (p_1[2] or p_1.y) local angle = math.atan2(d_y, d_x) local orientation = (angle / (2 * math.pi)) - 0.25 if orientation < 0 then orientation = orientation + 1 end local direction = math.floor((orientation * 8) + 0.5) if direction == 8 then direction = 0 end return direction end local get_shoot_target = function(entity) local enemies = entity.surface.find_enemy_units(entity.position, 10) local closest = entity.surface.get_closest(entity.position, enemies) return closest end script.on_event(defines.events.on_tick, function() local k, destination = next(points) if not k then return end local target = {center[1] + destination[1], center[2] + destination[2]} if distance(character.position, target) < 1 then points[k] = nil return end if game.tick % 17 == 0 then local walking_direction = direction(target, character.position) character.walking_state = {walking = true, direction = walking_direction} end if not (shoot_target and shoot_target.valid) then shoot_target = get_shoot_target(character) end if shoot_target then character.shooting_state = {state = defines.shooting.shooting_enemies, position = shoot_target.position} else character.shooting_state = {state = defines.shooting.not_shooting} end end) ]] } menu_simulations.artillery = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-artillery.zip", length = 60 * 22, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] game.camera_position = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false game.surfaces.nauvis.daytime = 0 ]], update = [[ ]] } menu_simulations.train_junction = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-train-junction.zip", length = 60 * 10, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] game.camera_position = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false game.surfaces.nauvis.daytime = 0 ]], update = [[ ]] } menu_simulations.oil_pumpjacks = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-oil-pumpjacks.zip", length = 60 * 12, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] game.camera_position = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false game.surfaces.nauvis.daytime = 0 ]], update = [[ ]] } menu_simulations.oil_refinery = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-oil-refinery.zip", length = 60 * 20, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] game.camera_position = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false game.surfaces.nauvis.daytime = 0 ]], update = [[ ]] } menu_simulations.early_smelting = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-early-smelting.zip", length = 60 * 10, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] game.camera_position = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false game.surfaces.nauvis.daytime = 0 ]], update = [[ ]] } menu_simulations.train_station = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-train-station.zip", length = 60 * 16, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] game.camera_position = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false game.surfaces.nauvis.daytime = 0 ]], update = [[ ]] } menu_simulations.logistic_robots = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-logistic-robots.zip", length = 60 * 12, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] game.camera_position = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false game.surfaces.nauvis.daytime = 0 ]], update = [[ ]] } menu_simulations.nuclear_power = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-nuclear-power.zip", length = 60 * 12, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] game.camera_position = {logo.position.x, logo.position.y+9.75} game.camera_zoom = 1 game.tick_paused = false game.surfaces.nauvis.daytime = 0 ]], update = [[ ]] } menu_simulations.chase_player = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-chase-player.zip", length = 60 * 16, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] local center = {logo.position.x, logo.position.y+9.75} game.camera_position = center game.camera_zoom = 1 game.tick_paused = false game.surfaces.nauvis.daytime = 0 game.map_settings.steering.moving.force_unit_fuzzy_goto_behavior = true game.map_settings.steering.moving.radius = 1 local character = game.surfaces[1].create_entity{name = "character", position = {center[1] - 55, center[2] + 4.5}, force = "player"} character.walking_state = {walking = true, direction = 2} character.character_running_speed_modifier = 0.2 character.tick_of_last_attack = game.tick local biter = game.surfaces[1].create_entity{name = "small-biter", position = {center[1] - 40, center[2] + 4.5}} biter.speed = character.character_running_speed biter.set_command{type = defines.command.go_to_location, destination = {center[1] + 60, center[2] + 4.5}, distraction = defines.distraction.none} script.on_nth_tick(10, function() if biter.position.x < (center[1] + 50) then return end character.walking_state = {walking = true, direction = 6} character.tick_of_last_attack = 0 character.character_running_speed_modifier = 0.6 local command = {type = defines.command.go_to_location, destination_entity = character, distraction = defines.distraction.none} biter.set_command(command) biter.speed = character.character_running_speed local position = biter.position local surface = game.surfaces[1] local names = {"medium-biter", "small-biter", "small-biter", "small-biter"} for k = 1, 25 do local spawn_position = {position.x + math.random(-5, 5), position.y + math.random(-10, 10)} local name = names[math.random(#names)] local biter = surface.create_entity{name = name, position = position} biter.set_command(command) biter.speed = character.character_running_speed end script.on_nth_tick(10, nil) end) ]] } menu_simulations.big_defense = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-big-defense.zip", length = 60 * 12, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] logo.destructible = false local center = {logo.position.x, logo.position.y+9.75} game.camera_position = center game.camera_zoom = 1 game.tick_paused = false game.surfaces.nauvis.daytime = 1 game.map_settings.steering.moving.force_unit_fuzzy_goto_behavior = true game.map_settings.steering.moving.radius = 3 local bop = function() local surface = game.surfaces[1] local target = surface.find_entities_filtered{name = "flamethrower-turret", position = {33.5, -12}}[1] local names = {"medium-biter", "medium-biter", "big-biter", "big-biter", "big-spitter", "medium-spitter"} for k = 1, 100 do local spawn_position = {center[1] - 60 + math.random(-35, 5), center[2] + math.random(-10, 10)} local name = names[math.random(#names)] local biter = surface.create_entity{name = name, position = spawn_position} biter.set_command({type = defines.command.attack, target = target}) biter.speed = 0.24 + (math.random() / 20) end end bop() ]] } menu_simulations.brutal_defeat = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-brutal-defeat.zip", length = 60 * 18, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] logo.destructible = false local center = {logo.position.x, logo.position.y+9.75} game.camera_position = center game.camera_zoom = 1 game.tick_paused = false game.map_settings.steering.moving.force_unit_fuzzy_goto_behavior = true game.map_settings.steering.moving.radius = 2 game.forces.enemy.set_ammo_damage_modifier("melee", 10) game.forces.enemy.set_ammo_damage_modifier("biological", 10) game.forces.enemy.set_gun_speed_modifier("melee", 0.5) game.forces.enemy.set_gun_speed_modifier("biological", 0.5) local bop = function() local surface = game.surfaces[1] local targets = surface.find_entities_filtered{force = "player", position = {center[1] + 25, center[2]}, radius = 10} local count = #targets local names = {"medium-biter", "small-biter", "small-biter", "small-biter", "small-biter", "small-biter", "small-spitter"} for k = 1, 350 do local spawn_position = {center[1] - 40 + math.random(-55, 5), center[2] + 10 + math.random(-5, 5)} local name = names[math.random(#names)] local biter = surface.create_entity{name = name, position = spawn_position} biter.set_command { type = defines.command.compound, structure_type = defines.compound_command.return_last, commands = { {type = defines.command.attack, target = targets[math.random(count)]}, {type = defines.command.attack_area, destination = {center[1] + 20, center[2]}, radius = math.random(5, 10)}, {type = defines.command.attack_area, destination = {center[1] + 35, center[2]}, radius = math.random(2, 5)}, {type = defines.command.go_to_location, destination = {center[1] + 120, center[2]}} } } biter.speed = 0.24 + (math.random() / 20) end end bop() ]] } menu_simulations.spider_ponds = { checkboard = false, save = "__base__/menu-simulations/menu-simulation-spider-ponds.zip", length = 60 * 12, init = [[ local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] logo.destructible = false local center = {logo.position.x, logo.position.y+9.75} game.camera_position = center game.camera_zoom = 1 game.tick_paused = false local spider = game.surfaces.nauvis.find_entities_filtered{name = "spidertron", limit = 1}[1] points = { {-16, -8}, {0, -12}, {16, -8}, {16, 0}, {60, 60}, } local bonk = function() local k, position = next(points) if not k then return end points[k] = nil local x = position[1] + center[1] local y = position[2] + center[2] spider.autopilot_destination = {x, y} end bonk() script.on_event(defines.events.on_spider_command_completed, function(event) bonk() end) ]] } return menu_simulations