| 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 |